From b87c84a17dca66be799598a5111ce35848bf36d9 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Wed, 8 Jan 2020 00:53:20 +0400 Subject: [PATCH] Updated polls --- NotificationService/Serialization.m | 2 +- Telegram-iOS/en.lproj/Localizable.strings | 17 + .../AvatarNode/Sources/AvatarNode.swift | 28 +- .../AvatarNode/Sources/PeerAvatar.swift | 8 +- .../Sources/CreatePollController.swift | 409 +- .../Sources/CreatePollOptionActionItem.swift | 2 +- .../Sources/CreatePollOptionItem.swift | 179 +- submodules/Display/Display/ListView.swift | 49 +- .../Display/Display/ListViewItemHeader.swift | 1 + .../Sources/ItemListPeerActionItem.swift | 10 +- .../Sources/ItemListPeerItem.swift | 192 +- .../Sources/ItemListControllerNode.swift | 3 + .../Sources/Items/ItemListEditableItem.swift | 12 +- .../Sources/Items/ItemListTextItem.swift | 17 +- .../LegacyComponents/TGCheckButtonView.m | 26 +- submodules/Postbox/Sources/Coding.swift | 41 + submodules/Postbox/Sources/Message.swift | 4 + .../Postbox/Sources/MessageHistoryTable.swift | 36 + .../Postbox/Sources/MessageHistoryView.swift | 32 +- .../Sources/MessageHistoryViewState.swift | 56 +- .../Sources/SettingsController.swift | 6 +- .../SyncCore/Sources/TelegramMediaPoll.swift | 86 +- submodules/TelegramApi/Sources/Api0.swift | 19 +- submodules/TelegramApi/Sources/Api1.swift | 226 +- submodules/TelegramApi/Sources/Api2.swift | 134 +- submodules/TelegramApi/Sources/Api3.swift | 53 + .../Sources/AccountStateManagementUtils.swift | 14 +- .../TelegramCore/Sources/ApiUtils.swift | 6 +- .../Sources/AutodownloadSettings.swift | 2 - .../PendingMessageUploadedContent.swift | 23 +- submodules/TelegramCore/Sources/Polls.swift | 226 +- .../TelegramCore/Sources/Serialization.swift | 2 +- .../Sources/StoreMessage_Telegram.swift | 14 +- .../Sources/TelegramMediaPoll.swift | 8 +- .../Sources/TelegramIntents.swift | 2 +- .../DefaultDarkPresentationTheme.swift | 4 +- .../DefaultDarkTintedPresentationTheme.swift | 4 +- .../Sources/DefaultDayPresentationTheme.swift | 14 +- .../Sources/PresentationStrings.swift | 7535 +++++++++-------- .../Sources/PresentationTheme.swift | 20 +- .../Sources/PresentationThemeCodable.swift | 27 +- .../TelegramUI/ChatController.swift | 26 +- .../ChatControllerInteraction.swift | 13 +- .../ChatInterfaceStateContextMenus.swift | 4 +- .../ChatMessagePollBubbleContentNode.swift | 546 +- .../ChatRecentActionsControllerNode.swift | 3 +- .../OverlayPlayerControllerNode.swift | 3 +- .../PeerMediaCollectionController.swift | 3 +- .../TelegramUI/PollResultsController.swift | 313 + .../Resources/PresentationStrings.mapping | Bin 143260 -> 143683 bytes .../TelegramUI/SharedAccountContext.swift | 3 +- .../WalletUI/Resources/WalletStrings.mapping | Bin 8384 -> 8384 bytes .../WalletUI/Sources/WalletStrings.swift | 4 +- .../Sources/WatchRequestHandlers.swift | 2 +- 54 files changed, 6176 insertions(+), 4293 deletions(-) create mode 100644 submodules/TelegramUI/TelegramUI/PollResultsController.swift diff --git a/NotificationService/Serialization.m b/NotificationService/Serialization.m index cd0732944d..00a0621e3e 100644 --- a/NotificationService/Serialization.m +++ b/NotificationService/Serialization.m @@ -3,7 +3,7 @@ @implementation Serialization - (NSUInteger)currentLayer { - return 108; + return 109; } - (id _Nullable)parseMessage:(NSData * _Nullable)data { diff --git a/Telegram-iOS/en.lproj/Localizable.strings b/Telegram-iOS/en.lproj/Localizable.strings index d16fcf1a8e..ab4e61f954 100644 --- a/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram-iOS/en.lproj/Localizable.strings @@ -5245,3 +5245,20 @@ Any member of this group will be able to see messages in the channel."; "Conversation.ContextMenuCancelEditing" = "Cancel Editing"; "Map.NoPlacesNearby" = "There are no known places nearby.\nTry a different location."; + +"CreatePoll.Anonymous" = "Anonymous Votes"; +"CreatePoll.MultipleChoice" = "Multiple Choice"; +"CreatePoll.Quiz" = "Quiz Mode"; +"CreatePoll.QuizInfo" = "Quiz has only one correct answer. Users can't revoke their votes."; +"CreatePoll.QuizTip" = "Tap to select the correct option"; + +"MessagePoll.LabelPoll" = "Poll"; +"MessagePoll.LabelAnonymousQuiz" = "Anonymous Quiz"; +"MessagePoll.LabelQuiz" = "Quiz"; +"MessagePoll.SubmitVote" = "Submit Vote"; +"MessagePoll.ViewResults" = "View Results"; + +"PollResults.Title" = "Poll Results"; +"PollResults.Collapse" = "COLLAPSE"; +"PollResults.ShowMore_1" = "Show %@ More Voter"; +"PollResults.ShowMore_any" = "Show %@ More Voters"; diff --git a/submodules/AvatarNode/Sources/AvatarNode.swift b/submodules/AvatarNode/Sources/AvatarNode.swift index 4b8924e900..0aa47ea55a 100644 --- a/submodules/AvatarNode/Sources/AvatarNode.swift +++ b/submodules/AvatarNode/Sources/AvatarNode.swift @@ -54,16 +54,6 @@ private class AvatarNodeParameters: NSObject { } } -private let gradientColors: [NSArray] = [ - [UIColor(rgb: 0xff516a).cgColor, UIColor(rgb: 0xff885e).cgColor], - [UIColor(rgb: 0xffa85c).cgColor, UIColor(rgb: 0xffcd6a).cgColor], - [UIColor(rgb: 0x665fff).cgColor, UIColor(rgb: 0x82b1ff).cgColor], - [UIColor(rgb: 0x54cb68).cgColor, UIColor(rgb: 0xa0de7e).cgColor], - [UIColor(rgb: 0x4acccd).cgColor, UIColor(rgb: 0x00fcfd).cgColor], - [UIColor(rgb: 0x2a9ef1).cgColor, UIColor(rgb: 0x72d5fd).cgColor], - [UIColor(rgb: 0xd669ed).cgColor, UIColor(rgb: 0xe0a2f3).cgColor], -] - private func generateGradientFilledCircleImage(diameter: CGFloat, colors: NSArray) -> UIImage? { return generateImage(CGSize(width: diameter, height: diameter), contextGenerator: { size, context in let bounds = CGRect(origin: CGPoint(), size: size) @@ -167,6 +157,16 @@ public final class AvatarEditOverlayNode: ASDisplayNode { } public final class AvatarNode: ASDisplayNode { + public static let gradientColors: [NSArray] = [ + [UIColor(rgb: 0xff516a).cgColor, UIColor(rgb: 0xff885e).cgColor], + [UIColor(rgb: 0xffa85c).cgColor, UIColor(rgb: 0xffcd6a).cgColor], + [UIColor(rgb: 0x665fff).cgColor, UIColor(rgb: 0x82b1ff).cgColor], + [UIColor(rgb: 0x54cb68).cgColor, UIColor(rgb: 0xa0de7e).cgColor], + [UIColor(rgb: 0x4acccd).cgColor, UIColor(rgb: 0x00fcfd).cgColor], + [UIColor(rgb: 0x2a9ef1).cgColor, UIColor(rgb: 0x72d5fd).cgColor], + [UIColor(rgb: 0xd669ed).cgColor, UIColor(rgb: 0xe0a2f3).cgColor], + ] + public var font: UIFont { didSet { if oldValue !== font { @@ -318,7 +318,7 @@ public final class AvatarNode: ASDisplayNode { let parameters: AvatarNodeParameters - if let peer = peer, let signal = peerAvatarImage(account: context.account, peer: peer, authorOfMessage: authorOfMessage, representation: representation, displayDimensions: displayDimensions, emptyColor: emptyColor, synchronousLoad: synchronousLoad) { + if let peer = peer, let signal = peerAvatarImage(account: context.account, peerReference: PeerReference(peer), authorOfMessage: authorOfMessage, representation: representation, displayDimensions: displayDimensions, emptyColor: emptyColor, synchronousLoad: synchronousLoad) { self.contents = nil self.displaySuspended = true self.imageReady.set(self.imageNode.ready) @@ -456,7 +456,7 @@ public final class AvatarNode: ASDisplayNode { colorsArray = grayscaleColors } } else { - colorsArray = gradientColors[colorIndex % gradientColors.count] + colorsArray = AvatarNode.gradientColors[colorIndex % AvatarNode.gradientColors.count] } var locations: [CGFloat] = [1.0, 0.0] @@ -555,7 +555,7 @@ public final class AvatarNode: ASDisplayNode { } } -public func drawPeerAvatarLetters(context: CGContext, size: CGSize, font: UIFont, letters: [String], accountPeerId: PeerId, peerId: PeerId) { +public func drawPeerAvatarLetters(context: CGContext, size: CGSize, font: UIFont, letters: [String], peerId: PeerId) { context.beginPath() context.addEllipse(in: CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)) @@ -572,7 +572,7 @@ public func drawPeerAvatarLetters(context: CGContext, size: CGSize, font: UIFont if colorIndex == -1 { colorsArray = grayscaleColors } else { - colorsArray = gradientColors[colorIndex % gradientColors.count] + colorsArray = AvatarNode.gradientColors[colorIndex % AvatarNode.gradientColors.count] } var locations: [CGFloat] = [1.0, 0.0] diff --git a/submodules/AvatarNode/Sources/PeerAvatar.swift b/submodules/AvatarNode/Sources/PeerAvatar.swift index 751ecfbd8c..183a06137a 100644 --- a/submodules/AvatarNode/Sources/PeerAvatar.swift +++ b/submodules/AvatarNode/Sources/PeerAvatar.swift @@ -21,7 +21,7 @@ private let roundCorners = { () -> UIImage in return image }() -public func peerAvatarImageData(account: Account, peer: Peer, authorOfMessage: MessageReference?, representation: TelegramMediaImageRepresentation?, synchronousLoad: Bool) -> Signal? { +public func peerAvatarImageData(account: Account, peerReference: PeerReference?, authorOfMessage: MessageReference?, representation: TelegramMediaImageRepresentation?, synchronousLoad: Bool) -> Signal? { if let smallProfileImage = representation { let resourceData = account.postbox.mediaBox.resourceData(smallProfileImage.resource, attemptSynchronously: synchronousLoad) let imageData = resourceData @@ -44,7 +44,7 @@ public func peerAvatarImageData(account: Account, peer: Peer, authorOfMessage: M subscriber.putCompletion() }) var fetchedDataDisposable: Disposable? - if let peerReference = PeerReference(peer) { + if let peerReference = peerReference { fetchedDataDisposable = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: .avatar(peer: peerReference, resource: smallProfileImage.resource), statsCategory: .generic).start() } else if let authorOfMessage = authorOfMessage { fetchedDataDisposable = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: .messageAuthorAvatar(message: authorOfMessage, resource: smallProfileImage.resource), statsCategory: .generic).start() @@ -64,8 +64,8 @@ public func peerAvatarImageData(account: Account, peer: Peer, authorOfMessage: M } } -public func peerAvatarImage(account: Account, peer: Peer, authorOfMessage: MessageReference?, representation: TelegramMediaImageRepresentation?, displayDimensions: CGSize = CGSize(width: 60.0, height: 60.0), round: Bool = true, inset: CGFloat = 0.0, emptyColor: UIColor? = nil, synchronousLoad: Bool = false) -> Signal? { - if let imageData = peerAvatarImageData(account: account, peer: peer, authorOfMessage: authorOfMessage, representation: representation, synchronousLoad: synchronousLoad) { +public func peerAvatarImage(account: Account, peerReference: PeerReference?, authorOfMessage: MessageReference?, representation: TelegramMediaImageRepresentation?, displayDimensions: CGSize = CGSize(width: 60.0, height: 60.0), round: Bool = true, inset: CGFloat = 0.0, emptyColor: UIColor? = nil, synchronousLoad: Bool = false) -> Signal? { + if let imageData = peerAvatarImageData(account: account, peerReference: peerReference, authorOfMessage: authorOfMessage, representation: representation, synchronousLoad: synchronousLoad) { return imageData |> mapToSignal { data -> Signal in let generate = deferred { () -> Signal in diff --git a/submodules/ComposePollUI/Sources/CreatePollController.swift b/submodules/ComposePollUI/Sources/CreatePollController.swift index cbf36c2929..8074279b8a 100644 --- a/submodules/ComposePollUI/Sources/CreatePollController.swift +++ b/submodules/ComposePollUI/Sources/CreatePollController.swift @@ -27,31 +27,51 @@ private final class CreatePollControllerArguments { let updatePollText: (String) -> Void let updateOptionText: (Int, String) -> Void let moveToNextOption: (Int) -> Void - let addOption: () -> Void + let moveToPreviousOption: (Int) -> Void let removeOption: (Int, Bool) -> Void let optionFocused: (Int) -> Void let setItemIdWithRevealedOptions: (Int?, Int?) -> Void + let toggleOptionSelected: (Int) -> Void + let updateAnonymous: (Bool) -> Void + let updateMultipleChoice: (Bool) -> Void + let updateQuiz: (Bool) -> Void - init(updatePollText: @escaping (String) -> Void, updateOptionText: @escaping (Int, String) -> Void, moveToNextOption: @escaping (Int) -> Void, addOption: @escaping () -> Void, removeOption: @escaping (Int, Bool) -> Void, optionFocused: @escaping (Int) -> Void, setItemIdWithRevealedOptions: @escaping (Int?, Int?) -> Void) { + init(updatePollText: @escaping (String) -> Void, updateOptionText: @escaping (Int, String) -> Void, moveToNextOption: @escaping (Int) -> Void, moveToPreviousOption: @escaping (Int) -> Void, removeOption: @escaping (Int, Bool) -> Void, optionFocused: @escaping (Int) -> Void, setItemIdWithRevealedOptions: @escaping (Int?, Int?) -> Void, toggleOptionSelected: @escaping (Int) -> Void, updateAnonymous: @escaping (Bool) -> Void, updateMultipleChoice: @escaping (Bool) -> Void, updateQuiz: @escaping (Bool) -> Void) { self.updatePollText = updatePollText self.updateOptionText = updateOptionText self.moveToNextOption = moveToNextOption - self.addOption = addOption + self.moveToPreviousOption = moveToPreviousOption self.removeOption = removeOption self.optionFocused = optionFocused self.setItemIdWithRevealedOptions = setItemIdWithRevealedOptions + self.toggleOptionSelected = toggleOptionSelected + self.updateAnonymous = updateAnonymous + self.updateMultipleChoice = updateMultipleChoice + self.updateQuiz = updateQuiz } } private enum CreatePollSection: Int32 { case text case options + case settings +} + +private enum CreatePollEntryId: Hashable { + case textHeader + case text + case optionsHeader + case option(Int) + case optionsInfo + case anonymousVotes + case multipleChoice + case quiz + case quizInfo } private enum CreatePollEntryTag: Equatable, ItemListItemTag { case text case option(Int) - case addOption(Int) func isEqual(to other: ItemListItemTag) -> Bool { if let other = other as? CreatePollEntryTag { @@ -63,67 +83,82 @@ private enum CreatePollEntryTag: Equatable, ItemListItemTag { } private enum CreatePollEntry: ItemListNodeEntry { - case textHeader(PresentationTheme, String, ItemListSectionHeaderAccessoryText) - case text(PresentationTheme, String, String, Int) - case optionsHeader(PresentationTheme, String) - case option(PresentationTheme, PresentationStrings, Int, Int, String, String, Bool, Bool) - case addOption(PresentationTheme, String, Bool, Int) - case optionsInfo(PresentationTheme, String) + case textHeader(String, ItemListSectionHeaderAccessoryText) + case text(String, String, Int) + case optionsHeader(String) + case option(id: Int, index: Int, placeholder: String, text: String, revealed: Bool, hasNext: Bool, isLast: Bool, isSelected: Bool?) + case optionsInfo(String) + case anonymousVotes(String, Bool) + case multipleChoice(String, Bool, Bool) + case quiz(String, Bool) + case quizInfo(String) var section: ItemListSectionId { switch self { - case .textHeader, .text: - return CreatePollSection.text.rawValue - case .optionsHeader, .option, .addOption, .optionsInfo: - return CreatePollSection.options.rawValue + case .textHeader, .text: + return CreatePollSection.text.rawValue + case .optionsHeader, .option, .optionsInfo: + return CreatePollSection.options.rawValue + case .anonymousVotes, .multipleChoice, .quiz, .quizInfo: + return CreatePollSection.settings.rawValue } } var tag: ItemListItemTag? { switch self { - case .text: - return CreatePollEntryTag.text - case let .option(_, _, id, _, _, _, _, _): - return CreatePollEntryTag.option(id) - case let .addOption(_, _, _, id): - return CreatePollEntryTag.addOption(id) - default: - break + case .text: + return CreatePollEntryTag.text + case let .option(option): + return CreatePollEntryTag.option(option.id) + default: + break } return nil } - var stableId: Int { + var stableId: CreatePollEntryId { switch self { - case .textHeader: - return 0 - case .text: - return 1 - case .optionsHeader: - return 2 - case let .option(_, _, id, _, _, _, _, _): - return 3 + id - case .addOption: - return 1000 - case .optionsInfo: - return 1001 + case .textHeader: + return .textHeader + case .text: + return .text + case .optionsHeader: + return .optionsHeader + case let .option(option): + return .option(option.id) + case .optionsInfo: + return .optionsInfo + case .anonymousVotes: + return .anonymousVotes + case .multipleChoice: + return .multipleChoice + case .quiz: + return .quiz + case .quizInfo: + return .quizInfo } } private var sortId: Int { switch self { - case .textHeader: - return 0 - case .text: - return 1 - case .optionsHeader: - return 2 - case let .option(_, _, _, index, _, _, _, _): - return 3 + index - case .addOption: - return 1000 - case .optionsInfo: - return 1001 + case .textHeader: + return 0 + case .text: + return 1 + case .optionsHeader: + return 2 + case let .option(option): + return 3 + option.index + case .optionsInfo: + return 1001 + case .anonymousVotes: + return 1002 + case .multipleChoice: + return 1003 + case .quiz: + return 1004 + case .quizInfo: + return 1005 } } @@ -134,32 +169,49 @@ private enum CreatePollEntry: ItemListNodeEntry { func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem { let arguments = arguments as! CreatePollControllerArguments switch self { - case let .textHeader(theme, text, accessoryText): - return ItemListSectionHeaderItem(presentationData: presentationData, text: text, accessoryText: accessoryText, sectionId: self.section) - case let .text(theme, placeholder, text, maxLength): - return ItemListMultilineInputItem(presentationData: presentationData, text: text, placeholder: placeholder, maxLength: ItemListMultilineInputItemTextLimit(value: maxLength, display: false), sectionId: self.section, style: .blocks, textUpdated: { value in - arguments.updatePollText(value) - }, tag: CreatePollEntryTag.text) - case let .optionsHeader(theme, text): - return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) - case let .option(theme, strings, id, _, placeholder, text, revealed, hasNext): - return CreatePollOptionItem(theme: theme, strings: strings, id: id, placeholder: placeholder, value: text, maxLength: maxOptionLength, editing: CreatePollOptionItemEditing(editable: true, hasActiveRevealControls: revealed), sectionId: self.section, setItemIdWithRevealedOptions: { id, fromId in - arguments.setItemIdWithRevealedOptions(id, fromId) - }, updated: { value in - arguments.updateOptionText(id, value) - }, next: hasNext ? { - arguments.moveToNextOption(id) - } : nil, delete: { focused in + case let .textHeader(text, accessoryText): + return ItemListSectionHeaderItem(presentationData: presentationData, text: text, accessoryText: accessoryText, sectionId: self.section) + case let .text(placeholder, text, maxLength): + return ItemListMultilineInputItem(presentationData: presentationData, text: text, placeholder: placeholder, maxLength: ItemListMultilineInputItemTextLimit(value: maxLength, display: false), sectionId: self.section, style: .blocks, textUpdated: { value in + arguments.updatePollText(value) + }, tag: CreatePollEntryTag.text) + case let .optionsHeader(text): + return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) + case let .option(id, _, placeholder, text, revealed, hasNext, isLast, isSelected): + return CreatePollOptionItem(presentationData: presentationData, id: id, placeholder: placeholder, value: text, isSelected: isSelected, maxLength: maxOptionLength, editing: CreatePollOptionItemEditing(editable: true, hasActiveRevealControls: revealed), sectionId: self.section, setItemIdWithRevealedOptions: { id, fromId in + arguments.setItemIdWithRevealedOptions(id, fromId) + }, updated: { value in + arguments.updateOptionText(id, value) + }, next: hasNext ? { + arguments.moveToNextOption(id) + } : nil, delete: { focused in + if !isLast { arguments.removeOption(id, focused) - }, focused: { - arguments.optionFocused(id) - }, tag: CreatePollEntryTag.option(id)) - case let .addOption(theme, title, enabled, id): - return CreatePollOptionActionItem(theme: theme, title: title, enabled: enabled, tag: CreatePollEntryTag.addOption(id), sectionId: self.section, action: { - arguments.addOption() - }) - case let .optionsInfo(theme, text): - return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) + } else { + arguments.moveToPreviousOption(id) + } + }, canDelete: !isLast, + focused: { + arguments.optionFocused(id) + }, toggleSelected: { + arguments.toggleOptionSelected(id) + }, tag: CreatePollEntryTag.option(id)) + case let .optionsInfo(text): + return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) + case let .anonymousVotes(text, value): + return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, sectionId: self.section, style: .blocks, updated: { value in + arguments.updateAnonymous(value) + }) + case let .multipleChoice(text, value, enabled): + return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, enabled: enabled, sectionId: self.section, style: .blocks, updated: { value in + arguments.updateMultipleChoice(value) + }) + case let .quiz(text, value): + return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, sectionId: self.section, style: .blocks, updated: { value in + arguments.updateQuiz(value) + }) + case let .quizInfo(text): + return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) } } } @@ -167,14 +219,18 @@ private enum CreatePollEntry: ItemListNodeEntry { private struct CreatePollControllerOption: Equatable { var text: String let id: Int + var isSelected: Bool } private struct CreatePollControllerState: Equatable { var text: String = "" - var options: [CreatePollControllerOption] = [CreatePollControllerOption(text: "", id: 0), CreatePollControllerOption(text: "", id: 1)] + var options: [CreatePollControllerOption] = [CreatePollControllerOption(text: "", id: 0, isSelected: false), CreatePollControllerOption(text: "", id: 1, isSelected: false)] var nextOptionId: Int = 2 var focusOptionId: Int? var optionIdWithRevealControls: Int? + var isAnonymous: Bool = true + var isMultipleChoice: Bool = false + var isQuiz: Bool = false } private func createPollControllerEntries(presentationData: PresentationData, state: CreatePollControllerState, limitsConfiguration: LimitsConfiguration) -> [CreatePollEntry] { @@ -185,19 +241,23 @@ private func createPollControllerEntries(presentationData: PresentationData, sta let remainingCount = Int(maxTextLength) - state.text.count textLimitText = ItemListSectionHeaderAccessoryText(value: "\(remainingCount)", color: remainingCount < 0 ? .destructive : .generic) } - entries.append(.textHeader(presentationData.theme, presentationData.strings.CreatePoll_TextHeader, textLimitText)) - entries.append(.text(presentationData.theme, presentationData.strings.CreatePoll_TextPlaceholder, state.text, Int(limitsConfiguration.maxMediaCaptionLength))) - entries.append(.optionsHeader(presentationData.theme, presentationData.strings.CreatePoll_OptionsHeader)) + entries.append(.textHeader(presentationData.strings.CreatePoll_TextHeader, textLimitText)) + entries.append(.text(presentationData.strings.CreatePoll_TextPlaceholder, state.text, Int(limitsConfiguration.maxMediaCaptionLength))) + entries.append(.optionsHeader(presentationData.strings.CreatePoll_OptionsHeader)) for i in 0 ..< state.options.count { - entries.append(.option(presentationData.theme, presentationData.strings, state.options[i].id, i, presentationData.strings.CreatePoll_OptionPlaceholder, state.options[i].text, state.optionIdWithRevealControls == state.options[i].id, i != 9)) + entries.append(.option(id: state.options[i].id, index: i, placeholder: presentationData.strings.CreatePoll_OptionPlaceholder, text: state.options[i].text, revealed: state.optionIdWithRevealControls == state.options[i].id, hasNext: i != 9, isLast: i == state.options.count - 1, isSelected: state.isQuiz ? state.options[i].isSelected : nil)) } if state.options.count < 10 { - entries.append(.addOption(presentationData.theme, presentationData.strings.CreatePoll_AddOption, true, state.options.last?.id ?? -1)) - entries.append(.optionsInfo(presentationData.theme, presentationData.strings.CreatePoll_AddMoreOptions(Int32(10 - state.options.count)))) + entries.append(.optionsInfo(presentationData.strings.CreatePoll_AddMoreOptions(Int32(10 - state.options.count)))) } else { - entries.append(.optionsInfo(presentationData.theme, presentationData.strings.CreatePoll_AllOptionsAdded)) + entries.append(.optionsInfo(presentationData.strings.CreatePoll_AllOptionsAdded)) } + entries.append(.anonymousVotes(presentationData.strings.CreatePoll_Anonymous, state.isAnonymous)) + entries.append(.multipleChoice(presentationData.strings.CreatePoll_MultipleChoice, state.isMultipleChoice && !state.isQuiz, !state.isQuiz)) + entries.append(.quiz(presentationData.strings.CreatePoll_Quiz, state.isQuiz)) + entries.append(.quizInfo(presentationData.strings.CreatePoll_QuizInfo)) + return entries } @@ -212,6 +272,7 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple var dismissImpl: (() -> Void)? var ensureTextVisibleImpl: (() -> Void)? var ensureOptionVisibleImpl: ((Int) -> Void)? + var displayQuizTooltipImpl: (() -> Void)? let actionsDisposable = DisposableSet() @@ -234,6 +295,18 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple for i in 0 ..< state.options.count { if state.options[i].id == id { state.options[i].text = value + if !value.isEmpty && i == state.options.count - 1 { + state.options.append(CreatePollControllerOption(text: "", id: state.nextOptionId, isSelected: false)) + state.nextOptionId += 1 + } + break + } + } + if state.options.count > 2 { + for i in (1 ..< state.options.count - 1).reversed() { + if state.options[i - 1].text.isEmpty && state.options[i].text.isEmpty { + state.options.remove(at: i) + } } } return state @@ -246,7 +319,7 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple for i in 0 ..< state.options.count { if state.options[i].id == id { if i == state.options.count - 1 { - state.options.append(CreatePollControllerOption(text: "", id: state.nextOptionId)) + state.options.append(CreatePollControllerOption(text: "", id: state.nextOptionId, isSelected: false)) state.focusOptionId = state.nextOptionId state.nextOptionId += 1 } else { @@ -269,14 +342,32 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple return state } } - }, addOption: { + }, moveToPreviousOption: { id in + var resetFocusOptionId: Int? updateState { state in var state = state - state.options.append(CreatePollControllerOption(text: "", id: state.nextOptionId)) - state.focusOptionId = state.nextOptionId - state.nextOptionId += 1 + for i in 0 ..< state.options.count { + if state.options[i].id == id { + if i != 0 { + if state.focusOptionId == state.options[i - 1].id { + resetFocusOptionId = state.options[i - 1].id + state.focusOptionId = -1 + } else { + state.focusOptionId = state.options[i - 1].id + } + } + break + } + } return state } + if let resetFocusOptionId = resetFocusOptionId { + updateState { state in + var state = state + state.focusOptionId = resetFocusOptionId + return state + } + } }, removeOption: { id, focused in updateState { state in var state = state @@ -289,6 +380,19 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple break } } + let focusOnFirst = state.options.isEmpty + if state.options.count < 2 { + for i in 0 ..< (2 - state.options.count) { + if i == 0 && focusOnFirst { + state.options.append(CreatePollControllerOption(text: "", id: state.nextOptionId, isSelected: false)) + state.focusOptionId = state.nextOptionId + state.nextOptionId += 1 + } else { + state.options.append(CreatePollControllerOption(text: "", id: state.nextOptionId, isSelected: false)) + state.nextOptionId += 1 + } + } + } return state } }, optionFocused: { id in @@ -303,6 +407,58 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple return state } } + }, toggleOptionSelected: { id in + updateState { state in + var state = state + for i in 0 ..< state.options.count { + if state.options[i].id == id { + state.options[i].isSelected = !state.options[i].isSelected + if state.options[i].isSelected && state.isQuiz { + for j in 0 ..< state.options.count { + if i != j { + state.options[j].isSelected = false + } + } + } + break + } + } + return state + } + }, updateAnonymous: { value in + updateState { state in + var state = state + state.isAnonymous = value + return state + } + }, updateMultipleChoice: { value in + updateState { state in + var state = state + state.isMultipleChoice = value + return state + } + }, updateQuiz: { value in + updateState { state in + var state = state + state.isQuiz = value + if value { + state.isMultipleChoice = false + var foundSelectedOption = false + for i in 0 ..< state.options.count { + if state.options[i].isSelected { + if !foundSelectedOption { + foundSelectedOption = true + } else { + state.options[i].isSelected = false + } + } + } + } + return state + } + if value { + displayQuizTooltipImpl?() + } }) let previousOptionIds = Atomic<[Int]?>(value: nil) @@ -320,6 +476,7 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple enabled = false } var nonEmptyOptionCount = 0 + var hasSelectedOptions = false for option in state.options { if !option.text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { nonEmptyOptionCount += 1 @@ -327,6 +484,19 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple if option.text.count > maxOptionLength { enabled = false } + if option.isSelected { + hasSelectedOptions = true + } + if state.isQuiz { + if option.text.isEmpty && option.isSelected { + enabled = false + } + } + } + if state.isQuiz { + if !hasSelectedOptions { + enabled = false + } } if nonEmptyOptionCount < 2 { enabled = false @@ -335,13 +505,30 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.CreatePoll_Create), style: .bold, enabled: enabled, action: { let state = stateValue.with { $0 } var options: [TelegramMediaPollOption] = [] + var correctAnswers: [Data]? for i in 0 ..< state.options.count { let optionText = state.options[i].text.trimmingCharacters(in: .whitespacesAndNewlines) if !optionText.isEmpty { - options.append(TelegramMediaPollOption(text: optionText, opaqueIdentifier: "\(i)".data(using: .utf8)!)) + let optionData = "\(i)".data(using: .utf8)! + options.append(TelegramMediaPollOption(text: optionText, opaqueIdentifier: optionData)) + if state.isQuiz && state.options[i].isSelected { + correctAnswers = [optionData] + } } } - completion(.message(text: "", attributes: [], mediaReference: .standalone(media: TelegramMediaPoll(pollId: MediaId(namespace: Namespaces.Media.LocalPoll, id: arc4random64()), text: processPollText(state.text), options: options, results: TelegramMediaPollResults(voters: nil, totalVoters: nil), isClosed: false)), replyToMessageId: nil, localGroupingKey: nil)) + let publicity: TelegramMediaPollPublicity + if state.isAnonymous { + publicity = .anonymous + } else { + publicity = .public + } + let kind: TelegramMediaPollKind + if state.isQuiz { + kind = .quiz + } else { + kind = .poll(multipleAnswers: state.isMultipleChoice) + } + completion(.message(text: "", attributes: [], mediaReference: .standalone(media: TelegramMediaPoll(pollId: MediaId(namespace: Namespaces.Media.LocalPoll, id: arc4random64()), publicity: publicity, kind: kind, text: processPollText(state.text), options: options, correctAnswers: correctAnswers, results: TelegramMediaPollResults(voters: nil, totalVoters: nil, recentVoters: []), isClosed: false)), replyToMessageId: nil, localGroupingKey: nil)) dismissImpl?() }) @@ -372,7 +559,7 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple if let focusOptionId = state.focusOptionId { focusItemTag = CreatePollEntryTag.option(focusOptionId) if focusOptionId == state.options.last?.id { - ensureVisibleItemTag = CreatePollEntryTag.addOption(focusOptionId) + ensureVisibleItemTag = nil } else { ensureVisibleItemTag = focusItemTag } @@ -382,7 +569,7 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple } let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text(presentationData.strings.CreatePoll_Title), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: false) - let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: createPollControllerEntries(presentationData: presentationData, state: state, limitsConfiguration: limitsConfiguration), style: .blocks, focusItemTag: focusItemTag, ensureVisibleItemTag: ensureVisibleItemTag, animateChanges: previousIds != nil && previousIds != optionIds) + let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: createPollControllerEntries(presentationData: presentationData, state: state, limitsConfiguration: limitsConfiguration), style: .blocks, focusItemTag: focusItemTag, ensureVisibleItemTag: ensureVisibleItemTag, animateChanges: previousIds != nil) return (controllerState, (listState, arguments)) } @@ -429,15 +616,6 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple var resultItemNode: ListViewItemNode? let state = stateValue.with({ $0 }) if state.options.last?.id == id { - let _ = controller.frameForItemNode({ itemNode in - if let itemNode = itemNode as? ItemListItemNode { - if let tag = itemNode.tag, tag.isEqual(to: CreatePollEntryTag.addOption(id)) { - resultItemNode = itemNode as? ListViewItemNode - return true - } - } - return false - }) } if resultItemNode == nil { let _ = controller.frameForItemNode({ itemNode in @@ -456,19 +634,42 @@ public func createPollController(context: AccountContext, peerId: PeerId, comple } }) } - - controller.setReorderEntry({ (fromIndex: Int, toIndex: Int, entries: [CreatePollEntry]) -> Void in - let fromEntry = entries[fromIndex] - guard case let .option(_, _, id, _, _, _, _, _) = fromEntry else { + displayQuizTooltipImpl = { [weak controller] in + guard let controller = controller else { return } + var resultItemNode: CreatePollOptionItemNode? + let _ = controller.frameForItemNode({ itemNode in + if resultItemNode == nil, let itemNode = itemNode as? CreatePollOptionItemNode { + resultItemNode = itemNode + return true + } + return false + }) + if let resultItemNode = resultItemNode { + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + let tooltipController = TooltipController(content: .text(presentationData.strings.CreatePoll_QuizTip), baseFontSize: presentationData.listsFontSize.baseDisplaySize, dismissByTapOutside: true) + controller.present(tooltipController, in: .window(.root), with: TooltipControllerPresentationArguments(sourceViewAndRect: { [weak resultItemNode] in + if let resultItemNode = resultItemNode { + return (resultItemNode.view, CGRect(origin: CGPoint(x: 0.0, y: 4.0), size: CGSize(width: 54.0, height: resultItemNode.bounds.height - 8.0))) + } + return nil + })) + } + } + controller.setReorderEntry({ (fromIndex: Int, toIndex: Int, entries: [CreatePollEntry]) -> Void in + let fromEntry = entries[fromIndex] + guard case let .option(option) = fromEntry else { + return + } + let id = option.id var referenceId: Int? var beforeAll = false var afterAll = false if toIndex < entries.count { switch entries[toIndex] { - case let .option(_, _, toId, _, _, _, _, _): - referenceId = toId + case let .option(toOption): + referenceId = toOption.id default: if entries[toIndex] < fromEntry { beforeAll = true diff --git a/submodules/ComposePollUI/Sources/CreatePollOptionActionItem.swift b/submodules/ComposePollUI/Sources/CreatePollOptionActionItem.swift index ba1dae70be..e7cc231c00 100644 --- a/submodules/ComposePollUI/Sources/CreatePollOptionActionItem.swift +++ b/submodules/ComposePollUI/Sources/CreatePollOptionActionItem.swift @@ -170,7 +170,7 @@ class CreatePollOptionActionItemNode: ListViewItemNode, ItemListItemNode { strongSelf.iconNode.image = updatedIcon } if let image = strongSelf.iconNode.image { - transition.updateFrame(node: strongSelf.iconNode, frame: CGRect(origin: CGPoint(x: params.leftInset + floor((leftInset - params.leftInset - image.size.width) / 2.0 - 1.0), y: floor((contentSize.height - image.size.height) / 2.0)), size: image.size)) + transition.updateFrame(node: strongSelf.iconNode, frame: CGRect(origin: CGPoint(x: params.leftInset + floor((leftInset - params.leftInset - image.size.width) / 2.0 - 3.0), y: floor((contentSize.height - image.size.height) / 2.0)), size: image.size)) } if strongSelf.backgroundNode.supernode == nil { diff --git a/submodules/ComposePollUI/Sources/CreatePollOptionItem.swift b/submodules/ComposePollUI/Sources/CreatePollOptionItem.swift index f322e1c478..91fdbdff70 100644 --- a/submodules/ComposePollUI/Sources/CreatePollOptionItem.swift +++ b/submodules/ComposePollUI/Sources/CreatePollOptionItem.swift @@ -6,6 +6,7 @@ import SwiftSignalKit import TelegramPresentationData import ItemListUI import PresentationDataUtils +import CheckNode struct CreatePollOptionItemEditing { let editable: Bool @@ -13,11 +14,11 @@ struct CreatePollOptionItemEditing { } class CreatePollOptionItem: ListViewItem, ItemListItem { - let theme: PresentationTheme - let strings: PresentationStrings + let presentationData: ItemListPresentationData let id: Int let placeholder: String let value: String + let isSelected: Bool? let maxLength: Int let editing: CreatePollOptionItemEditing let sectionId: ItemListSectionId @@ -25,15 +26,17 @@ class CreatePollOptionItem: ListViewItem, ItemListItem { let updated: (String) -> Void let next: (() -> Void)? let delete: (Bool) -> Void + let canDelete: Bool let focused: () -> Void + let toggleSelected: () -> Void let tag: ItemListItemTag? - init(theme: PresentationTheme, strings: PresentationStrings, id: Int, placeholder: String, value: String, maxLength: Int, editing: CreatePollOptionItemEditing, sectionId: ItemListSectionId, setItemIdWithRevealedOptions: @escaping (Int?, Int?) -> Void, updated: @escaping (String) -> Void, next: (() -> Void)?, delete: @escaping (Bool) -> Void, focused: @escaping () -> Void, tag: ItemListItemTag?) { - self.theme = theme - self.strings = strings + init(presentationData: ItemListPresentationData, id: Int, placeholder: String, value: String, isSelected: Bool?, maxLength: Int, editing: CreatePollOptionItemEditing, sectionId: ItemListSectionId, setItemIdWithRevealedOptions: @escaping (Int?, Int?) -> Void, updated: @escaping (String) -> Void, next: (() -> Void)?, delete: @escaping (Bool) -> Void, canDelete: Bool, focused: @escaping () -> Void, toggleSelected: @escaping () -> Void, tag: ItemListItemTag?) { + self.presentationData = presentationData self.id = id self.placeholder = placeholder self.value = value + self.isSelected = isSelected self.maxLength = maxLength self.editing = editing self.sectionId = sectionId @@ -41,7 +44,9 @@ class CreatePollOptionItem: ListViewItem, ItemListItem { self.updated = updated self.next = next self.delete = delete + self.canDelete = canDelete self.focused = focused + self.toggleSelected = toggleSelected self.tag = tag } @@ -55,7 +60,7 @@ class CreatePollOptionItem: ListViewItem, ItemListItem { Queue.mainQueue().async { completion(node, { - return (nil, { _ in apply() }) + return (nil, { _ in apply(.None) }) }) } } @@ -70,7 +75,7 @@ class CreatePollOptionItem: ListViewItem, ItemListItem { let (layout, apply) = makeLayout(self, params, itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem)) Queue.mainQueue().async { completion(layout, { _ in - apply() + apply(animation) }) } } @@ -84,17 +89,19 @@ class CreatePollOptionItem: ListViewItem, ItemListItem { private let titleFont = Font.regular(15.0) class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, ItemListItemFocusableNode, ASEditableTextNodeDelegate { + private let containerNode: ASDisplayNode private let backgroundNode: ASDisplayNode private let topStripeNode: ASDisplayNode private let bottomStripeNode: ASDisplayNode private let maskNode: ASImageNode + private var checkNode: CheckNode? + private let textClippingNode: ASDisplayNode private let textNode: EditableTextNode private let measureTextNode: TextNode private let textLimitNode: TextNode - private let editableControlNode: ItemListEditableControlNode private let reorderControlNode: ItemListEditableReorderControlNode private var item: CreatePollOptionItem? @@ -104,7 +111,14 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, return self.item?.tag } + override var controlsContainer: ASDisplayNode { + return self.containerNode + } + init() { + self.containerNode = ASDisplayNode() + self.containerNode.clipsToBounds = true + self.backgroundNode = ASDisplayNode() self.backgroundNode.isLayerBacked = true self.backgroundNode.backgroundColor = .white @@ -117,7 +131,6 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, self.maskNode = ASImageNode() - self.editableControlNode = ItemListEditableControlNode() self.reorderControlNode = ItemListEditableReorderControlNode() self.textClippingNode = ASDisplayNode() @@ -131,21 +144,17 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, super.init(layerBacked: false, dynamicBounce: false, rotated: false, seeThrough: false) - self.clipsToBounds = true + self.addSubnode(self.containerNode) self.textClippingNode.addSubnode(self.textNode) - self.addSubnode(self.textClippingNode) + self.containerNode.addSubnode(self.textClippingNode) - self.addSubnode(self.editableControlNode) - self.addSubnode(self.reorderControlNode) - self.addSubnode(self.textLimitNode) - - self.editableControlNode.tapped = { [weak self] in - if let strongSelf = self { - strongSelf.setRevealOptionsOpened(true, animated: true) - strongSelf.revealOptionsInteractivelyOpened() - } - } + self.containerNode.addSubnode(self.reorderControlNode) + self.containerNode.addSubnode(self.textLimitNode) + } + + @objc private func checkNodePressed() { + self.item?.toggleSelected() } override func didLoad() { @@ -153,7 +162,7 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, var textColor: UIColor = .black if let item = self.item { - textColor = item.theme.list.itemPrimaryTextColor + textColor = item.presentationData.theme.list.itemPrimaryTextColor } self.textNode.typingAttributes = [NSAttributedString.Key.font.rawValue: Font.regular(17.0), NSAttributedString.Key.foregroundColor.rawValue: textColor] self.textNode.clipsToBounds = true @@ -177,7 +186,7 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, if updatedText.count == 1 { updatedText = "" } - let updatedAttributedText = NSAttributedString(string: updatedText, font: Font.regular(17.0), textColor: item.theme.list.itemPrimaryTextColor) + let updatedAttributedText = NSAttributedString(string: updatedText, font: Font.regular(17.0), textColor: item.presentationData.theme.list.itemPrimaryTextColor) self.textNode.attributedText = updatedAttributedText self.editableTextNodeDidUpdateText(editableTextNode) } @@ -201,7 +210,7 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, hadReturn = true updatedText = updatedText.replacingOccurrences(of: "\n", with: " ") } - let updatedAttributedText = NSAttributedString(string: updatedText, font: Font.regular(17.0), textColor: item.theme.list.itemPrimaryTextColor) + let updatedAttributedText = NSAttributedString(string: updatedText, font: Font.regular(17.0), textColor: item.presentationData.theme.list.itemPrimaryTextColor) if text.string != updatedAttributedText.string { self.textNode.attributedText = updatedAttributedText } @@ -220,8 +229,7 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, self.item?.delete(editableTextNode.isFirstResponder()) } - func asyncLayout() -> (_ item: CreatePollOptionItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, () -> Void) { - let editableControlLayout = ItemListEditableControlNode.asyncLayout(self.editableControlNode) + func asyncLayout() -> (_ item: CreatePollOptionItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, (ListViewItemUpdateAnimation) -> Void) { let reorderControlLayout = ItemListEditableReorderControlNode.asyncLayout(self.reorderControlNode) let makeTextLayout = TextNode.asyncLayout(self.measureTextNode) let makeTextLimitLayout = TextNode.asyncLayout(self.textLimitNode) @@ -231,32 +239,31 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, return { item, params, neighbors in var updatedTheme: PresentationTheme? - if currentItem?.theme !== item.theme { - updatedTheme = item.theme + if currentItem?.presentationData.theme !== item.presentationData.theme { + updatedTheme = item.presentationData.theme } - let controlSizeAndApply = editableControlLayout(item.theme, false) - let reorderSizeAndApply = reorderControlLayout(item.theme) + let reorderSizeAndApply = reorderControlLayout(item.presentationData.theme) let separatorHeight = UIScreenPixel let insets = itemListNeighborsGroupedInsets(neighbors) - let leftInset: CGFloat = 60.0 + params.leftInset + let leftInset: CGFloat = params.leftInset + (item.isSelected != nil ? 60.0 : 16.0) let rightInset: CGFloat = 44.0 + params.rightInset let textLength = item.value.count let displayTextLimit = textLength > item.maxLength * 70 / 100 let remainingCount = item.maxLength - textLength - let (textLimitLayout, textLimitApply) = makeTextLimitLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: "\(remainingCount)", font: Font.regular(13.0), textColor: remainingCount < 0 ? item.theme.list.itemDestructiveColor : item.theme.list.itemSecondaryTextColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: 100.0, height: .greatestFiniteMagnitude), alignment: .left, lineSpacing: 0.0, cutout: nil, insets: UIEdgeInsets())) + let (textLimitLayout, textLimitApply) = makeTextLimitLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: "\(remainingCount)", font: Font.regular(13.0), textColor: remainingCount < 0 ? item.presentationData.theme.list.itemDestructiveColor : item.presentationData.theme.list.itemSecondaryTextColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: 100.0, height: .greatestFiniteMagnitude), alignment: .left, lineSpacing: 0.0, cutout: nil, insets: UIEdgeInsets())) var measureText = item.value if measureText.hasSuffix("\n") || measureText.isEmpty { measureText += "|" } let attributedMeasureText = NSAttributedString(string: measureText, font: Font.regular(17.0), textColor: .black) - let attributedText = NSAttributedString(string: item.value, font: Font.regular(17.0), textColor: item.theme.list.itemPrimaryTextColor) + let attributedText = NSAttributedString(string: item.value, font: Font.regular(17.0), textColor: item.presentationData.theme.list.itemPrimaryTextColor) let (textLayout, textApply) = makeTextLayout(TextNodeLayoutArguments(attributedString: attributedMeasureText, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, lineSpacing: 0.05, cutout: nil, insets: UIEdgeInsets())) let textTopInset: CGFloat = 11.0 @@ -265,21 +272,31 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, let contentSize = CGSize(width: params.width, height: textLayout.size.height + textTopInset + textBottomInset) let layout = ListViewItemNodeLayout(contentSize: contentSize, insets: insets) - let attributedPlaceholderText = NSAttributedString(string: item.placeholder, font: Font.regular(17.0), textColor: item.theme.list.itemPlaceholderTextColor) + let attributedPlaceholderText = NSAttributedString(string: item.placeholder, font: Font.regular(17.0), textColor: item.presentationData.theme.list.itemPlaceholderTextColor) - return (layout, { [weak self] in + return (layout, { [weak self] animation in if let strongSelf = self { + let transition: ContainedViewLayoutTransition + switch animation { + case .System: + transition = .animated(duration: 0.3, curve: .spring) + default: + transition = .immediate + } + strongSelf.item = item strongSelf.layoutParams = params + strongSelf.containerNode.frame = CGRect(origin: CGPoint(), size: layout.contentSize) + if let _ = updatedTheme { - strongSelf.topStripeNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor - strongSelf.bottomStripeNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor - strongSelf.backgroundNode.backgroundColor = item.theme.list.itemBlocksBackgroundColor + strongSelf.topStripeNode.backgroundColor = item.presentationData.theme.list.itemBlocksSeparatorColor + strongSelf.bottomStripeNode.backgroundColor = item.presentationData.theme.list.itemBlocksSeparatorColor + strongSelf.backgroundNode.backgroundColor = item.presentationData.theme.list.itemBlocksBackgroundColor if strongSelf.isNodeLoaded { - strongSelf.textNode.typingAttributes = [NSAttributedString.Key.font.rawValue: Font.regular(17.0), NSAttributedString.Key.foregroundColor.rawValue: item.theme.list.itemPrimaryTextColor] - strongSelf.textNode.tintColor = item.theme.list.itemAccentColor + strongSelf.textNode.typingAttributes = [NSAttributedString.Key.font.rawValue: Font.regular(17.0), NSAttributedString.Key.foregroundColor.rawValue: item.presentationData.theme.list.itemPrimaryTextColor] + strongSelf.textNode.tintColor = item.presentationData.theme.list.itemAccentColor } } @@ -325,54 +342,72 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, strongSelf.textNode.attributedPlaceholderText = attributedPlaceholderText } - strongSelf.textNode.keyboardAppearance = item.theme.rootController.keyboardColor.keyboardAppearance + strongSelf.textNode.keyboardAppearance = item.presentationData.theme.rootController.keyboardColor.keyboardAppearance - strongSelf.textClippingNode.frame = CGRect(origin: CGPoint(x: revealOffset + leftInset, y: textTopInset), size: CGSize(width: params.width - leftInset - params.rightInset, height: textLayout.size.height)) - strongSelf.textNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: params.width - leftInset - rightInset, height: textLayout.size.height + 1.0)) + let checkSize = CGSize(width: 32.0, height: 32.0) + let checkFrame = CGRect(origin: CGPoint(x: params.leftInset + revealOffset + 11.0, y: floor((layout.contentSize.height - checkSize.height) / 2.0)), size: checkSize) + if let isSelected = item.isSelected { + if let checkNode = strongSelf.checkNode { + transition.updateFrame(node: checkNode, frame: checkFrame) + checkNode.setIsChecked(isSelected, animated: true) + } else { + let checkNode = CheckNode(strokeColor: item.presentationData.theme.list.itemCheckColors.strokeColor, fillColor: item.presentationData.theme.list.itemSwitchColors.positiveColor, foregroundColor: item.presentationData.theme.list.itemCheckColors.foregroundColor, style: .plain) + checkNode.addTarget(target: strongSelf, action: #selector(strongSelf.checkNodePressed)) + checkNode.setIsChecked(isSelected, animated: false) + strongSelf.checkNode = checkNode + strongSelf.containerNode.addSubnode(checkNode) + checkNode.frame = checkFrame + transition.animatePositionAdditive(node: checkNode, offset: CGPoint(x: -checkFrame.maxX, y: 0.0)) + } + } else if let checkNode = strongSelf.checkNode { + strongSelf.checkNode = nil + transition.updateFrame(node: checkNode, frame: checkFrame.offsetBy(dx: -checkFrame.maxX, dy: 0.0), completion: { [weak checkNode] _ in + checkNode?.removeFromSupernode() + }) + } + + transition.updateFrame(node: strongSelf.textClippingNode, frame: CGRect(origin: CGPoint(x: revealOffset + leftInset, y: textTopInset), size: CGSize(width: params.width - leftInset - params.rightInset, height: textLayout.size.height))) + transition.updateFrame(node: strongSelf.textNode, frame: CGRect(origin: CGPoint(), size: CGSize(width: params.width - leftInset - rightInset, height: textLayout.size.height + 1.0))) if strongSelf.backgroundNode.supernode == nil { - strongSelf.insertSubnode(strongSelf.backgroundNode, at: 0) + strongSelf.containerNode.insertSubnode(strongSelf.backgroundNode, at: 0) } if strongSelf.topStripeNode.supernode == nil { - strongSelf.insertSubnode(strongSelf.topStripeNode, at: 1) + strongSelf.containerNode.insertSubnode(strongSelf.topStripeNode, at: 1) } if strongSelf.bottomStripeNode.supernode == nil { - strongSelf.insertSubnode(strongSelf.bottomStripeNode, at: 2) + strongSelf.containerNode.insertSubnode(strongSelf.bottomStripeNode, at: 2) } if strongSelf.maskNode.supernode == nil { - strongSelf.insertSubnode(strongSelf.maskNode, at: 3) + strongSelf.containerNode.insertSubnode(strongSelf.maskNode, at: 3) } let hasCorners = itemListHasRoundedBlockLayout(params) var hasTopCorners = false var hasBottomCorners = false switch neighbors.top { - case .sameSection(false): - strongSelf.topStripeNode.isHidden = true - default: - hasTopCorners = true - strongSelf.topStripeNode.isHidden = hasCorners + case .sameSection(false): + strongSelf.topStripeNode.isHidden = true + default: + hasTopCorners = true + strongSelf.topStripeNode.isHidden = hasCorners } let bottomStripeInset: CGFloat switch neighbors.bottom { - case .sameSection(false): - bottomStripeInset = leftInset - default: - bottomStripeInset = 0.0 - hasBottomCorners = true - strongSelf.bottomStripeNode.isHidden = hasCorners + case .sameSection(false): + bottomStripeInset = leftInset + default: + bottomStripeInset = 0.0 + hasBottomCorners = true + strongSelf.bottomStripeNode.isHidden = hasCorners } - strongSelf.maskNode.image = hasCorners ? PresentationResourcesItemList.cornersImage(item.theme, top: hasTopCorners, bottom: hasBottomCorners) : nil + strongSelf.maskNode.image = hasCorners ? PresentationResourcesItemList.cornersImage(item.presentationData.theme, top: hasTopCorners, bottom: hasBottomCorners) : nil strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: params.width, height: contentSize.height + min(insets.top, separatorHeight) + min(insets.bottom, separatorHeight))) strongSelf.maskNode.frame = strongSelf.backgroundNode.frame.insetBy(dx: params.leftInset, dy: 0.0) strongSelf.topStripeNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: layout.contentSize.width, height: separatorHeight)) - strongSelf.bottomStripeNode.frame = CGRect(origin: CGPoint(x: bottomStripeInset, y: contentSize.height - UIScreenPixel), size: CGSize(width: layout.contentSize.width - bottomStripeInset, height: separatorHeight)) - - let _ = controlSizeAndApply.1(layout.contentSize.height) - let editableControlFrame = CGRect(origin: CGPoint(x: params.leftInset + 6.0 + revealOffset, y: 0.0), size: CGSize(width: controlSizeAndApply.0, height: contentSize.height)) - strongSelf.editableControlNode.frame = editableControlFrame + transition.updateFrame(node: strongSelf.bottomStripeNode, frame: CGRect(origin: CGPoint(x: bottomStripeInset, y: contentSize.height - UIScreenPixel), size: CGSize(width: layout.contentSize.width - bottomStripeInset, height: separatorHeight))) let _ = reorderSizeAndApply.1(layout.contentSize.height, displayTextLimit && layout.contentSize.height <= 44.0) let reorderControlFrame = CGRect(origin: CGPoint(x: params.width + revealOffset - params.rightInset - reorderSizeAndApply.0, y: 0.0), size: CGSize(width: reorderSizeAndApply.0, height: layout.contentSize.height)) @@ -384,7 +419,7 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, strongSelf.updateLayout(size: layout.contentSize, leftInset: params.leftInset, rightInset: params.rightInset) - strongSelf.setRevealOptions((left: [], right: [ItemListRevealOption(key: 0, title: item.strings.Common_Delete, icon: .none, color: item.theme.list.itemDisclosureActions.destructive.fillColor, textColor: item.theme.list.itemDisclosureActions.destructive.foregroundColor)])) + strongSelf.setRevealOptions((left: [], right: item.canDelete ? [ItemListRevealOption(key: 0, title: item.presentationData.strings.Common_Delete, icon: .none, color: item.presentationData.theme.list.itemDisclosureActions.destructive.fillColor, textColor: item.presentationData.theme.list.itemDisclosureActions.destructive.foregroundColor)] : [])) } }) } @@ -393,18 +428,20 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, override func updateRevealOffset(offset: CGFloat, transition: ContainedViewLayoutTransition) { super.updateRevealOffset(offset: offset, transition: transition) - guard let params = self.layoutParams else { + guard let params = self.layoutParams, let item = self.item else { return } let revealOffset = offset let leftInset: CGFloat - leftInset = 60.0 + params.leftInset + leftInset = params.leftInset + (item.isSelected != nil ? 60.0 : 16.0) - var controlFrame = self.editableControlNode.frame - controlFrame.origin.x = params.leftInset + 6.0 + revealOffset - transition.updateFrame(node: self.editableControlNode, frame: controlFrame) + if let checkNode = self.checkNode { + var checkNodeFrame = checkNode.frame + checkNodeFrame.origin.x = params.leftInset + 11.0 + revealOffset + transition.updateFrame(node: checkNode, frame: checkNodeFrame) + } var reorderFrame = self.reorderControlNode.frame reorderFrame.origin.x = params.width + revealOffset - params.rightInset - reorderFrame.width @@ -448,5 +485,7 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode, var separatorFrame = self.bottomStripeNode.frame separatorFrame.origin.y = currentValue - UIScreenPixel self.bottomStripeNode.frame = separatorFrame + + self.containerNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: self.containerNode.bounds.width, height: currentValue)) } } diff --git a/submodules/Display/Display/ListView.swift b/submodules/Display/Display/ListView.swift index 5330a53cb7..111982ef98 100644 --- a/submodules/Display/Display/ListView.swift +++ b/submodules/Display/Display/ListView.swift @@ -2011,7 +2011,11 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture node.addHeightAnimation(0.0, duration: insertionAnimationDuration * UIView.animationDurationFactor(), beginAt: timestamp) } if node.animationForKey("apparentHeight") == nil || !(node is ListViewTempItemNode) { - node.addApparentHeightAnimation(0.0, duration: insertionAnimationDuration * UIView.animationDurationFactor(), beginAt: timestamp) + node.addApparentHeightAnimation(0.0, duration: insertionAnimationDuration * UIView.animationDurationFactor(), beginAt: timestamp, update: { [weak node] progress, currentValue in + if let node = node { + node.animateFrameTransition(progress, currentValue) + } + }) } node.animateRemoved(timestamp, duration: insertionAnimationDuration * UIView.animationDurationFactor()) } else if animated { @@ -3007,21 +3011,25 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture let flashing = self.headerItemsAreFlashing() - let addHeader: (_ id: Int64, _ upperBound: CGFloat, _ lowerBound: CGFloat, _ item: ListViewItemHeader, _ hasValidNodes: Bool) -> Void = { id, upperBound, lowerBound, item, hasValidNodes in + func addHeader(id: Int64, upperBound: CGFloat, upperBoundEdge: CGFloat, lowerBound: CGFloat, item: ListViewItemHeader, hasValidNodes: Bool) { let itemHeaderHeight: CGFloat = item.height let headerFrame: CGRect let stickLocationDistanceFactor: CGFloat let stickLocationDistance: CGFloat switch item.stickDirection { - case .top: - headerFrame = CGRect(origin: CGPoint(x: 0.0, y: min(max(upperDisplayBound, upperBound), lowerBound - itemHeaderHeight)), size: CGSize(width: self.visibleSize.width, height: itemHeaderHeight)) - stickLocationDistance = headerFrame.minY - upperBound - stickLocationDistanceFactor = max(0.0, min(1.0, stickLocationDistance / itemHeaderHeight)) - case .bottom: - headerFrame = CGRect(origin: CGPoint(x: 0.0, y: max(upperBound, min(lowerBound, lowerDisplayBound) - itemHeaderHeight)), size: CGSize(width: self.visibleSize.width, height: itemHeaderHeight)) - stickLocationDistance = lowerBound - headerFrame.maxY - stickLocationDistanceFactor = max(0.0, min(1.0, stickLocationDistance / itemHeaderHeight)) + case .top: + headerFrame = CGRect(origin: CGPoint(x: 0.0, y: min(max(upperDisplayBound, upperBound), lowerBound - itemHeaderHeight)), size: CGSize(width: self.visibleSize.width, height: itemHeaderHeight)) + stickLocationDistance = headerFrame.minY - upperBound + stickLocationDistanceFactor = max(0.0, min(1.0, stickLocationDistance / itemHeaderHeight)) + case .topEdge: + headerFrame = CGRect(origin: CGPoint(x: 0.0, y: min(max(upperDisplayBound, upperBoundEdge - itemHeaderHeight), lowerBound - itemHeaderHeight)), size: CGSize(width: self.visibleSize.width, height: itemHeaderHeight)) + stickLocationDistance = headerFrame.minY - upperBoundEdge - itemHeaderHeight + stickLocationDistanceFactor = max(0.0, min(1.0, stickLocationDistance / itemHeaderHeight)) + case .bottom: + headerFrame = CGRect(origin: CGPoint(x: 0.0, y: max(upperBound, min(lowerBound, lowerDisplayBound) - itemHeaderHeight)), size: CGSize(width: self.visibleSize.width, height: itemHeaderHeight)) + stickLocationDistance = lowerBound - headerFrame.maxY + stickLocationDistanceFactor = max(0.0, min(1.0, stickLocationDistance / itemHeaderHeight)) } visibleHeaderNodes.insert(id) if let headerNode = self.itemHeaderNodes[id] { @@ -3092,31 +3100,32 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } } - var previousHeader: (Int64, CGFloat, CGFloat, ListViewItemHeader, Bool)? + var previousHeader: (id: Int64, upperBound: CGFloat, upperBoundEdge: CGFloat, lowerBound: CGFloat, item: ListViewItemHeader, hasValidNodes: Bool)? for itemNode in self.itemNodes { let itemFrame = itemNode.apparentFrame + let itemTopInset = itemNode.insets.top if let itemHeader = itemNode.header() { - if let (previousHeaderId, previousUpperBound, previousLowerBound, previousHeaderItem, hasValidNodes) = previousHeader { + if let (previousHeaderId, previousUpperBound, previousUpperBoundEdge, previousLowerBound, previousHeaderItem, hasValidNodes) = previousHeader { if previousHeaderId == itemHeader.id { - previousHeader = (previousHeaderId, previousUpperBound, itemFrame.maxY, previousHeaderItem, hasValidNodes || itemNode.index != nil) + previousHeader = (previousHeaderId, previousUpperBound, previousUpperBoundEdge, itemFrame.maxY, previousHeaderItem, hasValidNodes || itemNode.index != nil) } else { - addHeader(previousHeaderId, previousUpperBound, previousLowerBound, previousHeaderItem, hasValidNodes) + addHeader(id: previousHeaderId, upperBound: previousUpperBound, upperBoundEdge: previousUpperBoundEdge, lowerBound: previousLowerBound, item: previousHeaderItem, hasValidNodes: hasValidNodes) - previousHeader = (itemHeader.id, itemFrame.minY, itemFrame.maxY, itemHeader, itemNode.index != nil) + previousHeader = (itemHeader.id, itemFrame.minY, itemFrame.minY + itemTopInset, itemFrame.maxY, itemHeader, itemNode.index != nil) } } else { - previousHeader = (itemHeader.id, itemFrame.minY, itemFrame.maxY, itemHeader, itemNode.index != nil) + previousHeader = (itemHeader.id, itemFrame.minY, itemFrame.minY + itemTopInset, itemFrame.maxY, itemHeader, itemNode.index != nil) } } else { - if let (previousHeaderId, previousUpperBound, previousLowerBound, previousHeaderItem, hasValidNodes) = previousHeader { - addHeader(previousHeaderId, previousUpperBound, previousLowerBound, previousHeaderItem, hasValidNodes) + if let (previousHeaderId, previousUpperBound, previousUpperBoundEdge, previousLowerBound, previousHeaderItem, hasValidNodes) = previousHeader { + addHeader(id: previousHeaderId, upperBound: previousUpperBound, upperBoundEdge: previousUpperBoundEdge, lowerBound: previousLowerBound, item: previousHeaderItem, hasValidNodes: hasValidNodes) } previousHeader = nil } } - if let (previousHeaderId, previousUpperBound, previousLowerBound, previousHeaderItem, hasValidNodes) = previousHeader { - addHeader(previousHeaderId, previousUpperBound, previousLowerBound, previousHeaderItem, hasValidNodes) + if let (previousHeaderId, previousUpperBound, previousUpperBoundEdge, previousLowerBound, previousHeaderItem, hasValidNodes) = previousHeader { + addHeader(id: previousHeaderId, upperBound: previousUpperBound, upperBoundEdge: previousUpperBoundEdge, lowerBound: previousLowerBound, item: previousHeaderItem, hasValidNodes: hasValidNodes) } let currentIds = Set(self.itemHeaderNodes.keys) diff --git a/submodules/Display/Display/ListViewItemHeader.swift b/submodules/Display/Display/ListViewItemHeader.swift index 1c985bc621..fb288b3187 100644 --- a/submodules/Display/Display/ListViewItemHeader.swift +++ b/submodules/Display/Display/ListViewItemHeader.swift @@ -4,6 +4,7 @@ import AsyncDisplayKit public enum ListViewItemHeaderStickDirection { case top + case topEdge case bottom } diff --git a/submodules/ItemListPeerActionItem/Sources/ItemListPeerActionItem.swift b/submodules/ItemListPeerActionItem/Sources/ItemListPeerActionItem.swift index 91e9fdf027..7986570906 100644 --- a/submodules/ItemListPeerActionItem/Sources/ItemListPeerActionItem.swift +++ b/submodules/ItemListPeerActionItem/Sources/ItemListPeerActionItem.swift @@ -150,15 +150,15 @@ class ItemListPeerActionItemNode: ListViewItemNode { updatedTheme = item.presentationData.theme } let leftInset: CGFloat - let vertcalInset: CGFloat + let verticalInset: CGFloat let verticalOffset: CGFloat switch item.height { case .generic: - vertcalInset = 11.0 + verticalInset = 11.0 verticalOffset = 0.0 leftInset = 59.0 + params.leftInset case .peerList: - vertcalInset = 14.0 + verticalInset = 14.0 verticalOffset = 0.0 leftInset = 65.0 + params.leftInset } @@ -170,7 +170,7 @@ class ItemListPeerActionItemNode: ListViewItemNode { let separatorHeight = UIScreenPixel let insets = itemListNeighborsGroupedInsets(neighbors) - let contentSize = CGSize(width: params.width, height: titleLayout.size.height + vertcalInset * 2.0) + let contentSize = CGSize(width: params.width, height: titleLayout.size.height + verticalInset * 2.0) let layout = ListViewItemNodeLayout(contentSize: contentSize, insets: insets) let layoutSize = layout.size @@ -247,7 +247,7 @@ class ItemListPeerActionItemNode: ListViewItemNode { strongSelf.topStripeNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: layoutSize.width, height: separatorHeight)) transition.updateFrame(node: strongSelf.bottomStripeNode, frame: CGRect(origin: CGPoint(x: bottomStripeInset, y: contentSize.height + bottomStripeOffset), size: CGSize(width: layoutSize.width - bottomStripeInset, height: separatorHeight))) - transition.updateFrame(node: strongSelf.titleNode, frame: CGRect(origin: CGPoint(x: leftInset + editingOffset, y: vertcalInset + verticalOffset), size: titleLayout.size)) + transition.updateFrame(node: strongSelf.titleNode, frame: CGRect(origin: CGPoint(x: leftInset + editingOffset, y: verticalInset + verticalOffset), size: titleLayout.size)) strongSelf.highlightedBackgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -UIScreenPixel), size: CGSize(width: params.width, height: layout.contentSize.height + UIScreenPixel + UIScreenPixel)) } diff --git a/submodules/ItemListPeerItem/Sources/ItemListPeerItem.swift b/submodules/ItemListPeerItem/Sources/ItemListPeerItem.swift index c8018f245a..b499b3522f 100644 --- a/submodules/ItemListPeerItem/Sources/ItemListPeerItem.swift +++ b/submodules/ItemListPeerItem/Sources/ItemListPeerItem.swift @@ -135,8 +135,9 @@ public final class ItemListPeerItem: ListViewItem, ItemListItem { let hasTopGroupInset: Bool let noInsets: Bool public let tag: ItemListItemTag? + let header: ListViewItemHeader? - public init(presentationData: ItemListPresentationData, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, context: AccountContext, peer: Peer, height: ItemListPeerItemHeight = .peerList, aliasHandling: ItemListPeerItemAliasHandling = .standard, nameColor: ItemListPeerItemNameColor = .primary, nameStyle: ItemListPeerItemNameStyle = .distinctBold, presence: PeerPresence?, text: ItemListPeerItemText, label: ItemListPeerItemLabel, editing: ItemListPeerItemEditing, revealOptions: ItemListPeerItemRevealOptions? = nil, switchValue: ItemListPeerItemSwitch?, enabled: Bool, selectable: Bool, sectionId: ItemListSectionId, action: (() -> Void)?, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, removePeer: @escaping (PeerId) -> Void, toggleUpdated: ((Bool) -> Void)? = nil, contextAction: ((ASDisplayNode, ContextGesture?) -> Void)? = nil, hasTopStripe: Bool = true, hasTopGroupInset: Bool = true, noInsets: Bool = false, tag: ItemListItemTag? = nil) { + public init(presentationData: ItemListPresentationData, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, context: AccountContext, peer: Peer, height: ItemListPeerItemHeight = .peerList, aliasHandling: ItemListPeerItemAliasHandling = .standard, nameColor: ItemListPeerItemNameColor = .primary, nameStyle: ItemListPeerItemNameStyle = .distinctBold, presence: PeerPresence?, text: ItemListPeerItemText, label: ItemListPeerItemLabel, editing: ItemListPeerItemEditing, revealOptions: ItemListPeerItemRevealOptions? = nil, switchValue: ItemListPeerItemSwitch?, enabled: Bool, selectable: Bool, sectionId: ItemListSectionId, action: (() -> Void)?, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, removePeer: @escaping (PeerId) -> Void, toggleUpdated: ((Bool) -> Void)? = nil, contextAction: ((ASDisplayNode, ContextGesture?) -> Void)? = nil, hasTopStripe: Bool = true, hasTopGroupInset: Bool = true, noInsets: Bool = false, tag: ItemListItemTag? = nil, header: ListViewItemHeader? = nil) { self.presentationData = presentationData self.dateTimeFormat = dateTimeFormat self.nameDisplayOrder = nameDisplayOrder @@ -164,12 +165,13 @@ public final class ItemListPeerItem: ListViewItem, ItemListItem { self.hasTopGroupInset = hasTopGroupInset self.noInsets = noInsets self.tag = tag + self.header = header } public func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal?, (ListViewItemApply) -> Void)) -> Void) { async { let node = ItemListPeerItemNode() - let (layout, apply) = node.asyncLayout()(self, params, itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem)) + let (layout, apply) = node.asyncLayout()(self, params, itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem), self.getHeaderAtTop(top: previousItem, bottom: nextItem)) node.contentSize = layout.contentSize node.insets = layout.insets @@ -182,6 +184,19 @@ public final class ItemListPeerItem: ListViewItem, ItemListItem { } } + private func getHeaderAtTop(top: ListViewItem?, bottom: ListViewItem?) -> Bool { + var headerAtTop = false + if let top = top as? ItemListPeerItem, top.header != nil { + if top.header?.id != self.header?.id { + headerAtTop = true + } + } else if self.header != nil { + headerAtTop = true + } + + return headerAtTop + } + public func updateNode(async: @escaping (@escaping () -> Void) -> Void, node: @escaping () -> ListViewItemNode, params: ListViewItemLayoutParams, previousItem: ListViewItem?, nextItem: ListViewItem?, animation: ListViewItemUpdateAnimation, completion: @escaping (ListViewItemNodeLayout, @escaping (ListViewItemApply) -> Void) -> Void) { Queue.mainQueue().async { if let nodeValue = node() as? ItemListPeerItemNode { @@ -193,7 +208,7 @@ public final class ItemListPeerItem: ListViewItem, ItemListItem { } async { - let (layout, apply) = makeLayout(self, params, itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem)) + let (layout, apply) = makeLayout(self, params, itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem), self.getHeaderAtTop(top: previousItem, bottom: nextItem)) Queue.mainQueue().async { completion(layout, { _ in apply(false, animated) @@ -233,7 +248,7 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo private var checkNode: ASImageNode? private var peerPresenceManager: PeerPresenceStatusManager? - private var layoutParams: (ItemListPeerItem, ListViewItemLayoutParams, ItemListNeighbors)? + private var layoutParams: (ItemListPeerItem, ListViewItemLayoutParams, ItemListNeighbors, Bool)? private var editableControlNode: ItemListEditableControlNode? @@ -303,7 +318,7 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo self.peerPresenceManager = PeerPresenceStatusManager(update: { [weak self] in if let strongSelf = self, let layoutParams = strongSelf.layoutParams { - let (_, apply) = strongSelf.asyncLayout()(layoutParams.0, layoutParams.1, layoutParams.2) + let (_, apply) = strongSelf.asyncLayout()(layoutParams.0, layoutParams.1, layoutParams.2, layoutParams.3) apply(false, true) } }) @@ -317,7 +332,7 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo } } - public func asyncLayout() -> (_ item: ItemListPeerItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, (Bool, Bool) -> Void) { + public func asyncLayout() -> (_ item: ItemListPeerItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors, _ headerAtTop: Bool) -> (ListViewItemNodeLayout, (Bool, Bool) -> Void) { let makeTitleLayout = TextNode.asyncLayout(self.titleNode) let makeStatusLayout = TextNode.asyncLayout(self.statusNode) let makeLabelLayout = TextNode.asyncLayout(self.labelNode) @@ -334,7 +349,7 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo let currentHasBadge = self.labelBadgeNode.image != nil - return { item, params, neighbors in + return { item, params, neighbors, headerAtTop in var updateArrowImage: UIImage? var updatedTheme: PresentationTheme? @@ -579,8 +594,11 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo insets.top = 0.0 insets.bottom = 0.0 } + if headerAtTop, let header = item.header { + insets.top += header.height + 18.0 + } - let titleSpacing: CGFloat = 1.0 + let titleSpacing: CGFloat = statusLayout.size.height == 0.0 ? 0.0 : 1.0 let minHeight: CGFloat = titleLayout.size.height + verticalInset * 2.0 let rawHeight: CGFloat = verticalInset * 2.0 + titleLayout.size.height + titleSpacing + statusLayout.size.height @@ -602,7 +620,7 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo return (layout, { [weak self] synchronousLoad, animated in if let strongSelf = self { - strongSelf.layoutParams = (item, params, neighbors) + strongSelf.layoutParams = (item, params, neighbors, headerAtTop) strongSelf.containerNode.frame = CGRect(origin: CGPoint(), size: layout.contentSize) strongSelf.containerNode.isGestureEnabled = item.contextAction != nil @@ -940,13 +958,13 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo } override public func revealOptionsInteractivelyOpened() { - if let (item, _, _) = self.layoutParams { + if let (item, _, _, _) = self.layoutParams { item.setPeerIdWithRevealedOptions(item.peer.id, nil) } } override public func revealOptionsInteractivelyClosed() { - if let (item, _, _) = self.layoutParams { + if let (item, _, _, _) = self.layoutParams { item.setPeerIdWithRevealedOptions(nil, item.peer.id) } } @@ -955,7 +973,7 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo self.setRevealOptionsOpened(false, animated: true) self.revealOptionsInteractivelyClosed() - if let (item, _, _) = self.layoutParams { + if let (item, _, _, _) = self.layoutParams { if let revealOptions = item.revealOptions { if option.key >= 0 && option.key < Int32(revealOptions.options.count) { revealOptions.options[Int(option.key)].action() @@ -967,8 +985,156 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo } private func toggleUpdated(_ value: Bool) { - if let (item, _, _) = self.layoutParams { + if let (item, _, _, _) = self.layoutParams { item.toggleUpdated?(value) } } + + override public func header() -> ListViewItemHeader? { + return self.layoutParams?.0.header + } +} + +public final class ItemListPeerItemHeader: ListViewItemHeader { + public let id: Int64 + public let text: String + public let stickDirection: ListViewItemHeaderStickDirection = .topEdge + public let theme: PresentationTheme + public let strings: PresentationStrings + public let actionTitle: String? + public let action: (() -> Void)? + + public let height: CGFloat = 28.0 + + public init(theme: PresentationTheme, strings: PresentationStrings, text: String, actionTitle: String? = nil, id: Int64, action: (() -> Void)? = nil) { + self.text = text + self.id = id + self.theme = theme + self.strings = strings + self.actionTitle = actionTitle + self.action = action + } + + public func node() -> ListViewItemHeaderNode { + return ItemListPeerItemHeaderNode(theme: self.theme, strings: self.strings, text: self.text, actionTitle: self.actionTitle, action: self.action) + } + + public func updateNode(_ node: ListViewItemHeaderNode, previous: ListViewItemHeader?, next: ListViewItemHeader?) { + (node as? ItemListPeerItemHeaderNode)?.update(text: self.text, actionTitle: self.actionTitle, action: self.action) + } +} + +public final class ItemListPeerItemHeaderNode: ListViewItemHeaderNode { + private var theme: PresentationTheme + private var strings: PresentationStrings + private var actionTitle: String? + private var action: (() -> Void)? + + private var validLayout: (size: CGSize, leftInset: CGFloat, rightInset: CGFloat)? + + private let backgroundNode: ASDisplayNode + private let separatorNode: ASDisplayNode + private let textNode: ImmediateTextNode + private let actionTextNode: ImmediateTextNode + private let actionButton: HighlightableButtonNode + + private var stickDistanceFactor: CGFloat = 0.0 + + public init(theme: PresentationTheme, strings: PresentationStrings, text: String, actionTitle: String?, action: (() -> Void)?) { + self.theme = theme + self.strings = strings + self.actionTitle = actionTitle + self.action = action + + self.backgroundNode = ASDisplayNode() + self.backgroundNode.backgroundColor = theme.list.blocksBackgroundColor + + self.separatorNode = ASDisplayNode() + self.separatorNode.backgroundColor = theme.list.itemBlocksSeparatorColor + + let titleFont = Font.regular(13.0) + + self.textNode = ImmediateTextNode() + self.textNode.displaysAsynchronously = false + self.textNode.maximumNumberOfLines = 1 + self.textNode.attributedText = NSAttributedString(string: text, font: titleFont, textColor: theme.list.sectionHeaderTextColor) + + self.actionTextNode = ImmediateTextNode() + self.actionTextNode.displaysAsynchronously = false + self.actionTextNode.maximumNumberOfLines = 1 + self.actionTextNode.attributedText = NSAttributedString(string: actionTitle ?? "", font: titleFont, textColor: action == nil ? theme.list.sectionHeaderTextColor : theme.list.itemAccentColor) + + self.actionButton = HighlightableButtonNode() + self.actionButton.isUserInteractionEnabled = self.action != nil + + super.init() + + self.addSubnode(self.backgroundNode) + self.addSubnode(self.separatorNode) + self.addSubnode(self.textNode) + self.addSubnode(self.actionTextNode) + self.addSubnode(self.actionButton) + + self.actionButton.addTarget(self, action: #selector(self.actionButtonPressed), forControlEvents: .touchUpInside) + self.actionButton.highligthedChanged = { [weak self] highlighted in + if let strongSelf = self { + if highlighted { + strongSelf.actionTextNode.layer.removeAnimation(forKey: "opacity") + strongSelf.actionTextNode.alpha = 0.4 + } else { + strongSelf.actionTextNode.alpha = 1.0 + strongSelf.actionTextNode.layer.animateAlpha(from: 0.4, to: 1.0, duration: 0.2) + } + } + } + } + + @objc private func actionButtonPressed() { + self.action?() + } + + public func updateTheme(theme: PresentationTheme) { + self.theme = theme + + let titleFont = Font.regular(13.0) + + self.textNode.attributedText = NSAttributedString(string: self.textNode.attributedText?.string ?? "", font: titleFont, textColor: theme.list.sectionHeaderTextColor) + self.actionTextNode.attributedText = NSAttributedString(string: self.actionTextNode.attributedText?.string ?? "", font: titleFont, textColor: theme.list.sectionHeaderTextColor) + } + + public func update(text: String, actionTitle: String?, action: (() -> Void)?) { + self.actionTitle = actionTitle + self.action = action + let titleFont = Font.regular(13.0) + self.textNode.attributedText = NSAttributedString(string: text, font: titleFont, textColor: theme.list.sectionHeaderTextColor) + self.actionTextNode.attributedText = NSAttributedString(string: actionTitle ?? "", font: titleFont, textColor: action == nil ? theme.list.sectionHeaderTextColor : theme.list.itemAccentColor) + self.actionButton.isUserInteractionEnabled = self.action != nil + if let (size, leftInset, rightInset) = self.validLayout { + self.updateLayout(size: size, leftInset: leftInset, rightInset: rightInset) + } + } + + override public func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat) { + self.validLayout = (size, leftInset, rightInset) + self.backgroundNode.frame = CGRect(origin: CGPoint(), size: size) + self.separatorNode.frame = CGRect(origin: CGPoint(x: 0.0, y: size.height - UIScreenPixel), size: CGSize(width: size.width, height: UIScreenPixel)) + + let sideInset: CGFloat = 15.0 + leftInset + + let actionTextSize = self.actionTextNode.updateLayout(CGSize(width: size.width - sideInset * 2.0, height: size.height)) + let textSize = self.textNode.updateLayout(CGSize(width: size.width - sideInset * 2.0 - actionTextSize.width - 8.0, height: size.height)) + + self.textNode.frame = CGRect(origin: CGPoint(x: sideInset, y: 7.0), size: textSize) + self.actionTextNode.frame = CGRect(origin: CGPoint(x: size.width - sideInset - actionTextSize.width, y: 7.0), size: actionTextSize) + self.actionButton.frame = CGRect(origin: CGPoint(x: size.width - sideInset - actionTextSize.width, y: 0.0), size: CGSize(width: actionTextSize.width, height: size.height)) + } + + override public func animateRemoved(duration: Double) { + self.alpha = 0.0 + self.layer.animateAlpha(from: 1.0, to: 0.0, duration: duration, removeOnCompletion: true) + } + + override public func updateStickDistanceFactor(_ factor: CGFloat, transition: ContainedViewLayoutTransition) { + //transition.updateAlpha(node: self.separatorNode, alpha: (1.0 - factor) * 0.0 + factor * 1.0) + } } diff --git a/submodules/ItemListUI/Sources/ItemListControllerNode.swift b/submodules/ItemListUI/Sources/ItemListControllerNode.swift index f8e3ab0236..a56087ca9e 100644 --- a/submodules/ItemListUI/Sources/ItemListControllerNode.swift +++ b/submodules/ItemListUI/Sources/ItemListControllerNode.swift @@ -501,9 +501,12 @@ open class ItemListControllerNode: ASDisplayNode, UIScrollViewDelegate { options.insert(.PreferSynchronousDrawing) options.insert(.AnimateAlpha) } else if transition.crossfade { + options.insert(.PreferSynchronousResourceLoading) + options.insert(.PreferSynchronousDrawing) options.insert(.AnimateCrossfade) } else { options.insert(.Synchronous) + options.insert(.PreferSynchronousResourceLoading) options.insert(.PreferSynchronousDrawing) } if self.alwaysSynchronous { diff --git a/submodules/ItemListUI/Sources/Items/ItemListEditableItem.swift b/submodules/ItemListUI/Sources/Items/ItemListEditableItem.swift index efd9e4e4c2..dc6f9a1a6f 100644 --- a/submodules/ItemListUI/Sources/Items/ItemListEditableItem.swift +++ b/submodules/ItemListUI/Sources/Items/ItemListEditableItem.swift @@ -82,6 +82,10 @@ open class ItemListRevealOptionsItemNode: ListViewItemNode, UIGestureRecognizerD super.init(layerBacked: layerBacked, dynamicBounce: dynamicBounce, rotated: rotated, seeThrough: seeThrough) } + open var controlsContainer: ASDisplayNode { + return self + } + override open func didLoad() { super.didLoad() @@ -310,7 +314,7 @@ open class ItemListRevealOptionsItemNode: ListViewItemNode, UIGestureRecognizerD revealNode.updateRevealOffset(offset: 0.0, sideInset: leftInset, transition: .immediate) } - self.addSubnode(revealNode) + self.controlsContainer.addSubnode(revealNode) } } @@ -332,7 +336,7 @@ open class ItemListRevealOptionsItemNode: ListViewItemNode, UIGestureRecognizerD revealNode.updateRevealOffset(offset: 0.0, sideInset: -rightInset, transition: .immediate) } - self.addSubnode(revealNode) + self.controlsContainer.addSubnode(revealNode) } } @@ -492,4 +496,8 @@ open class ItemListRevealOptionsItemNode: ListViewItemNode, UIGestureRecognizerD } self.hapticFeedback?.impact(.medium) } + + override open func animateFrameTransition(_ progress: CGFloat, _ currentValue: CGFloat) { + super.animateFrameTransition(progress, currentValue) + } } diff --git a/submodules/ItemListUI/Sources/Items/ItemListTextItem.swift b/submodules/ItemListUI/Sources/Items/ItemListTextItem.swift index 93e9f27da9..32307fdf36 100644 --- a/submodules/ItemListUI/Sources/Items/ItemListTextItem.swift +++ b/submodules/ItemListUI/Sources/Items/ItemListTextItem.swift @@ -9,6 +9,7 @@ import Markdown public enum ItemListTextItemText { case plain(String) + case large(String) case markdown(String) } @@ -105,15 +106,19 @@ public class ItemListTextItemNode: ListViewItemNode { return { item, params, neighbors in let leftInset: CGFloat = 15.0 + params.leftInset - let verticalInset: CGFloat = 7.0 + let topInset: CGFloat = 7.0 + var bottomInset: CGFloat = 7.0 let titleFont = Font.regular(item.presentationData.fontSize.itemListBaseHeaderFontSize) + let largeTitleFont = Font.semibold(floor(item.presentationData.fontSize.itemListBaseHeaderFontSize * 2.0)) let titleBoldFont = Font.semibold(item.presentationData.fontSize.itemListBaseHeaderFontSize) let attributedText: NSAttributedString switch item.text { case let .plain(text): attributedText = NSAttributedString(string: text, font: titleFont, textColor: item.presentationData.theme.list.freeTextColor) + case let .large(text): + attributedText = NSAttributedString(string: text, font: largeTitleFont, textColor: item.presentationData.theme.list.itemPrimaryTextColor) case let .markdown(text): attributedText = parseMarkdownIntoAttributedString(text, attributes: MarkdownAttributes(body: MarkdownAttributeSet(font: titleFont, textColor: item.presentationData.theme.list.freeTextColor), bold: MarkdownAttributeSet(font: titleBoldFont, textColor: item.presentationData.theme.list.freeTextColor), link: MarkdownAttributeSet(font: titleFont, textColor: item.presentationData.theme.list.itemAccentColor), linkAttribute: { contents in return (TelegramTextAttributes.URL, contents) @@ -123,8 +128,12 @@ public class ItemListTextItemNode: ListViewItemNode { let contentSize: CGSize - contentSize = CGSize(width: params.width, height: titleLayout.size.height + verticalInset + verticalInset) - let insets = itemListNeighborsGroupedInsets(neighbors) + var insets = itemListNeighborsGroupedInsets(neighbors) + if case .large = item.text { + insets.top = 14.0 + bottomInset = -6.0 + } + contentSize = CGSize(width: params.width, height: titleLayout.size.height + topInset + bottomInset) let layout = ListViewItemNodeLayout(contentSize: contentSize, insets: insets) @@ -139,7 +148,7 @@ public class ItemListTextItemNode: ListViewItemNode { let _ = titleApply() - strongSelf.titleNode.frame = CGRect(origin: CGPoint(x: leftInset, y: verticalInset), size: titleLayout.size) + strongSelf.titleNode.frame = CGRect(origin: CGPoint(x: leftInset, y: topInset), size: titleLayout.size) } }) } diff --git a/submodules/LegacyComponents/LegacyComponents/TGCheckButtonView.m b/submodules/LegacyComponents/LegacyComponents/TGCheckButtonView.m index 8aa9440404..998363d54b 100644 --- a/submodules/LegacyComponents/LegacyComponents/TGCheckButtonView.m +++ b/submodules/LegacyComponents/LegacyComponents/TGCheckButtonView.m @@ -24,19 +24,14 @@ NSInteger _number; UIColor *_checkColor; + + CGAffineTransform TGCheckButtonDefaultTransform; } @end @implementation TGCheckButtonView -static NSMutableDictionary *backgroundImages; -static NSMutableDictionary *fillImages; -static CGAffineTransform TGCheckButtonDefaultTransform; - -+ (void)resetCache -{ - [backgroundImages removeAllObjects]; - [fillImages removeAllObjects]; ++ (void)resetCache { } - (instancetype)initWithStyle:(TGCheckButtonStyle)style { @@ -55,15 +50,12 @@ static CGAffineTransform TGCheckButtonDefaultTransform; self = [super initWithFrame:CGRectMake(0, 0, size.width, size.height)]; if (self != nil) { - static dispatch_once_t onceToken; - static CGFloat screenScale = 2.0f; - dispatch_once(&onceToken, ^ - { - TGCheckButtonDefaultTransform = CGAffineTransformMakeRotation(-M_PI_4); - backgroundImages = [[NSMutableDictionary alloc] init]; - fillImages = [[NSMutableDictionary alloc] init]; - screenScale = [UIScreen mainScreen].scale; - }); + CGFloat screenScale = 2.0f; + + TGCheckButtonDefaultTransform = CGAffineTransformMakeRotation(-M_PI_4); + NSMutableDictionary *backgroundImages = [[NSMutableDictionary alloc] init]; + NSMutableDictionary *fillImages = [[NSMutableDictionary alloc] init]; + screenScale = [UIScreen mainScreen].scale; int32_t hex = 0x29c519; UIColor *greenColor = [[UIColor alloc] initWithRed:(((hex >> 16) & 0xff) / 255.0f) green:(((hex >> 8) & 0xff) / 255.0f) blue:(((hex) & 0xff) / 255.0f) alpha:1.0f]; diff --git a/submodules/Postbox/Sources/Coding.swift b/submodules/Postbox/Sources/Coding.swift index d1232ad1de..0e73649666 100644 --- a/submodules/Postbox/Sources/Coding.swift +++ b/submodules/Postbox/Sources/Coding.swift @@ -484,6 +484,22 @@ public final class PostboxEncoder { } } + public func encodeDataArray(_ value: [Data], forKey key: StaticString) { + self.encodeKey(key) + var type: Int8 = ValueType.BytesArray.rawValue + self.buffer.write(&type, offset: 0, length: 1) + var length: Int32 = Int32(value.count) + self.buffer.write(&length, offset: 0, length: 4) + + for object in value { + var length: Int32 = Int32(object.count) + self.buffer.write(&length, offset: 0, length: 4) + object.withUnsafeBytes { (bytes: UnsafePointer) -> Void in + self.buffer.write(bytes, offset: 0, length: Int(length)) + } + } + } + public func encodeObjectDictionary(_ value: [K : V], forKey key: StaticString) where K: PostboxCoding { self.encodeKey(key) var t: Int8 = ValueType.ObjectDictionary.rawValue @@ -1173,6 +1189,31 @@ public final class PostboxDecoder { } } + public func decodeOptionalDataArrayForKey(_ key: StaticString) -> [Data]? { + if PostboxDecoder.positionOnKey(self.buffer.memory, offset: &self.offset, maxOffset: self.buffer.length, length: self.buffer.length, key: key, valueType: .BytesArray) { + var length: Int32 = 0 + memcpy(&length, self.buffer.memory + self.offset, 4) + self.offset += 4 + + var array: [Data] = [] + array.reserveCapacity(Int(length)) + + var i: Int32 = 0 + while i < length { + var length: Int32 = 0 + memcpy(&length, self.buffer.memory + self.offset, 4) + array.append(Data(bytes: self.buffer.memory.advanced(by: self.offset + 4), count: Int(length))) + self.offset += 4 + Int(length) + + i += 1 + } + + return array + } else { + return nil + } + } + public func decodeObjectArrayForKey(_ key: StaticString) -> [T] where T: PostboxCoding { if PostboxDecoder.positionOnKey(self.buffer.memory, offset: &self.offset, maxOffset: self.buffer.length, length: self.buffer.length, key: key, valueType: .ObjectArray) { var length: Int32 = 0 diff --git a/submodules/Postbox/Sources/Message.swift b/submodules/Postbox/Sources/Message.swift index 5960cc1bc4..3968afde45 100644 --- a/submodules/Postbox/Sources/Message.swift +++ b/submodules/Postbox/Sources/Message.swift @@ -525,6 +525,10 @@ public final class Message { return Message(stableId: self.stableId, stableVersion: self.stableVersion, id: self.id, globallyUniqueId: self.globallyUniqueId, groupingKey: self.groupingKey, groupInfo: self.groupInfo, timestamp: self.timestamp, flags: self.flags, tags: self.tags, globalTags: self.globalTags, localTags: self.localTags, forwardInfo: self.forwardInfo, author: self.author, text: self.text, attributes: self.attributes, media: media, peers: self.peers, associatedMessages: self.associatedMessages, associatedMessageIds: self.associatedMessageIds) } + public func withUpdatedPeers(_ peers: SimpleDictionary) -> Message { + return Message(stableId: self.stableId, stableVersion: self.stableVersion, id: self.id, globallyUniqueId: self.globallyUniqueId, groupingKey: self.groupingKey, groupInfo: self.groupInfo, timestamp: self.timestamp, flags: self.flags, tags: self.tags, globalTags: self.globalTags, localTags: self.localTags, forwardInfo: self.forwardInfo, author: self.author, text: self.text, attributes: self.attributes, media: self.media, peers: peers, associatedMessages: self.associatedMessages, associatedMessageIds: self.associatedMessageIds) + } + public func withUpdatedFlags(_ flags: MessageFlags) -> Message { return Message(stableId: self.stableId, stableVersion: self.stableVersion, id: self.id, globallyUniqueId: self.globallyUniqueId, groupingKey: self.groupingKey, groupInfo: self.groupInfo, timestamp: self.timestamp, flags: flags, tags: self.tags, globalTags: self.globalTags, localTags: self.localTags, forwardInfo: self.forwardInfo, author: self.author, text: self.text, attributes: self.attributes, media: self.media, peers: self.peers, associatedMessages: self.associatedMessages, associatedMessageIds: self.associatedMessageIds) } diff --git a/submodules/Postbox/Sources/MessageHistoryTable.swift b/submodules/Postbox/Sources/MessageHistoryTable.swift index feac0da947..f0fb7ca809 100644 --- a/submodules/Postbox/Sources/MessageHistoryTable.swift +++ b/submodules/Postbox/Sources/MessageHistoryTable.swift @@ -2275,6 +2275,42 @@ final class MessageHistoryTable: Table { return Message(stableId: message.stableId, stableVersion: message.stableVersion, id: message.id, globallyUniqueId: message.globallyUniqueId, groupingKey: message.groupingKey, groupInfo: message.groupInfo, timestamp: message.timestamp, flags: message.flags, tags: message.tags, globalTags: message.globalTags, localTags: message.localTags, forwardInfo: forwardInfo, author: author, text: message.text, attributes: parsedAttributes, media: parsedMedia, peers: peers, associatedMessages: associatedMessages, associatedMessageIds: associatedMessageIds) } + func renderMessagePeers(_ message: Message, peerTable: PeerTable) -> Message { + var author: Peer? + var peers = SimpleDictionary() + if let authorId = message.author?.id { + author = peerTable.get(authorId) + } + + if let chatPeer = peerTable.get(message.id.peerId) { + peers[chatPeer.id] = chatPeer + + if let associatedPeerId = chatPeer.associatedPeerId { + if let peer = peerTable.get(associatedPeerId) { + peers[peer.id] = peer + } + } + } + + for media in message.media { + for peerId in media.peerIds { + if let peer = peerTable.get(peerId) { + peers[peer.id] = peer + } + } + } + + for attribute in message.attributes { + for peerId in attribute.associatedPeerIds { + if let peer = peerTable.get(peerId) { + peers[peer.id] = peer + } + } + } + + return message.withUpdatedPeers(peers) + } + func renderAssociatedMessages(associatedMessageIds: [MessageId], peerTable: PeerTable) -> SimpleDictionary { var associatedMessages = SimpleDictionary() for messageId in associatedMessageIds { diff --git a/submodules/Postbox/Sources/MessageHistoryView.swift b/submodules/Postbox/Sources/MessageHistoryView.swift index b5a0e719fb..bc62626fe2 100644 --- a/submodules/Postbox/Sources/MessageHistoryView.swift +++ b/submodules/Postbox/Sources/MessageHistoryView.swift @@ -29,13 +29,13 @@ public struct MessageHistoryMessageEntry { enum MutableMessageHistoryEntry { case IntermediateMessageEntry(IntermediateMessage, MessageHistoryEntryLocation?, MessageHistoryEntryMonthLocation?) - case MessageEntry(MessageHistoryMessageEntry, reloadAssociatedMessages: Bool) + case MessageEntry(MessageHistoryMessageEntry, reloadAssociatedMessages: Bool, reloadPeers: Bool) var index: MessageIndex { switch self { case let .IntermediateMessageEntry(message, _, _): return message.index - case let .MessageEntry(message, _): + case let .MessageEntry(message, _, _): return message.message.index } } @@ -44,7 +44,7 @@ enum MutableMessageHistoryEntry { switch self { case let .IntermediateMessageEntry(message, _, _): return message.tags - case let .MessageEntry(message, _): + case let .MessageEntry(message, _, _): return message.message.tags } } @@ -53,8 +53,8 @@ enum MutableMessageHistoryEntry { switch self { case let .IntermediateMessageEntry(message, _, monthLocation): return .IntermediateMessageEntry(message, location, monthLocation) - case let .MessageEntry(message, reloadAssociatedMessages): - return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: location, monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + case let .MessageEntry(message, reloadAssociatedMessages, reloadPeers): + return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: location, monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } } @@ -62,8 +62,8 @@ enum MutableMessageHistoryEntry { switch self { case let .IntermediateMessageEntry(message, location, _): return .IntermediateMessageEntry(message, location, monthLocation) - case let .MessageEntry(message, reloadAssociatedMessages): - return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: message.location, monthLocation: monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + case let .MessageEntry(message, reloadAssociatedMessages, reloadPeers): + return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: message.location, monthLocation: monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } } @@ -79,12 +79,12 @@ enum MutableMessageHistoryEntry { } else { return self } - case let .MessageEntry(message, reloadAssociatedMessages): + case let .MessageEntry(message, reloadAssociatedMessages, reloadPeers): if let location = message.location { if message.message.index > index { - return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: MessageHistoryEntryLocation(index: location.index + 1, count: location.count + 1), monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: MessageHistoryEntryLocation(index: location.index + 1, count: location.count + 1), monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } else { - return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: MessageHistoryEntryLocation(index: location.index, count: location.count + 1), monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: MessageHistoryEntryLocation(index: location.index, count: location.count + 1), monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } } else { return self @@ -107,15 +107,15 @@ enum MutableMessageHistoryEntry { } else { return self } - case let .MessageEntry(message, reloadAssociatedMessages): + case let .MessageEntry(message, reloadAssociatedMessages, reloadPeers): if let location = message.location { if message.message.index > index { //assert(location.index > 0) //assert(location.count != 0) - return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: MessageHistoryEntryLocation(index: location.index - 1, count: location.count - 1), monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: MessageHistoryEntryLocation(index: location.index - 1, count: location.count - 1), monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } else { //assert(location.count != 0) - return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: MessageHistoryEntryLocation(index: location.index, count: location.count - 1), monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + return .MessageEntry(MessageHistoryMessageEntry(message: message.message, location: MessageHistoryEntryLocation(index: location.index, count: location.count - 1), monthLocation: message.monthLocation, attributes: message.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } } else { return self @@ -128,10 +128,10 @@ enum MutableMessageHistoryEntry { case let .IntermediateMessageEntry(message, location, monthLocation): let updatedMessage = IntermediateMessage(stableId: message.stableId, stableVersion: message.stableVersion, id: message.id, globallyUniqueId: message.globallyUniqueId, groupingKey: message.groupingKey, groupInfo: message.groupInfo, timestamp: timestamp, flags: message.flags, tags: message.tags, globalTags: message.globalTags, localTags: message.localTags, forwardInfo: message.forwardInfo, authorId: message.authorId, text: message.text, attributesData: message.attributesData, embeddedMediaData: message.embeddedMediaData, referencedMedia: message.referencedMedia) return .IntermediateMessageEntry(updatedMessage, location, monthLocation) - case let .MessageEntry(value, reloadAssociatedMessages): + case let .MessageEntry(value, reloadAssociatedMessages, reloadPeers): let message = value.message let updatedMessage = Message(stableId: message.stableId, stableVersion: message.stableVersion, id: message.id, globallyUniqueId: message.globallyUniqueId, groupingKey: message.groupingKey, groupInfo: message.groupInfo, timestamp: timestamp, flags: message.flags, tags: message.tags, globalTags: message.globalTags, localTags: message.localTags, forwardInfo: message.forwardInfo, author: message.author, text: message.text, attributes: message.attributes, media: message.media, peers: message.peers, associatedMessages: message.associatedMessages, associatedMessageIds: message.associatedMessageIds) - return .MessageEntry(MessageHistoryMessageEntry(message: updatedMessage, location: value.location, monthLocation: value.monthLocation, attributes: value.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + return .MessageEntry(MessageHistoryMessageEntry(message: updatedMessage, location: value.location, monthLocation: value.monthLocation, attributes: value.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } } @@ -139,7 +139,7 @@ enum MutableMessageHistoryEntry { switch self { case let .IntermediateMessageEntry(message, location, monthLocation): return [] - case let .MessageEntry(value, _): + case let .MessageEntry(value, _, _): return value.message.associatedMessageIds } } diff --git a/submodules/Postbox/Sources/MessageHistoryViewState.swift b/submodules/Postbox/Sources/MessageHistoryViewState.swift index 68995e3472..3ca9492b0c 100644 --- a/submodules/Postbox/Sources/MessageHistoryViewState.swift +++ b/submodules/Postbox/Sources/MessageHistoryViewState.swift @@ -874,10 +874,10 @@ final class HistoryViewLoadedState { let currentLocation = nextLocation nextLocation = nextLocation.successor switch entry { - case let .IntermediateMessageEntry(message, _, monthLocation): - return .IntermediateMessageEntry(message, currentLocation, monthLocation) - case let .MessageEntry(entry, reloadAssociatedMessages): - return .MessageEntry(MessageHistoryMessageEntry(message: entry.message, location: currentLocation, monthLocation: entry.monthLocation, attributes: entry.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + case let .IntermediateMessageEntry(message, _, monthLocation): + return .IntermediateMessageEntry(message, currentLocation, monthLocation) + case let .MessageEntry(entry, reloadAssociatedMessages, reloadPeers): + return .MessageEntry(MessageHistoryMessageEntry(message: entry.message, location: currentLocation, monthLocation: entry.monthLocation, attributes: entry.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } } } @@ -900,8 +900,8 @@ final class HistoryViewLoadedState { switch entry { case let .IntermediateMessageEntry(message, location, _): return .IntermediateMessageEntry(message, location, MessageHistoryEntryMonthLocation(indexInMonth: Int32(currentIndexInMonth))) - case let .MessageEntry(entry, reloadAssociatedMessages): - return .MessageEntry(MessageHistoryMessageEntry(message: entry.message, location: entry.location, monthLocation: MessageHistoryEntryMonthLocation(indexInMonth: Int32(currentIndexInMonth)), attributes: entry.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + case let .MessageEntry(entry, reloadAssociatedMessages, reloadPeers): + return .MessageEntry(MessageHistoryMessageEntry(message: entry.message, location: entry.location, monthLocation: MessageHistoryEntryMonthLocation(indexInMonth: Int32(currentIndexInMonth)), attributes: entry.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } } } @@ -960,8 +960,8 @@ final class HistoryViewLoadedState { switch entry { case let .IntermediateMessageEntry(message, location, monthLocation): return .IntermediateMessageEntry(message.withUpdatedGroupInfo(groupInfo), location, monthLocation) - case let .MessageEntry(messageEntry, reloadAssociatedMessages): - return .MessageEntry(MessageHistoryMessageEntry(message: messageEntry.message.withUpdatedGroupInfo(groupInfo), location: messageEntry.location, monthLocation: messageEntry.monthLocation, attributes: messageEntry.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + case let .MessageEntry(messageEntry, reloadAssociatedMessages, reloadPeers): + return .MessageEntry(MessageHistoryMessageEntry(message: messageEntry.message.withUpdatedGroupInfo(groupInfo), location: messageEntry.location, monthLocation: messageEntry.monthLocation, attributes: messageEntry.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } } return nil @@ -983,8 +983,8 @@ final class HistoryViewLoadedState { switch entry { case let .IntermediateMessageEntry(message, location, monthLocation): return .IntermediateMessageEntry(message.withUpdatedEmbeddedMedia(buffer), location, monthLocation) - case let .MessageEntry(messageEntry, reloadAssociatedMessages): - return .MessageEntry(MessageHistoryMessageEntry(message: messageEntry.message, location: messageEntry.location, monthLocation: messageEntry.monthLocation, attributes: messageEntry.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + case let .MessageEntry(messageEntry, reloadAssociatedMessages, reloadPeers): + return .MessageEntry(MessageHistoryMessageEntry(message: messageEntry.message, location: messageEntry.location, monthLocation: messageEntry.monthLocation, attributes: messageEntry.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } }) } @@ -994,8 +994,9 @@ final class HistoryViewLoadedState { for space in self.orderedEntriesBySpace.keys { let spaceUpdated = self.orderedEntriesBySpace[space]!.mutableScan({ entry in switch entry { - case let .MessageEntry(value, reloadAssociatedMessages): + case let .MessageEntry(value, reloadAssociatedMessages, reloadPeers): let message = value.message + var reloadPeers = reloadPeers var rebuild = false for media in message.media { @@ -1010,6 +1011,9 @@ final class HistoryViewLoadedState { for media in message.media { if let mediaId = media.id, let updated = updatedMedia[mediaId] { if let updated = updated { + if media.peerIds != updated.peerIds { + reloadPeers = true + } messageMedia.append(updated) } } else { @@ -1017,7 +1021,7 @@ final class HistoryViewLoadedState { } } let updatedMessage = Message(stableId: message.stableId, stableVersion: message.stableVersion, id: message.id, globallyUniqueId: message.globallyUniqueId, groupingKey: message.groupingKey, groupInfo: message.groupInfo, timestamp: message.timestamp, flags: message.flags, tags: message.tags, globalTags: message.globalTags, localTags: message.localTags, forwardInfo: message.forwardInfo, author: message.author, text: message.text, attributes: message.attributes, media: messageMedia, peers: message.peers, associatedMessages: message.associatedMessages, associatedMessageIds: message.associatedMessageIds) - return .MessageEntry(MessageHistoryMessageEntry(message: updatedMessage, location: value.location, monthLocation: value.monthLocation, attributes: value.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + return .MessageEntry(MessageHistoryMessageEntry(message: updatedMessage, location: value.location, monthLocation: value.monthLocation, attributes: value.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } case .IntermediateMessageEntry: break @@ -1046,9 +1050,9 @@ final class HistoryViewLoadedState { switch current { case .IntermediateMessageEntry: return current - case let .MessageEntry(messageEntry, _): + case let .MessageEntry(messageEntry, _, reloadPeers): updated = true - return .MessageEntry(messageEntry, reloadAssociatedMessages: true) + return .MessageEntry(messageEntry, reloadAssociatedMessages: true, reloadPeers: reloadPeers) } }) } @@ -1109,11 +1113,11 @@ final class HistoryViewLoadedState { switch current { case .IntermediateMessageEntry: return current - case let .MessageEntry(messageEntry, reloadAssociatedMessages): + case let .MessageEntry(messageEntry, reloadAssociatedMessages, reloadPeers): updated = true if let associatedMessages = messageEntry.message.associatedMessages.filteredOut(keysIn: [index.id]) { - return .MessageEntry(MessageHistoryMessageEntry(message: messageEntry.message.withUpdatedAssociatedMessages(associatedMessages), location: messageEntry.location, monthLocation: messageEntry.monthLocation, attributes: messageEntry.attributes), reloadAssociatedMessages: reloadAssociatedMessages) + return .MessageEntry(MessageHistoryMessageEntry(message: messageEntry.message.withUpdatedAssociatedMessages(associatedMessages), location: messageEntry.location, monthLocation: messageEntry.monthLocation, attributes: messageEntry.attributes), reloadAssociatedMessages: reloadAssociatedMessages, reloadPeers: reloadPeers) } else { return current } @@ -1177,14 +1181,22 @@ final class HistoryViewLoadedState { } switch entry { - case let .MessageEntry(value, reloadAssociatedMessages): + case let .MessageEntry(value, reloadAssociatedMessages, reloadPeers): + var updatedMessage = value.message if reloadAssociatedMessages { let associatedMessages = postbox.messageHistoryTable.renderAssociatedMessages(associatedMessageIds: value.message.associatedMessageIds, peerTable: postbox.peerTable) - let updatedValue = MessageHistoryMessageEntry(message: value.message.withUpdatedAssociatedMessages(associatedMessages), location: value.location, monthLocation: value.monthLocation, attributes: value.attributes) + updatedMessage = value.message.withUpdatedAssociatedMessages(associatedMessages) + } + if reloadPeers { + updatedMessage = postbox.messageHistoryTable.renderMessagePeers(updatedMessage, peerTable: postbox.peerTable) + } + + if value.message !== updatedMessage { + let updatedValue = MessageHistoryMessageEntry(message: updatedMessage, location: value.location, monthLocation: value.monthLocation, attributes: value.attributes) if directionIndex == 0 { - self.orderedEntriesBySpace[space]!.setLowerOrAtAnchorAtArrayIndex(index, to: .MessageEntry(updatedValue, reloadAssociatedMessages: false)) + self.orderedEntriesBySpace[space]!.setLowerOrAtAnchorAtArrayIndex(index, to: .MessageEntry(updatedValue, reloadAssociatedMessages: false, reloadPeers: false)) } else { - self.orderedEntriesBySpace[space]!.setHigherThanAnchorAtArrayIndex(index, to: .MessageEntry(updatedValue, reloadAssociatedMessages: false)) + self.orderedEntriesBySpace[space]!.setHigherThanAnchorAtArrayIndex(index, to: .MessageEntry(updatedValue, reloadAssociatedMessages: false, reloadPeers: false)) } result.append(updatedValue) } else { @@ -1198,9 +1210,9 @@ final class HistoryViewLoadedState { } let entry = MessageHistoryMessageEntry(message: renderedMessage, location: location, monthLocation: monthLocation, attributes: MutableMessageHistoryEntryAttributes(authorIsContact: authorIsContact)) if directionIndex == 0 { - self.orderedEntriesBySpace[space]!.setLowerOrAtAnchorAtArrayIndex(index, to: .MessageEntry(entry, reloadAssociatedMessages: false)) + self.orderedEntriesBySpace[space]!.setLowerOrAtAnchorAtArrayIndex(index, to: .MessageEntry(entry, reloadAssociatedMessages: false, reloadPeers: false)) } else { - self.orderedEntriesBySpace[space]!.setHigherThanAnchorAtArrayIndex(index, to: .MessageEntry(entry, reloadAssociatedMessages: false)) + self.orderedEntriesBySpace[space]!.setHigherThanAnchorAtArrayIndex(index, to: .MessageEntry(entry, reloadAssociatedMessages: false, reloadPeers: false)) } result.append(entry) } diff --git a/submodules/SettingsUI/Sources/SettingsController.swift b/submodules/SettingsUI/Sources/SettingsController.swift index 7bfc8531ea..b7997b90cd 100644 --- a/submodules/SettingsUI/Sources/SettingsController.swift +++ b/submodules/SettingsUI/Sources/SettingsController.swift @@ -1474,7 +1474,7 @@ public func settingsController(context: AccountContext, accountManager: AccountM if let primary = primary { let size = CGSize(width: 31.0, height: 31.0) let inset: CGFloat = 3.0 - if let signal = peerAvatarImage(account: primary.0, peer: primary.1, authorOfMessage: nil, representation: primary.1.profileImageRepresentations.first, displayDimensions: size, inset: 3.0, emptyColor: nil, synchronousLoad: false) { + if let signal = peerAvatarImage(account: primary.0, peerReference: PeerReference(primary.1), authorOfMessage: nil, representation: primary.1.profileImageRepresentations.first, displayDimensions: size, inset: 3.0, emptyColor: nil, synchronousLoad: false) { return signal |> map { image -> (UIImage, UIImage)? in if let image = image, let selectedImage = generateImage(size, rotatedContext: { size, context in @@ -1497,13 +1497,13 @@ public func settingsController(context: AccountContext, accountManager: AccountM let image = generateImage(size, rotatedContext: { size, context in context.clear(CGRect(origin: CGPoint(), size: size)) context.translateBy(x: inset, y: inset) - drawPeerAvatarLetters(context: context, size: CGSize(width: size.width - inset * 2.0, height: size.height - inset * 2.0), font: avatarFont, letters: primary.1.displayLetters, accountPeerId: primary.1.id, peerId: primary.1.id) + drawPeerAvatarLetters(context: context, size: CGSize(width: size.width - inset * 2.0, height: size.height - inset * 2.0), font: avatarFont, letters: primary.1.displayLetters, peerId: primary.1.id) })?.withRenderingMode(.alwaysOriginal) let selectedImage = generateImage(size, rotatedContext: { size, context in context.clear(CGRect(origin: CGPoint(), size: size)) context.translateBy(x: inset, y: inset) - drawPeerAvatarLetters(context: context, size: CGSize(width: size.width - inset * 2.0, height: size.height - inset * 2.0), font: avatarFont, letters: primary.1.displayLetters, accountPeerId: primary.1.id, peerId: primary.1.id) + drawPeerAvatarLetters(context: context, size: CGSize(width: size.width - inset * 2.0, height: size.height - inset * 2.0), font: avatarFont, letters: primary.1.displayLetters, peerId: primary.1.id) context.translateBy(x: -inset, y: -inset) context.setLineWidth(1.0) context.setStrokeColor(primary.2.rootController.tabBar.selectedIconColor.cgColor) diff --git a/submodules/SyncCore/Sources/TelegramMediaPoll.swift b/submodules/SyncCore/Sources/TelegramMediaPoll.swift index 91bcc68457..2e6398ac75 100644 --- a/submodules/SyncCore/Sources/TelegramMediaPoll.swift +++ b/submodules/SyncCore/Sources/TelegramMediaPoll.swift @@ -24,38 +24,45 @@ public struct TelegramMediaPollOptionVoters: Equatable, PostboxCoding { public let selected: Bool public let opaqueIdentifier: Data public let count: Int32 + public let isCorrect: Bool - public init(selected: Bool, opaqueIdentifier: Data, count: Int32) { + public init(selected: Bool, opaqueIdentifier: Data, count: Int32, isCorrect: Bool) { self.selected = selected self.opaqueIdentifier = opaqueIdentifier self.count = count + self.isCorrect = isCorrect } public init(decoder: PostboxDecoder) { self.selected = decoder.decodeInt32ForKey("s", orElse: 0) != 0 self.opaqueIdentifier = decoder.decodeDataForKey("i") ?? Data() self.count = decoder.decodeInt32ForKey("c", orElse: 0) + self.isCorrect = decoder.decodeInt32ForKey("cr", orElse: 0) != 0 } public func encode(_ encoder: PostboxEncoder) { encoder.encodeInt32(self.selected ? 1 : 0, forKey: "s") encoder.encodeData(self.opaqueIdentifier, forKey: "i") encoder.encodeInt32(self.count, forKey: "c") + encoder.encodeInt32(self.isCorrect ? 1 : 0, forKey: "cr") } } public struct TelegramMediaPollResults: Equatable, PostboxCoding { public let voters: [TelegramMediaPollOptionVoters]? public let totalVoters: Int32? + public let recentVoters: [PeerId] - public init(voters: [TelegramMediaPollOptionVoters]?, totalVoters: Int32?) { + public init(voters: [TelegramMediaPollOptionVoters]?, totalVoters: Int32?, recentVoters: [PeerId]) { self.voters = voters self.totalVoters = totalVoters + self.recentVoters = recentVoters } public init(decoder: PostboxDecoder) { self.voters = decoder.decodeOptionalObjectArrayWithDecoderForKey("v") self.totalVoters = decoder.decodeOptionalInt32ForKey("t") + self.recentVoters = decoder.decodeInt64ArrayForKey("rv").map(PeerId.init) } public func encode(_ encoder: PostboxEncoder) { @@ -69,6 +76,39 @@ public struct TelegramMediaPollResults: Equatable, PostboxCoding { } else { encoder.encodeNil(forKey: "t") } + encoder.encodeInt64Array(self.recentVoters.map { $0.toInt64() }, forKey: "rv") + } +} + +public enum TelegramMediaPollPublicity: Int32 { + case anonymous + case `public` +} + +public enum TelegramMediaPollKind: Equatable, PostboxCoding { + case poll(multipleAnswers: Bool) + case quiz + + public init(decoder: PostboxDecoder) { + switch decoder.decodeInt32ForKey("_v", orElse: 0) { + case 0: + self = .poll(multipleAnswers: decoder.decodeInt32ForKey("m", orElse: 0) != 0) + case 1: + self = .quiz + default: + assertionFailure() + self = .poll(multipleAnswers: false) + } + } + + public func encode(_ encoder: PostboxEncoder) { + switch self { + case let .poll(multipleAnswers): + encoder.encodeInt32(0, forKey: "_v") + encoder.encodeInt32(multipleAnswers ? 1 : 0, forKey: "m") + case .quiz: + encoder.encodeInt32(1, forKey: "_v") + } } } @@ -77,17 +117,26 @@ public final class TelegramMediaPoll: Media, Equatable { return self.pollId } public let pollId: MediaId - public let peerIds: [PeerId] = [] + public var peerIds: [PeerId] { + return results.recentVoters + } + + public let publicity: TelegramMediaPollPublicity + public let kind: TelegramMediaPollKind public let text: String public let options: [TelegramMediaPollOption] + public let correctAnswers: [Data]? public let results: TelegramMediaPollResults public let isClosed: Bool - public init(pollId: MediaId, text: String, options: [TelegramMediaPollOption], results: TelegramMediaPollResults, isClosed: Bool) { + public init(pollId: MediaId, publicity: TelegramMediaPollPublicity, kind: TelegramMediaPollKind, text: String, options: [TelegramMediaPollOption], correctAnswers: [Data]?, results: TelegramMediaPollResults, isClosed: Bool) { self.pollId = pollId + self.publicity = publicity + self.kind = kind self.text = text self.options = options + self.correctAnswers = correctAnswers self.results = results self.isClosed = isClosed } @@ -98,18 +147,28 @@ public final class TelegramMediaPoll: Media, Equatable { } else { self.pollId = MediaId(namespace: Namespaces.Media.LocalPoll, id: 0) } + self.publicity = TelegramMediaPollPublicity(rawValue: decoder.decodeInt32ForKey("pb", orElse: 0)) ?? TelegramMediaPollPublicity.anonymous + self.kind = decoder.decodeObjectForKey("kn", decoder: { TelegramMediaPollKind(decoder: $0) }) as? TelegramMediaPollKind ?? TelegramMediaPollKind.poll(multipleAnswers: false) self.text = decoder.decodeStringForKey("t", orElse: "") self.options = decoder.decodeObjectArrayWithDecoderForKey("os") - self.results = decoder.decodeObjectForKey("rs", decoder: { TelegramMediaPollResults(decoder: $0) }) as? TelegramMediaPollResults ?? TelegramMediaPollResults(voters: nil, totalVoters: nil) + self.correctAnswers = decoder.decodeOptionalDataArrayForKey("ca") + self.results = decoder.decodeObjectForKey("rs", decoder: { TelegramMediaPollResults(decoder: $0) }) as? TelegramMediaPollResults ?? TelegramMediaPollResults(voters: nil, totalVoters: nil, recentVoters: []) self.isClosed = decoder.decodeInt32ForKey("ic", orElse: 0) != 0 } public func encode(_ encoder: PostboxEncoder) { let buffer = WriteBuffer() self.pollId.encodeToBuffer(buffer) + encoder.encodeInt32(self.publicity.rawValue, forKey: "pb") + encoder.encodeObject(self.kind, forKey: "kn") encoder.encodeBytes(buffer, forKey: "i") encoder.encodeString(self.text, forKey: "t") encoder.encodeObjectArray(self.options, forKey: "os") + if let correctAnswers = self.correctAnswers { + encoder.encodeDataArray(correctAnswers, forKey: "ca") + } else { + encoder.encodeNil(forKey: "ca") + } encoder.encodeObject(results, forKey: "rs") encoder.encodeInt32(self.isClosed ? 1 : 0, forKey: "ic") } @@ -129,12 +188,21 @@ public final class TelegramMediaPoll: Media, Equatable { if lhs.pollId != rhs.pollId { return false } + if lhs.publicity != rhs.publicity { + return false + } + if lhs.kind != rhs.kind { + return false + } if lhs.text != rhs.text { return false } if lhs.options != rhs.options { return false } + if lhs.correctAnswers != rhs.correctAnswers { + return false + } if lhs.results != rhs.results { return false } @@ -155,14 +223,14 @@ public final class TelegramMediaPoll: Media, Equatable { } } updatedResults = TelegramMediaPollResults(voters: updatedVoters.map({ voters in - return TelegramMediaPollOptionVoters(selected: selectedOpaqueIdentifiers.contains(voters.opaqueIdentifier), opaqueIdentifier: voters.opaqueIdentifier, count: voters.count) - }), totalVoters: results.totalVoters) + return TelegramMediaPollOptionVoters(selected: selectedOpaqueIdentifiers.contains(voters.opaqueIdentifier), opaqueIdentifier: voters.opaqueIdentifier, count: voters.count, isCorrect: voters.isCorrect) + }), totalVoters: results.totalVoters, recentVoters: results.recentVoters) } else { - updatedResults = TelegramMediaPollResults(voters: self.results.voters, totalVoters: results.totalVoters) + updatedResults = TelegramMediaPollResults(voters: self.results.voters, totalVoters: results.totalVoters, recentVoters: results.recentVoters) } } else { updatedResults = results } - return TelegramMediaPoll(pollId: self.pollId, text: self.text, options: self.options, results: updatedResults, isClosed: self.isClosed) + return TelegramMediaPoll(pollId: self.pollId, publicity: self.publicity, kind: self.kind, text: self.text, options: self.options, correctAnswers: self.correctAnswers, results: updatedResults, isClosed: self.isClosed) } } diff --git a/submodules/TelegramApi/Sources/Api0.swift b/submodules/TelegramApi/Sources/Api0.swift index ba15174d5d..30c4e3b39c 100644 --- a/submodules/TelegramApi/Sources/Api0.swift +++ b/submodules/TelegramApi/Sources/Api0.swift @@ -11,7 +11,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-784000893] = { return Api.payments.ValidatedRequestedInfo.parse_validatedRequestedInfo($0) } dict[461151667] = { return Api.ChatFull.parse_chatFull($0) } dict[763976820] = { return Api.ChatFull.parse_channelFull($0) } - dict[1465219162] = { return Api.PollResults.parse_pollResults($0) } + dict[-932174686] = { return Api.PollResults.parse_pollResults($0) } dict[-925415106] = { return Api.ChatParticipant.parse_chatParticipant($0) } dict[-636267638] = { return Api.ChatParticipant.parse_chatParticipantCreator($0) } dict[-489233354] = { return Api.ChatParticipant.parse_chatParticipantAdmin($0) } @@ -72,7 +72,6 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[1516793212] = { return Api.ChatInvite.parse_chatInviteAlready($0) } dict[-540871282] = { return Api.ChatInvite.parse_chatInvite($0) } dict[-532532493] = { return Api.AutoDownloadSettings.parse_autoDownloadSettings($0) } - dict[-767099577] = { return Api.AutoDownloadSettings.parse_autoDownloadSettingsLegacy($0) } dict[1678812626] = { return Api.StickerSetCovered.parse_stickerSetCovered($0) } dict[872932635] = { return Api.StickerSetCovered.parse_stickerSetMultiCovered($0) } dict[1189204285] = { return Api.RecentMeUrl.parse_recentMeUrlUnknown($0) } @@ -247,6 +246,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-2112423005] = { return Api.Update.parse_updateTheme($0) } dict[-2027964103] = { return Api.Update.parse_updateGeoLiveViewed($0) } dict[1448076945] = { return Api.Update.parse_updateLoginToken($0) } + dict[136574537] = { return Api.messages.VotesList.parse_votesList($0) } dict[1558266229] = { return Api.PopularContact.parse_popularContact($0) } dict[-373643672] = { return Api.FolderPeer.parse_folderPeer($0) } dict[367766557] = { return Api.ChannelParticipant.parse_channelParticipant($0) } @@ -254,6 +254,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[470789295] = { return Api.ChannelParticipant.parse_channelParticipantBanned($0) } dict[-859915345] = { return Api.ChannelParticipant.parse_channelParticipantAdmin($0) } dict[-2138237532] = { return Api.ChannelParticipant.parse_channelParticipantCreator($0) } + dict[-233638547] = { return Api.MessageUserVote.parse_messageUserVote($0) } dict[471043349] = { return Api.contacts.Blocked.parse_blocked($0) } dict[-1878523231] = { return Api.contacts.Blocked.parse_blockedSlice($0) } dict[-55902537] = { return Api.InputDialogPeer.parse_inputDialogPeer($0) } @@ -350,8 +351,8 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-440664550] = { return Api.InputMedia.parse_inputMediaPhotoExternal($0) } dict[-78455655] = { return Api.InputMedia.parse_inputMediaDocumentExternal($0) } dict[-122978821] = { return Api.InputMedia.parse_inputMediaContact($0) } - dict[112424539] = { return Api.InputMedia.parse_inputMediaPoll($0) } dict[-833715459] = { return Api.InputMedia.parse_inputMediaGeoLive($0) } + dict[-1410741723] = { return Api.InputMedia.parse_inputMediaPoll($0) } dict[2134579434] = { return Api.InputPeer.parse_inputPeerEmpty($0) } dict[2107670217] = { return Api.InputPeer.parse_inputPeerSelf($0) } dict[396093539] = { return Api.InputPeer.parse_inputPeerChat($0) } @@ -603,7 +604,6 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[1421174295] = { return Api.WebPageAttribute.parse_webPageAttributeTheme($0) } dict[82699215] = { return Api.messages.FeaturedStickers.parse_featuredStickersNotModified($0) } dict[-123893531] = { return Api.messages.FeaturedStickers.parse_featuredStickers($0) } - dict[1375940666] = { return Api.auth.LoginTokenInfo.parse_loginTokenInfo($0) } dict[-2048646399] = { return Api.PhoneCallDiscardReason.parse_phoneCallDiscardReasonMissed($0) } dict[-527056480] = { return Api.PhoneCallDiscardReason.parse_phoneCallDiscardReasonDisconnect($0) } dict[1471006352] = { return Api.PhoneCallDiscardReason.parse_phoneCallDiscardReasonHangup($0) } @@ -674,6 +674,8 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-395967805] = { return Api.messages.AllStickers.parse_allStickersNotModified($0) } dict[-302170017] = { return Api.messages.AllStickers.parse_allStickers($0) } dict[-1655957568] = { return Api.PhoneConnection.parse_phoneConnection($0) } + dict[-206688531] = { return Api.help.UserInfo.parse_userInfoEmpty($0) } + dict[32192344] = { return Api.help.UserInfo.parse_userInfo($0) } dict[-1194283041] = { return Api.AccountDaysTTL.parse_accountDaysTTL($0) } dict[-1658158621] = { return Api.SecureValueType.parse_secureValueTypePersonalDetails($0) } dict[1034709504] = { return Api.SecureValueType.parse_secureValueTypePassport($0) } @@ -740,7 +742,6 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[1363483106] = { return Api.DialogPeer.parse_dialogPeerFolder($0) } dict[-104284986] = { return Api.WebDocument.parse_webDocumentNoProxy($0) } dict[475467473] = { return Api.WebDocument.parse_webDocument($0) } - dict[1211967244] = { return Api.Theme.parse_themeDocumentNotModified($0) } dict[42930452] = { return Api.Theme.parse_theme($0) } dict[-1290580579] = { return Api.contacts.Found.parse_found($0) } dict[-368018716] = { return Api.ChannelAdminLogEventsFilter.parse_channelAdminLogEventsFilter($0) } @@ -960,12 +961,16 @@ public struct Api { _1.serialize(buffer, boxed) case let _1 as Api.Update: _1.serialize(buffer, boxed) + case let _1 as Api.messages.VotesList: + _1.serialize(buffer, boxed) case let _1 as Api.PopularContact: _1.serialize(buffer, boxed) case let _1 as Api.FolderPeer: _1.serialize(buffer, boxed) case let _1 as Api.ChannelParticipant: _1.serialize(buffer, boxed) + case let _1 as Api.MessageUserVote: + _1.serialize(buffer, boxed) case let _1 as Api.contacts.Blocked: _1.serialize(buffer, boxed) case let _1 as Api.InputDialogPeer: @@ -1264,8 +1269,6 @@ public struct Api { _1.serialize(buffer, boxed) case let _1 as Api.messages.FeaturedStickers: _1.serialize(buffer, boxed) - case let _1 as Api.auth.LoginTokenInfo: - _1.serialize(buffer, boxed) case let _1 as Api.PhoneCallDiscardReason: _1.serialize(buffer, boxed) case let _1 as Api.NearestDc: @@ -1324,6 +1327,8 @@ public struct Api { _1.serialize(buffer, boxed) case let _1 as Api.PhoneConnection: _1.serialize(buffer, boxed) + case let _1 as Api.help.UserInfo: + _1.serialize(buffer, boxed) case let _1 as Api.AccountDaysTTL: _1.serialize(buffer, boxed) case let _1 as Api.SecureValueType: diff --git a/submodules/TelegramApi/Sources/Api1.swift b/submodules/TelegramApi/Sources/Api1.swift index dfdba7d654..dbf3f8df84 100644 --- a/submodules/TelegramApi/Sources/Api1.swift +++ b/submodules/TelegramApi/Sources/Api1.swift @@ -219,6 +219,68 @@ public struct messages { } } + } + public enum VotesList: TypeConstructorDescription { + case votesList(flags: Int32, count: Int32, votes: [Api.MessageUserVote], users: [Api.User], nextOffset: String?) + + public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { + switch self { + case .votesList(let flags, let count, let votes, let users, let nextOffset): + if boxed { + buffer.appendInt32(136574537) + } + serializeInt32(flags, buffer: buffer, boxed: false) + serializeInt32(count, buffer: buffer, boxed: false) + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(votes.count)) + for item in votes { + item.serialize(buffer, true) + } + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(users.count)) + for item in users { + item.serialize(buffer, true) + } + if Int(flags) & Int(1 << 0) != 0 {serializeString(nextOffset!, buffer: buffer, boxed: false)} + break + } + } + + public func descriptionFields() -> (String, [(String, Any)]) { + switch self { + case .votesList(let flags, let count, let votes, let users, let nextOffset): + return ("votesList", [("flags", flags), ("count", count), ("votes", votes), ("users", users), ("nextOffset", nextOffset)]) + } + } + + public static func parse_votesList(_ reader: BufferReader) -> VotesList? { + var _1: Int32? + _1 = reader.readInt32() + var _2: Int32? + _2 = reader.readInt32() + var _3: [Api.MessageUserVote]? + if let _ = reader.readInt32() { + _3 = Api.parseVector(reader, elementSignature: 0, elementType: Api.MessageUserVote.self) + } + var _4: [Api.User]? + if let _ = reader.readInt32() { + _4 = Api.parseVector(reader, elementSignature: 0, elementType: Api.User.self) + } + var _5: String? + if Int(_1!) & Int(1 << 0) != 0 {_5 = parseString(reader) } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + let _c4 = _4 != nil + let _c5 = (Int(_1!) & Int(1 << 0) == 0) || _5 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 { + return Api.messages.VotesList.votesList(flags: _1!, count: _2!, votes: _3!, users: _4!, nextOffset: _5) + } + else { + return nil + } + } + } public enum Stickers: TypeConstructorDescription { case stickersNotModified @@ -1962,13 +2024,13 @@ public extension Api { } public enum PollResults: TypeConstructorDescription { - case pollResults(flags: Int32, results: [Api.PollAnswerVoters]?, totalVoters: Int32?) + case pollResults(flags: Int32, results: [Api.PollAnswerVoters]?, totalVoters: Int32?, recentVoters: [Int32]?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { - case .pollResults(let flags, let results, let totalVoters): + case .pollResults(let flags, let results, let totalVoters, let recentVoters): if boxed { - buffer.appendInt32(1465219162) + buffer.appendInt32(-932174686) } serializeInt32(flags, buffer: buffer, boxed: false) if Int(flags) & Int(1 << 1) != 0 {buffer.appendInt32(481674261) @@ -1977,14 +2039,19 @@ public extension Api { item.serialize(buffer, true) }} if Int(flags) & Int(1 << 2) != 0 {serializeInt32(totalVoters!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 3) != 0 {buffer.appendInt32(481674261) + buffer.appendInt32(Int32(recentVoters!.count)) + for item in recentVoters! { + serializeInt32(item, buffer: buffer, boxed: false) + }} break } } public func descriptionFields() -> (String, [(String, Any)]) { switch self { - case .pollResults(let flags, let results, let totalVoters): - return ("pollResults", [("flags", flags), ("results", results), ("totalVoters", totalVoters)]) + case .pollResults(let flags, let results, let totalVoters, let recentVoters): + return ("pollResults", [("flags", flags), ("results", results), ("totalVoters", totalVoters), ("recentVoters", recentVoters)]) } } @@ -1997,11 +2064,16 @@ public extension Api { } } var _3: Int32? if Int(_1!) & Int(1 << 2) != 0 {_3 = reader.readInt32() } + var _4: [Int32]? + if Int(_1!) & Int(1 << 3) != 0 {if let _ = reader.readInt32() { + _4 = Api.parseVector(reader, elementSignature: -1471112230, elementType: Int32.self) + } } let _c1 = _1 != nil let _c2 = (Int(_1!) & Int(1 << 1) == 0) || _2 != nil let _c3 = (Int(_1!) & Int(1 << 2) == 0) || _3 != nil - if _c1 && _c2 && _c3 { - return Api.PollResults.pollResults(flags: _1!, results: _2, totalVoters: _3) + let _c4 = (Int(_1!) & Int(1 << 3) == 0) || _4 != nil + if _c1 && _c2 && _c3 && _c4 { + return Api.PollResults.pollResults(flags: _1!, results: _2, totalVoters: _3, recentVoters: _4) } else { return nil @@ -3601,7 +3673,6 @@ public extension Api { } public enum AutoDownloadSettings: TypeConstructorDescription { case autoDownloadSettings(flags: Int32, photoSizeMax: Int32, videoSizeMax: Int32, fileSizeMax: Int32, videoUploadMaxbitrate: Int32) - case autoDownloadSettingsLegacy(flags: Int32, photoSizeMax: Int32, videoSizeMax: Int32, fileSizeMax: Int32) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -3615,15 +3686,6 @@ public extension Api { serializeInt32(fileSizeMax, buffer: buffer, boxed: false) serializeInt32(videoUploadMaxbitrate, buffer: buffer, boxed: false) break - case .autoDownloadSettingsLegacy(let flags, let photoSizeMax, let videoSizeMax, let fileSizeMax): - if boxed { - buffer.appendInt32(-767099577) - } - serializeInt32(flags, buffer: buffer, boxed: false) - serializeInt32(photoSizeMax, buffer: buffer, boxed: false) - serializeInt32(videoSizeMax, buffer: buffer, boxed: false) - serializeInt32(fileSizeMax, buffer: buffer, boxed: false) - break } } @@ -3631,8 +3693,6 @@ public extension Api { switch self { case .autoDownloadSettings(let flags, let photoSizeMax, let videoSizeMax, let fileSizeMax, let videoUploadMaxbitrate): return ("autoDownloadSettings", [("flags", flags), ("photoSizeMax", photoSizeMax), ("videoSizeMax", videoSizeMax), ("fileSizeMax", fileSizeMax), ("videoUploadMaxbitrate", videoUploadMaxbitrate)]) - case .autoDownloadSettingsLegacy(let flags, let photoSizeMax, let videoSizeMax, let fileSizeMax): - return ("autoDownloadSettingsLegacy", [("flags", flags), ("photoSizeMax", photoSizeMax), ("videoSizeMax", videoSizeMax), ("fileSizeMax", fileSizeMax)]) } } @@ -3659,26 +3719,6 @@ public extension Api { return nil } } - public static func parse_autoDownloadSettingsLegacy(_ reader: BufferReader) -> AutoDownloadSettings? { - var _1: Int32? - _1 = reader.readInt32() - var _2: Int32? - _2 = reader.readInt32() - var _3: Int32? - _3 = reader.readInt32() - var _4: Int32? - _4 = reader.readInt32() - let _c1 = _1 != nil - let _c2 = _2 != nil - let _c3 = _3 != nil - let _c4 = _4 != nil - if _c1 && _c2 && _c3 && _c4 { - return Api.AutoDownloadSettings.autoDownloadSettingsLegacy(flags: _1!, photoSizeMax: _2!, videoSizeMax: _3!, fileSizeMax: _4!) - } - else { - return nil - } - } } public enum StickerSetCovered: TypeConstructorDescription { @@ -8148,6 +8188,44 @@ public extension Api { } } + } + public enum MessageUserVote: TypeConstructorDescription { + case messageUserVote(userId: Int32, option: Buffer) + + public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { + switch self { + case .messageUserVote(let userId, let option): + if boxed { + buffer.appendInt32(-233638547) + } + serializeInt32(userId, buffer: buffer, boxed: false) + serializeBytes(option, buffer: buffer, boxed: false) + break + } + } + + public func descriptionFields() -> (String, [(String, Any)]) { + switch self { + case .messageUserVote(let userId, let option): + return ("messageUserVote", [("userId", userId), ("option", option)]) + } + } + + public static func parse_messageUserVote(_ reader: BufferReader) -> MessageUserVote? { + var _1: Int32? + _1 = reader.readInt32() + var _2: Buffer? + _2 = parseBytes(reader) + let _c1 = _1 != nil + let _c2 = _2 != nil + if _c1 && _c2 { + return Api.MessageUserVote.messageUserVote(userId: _1!, option: _2!) + } + else { + return nil + } + } + } public enum InputDialogPeer: TypeConstructorDescription { case inputDialogPeer(peer: Api.InputPeer) @@ -10159,8 +10237,8 @@ public extension Api { case inputMediaPhotoExternal(flags: Int32, url: String, ttlSeconds: Int32?) case inputMediaDocumentExternal(flags: Int32, url: String, ttlSeconds: Int32?) case inputMediaContact(phoneNumber: String, firstName: String, lastName: String, vcard: String) - case inputMediaPoll(poll: Api.Poll) case inputMediaGeoLive(flags: Int32, geoPoint: Api.InputGeoPoint, period: Int32?) + case inputMediaPoll(flags: Int32, poll: Api.Poll, correctAnswers: [Buffer]?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -10288,12 +10366,6 @@ public extension Api { serializeString(lastName, buffer: buffer, boxed: false) serializeString(vcard, buffer: buffer, boxed: false) break - case .inputMediaPoll(let poll): - if boxed { - buffer.appendInt32(112424539) - } - poll.serialize(buffer, true) - break case .inputMediaGeoLive(let flags, let geoPoint, let period): if boxed { buffer.appendInt32(-833715459) @@ -10302,6 +10374,18 @@ public extension Api { geoPoint.serialize(buffer, true) if Int(flags) & Int(1 << 1) != 0 {serializeInt32(period!, buffer: buffer, boxed: false)} break + case .inputMediaPoll(let flags, let poll, let correctAnswers): + if boxed { + buffer.appendInt32(-1410741723) + } + serializeInt32(flags, buffer: buffer, boxed: false) + poll.serialize(buffer, true) + if Int(flags) & Int(1 << 0) != 0 {buffer.appendInt32(481674261) + buffer.appendInt32(Int32(correctAnswers!.count)) + for item in correctAnswers! { + serializeBytes(item, buffer: buffer, boxed: false) + }} + break } } @@ -10333,10 +10417,10 @@ public extension Api { return ("inputMediaDocumentExternal", [("flags", flags), ("url", url), ("ttlSeconds", ttlSeconds)]) case .inputMediaContact(let phoneNumber, let firstName, let lastName, let vcard): return ("inputMediaContact", [("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName), ("vcard", vcard)]) - case .inputMediaPoll(let poll): - return ("inputMediaPoll", [("poll", poll)]) case .inputMediaGeoLive(let flags, let geoPoint, let period): return ("inputMediaGeoLive", [("flags", flags), ("geoPoint", geoPoint), ("period", period)]) + case .inputMediaPoll(let flags, let poll, let correctAnswers): + return ("inputMediaPoll", [("flags", flags), ("poll", poll), ("correctAnswers", correctAnswers)]) } } @@ -10605,19 +10689,6 @@ public extension Api { return nil } } - public static func parse_inputMediaPoll(_ reader: BufferReader) -> InputMedia? { - var _1: Api.Poll? - if let signature = reader.readInt32() { - _1 = Api.parse(reader, signature: signature) as? Api.Poll - } - let _c1 = _1 != nil - if _c1 { - return Api.InputMedia.inputMediaPoll(poll: _1!) - } - else { - return nil - } - } public static func parse_inputMediaGeoLive(_ reader: BufferReader) -> InputMedia? { var _1: Int32? _1 = reader.readInt32() @@ -10637,6 +10708,27 @@ public extension Api { return nil } } + public static func parse_inputMediaPoll(_ reader: BufferReader) -> InputMedia? { + var _1: Int32? + _1 = reader.readInt32() + var _2: Api.Poll? + if let signature = reader.readInt32() { + _2 = Api.parse(reader, signature: signature) as? Api.Poll + } + var _3: [Buffer]? + if Int(_1!) & Int(1 << 0) != 0 {if let _ = reader.readInt32() { + _3 = Api.parseVector(reader, elementSignature: -1255641564, elementType: Buffer.self) + } } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = (Int(_1!) & Int(1 << 0) == 0) || _3 != nil + if _c1 && _c2 && _c3 { + return Api.InputMedia.inputMediaPoll(flags: _1!, poll: _2!, correctAnswers: _3) + } + else { + return nil + } + } } public enum InputPeer: TypeConstructorDescription { @@ -20230,17 +20322,10 @@ public extension Api { } public enum Theme: TypeConstructorDescription { - case themeDocumentNotModified case theme(flags: Int32, id: Int64, accessHash: Int64, slug: String, title: String, document: Api.Document?, settings: Api.ThemeSettings?, installsCount: Int32) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { - case .themeDocumentNotModified: - if boxed { - buffer.appendInt32(1211967244) - } - - break case .theme(let flags, let id, let accessHash, let slug, let title, let document, let settings, let installsCount): if boxed { buffer.appendInt32(42930452) @@ -20259,16 +20344,11 @@ public extension Api { public func descriptionFields() -> (String, [(String, Any)]) { switch self { - case .themeDocumentNotModified: - return ("themeDocumentNotModified", []) case .theme(let flags, let id, let accessHash, let slug, let title, let document, let settings, let installsCount): return ("theme", [("flags", flags), ("id", id), ("accessHash", accessHash), ("slug", slug), ("title", title), ("document", document), ("settings", settings), ("installsCount", installsCount)]) } } - public static func parse_themeDocumentNotModified(_ reader: BufferReader) -> Theme? { - return Api.Theme.themeDocumentNotModified - } public static func parse_theme(_ reader: BufferReader) -> Theme? { var _1: Int32? _1 = reader.readInt32() diff --git a/submodules/TelegramApi/Sources/Api2.swift b/submodules/TelegramApi/Sources/Api2.swift index 0eacd270a2..f0cb6195e9 100644 --- a/submodules/TelegramApi/Sources/Api2.swift +++ b/submodules/TelegramApi/Sources/Api2.swift @@ -859,76 +859,6 @@ public struct auth { return Api.auth.CodeType.codeTypeFlashCall } - } - public enum LoginTokenInfo: TypeConstructorDescription { - case loginTokenInfo(dcId: Int32, authKeyId: Int64, deviceModel: String, platform: String, systemVersion: String, apiId: Int32, appName: String, appVersion: String, ip: String, region: String) - - public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { - switch self { - case .loginTokenInfo(let dcId, let authKeyId, let deviceModel, let platform, let systemVersion, let apiId, let appName, let appVersion, let ip, let region): - if boxed { - buffer.appendInt32(1375940666) - } - serializeInt32(dcId, buffer: buffer, boxed: false) - serializeInt64(authKeyId, buffer: buffer, boxed: false) - serializeString(deviceModel, buffer: buffer, boxed: false) - serializeString(platform, buffer: buffer, boxed: false) - serializeString(systemVersion, buffer: buffer, boxed: false) - serializeInt32(apiId, buffer: buffer, boxed: false) - serializeString(appName, buffer: buffer, boxed: false) - serializeString(appVersion, buffer: buffer, boxed: false) - serializeString(ip, buffer: buffer, boxed: false) - serializeString(region, buffer: buffer, boxed: false) - break - } - } - - public func descriptionFields() -> (String, [(String, Any)]) { - switch self { - case .loginTokenInfo(let dcId, let authKeyId, let deviceModel, let platform, let systemVersion, let apiId, let appName, let appVersion, let ip, let region): - return ("loginTokenInfo", [("dcId", dcId), ("authKeyId", authKeyId), ("deviceModel", deviceModel), ("platform", platform), ("systemVersion", systemVersion), ("apiId", apiId), ("appName", appName), ("appVersion", appVersion), ("ip", ip), ("region", region)]) - } - } - - public static func parse_loginTokenInfo(_ reader: BufferReader) -> LoginTokenInfo? { - var _1: Int32? - _1 = reader.readInt32() - var _2: Int64? - _2 = reader.readInt64() - var _3: String? - _3 = parseString(reader) - var _4: String? - _4 = parseString(reader) - var _5: String? - _5 = parseString(reader) - var _6: Int32? - _6 = reader.readInt32() - var _7: String? - _7 = parseString(reader) - var _8: String? - _8 = parseString(reader) - var _9: String? - _9 = parseString(reader) - var _10: String? - _10 = parseString(reader) - let _c1 = _1 != nil - let _c2 = _2 != nil - let _c3 = _3 != nil - let _c4 = _4 != nil - let _c5 = _5 != nil - let _c6 = _6 != nil - let _c7 = _7 != nil - let _c8 = _8 != nil - let _c9 = _9 != nil - let _c10 = _10 != nil - if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 && _c9 && _c10 { - return Api.auth.LoginTokenInfo.loginTokenInfo(dcId: _1!, authKeyId: _2!, deviceModel: _3!, platform: _4!, systemVersion: _5!, apiId: _6!, appName: _7!, appVersion: _8!, ip: _9!, region: _10!) - } - else { - return nil - } - } - } public enum SentCodeType: TypeConstructorDescription { case sentCodeTypeApp(length: Int32) @@ -1929,6 +1859,70 @@ public struct help { } } + } + public enum UserInfo: TypeConstructorDescription { + case userInfoEmpty + case userInfo(message: String, entities: [Api.MessageEntity], author: String, date: Int32) + + public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { + switch self { + case .userInfoEmpty: + if boxed { + buffer.appendInt32(-206688531) + } + + break + case .userInfo(let message, let entities, let author, let date): + if boxed { + buffer.appendInt32(32192344) + } + serializeString(message, buffer: buffer, boxed: false) + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(entities.count)) + for item in entities { + item.serialize(buffer, true) + } + serializeString(author, buffer: buffer, boxed: false) + serializeInt32(date, buffer: buffer, boxed: false) + break + } + } + + public func descriptionFields() -> (String, [(String, Any)]) { + switch self { + case .userInfoEmpty: + return ("userInfoEmpty", []) + case .userInfo(let message, let entities, let author, let date): + return ("userInfo", [("message", message), ("entities", entities), ("author", author), ("date", date)]) + } + } + + public static func parse_userInfoEmpty(_ reader: BufferReader) -> UserInfo? { + return Api.help.UserInfo.userInfoEmpty + } + public static func parse_userInfo(_ reader: BufferReader) -> UserInfo? { + var _1: String? + _1 = parseString(reader) + var _2: [Api.MessageEntity]? + if let _ = reader.readInt32() { + _2 = Api.parseVector(reader, elementSignature: 0, elementType: Api.MessageEntity.self) + } + var _3: String? + _3 = parseString(reader) + var _4: Int32? + _4 = reader.readInt32() + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + let _c4 = _4 != nil + if _c1 && _c2 && _c3 && _c4 { + return Api.help.UserInfo.userInfo(message: _1!, entities: _2!, author: _3!, date: _4!) + } + else { + return nil + } + } + } public enum TermsOfServiceUpdate: TypeConstructorDescription { case termsOfServiceUpdateEmpty(expires: Int32) diff --git a/submodules/TelegramApi/Sources/Api3.swift b/submodules/TelegramApi/Sources/Api3.swift index 4d4168b2e0..74e4884bf6 100644 --- a/submodules/TelegramApi/Sources/Api3.swift +++ b/submodules/TelegramApi/Sources/Api3.swift @@ -3195,6 +3195,25 @@ public extension Api { return result }) } + + public static func getPollVotes(flags: Int32, peer: Api.InputPeer, id: Int32, option: Buffer?, offset: String?, limit: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(-1200736242) + serializeInt32(flags, buffer: buffer, boxed: false) + peer.serialize(buffer, true) + serializeInt32(id, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 0) != 0 {serializeBytes(option!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 1) != 0 {serializeString(offset!, buffer: buffer, boxed: false)} + serializeInt32(limit, buffer: buffer, boxed: false) + return (FunctionDescription(name: "messages.getPollVotes", parameters: [("flags", flags), ("peer", peer), ("id", id), ("option", option), ("offset", offset), ("limit", limit)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.messages.VotesList? in + let reader = BufferReader(buffer) + var result: Api.messages.VotesList? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.messages.VotesList + } + return result + }) + } } public struct channels { public static func readHistory(channel: Api.InputChannel, maxId: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { @@ -4796,6 +4815,40 @@ public extension Api { return result }) } + + public static func editUserInfo(userId: Api.InputUser, message: String, entities: [Api.MessageEntity]) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(1723407216) + userId.serialize(buffer, true) + serializeString(message, buffer: buffer, boxed: false) + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(entities.count)) + for item in entities { + item.serialize(buffer, true) + } + return (FunctionDescription(name: "help.editUserInfo", parameters: [("userId", userId), ("message", message), ("entities", entities)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.help.UserInfo? in + let reader = BufferReader(buffer) + var result: Api.help.UserInfo? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.help.UserInfo + } + return result + }) + } + + public static func getUserInfo(userId: Api.InputUser) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(59377875) + userId.serialize(buffer, true) + return (FunctionDescription(name: "help.getUserInfo", parameters: [("userId", userId)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.help.UserInfo? in + let reader = BufferReader(buffer) + var result: Api.help.UserInfo? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.help.UserInfo + } + return result + }) + } } public struct updates { public static func getState() -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { diff --git a/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift b/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift index b627fdd6a8..ad168e7d01 100644 --- a/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift +++ b/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift @@ -2347,7 +2347,19 @@ func replayFinalState(accountManager: AccountManager, postbox: Postbox, accountP if let apiPoll = apiPoll { switch apiPoll { case let .poll(id, flags, question, answers): - updatedPoll = TelegramMediaPoll(pollId: MediaId(namespace: Namespaces.Media.CloudPoll, id: id), text: question, options: answers.map(TelegramMediaPollOption.init(apiOption:)), results: TelegramMediaPollResults(apiResults: results), isClosed: (flags & (1 << 0)) != 0) + let publicity: TelegramMediaPollPublicity + if (flags & (1 << 1)) != 0 { + publicity = .public + } else { + publicity = .anonymous + } + let kind: TelegramMediaPollKind + if (flags & (1 << 3)) != 0 { + kind = .quiz + } else { + kind = .poll(multipleAnswers: (flags & (1 << 2)) != 0) + } + updatedPoll = TelegramMediaPoll(pollId: MediaId(namespace: Namespaces.Media.CloudPoll, id: id), publicity: publicity, kind: kind, text: question, options: answers.map(TelegramMediaPollOption.init(apiOption:)), correctAnswers: nil, results: TelegramMediaPollResults(apiResults: results), isClosed: (flags & (1 << 0)) != 0) } } diff --git a/submodules/TelegramCore/Sources/ApiUtils.swift b/submodules/TelegramCore/Sources/ApiUtils.swift index 8b4b19cb23..f7beff73f4 100644 --- a/submodules/TelegramCore/Sources/ApiUtils.swift +++ b/submodules/TelegramCore/Sources/ApiUtils.swift @@ -4,7 +4,7 @@ import TelegramApi import SyncCore -extension PeerReference { +public extension PeerReference { var id: PeerId { switch self { case let .user(id, _): @@ -15,7 +15,9 @@ extension PeerReference { return PeerId(namespace: Namespaces.Peer.CloudChannel, id: id) } } - +} + +extension PeerReference { var inputPeer: Api.InputPeer { switch self { case let .user(id, accessHash): diff --git a/submodules/TelegramCore/Sources/AutodownloadSettings.swift b/submodules/TelegramCore/Sources/AutodownloadSettings.swift index b86130c742..ff23b1d15c 100644 --- a/submodules/TelegramCore/Sources/AutodownloadSettings.swift +++ b/submodules/TelegramCore/Sources/AutodownloadSettings.swift @@ -24,8 +24,6 @@ extension AutodownloadPresetSettings { switch apiAutodownloadSettings { case let .autoDownloadSettings(flags, photoSizeMax, videoSizeMax, fileSizeMax, videoUploadMaxbitrate): self.init(disabled: (flags & (1 << 0)) != 0, photoSizeMax: photoSizeMax, videoSizeMax: videoSizeMax, fileSizeMax: fileSizeMax, preloadLargeVideo: (flags & (1 << 1)) != 0, lessDataForPhoneCalls: (flags & (1 << 3)) != 0, videoUploadMaxbitrate: videoUploadMaxbitrate) - case let .autoDownloadSettingsLegacy(flags, photoSizeMax, videoSizeMax, fileSizeMax): - self.init(disabled: (flags & (1 << 0)) != 0, photoSizeMax: photoSizeMax, videoSizeMax: videoSizeMax, fileSizeMax: fileSizeMax, preloadLargeVideo: (flags & (1 << 1)) != 0, lessDataForPhoneCalls: (flags & (1 << 3)) != 0, videoUploadMaxbitrate: 0) } } } diff --git a/submodules/TelegramCore/Sources/PendingMessageUploadedContent.swift b/submodules/TelegramCore/Sources/PendingMessageUploadedContent.swift index 82550c9813..6715783a15 100644 --- a/submodules/TelegramCore/Sources/PendingMessageUploadedContent.swift +++ b/submodules/TelegramCore/Sources/PendingMessageUploadedContent.swift @@ -140,7 +140,28 @@ func mediaContentToUpload(network: Network, postbox: Postbox, auxiliaryMethods: if peerId.namespace == Namespaces.Peer.SecretChat { return .fail(.generic) } - let inputPoll = Api.InputMedia.inputMediaPoll(poll: Api.Poll.poll(id: 0, flags: 0, question: poll.text, answers: poll.options.map({ $0.apiOption }))) + var pollFlags: Int32 = 0 + switch poll.kind { + case let .poll(multipleAnswers): + if multipleAnswers { + pollFlags |= 1 << 2 + } + case .quiz: + pollFlags |= 1 << 3 + } + switch poll.publicity { + case .anonymous: + break + case .public: + pollFlags |= 1 << 1 + } + var pollMediaFlags: Int32 = 0 + var correctAnswers: [Buffer]? + if let correctAnswersValue = poll.correctAnswers { + pollMediaFlags |= 1 << 0 + correctAnswers = correctAnswersValue.map { Buffer(data: $0) } + } + let inputPoll = Api.InputMedia.inputMediaPoll(flags: pollMediaFlags, poll: Api.Poll.poll(id: 0, flags: pollFlags, question: poll.text, answers: poll.options.map({ $0.apiOption })), correctAnswers: correctAnswers) return .single(.content(PendingMessageUploadedContentAndReuploadInfo(content: .media(inputPoll, text), reuploadInfo: nil))) } else { return nil diff --git a/submodules/TelegramCore/Sources/Polls.swift b/submodules/TelegramCore/Sources/Polls.swift index 207cd11cfb..1e3b1ca56a 100644 --- a/submodules/TelegramCore/Sources/Polls.swift +++ b/submodules/TelegramCore/Sources/Polls.swift @@ -10,13 +10,13 @@ public enum RequestMessageSelectPollOptionError { case generic } -public func requestMessageSelectPollOption(account: Account, messageId: MessageId, opaqueIdentifier: Data?) -> Signal { +public func requestMessageSelectPollOption(account: Account, messageId: MessageId, opaqueIdentifiers: [Data]) -> Signal { return account.postbox.loadedPeerWithId(messageId.peerId) |> take(1) |> castError(RequestMessageSelectPollOptionError.self) |> mapToSignal { peer in if let inputPeer = apiInputPeer(peer) { - return account.network.request(Api.functions.messages.sendVote(peer: inputPeer, msgId: messageId.id, options: opaqueIdentifier.flatMap({ [Buffer(data: $0)] }) ?? [])) + return account.network.request(Api.functions.messages.sendVote(peer: inputPeer, msgId: messageId.id, options: opaqueIdentifiers.map { Buffer(data: $0) })) |> mapError { _ -> RequestMessageSelectPollOptionError in return .generic } @@ -51,7 +51,32 @@ public func requestClosePoll(postbox: Postbox, network: Network, stateManager: A } var flags: Int32 = 0 flags |= 1 << 14 - return network.request(Api.functions.messages.editMessage(flags: flags, peer: inputPeer, id: messageId.id, message: nil, media: .inputMediaPoll(poll: .poll(id: poll.pollId.id, flags: 1 << 0, question: poll.text, answers: poll.options.map({ $0.apiOption }))), replyMarkup: nil, entities: nil, scheduleDate: nil)) + + var pollFlags: Int32 = 0 + switch poll.kind { + case let .poll(multipleAnswers): + if multipleAnswers { + pollFlags |= 1 << 2 + } + case .quiz: + pollFlags |= 1 << 3 + } + switch poll.publicity { + case .anonymous: + break + case .public: + pollFlags |= 1 << 1 + } + var pollMediaFlags: Int32 = 0 + var correctAnswers: [Buffer]? + if let correctAnswersValue = poll.correctAnswers { + pollMediaFlags |= 1 << 0 + correctAnswers = correctAnswersValue.map { Buffer(data: $0) } + } + + pollFlags |= 1 << 0 + + return network.request(Api.functions.messages.editMessage(flags: flags, peer: inputPeer, id: messageId.id, message: nil, media: .inputMediaPoll(flags: pollMediaFlags, poll: .poll(id: poll.pollId.id, flags: pollFlags, question: poll.text, answers: poll.options.map({ $0.apiOption })), correctAnswers: correctAnswers), replyMarkup: nil, entities: nil, scheduleDate: nil)) |> map(Optional.init) |> `catch` { _ -> Signal in return .single(nil) @@ -64,3 +89,198 @@ public func requestClosePoll(postbox: Postbox, network: Network, stateManager: A } } } + +private final class PollResultsOptionContext { + private let queue: Queue + private let account: Account + private let messageId: MessageId + private let opaqueIdentifier: Data + private let disposable = MetaDisposable() + private var isLoadingMore: Bool = false + private var hasLoadedOnce: Bool = false + private var canLoadMore: Bool = true + private var nextOffset: String? + private var results: [RenderedPeer] = [] + private var count: Int + + let state = Promise() + + init(queue: Queue, account: Account, messageId: MessageId, opaqueIdentifier: Data, count: Int) { + self.queue = queue + self.account = account + self.messageId = messageId + self.opaqueIdentifier = opaqueIdentifier + self.count = count + } + + deinit { + self.disposable.dispose() + } + + func loadMore() { + if self.isLoadingMore { + return + } + self.isLoadingMore = true + let messageId = self.messageId + let opaqueIdentifier = self.opaqueIdentifier + let account = self.account + let nextOffset = self.nextOffset + self.disposable.set((self.account.postbox.transaction { transaction -> Api.InputPeer? in + return transaction.getPeer(messageId.peerId).flatMap(apiInputPeer) + } + |> mapToSignal { inputPeer -> Signal<([RenderedPeer], Int, String?), NoError> in + if let inputPeer = inputPeer { + return account.network.request(Api.functions.messages.getPollVotes(flags: 1 << 0, peer: inputPeer, id: messageId.id, option: Buffer(data: opaqueIdentifier), offset: nextOffset, limit: nextOffset == nil ? 15 : 50)) + |> map(Optional.init) + |> `catch` { _ -> Signal in + return .single(nil) + } + |> mapToSignal { result -> Signal<([RenderedPeer], Int, String?), NoError> in + return account.postbox.transaction { transaction -> ([RenderedPeer], Int, String?) in + guard let result = result else { + return ([], 0, nil) + } + switch result { + case let .votesList(_, count, votes, users, nextOffset): + var peers: [Peer] = [] + for apiUser in users { + peers.append(TelegramUser(user: apiUser)) + } + updatePeers(transaction: transaction, peers: peers, update: { _, updated in + return updated + }) + var resultPeers: [RenderedPeer] = [] + for vote in votes { + switch vote { + case let .messageUserVote(userId, _): + if let peer = transaction.getPeer(PeerId(namespace: Namespaces.Peer.CloudUser, id: userId)) { + resultPeers.append(RenderedPeer(peer: peer)) + } + } + } + return (resultPeers, Int(count), nextOffset) + } + } + } + } else { + return .single(([], 0, nil)) + } + } + |> deliverOn(self.queue)).start(next: { [weak self] peers, updatedCount, nextOffset in + guard let strongSelf = self else { + return + } + var existingIds = Set(strongSelf.results.map { $0.peerId }) + for peer in peers { + if !existingIds.contains(peer.peerId) { + strongSelf.results.append(peer) + existingIds.insert(peer.peerId) + } + } + strongSelf.isLoadingMore = false + strongSelf.hasLoadedOnce = true + strongSelf.canLoadMore = nextOffset != nil + strongSelf.nextOffset = nextOffset + if strongSelf.canLoadMore { + strongSelf.count = max(updatedCount, strongSelf.results.count) + } else { + strongSelf.count = strongSelf.results.count + } + strongSelf.updateState() + })) + self.updateState() + } + + func updateState() { + self.state.set(.single(PollResultsOptionState(peers: self.results, isLoadingMore: self.isLoadingMore, hasLoadedOnce: self.hasLoadedOnce, canLoadMore: self.canLoadMore, count: self.count))) + } +} + +public struct PollResultsOptionState: Equatable { + public var peers: [RenderedPeer] + public var isLoadingMore: Bool + public var hasLoadedOnce: Bool + public var canLoadMore: Bool + public var count: Int +} + +public struct PollResultsState: Equatable { + public var options: [Data: PollResultsOptionState] +} + +private final class PollResultsContextImpl { + private let queue: Queue + + private var optionContexts: [Data: PollResultsOptionContext] = [:] + + let state = Promise() + + init(queue: Queue, account: Account, messageId: MessageId, poll: TelegramMediaPoll) { + self.queue = queue + + for option in poll.options { + var count = 0 + if let voters = poll.results.voters { + for voter in voters { + if voter.opaqueIdentifier == option.opaqueIdentifier { + count = Int(voter.count) + } + } + } + self.optionContexts[option.opaqueIdentifier] = PollResultsOptionContext(queue: self.queue, account: account, messageId: messageId, opaqueIdentifier: option.opaqueIdentifier, count: count) + } + + self.state.set(combineLatest(queue: self.queue, self.optionContexts.map { (opaqueIdentifier, context) -> Signal<(Data, PollResultsOptionState), NoError> in + return context.state.get() + |> map { state -> (Data, PollResultsOptionState) in + return (opaqueIdentifier, state) + } + }) + |> map { states -> PollResultsState in + var options: [Data: PollResultsOptionState] = [:] + for (opaqueIdentifier, state) in states { + options[opaqueIdentifier] = state + } + return PollResultsState(options: options) + }) + + for (_, context) in self.optionContexts { + context.loadMore() + } + } + + func loadMore(optionOpaqueIdentifier: Data) { + self.optionContexts[optionOpaqueIdentifier]?.loadMore() + } +} + +public final class PollResultsContext { + private let queue: Queue = Queue() + private let impl: QueueLocalObject + + public var state: Signal { + return Signal { subscriber in + let disposable = MetaDisposable() + self.impl.with { impl in + disposable.set(impl.state.get().start(next: { value in + subscriber.putNext(value) + })) + } + return disposable + } + } + + public init(account: Account, messageId: MessageId, poll: TelegramMediaPoll) { + let queue = self.queue + self.impl = QueueLocalObject(queue: queue, generate: { + return PollResultsContextImpl(queue: queue, account: account, messageId: messageId, poll: poll) + }) + } + + public func loadMore(optionOpaqueIdentifier: Data) { + self.impl.with { impl in + impl.loadMore(optionOpaqueIdentifier: optionOpaqueIdentifier) + } + } +} diff --git a/submodules/TelegramCore/Sources/Serialization.swift b/submodules/TelegramCore/Sources/Serialization.swift index f0a22a6eb7..02470ccbac 100644 --- a/submodules/TelegramCore/Sources/Serialization.swift +++ b/submodules/TelegramCore/Sources/Serialization.swift @@ -210,7 +210,7 @@ public class BoxedMessage: NSObject { public class Serialization: NSObject, MTSerialization { public func currentLayer() -> UInt { - return 108 + return 109 } public func parseMessage(_ data: Data!) -> Any! { diff --git a/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift b/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift index c4f24f6dec..d5c0b31029 100644 --- a/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift +++ b/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift @@ -328,7 +328,19 @@ func textMediaAndExpirationTimerFromApiMedia(_ media: Api.MessageMedia?, _ peerI case let .messageMediaPoll(poll, results): switch poll { case let .poll(id, flags, question, answers): - return (TelegramMediaPoll(pollId: MediaId(namespace: Namespaces.Media.CloudPoll, id: id), text: question, options: answers.map(TelegramMediaPollOption.init(apiOption:)), results: TelegramMediaPollResults(apiResults: results), isClosed: (flags & (1 << 0)) != 0), nil) + let publicity: TelegramMediaPollPublicity + if (flags & (1 << 1)) != 0 { + publicity = .public + } else { + publicity = .anonymous + } + let kind: TelegramMediaPollKind + if (flags & (1 << 3)) != 0 { + kind = .quiz + } else { + kind = .poll(multipleAnswers: (flags & (1 << 2)) != 0) + } + return (TelegramMediaPoll(pollId: MediaId(namespace: Namespaces.Media.CloudPoll, id: id), publicity: publicity, kind: kind, text: question, options: answers.map(TelegramMediaPollOption.init(apiOption:)), correctAnswers: nil, results: TelegramMediaPollResults(apiResults: results), isClosed: (flags & (1 << 0)) != 0), nil) } } } diff --git a/submodules/TelegramCore/Sources/TelegramMediaPoll.swift b/submodules/TelegramCore/Sources/TelegramMediaPoll.swift index ab4e9fc689..0a80671435 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaPoll.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaPoll.swift @@ -21,7 +21,7 @@ extension TelegramMediaPollOptionVoters { init(apiVoters: Api.PollAnswerVoters) { switch apiVoters { case let .pollAnswerVoters(flags, option, voters): - self.init(selected: (flags & (1 << 0)) != 0, opaqueIdentifier: option.makeData(), count: voters) + self.init(selected: (flags & (1 << 0)) != 0, opaqueIdentifier: option.makeData(), count: voters, isCorrect: (flags & (1 << 1)) != 0) } } } @@ -29,8 +29,10 @@ extension TelegramMediaPollOptionVoters { extension TelegramMediaPollResults { init(apiResults: Api.PollResults) { switch apiResults { - case let .pollResults(_, results, totalVoters): - self.init(voters: results.flatMap({ $0.map(TelegramMediaPollOptionVoters.init(apiVoters:)) }), totalVoters: totalVoters) + case let .pollResults(_, results, totalVoters, recentVoters): + self.init(voters: results.flatMap({ $0.map(TelegramMediaPollOptionVoters.init(apiVoters:)) }), totalVoters: totalVoters, recentVoters: recentVoters.flatMap { recentVoters in + return recentVoters.map { PeerId(namespace: Namespaces.Peer.CloudUser, id: $0) } + } ?? []) } } } diff --git a/submodules/TelegramIntents/Sources/TelegramIntents.swift b/submodules/TelegramIntents/Sources/TelegramIntents.swift index 094e34a705..2215785209 100644 --- a/submodules/TelegramIntents/Sources/TelegramIntents.swift +++ b/submodules/TelegramIntents/Sources/TelegramIntents.swift @@ -134,7 +134,7 @@ public func donateSendMessageIntent(account: Account, sharedContext: SharedAccou if peer.id == account.peerId { signals.append(.single((peer, subject, savedMessagesAvatar))) } else { - let peerAndAvatar = (peerAvatarImage(account: account, peer: peer, authorOfMessage: nil, representation: peer.smallProfileImage, round: false) ?? .single(nil)) + let peerAndAvatar = (peerAvatarImage(account: account, peerReference: PeerReference(peer), authorOfMessage: nil, representation: peer.smallProfileImage, round: false) ?? .single(nil)) |> map { avatarImage in return (peer, subject, avatarImage) } diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift index d71494e8cd..ae70b59e7b 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift @@ -387,8 +387,8 @@ public func makeDefaultDarkPresentationTheme(extendingThemeReference: Presentati ) let message = PresentationThemeChatMessage( - incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628))), primaryTextColor: UIColor(rgb: 0xffffff), secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: UIColor(rgb: 0xffffff), linkHighlightColor: UIColor(rgb: 0xffffff, alpha: 0.5), scamColor: UIColor(rgb: 0xeb5545), textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: UIColor(rgb: 0xffffff), accentControlColor: UIColor(rgb: 0xffffff), mediaActiveControlColor: UIColor(rgb: 0xffffff), mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.4), mediaControlInnerBackgroundColor: UIColor(rgb: 0x262628), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: UIColor(rgb: 0xffffff), fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x1f1f1f).mixedWith(UIColor(rgb: 0xffffff), alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x737373), radioProgress: UIColor(rgb: 0xffffff), highlight: UIColor(rgb: 0xffffff, alpha: 0.12), separator: UIColor(rgb: 0x000000), bar: UIColor(rgb: 0xffffff)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor(rgb: 0xffffff, alpha: 0.2), textSelectionKnobColor: UIColor(rgb: 0xffffff)), - outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x313131), gradientFill: UIColor(rgb: 0x313131), highlightedFill: UIColor(rgb: 0x464646), stroke: UIColor(rgb: 0x313131)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x313131), gradientFill: UIColor(rgb: 0x313131), highlightedFill: UIColor(rgb: 0x464646), stroke: UIColor(rgb: 0x313131))), primaryTextColor: UIColor(rgb: 0xffffff), secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: UIColor(rgb: 0xffffff), linkHighlightColor: UIColor(rgb: 0xffffff, alpha: 0.5), scamColor: UIColor(rgb: 0xeb5545), textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: UIColor(rgb: 0xffffff), accentControlColor: UIColor(rgb: 0xffffff), mediaActiveControlColor: UIColor(rgb: 0xffffff), mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaControlInnerBackgroundColor: UIColor(rgb: 0x313131), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: UIColor(rgb: 0xffffff), fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x313131).mixedWith(UIColor(rgb: 0xffffff), alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xffffff), radioProgress: UIColor(rgb: 0xffffff), highlight: UIColor(rgb: 0xffffff).withAlphaComponent(0.12), separator: UIColor(rgb: 0xffffff, alpha: 0.5), bar: UIColor(rgb: 0xffffff)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor(rgb: 0xffffff, alpha: 0.2), textSelectionKnobColor: UIColor(rgb: 0xffffff)), + incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628))), primaryTextColor: UIColor(rgb: 0xffffff), secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: UIColor(rgb: 0xffffff), linkHighlightColor: UIColor(rgb: 0xffffff, alpha: 0.5), scamColor: UIColor(rgb: 0xeb5545), textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: UIColor(rgb: 0xffffff), accentControlColor: UIColor(rgb: 0xffffff), accentControlDisabledColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaActiveControlColor: UIColor(rgb: 0xffffff), mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.4), mediaControlInnerBackgroundColor: UIColor(rgb: 0x262628), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: UIColor(rgb: 0xffffff), fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x1f1f1f).mixedWith(UIColor(rgb: 0xffffff), alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x737373), radioProgress: UIColor(rgb: 0xffffff), highlight: UIColor(rgb: 0xffffff, alpha: 0.12), separator: UIColor(rgb: 0x000000), bar: UIColor(rgb: 0xffffff), barIconForeground: .white, barPositive: UIColor(rgb: 0x00A700), barNegative: UIColor(rgb: 0xFE3824)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor(rgb: 0xffffff, alpha: 0.2), textSelectionKnobColor: UIColor(rgb: 0xffffff)), + outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x313131), gradientFill: UIColor(rgb: 0x313131), highlightedFill: UIColor(rgb: 0x464646), stroke: UIColor(rgb: 0x313131)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x313131), gradientFill: UIColor(rgb: 0x313131), highlightedFill: UIColor(rgb: 0x464646), stroke: UIColor(rgb: 0x313131))), primaryTextColor: UIColor(rgb: 0xffffff), secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: UIColor(rgb: 0xffffff), linkHighlightColor: UIColor(rgb: 0xffffff, alpha: 0.5), scamColor: UIColor(rgb: 0xeb5545), textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: UIColor(rgb: 0xffffff), accentControlColor: UIColor(rgb: 0xffffff), accentControlDisabledColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaActiveControlColor: UIColor(rgb: 0xffffff), mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaControlInnerBackgroundColor: UIColor(rgb: 0x313131), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: UIColor(rgb: 0xffffff), fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x313131).mixedWith(UIColor(rgb: 0xffffff), alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xffffff), radioProgress: UIColor(rgb: 0xffffff), highlight: UIColor(rgb: 0xffffff).withAlphaComponent(0.12), separator: UIColor(rgb: 0xffffff, alpha: 0.5), bar: UIColor(rgb: 0xffffff), barIconForeground: .white, barPositive: UIColor(rgb: 0xffffff), barNegative: UIColor(rgb: 0xffffff)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor(rgb: 0xffffff, alpha: 0.2), textSelectionKnobColor: UIColor(rgb: 0xffffff)), freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x1f1f1f), highlightedFill: UIColor(rgb: 0x2a2a2a), stroke: UIColor(rgb: 0x1f1f1f)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x1f1f1f), highlightedFill: UIColor(rgb: 0x2a2a2a), stroke: UIColor(rgb: 0x1f1f1f))), infoPrimaryTextColor: UIColor(rgb: 0xffffff), infoLinkTextColor: UIColor(rgb: 0xffffff), diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift index 1261eb0bd6..a68b8d2109 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift @@ -643,8 +643,8 @@ public func makeDefaultDarkTintedPresentationTheme(extendingThemeReference: Pres let buttonStrokeColor = accentColor.withMultiplied(hue: 1.014, saturation: 0.56, brightness: 0.64).withAlphaComponent(0.15) let message = PresentationThemeChatMessage( - incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: UIColor(rgb: 0xff6767), textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.5), mediaControlInnerBackgroundColor: mainBackgroundColor, pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: accentColor, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.585, brightness: 0.23), polls: PresentationThemeChatBubblePolls(radioButton: accentColor.withMultiplied(hue: 0.995, saturation: 0.317, brightness: 0.51), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: mainSeparatorColor, bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor), - outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, gradientFill: outgoingBubbleFillGradientColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, gradientFill: outgoingBubbleFillGradientColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleFillColor)), primaryTextColor: outgoingPrimaryTextColor, secondaryTextColor: outgoingSecondaryTextColor, linkTextColor: outgoingLinkTextColor, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: outgoingScamColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: outgoingPrimaryTextColor, accentControlColor: outgoingPrimaryTextColor, mediaActiveControlColor: outgoingPrimaryTextColor, mediaInactiveControlColor: outgoingSecondaryTextColor, mediaControlInnerBackgroundColor: outgoingBubbleFillColor, pendingActivityColor: outgoingSecondaryTextColor, fileTitleColor: outgoingPrimaryTextColor, fileDescriptionColor: outgoingSecondaryTextColor, fileDurationColor: outgoingSecondaryTextColor, mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.804, brightness: 0.51), polls: PresentationThemeChatBubblePolls(radioButton: outgoingPrimaryTextColor, radioProgress: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0), highlight: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0).withAlphaComponent(0.12), separator: mainSeparatorColor, bar: outgoingPrimaryTextColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: UIColor.white.withAlphaComponent(0.2), textSelectionKnobColor: UIColor.white), + incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: UIColor(rgb: 0xff6767), textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: accentColor, accentControlColor: accentColor, accentControlDisabledColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.5), mediaControlInnerBackgroundColor: mainBackgroundColor, pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: accentColor, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.585, brightness: 0.23), polls: PresentationThemeChatBubblePolls(radioButton: accentColor.withMultiplied(hue: 0.995, saturation: 0.317, brightness: 0.51), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: mainSeparatorColor, bar: accentColor, barIconForeground: .white, barPositive: UIColor(rgb: 0x00A700), barNegative: UIColor(rgb: 0xFE3824)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor), + outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, gradientFill: outgoingBubbleFillGradientColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, gradientFill: outgoingBubbleFillGradientColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleFillColor)), primaryTextColor: outgoingPrimaryTextColor, secondaryTextColor: outgoingSecondaryTextColor, linkTextColor: outgoingLinkTextColor, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: outgoingScamColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: outgoingPrimaryTextColor, accentControlColor: outgoingPrimaryTextColor, accentControlDisabledColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaActiveControlColor: outgoingPrimaryTextColor, mediaInactiveControlColor: outgoingSecondaryTextColor, mediaControlInnerBackgroundColor: outgoingBubbleFillColor, pendingActivityColor: outgoingSecondaryTextColor, fileTitleColor: outgoingPrimaryTextColor, fileDescriptionColor: outgoingSecondaryTextColor, fileDurationColor: outgoingSecondaryTextColor, mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.804, brightness: 0.51), polls: PresentationThemeChatBubblePolls(radioButton: outgoingPrimaryTextColor, radioProgress: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0), highlight: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0).withAlphaComponent(0.12), separator: mainSeparatorColor, bar: outgoingPrimaryTextColor, barIconForeground: .white, barPositive: outgoingPrimaryTextColor, barNegative: outgoingPrimaryTextColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: UIColor.white.withAlphaComponent(0.2), textSelectionKnobColor: UIColor.white), freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)), infoPrimaryTextColor: UIColor(rgb: 0xffffff), infoLinkTextColor: accentColor, diff --git a/submodules/TelegramPresentationData/Sources/DefaultDayPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDayPresentationTheme.swift index f3dc735c7c..f3fd1ac110 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultDayPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultDayPresentationTheme.swift @@ -269,7 +269,7 @@ public func customizeDefaultDayTheme(theme: PresentationTheme, editing: Bool, ti fileDescriptionColor: outgoingFileDescriptionColor, fileDurationColor: outgoingFileDurationColor, mediaPlaceholderColor: day ? accentColor?.withMultipliedBrightnessBy(0.95) : outgoingMediaPlaceholderColor, - polls: chat.message.outgoing.polls.withUpdated(radioButton: outgoingPollsButtonColor, radioProgress: outgoingPollsProgressColor, highlight: outgoingPollsProgressColor?.withAlphaComponent(0.12), separator: outgoingPollsButtonColor, bar: outgoingPollsProgressColor), + polls: chat.message.outgoing.polls.withUpdated(radioButton: outgoingPollsButtonColor, radioProgress: outgoingPollsProgressColor, highlight: outgoingPollsProgressColor?.withAlphaComponent(0.12), separator: outgoingPollsButtonColor, bar: outgoingPollsProgressColor, barPositive: outgoingPollsProgressColor, barNegative: outgoingPollsProgressColor), actionButtonsFillColor: chat.message.outgoing.actionButtonsFillColor.withUpdated(withWallpaper: serviceBackgroundColor), actionButtonsStrokeColor: day ? chat.message.outgoing.actionButtonsStrokeColor.withUpdated(withoutWallpaper: accentColor) : nil, actionButtonsTextColor: day ? chat.message.outgoing.actionButtonsTextColor.withUpdated(withoutWallpaper: accentColor) : nil, @@ -494,6 +494,7 @@ public func makeDefaultDayPresentationTheme(extendingThemeReference: Presentatio textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: UIColor(rgb: 0x007ee5), accentControlColor: UIColor(rgb: 0x007ee5), + accentControlDisabledColor: UIColor(rgb: 0x525252, alpha: 0.6), mediaActiveControlColor: UIColor(rgb: 0x007ee5), mediaInactiveControlColor: UIColor(rgb: 0xcacaca), mediaControlInnerBackgroundColor: UIColor(rgb: 0xffffff), @@ -502,7 +503,7 @@ public func makeDefaultDayPresentationTheme(extendingThemeReference: Presentatio fileDescriptionColor: UIColor(rgb: 0x999999), fileDurationColor: UIColor(rgb: 0x525252, alpha: 0.6), mediaPlaceholderColor: UIColor(rgb: 0xe8ecf0), - polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: UIColor(rgb: 0x007ee5), highlight: UIColor(rgb: 0x007ee5, alpha: 0.08), separator: UIColor(rgb: 0xc8c7cc), bar: UIColor(rgb: 0x007ee5)), + polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: UIColor(rgb: 0x007ee5), highlight: UIColor(rgb: 0x007ee5, alpha: 0.08), separator: UIColor(rgb: 0xc8c7cc), bar: UIColor(rgb: 0x007ee5), barIconForeground: .white, barPositive: UIColor(rgb: 0x2dba45), barNegative: UIColor(rgb: 0xFE3824)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: .clear), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor(rgb: 0x007ee5, alpha: 0.2), textSelectionKnobColor: UIColor(rgb: 0x007ee5)), outgoing: PresentationThemePartedColors( @@ -515,6 +516,7 @@ public func makeDefaultDayPresentationTheme(extendingThemeReference: Presentatio textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: UIColor(rgb: 0x00a700), accentControlColor: UIColor(rgb: 0x3fc33b), + accentControlDisabledColor: UIColor(rgb: 0x00A700).withAlphaComponent(0.7), mediaActiveControlColor: UIColor(rgb: 0x3fc33b), mediaInactiveControlColor: UIColor(rgb: 0x93d987), mediaControlInnerBackgroundColor: UIColor(rgb: 0xe1ffc7), @@ -523,7 +525,7 @@ public func makeDefaultDayPresentationTheme(extendingThemeReference: Presentatio fileDescriptionColor: UIColor(rgb: 0x6fb26a), fileDurationColor: UIColor(rgb: 0x008c09, alpha: 0.8), mediaPlaceholderColor: UIColor(rgb: 0xd2f2b6), - polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x93d987), radioProgress: UIColor(rgb: 0x3fc33b), highlight: UIColor(rgb: 0x3fc33b).withAlphaComponent(0.08), separator: UIColor(rgb: 0x93d987), bar: UIColor(rgb: 0x3fc33b)), + polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x93d987), radioProgress: UIColor(rgb: 0x3fc33b), highlight: UIColor(rgb: 0x3fc33b).withAlphaComponent(0.08), separator: UIColor(rgb: 0x93d987), bar: UIColor(rgb: 0x00A700), barIconForeground: .white, barPositive: UIColor(rgb: 0x00A700), barNegative: UIColor(rgb: 0x00A700)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: .clear), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), @@ -555,6 +557,7 @@ public func makeDefaultDayPresentationTheme(extendingThemeReference: Presentatio textHighlightColor: UIColor(rgb: 0xffc738), accentTextColor: UIColor(rgb: 0x007ee5), accentControlColor: UIColor(rgb: 0x007ee5), + accentControlDisabledColor: UIColor(rgb: 0x525252, alpha: 0.6), mediaActiveControlColor: UIColor(rgb: 0x007ee5), mediaInactiveControlColor: UIColor(rgb: 0xcacaca), mediaControlInnerBackgroundColor: UIColor(rgb: 0xffffff), @@ -563,7 +566,7 @@ public func makeDefaultDayPresentationTheme(extendingThemeReference: Presentatio fileDescriptionColor: UIColor(rgb: 0x999999), fileDurationColor: UIColor(rgb: 0x525252, alpha: 0.6), mediaPlaceholderColor: UIColor(rgb: 0xffffff).withMultipliedBrightnessBy(0.95), - polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: UIColor(rgb: 0x007ee5), highlight: UIColor(rgb: 0x007ee5, alpha: 0.12), separator: UIColor(rgb: 0xc8c7cc), bar: UIColor(rgb: 0x007ee5)), + polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: UIColor(rgb: 0x007ee5), highlight: UIColor(rgb: 0x007ee5, alpha: 0.12), separator: UIColor(rgb: 0xc8c7cc), bar: UIColor(rgb: 0x007ee5), barIconForeground: .white, barPositive: UIColor(rgb: 0x00A700), barNegative: UIColor(rgb: 0xFE3824)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), actionButtonsStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: UIColor(rgb: 0x007ee5)), actionButtonsTextColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0xffffff), withoutWallpaper: UIColor(rgb: 0x007ee5)), @@ -579,6 +582,7 @@ public func makeDefaultDayPresentationTheme(extendingThemeReference: Presentatio textHighlightColor: UIColor(rgb: 0xffc738), accentTextColor: UIColor(rgb: 0xffffff), accentControlColor: UIColor(rgb: 0xffffff), + accentControlDisabledColor: UIColor(rgb: 0xffffff).withAlphaComponent(0.5), mediaActiveControlColor: UIColor(rgb: 0xffffff), mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.65), mediaControlInnerBackgroundColor: .clear, @@ -587,7 +591,7 @@ public func makeDefaultDayPresentationTheme(extendingThemeReference: Presentatio fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.65), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.65), mediaPlaceholderColor: UIColor(rgb: 0x0077d9), - polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xffffff, alpha: 0.65), radioProgress: UIColor(rgb: 0xffffff), highlight: UIColor(rgb: 0xffffff, alpha: 0.12), separator: UIColor(rgb: 0xffffff, alpha: 0.65), bar: UIColor(rgb: 0xffffff)), + polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xffffff, alpha: 0.65), radioProgress: UIColor(rgb: 0xffffff), highlight: UIColor(rgb: 0xffffff, alpha: 0.12), separator: UIColor(rgb: 0xffffff, alpha: 0.65), bar: UIColor(rgb: 0xffffff), barIconForeground: .white, barPositive: UIColor(rgb: 0xffffff), barNegative: UIColor(rgb: 0xffffff)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), actionButtonsStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: UIColor(rgb: 0x007ee5)), actionButtonsTextColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0xffffff), withoutWallpaper: UIColor(rgb: 0x007ee5)), diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index bf9ee62939..cc30fd292c 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -605,4667 +605,4684 @@ public final class PresentationStrings: Equatable { public var SocksProxySetup_SaveProxy: String { return self._s[389]! } public var AccessDenied_SaveMedia: String { return self._s[390]! } public var Checkout_ErrorInvoiceAlreadyPaid: String { return self._s[392]! } - public var Settings_Title: String { return self._s[394]! } - public var VoiceOver_Chat_RecordModeVideoMessageInfo: String { return self._s[395]! } - public var Contacts_InviteSearchLabel: String { return self._s[397]! } - public var PrivacySettings_WebSessions: String { return self._s[398]! } - public var ConvertToSupergroup_Title: String { return self._s[399]! } + public var CreatePoll_MultipleChoice: String { return self._s[393]! } + public var Settings_Title: String { return self._s[395]! } + public var VoiceOver_Chat_RecordModeVideoMessageInfo: String { return self._s[396]! } + public var Contacts_InviteSearchLabel: String { return self._s[398]! } + public var PrivacySettings_WebSessions: String { return self._s[399]! } + public var ConvertToSupergroup_Title: String { return self._s[400]! } public func Channel_AdminLog_CaptionEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[400]!, self._r[400]!, [_0]) + return formatWithArgumentRanges(self._s[401]!, self._r[401]!, [_0]) } - public var TwoFactorSetup_Hint_Text: String { return self._s[401]! } - public var InfoPlist_NSSiriUsageDescription: String { return self._s[402]! } + public var TwoFactorSetup_Hint_Text: String { return self._s[402]! } + public var InfoPlist_NSSiriUsageDescription: String { return self._s[403]! } public func PUSH_MESSAGE_CHANNEL_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[403]!, self._r[403]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[404]!, self._r[404]!, [_1, _2, _3]) } - public var ChatSettings_AutomaticPhotoDownload: String { return self._s[404]! } - public var UserInfo_BotHelp: String { return self._s[405]! } - public var PrivacySettings_LastSeenEverybody: String { return self._s[406]! } - public var Checkout_Name: String { return self._s[407]! } - public var AutoDownloadSettings_DataUsage: String { return self._s[408]! } - public var Channel_BanUser_BlockFor: String { return self._s[409]! } - public var Checkout_ShippingAddress: String { return self._s[410]! } - public var AutoDownloadSettings_MaxVideoSize: String { return self._s[411]! } - public var Privacy_PaymentsClearInfoDoneHelp: String { return self._s[412]! } - public var Privacy_Forwards: String { return self._s[413]! } - public var Channel_BanUser_PermissionSendPolls: String { return self._s[414]! } - public var Appearance_ThemeCarouselNewNight: String { return self._s[415]! } + public var ChatSettings_AutomaticPhotoDownload: String { return self._s[405]! } + public var UserInfo_BotHelp: String { return self._s[406]! } + public var PrivacySettings_LastSeenEverybody: String { return self._s[407]! } + public var Checkout_Name: String { return self._s[408]! } + public var AutoDownloadSettings_DataUsage: String { return self._s[409]! } + public var Channel_BanUser_BlockFor: String { return self._s[410]! } + public var Checkout_ShippingAddress: String { return self._s[411]! } + public var AutoDownloadSettings_MaxVideoSize: String { return self._s[412]! } + public var Privacy_PaymentsClearInfoDoneHelp: String { return self._s[413]! } + public var Privacy_Forwards: String { return self._s[414]! } + public var Channel_BanUser_PermissionSendPolls: String { return self._s[415]! } + public var Appearance_ThemeCarouselNewNight: String { return self._s[416]! } public func SecretVideo_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[418]!, self._r[418]!, [_0]) + return formatWithArgumentRanges(self._s[419]!, self._r[419]!, [_0]) } - public var Contacts_SortedByName: String { return self._s[419]! } - public var Group_OwnershipTransfer_Title: String { return self._s[420]! } - public var VoiceOver_Chat_OpenHint: String { return self._s[422]! } - public var Group_LeaveGroup: String { return self._s[423]! } - public var Settings_UsernameEmpty: String { return self._s[424]! } + public var Contacts_SortedByName: String { return self._s[420]! } + public var Group_OwnershipTransfer_Title: String { return self._s[421]! } + public var VoiceOver_Chat_OpenHint: String { return self._s[423]! } + public var Group_LeaveGroup: String { return self._s[424]! } + public var Settings_UsernameEmpty: String { return self._s[425]! } public func Notification_PinnedPollMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[425]!, self._r[425]!, [_0]) + return formatWithArgumentRanges(self._s[426]!, self._r[426]!, [_0]) } public func TwoStepAuth_ConfirmEmailDescription(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[426]!, self._r[426]!, [_1]) + return formatWithArgumentRanges(self._s[427]!, self._r[427]!, [_1]) } public func Channel_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[427]!, self._r[427]!, [_1, _2]) + return formatWithArgumentRanges(self._s[428]!, self._r[428]!, [_1, _2]) } - public var Message_ImageExpired: String { return self._s[428]! } - public var TwoStepAuth_RecoveryFailed: String { return self._s[430]! } - public var EditTheme_Edit_Preview_OutgoingText: String { return self._s[431]! } - public var UserInfo_AddToExisting: String { return self._s[432]! } - public var TwoStepAuth_EnabledSuccess: String { return self._s[433]! } - public var Wallet_Send_SyncInProgress: String { return self._s[434]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_SetColor: String { return self._s[435]! } + public var Message_ImageExpired: String { return self._s[429]! } + public var TwoStepAuth_RecoveryFailed: String { return self._s[431]! } + public var EditTheme_Edit_Preview_OutgoingText: String { return self._s[432]! } + public var UserInfo_AddToExisting: String { return self._s[433]! } + public var TwoStepAuth_EnabledSuccess: String { return self._s[434]! } + public var Wallet_Send_SyncInProgress: String { return self._s[435]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_SetColor: String { return self._s[436]! } public func PUSH_CHANNEL_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[436]!, self._r[436]!, [_1]) + return formatWithArgumentRanges(self._s[437]!, self._r[437]!, [_1]) } - public var Notifications_GroupNotificationsAlert: String { return self._s[437]! } - public var Passport_Language_km: String { return self._s[438]! } - public var SocksProxySetup_AdNoticeHelp: String { return self._s[440]! } - public var VoiceOver_Media_PlaybackPlay: String { return self._s[441]! } - public var Notification_CallMissedShort: String { return self._s[442]! } - public var Wallet_Info_YourBalance: String { return self._s[443]! } - public var ReportPeer_ReasonOther_Send: String { return self._s[444]! } - public var Watch_Compose_Send: String { return self._s[445]! } - public var Passport_Identity_TypeInternalPassportUploadScan: String { return self._s[448]! } - public var TwoFactorSetup_Email_Action: String { return self._s[449]! } - public var Conversation_HoldForVideo: String { return self._s[450]! } - public var Wallet_Configuration_ApplyErrorTextURLInvalidData: String { return self._s[451]! } - public var AuthSessions_OtherDevices: String { return self._s[452]! } - public var Wallet_TransactionInfo_CommentHeader: String { return self._s[453]! } - public var CheckoutInfo_ErrorCityInvalid: String { return self._s[455]! } - public var Appearance_AutoNightThemeDisabled: String { return self._s[457]! } - public var Channel_LinkItem: String { return self._s[458]! } + public var Notifications_GroupNotificationsAlert: String { return self._s[438]! } + public var Passport_Language_km: String { return self._s[439]! } + public var SocksProxySetup_AdNoticeHelp: String { return self._s[441]! } + public var VoiceOver_Media_PlaybackPlay: String { return self._s[442]! } + public var Notification_CallMissedShort: String { return self._s[443]! } + public var Wallet_Info_YourBalance: String { return self._s[444]! } + public var ReportPeer_ReasonOther_Send: String { return self._s[445]! } + public var Watch_Compose_Send: String { return self._s[446]! } + public var Passport_Identity_TypeInternalPassportUploadScan: String { return self._s[449]! } + public var TwoFactorSetup_Email_Action: String { return self._s[450]! } + public var Conversation_HoldForVideo: String { return self._s[451]! } + public var Wallet_Configuration_ApplyErrorTextURLInvalidData: String { return self._s[452]! } + public var AuthSessions_OtherDevices: String { return self._s[453]! } + public var Wallet_TransactionInfo_CommentHeader: String { return self._s[454]! } + public var CheckoutInfo_ErrorCityInvalid: String { return self._s[456]! } + public var Appearance_AutoNightThemeDisabled: String { return self._s[458]! } + public var Channel_LinkItem: String { return self._s[459]! } public func PrivacySettings_LastSeenContactsMinusPlus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[459]!, self._r[459]!, [_0, _1]) + return formatWithArgumentRanges(self._s[460]!, self._r[460]!, [_0, _1]) } public func Passport_Identity_NativeNameTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[462]!, self._r[462]!, [_0]) + return formatWithArgumentRanges(self._s[463]!, self._r[463]!, [_0]) } - public var VoiceOver_Recording_StopAndPreview: String { return self._s[463]! } - public var Passport_Language_dv: String { return self._s[464]! } - public var Undo_LeftChannel: String { return self._s[465]! } - public var Notifications_ExceptionsMuted: String { return self._s[466]! } - public var ChatList_UnhideAction: String { return self._s[467]! } - public var Conversation_ContextMenuShare: String { return self._s[468]! } - public var Conversation_ContextMenuStickerPackInfo: String { return self._s[469]! } - public var ShareFileTip_Title: String { return self._s[470]! } - public var NotificationsSound_Chord: String { return self._s[471]! } - public var Wallet_TransactionInfo_OtherFeeHeader: String { return self._s[472]! } + public var VoiceOver_Recording_StopAndPreview: String { return self._s[464]! } + public var Passport_Language_dv: String { return self._s[465]! } + public var Undo_LeftChannel: String { return self._s[466]! } + public var Notifications_ExceptionsMuted: String { return self._s[467]! } + public var ChatList_UnhideAction: String { return self._s[468]! } + public var Conversation_ContextMenuShare: String { return self._s[469]! } + public var Conversation_ContextMenuStickerPackInfo: String { return self._s[470]! } + public var ShareFileTip_Title: String { return self._s[471]! } + public var NotificationsSound_Chord: String { return self._s[472]! } + public var Wallet_TransactionInfo_OtherFeeHeader: String { return self._s[473]! } public func PUSH_CHAT_RETURNED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[473]!, self._r[473]!, [_1, _2]) + return formatWithArgumentRanges(self._s[474]!, self._r[474]!, [_1, _2]) } - public var Passport_Address_EditTemporaryRegistration: String { return self._s[474]! } + public var Passport_Address_EditTemporaryRegistration: String { return self._s[475]! } public func Notification_Joined(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[475]!, self._r[475]!, [_0]) + return formatWithArgumentRanges(self._s[476]!, self._r[476]!, [_0]) } public func Wallet_Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[476]!, self._r[476]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[477]!, self._r[477]!, [_1, _2, _3]) } - public var Wallet_Settings_ConfigurationInfo: String { return self._s[477]! } - public var Wallpaper_ErrorNotFound: String { return self._s[478]! } - public var Notification_CallOutgoingShort: String { return self._s[480]! } - public var Wallet_WordImport_IncorrectText: String { return self._s[481]! } + public var Wallet_Settings_ConfigurationInfo: String { return self._s[478]! } + public var Wallpaper_ErrorNotFound: String { return self._s[479]! } + public var Notification_CallOutgoingShort: String { return self._s[481]! } + public var Wallet_WordImport_IncorrectText: String { return self._s[482]! } public func Watch_Time_ShortFullAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[482]!, self._r[482]!, [_1, _2]) + return formatWithArgumentRanges(self._s[483]!, self._r[483]!, [_1, _2]) } - public var Passport_Address_TypeUtilityBill: String { return self._s[483]! } - public var Privacy_Forwards_LinkIfAllowed: String { return self._s[484]! } - public var ReportPeer_Report: String { return self._s[485]! } - public var SettingsSearch_Synonyms_Proxy_Title: String { return self._s[486]! } - public var GroupInfo_DeactivatedStatus: String { return self._s[487]! } + public var Passport_Address_TypeUtilityBill: String { return self._s[484]! } + public var Privacy_Forwards_LinkIfAllowed: String { return self._s[485]! } + public var ReportPeer_Report: String { return self._s[486]! } + public var SettingsSearch_Synonyms_Proxy_Title: String { return self._s[487]! } + public var GroupInfo_DeactivatedStatus: String { return self._s[488]! } public func VoiceOver_Chat_MusicTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[488]!, self._r[488]!, [_1, _2]) + return formatWithArgumentRanges(self._s[489]!, self._r[489]!, [_1, _2]) } - public var StickerPack_Send: String { return self._s[489]! } - public var Login_CodeSentInternal: String { return self._s[490]! } - public var Wallet_Month_GenJanuary: String { return self._s[491]! } - public var GroupInfo_InviteLink_LinkSection: String { return self._s[492]! } + public var StickerPack_Send: String { return self._s[490]! } + public var Login_CodeSentInternal: String { return self._s[491]! } + public var Wallet_Month_GenJanuary: String { return self._s[492]! } + public var GroupInfo_InviteLink_LinkSection: String { return self._s[493]! } public func Channel_AdminLog_MessageDeleted(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[493]!, self._r[493]!, [_0]) + return formatWithArgumentRanges(self._s[494]!, self._r[494]!, [_0]) } public func Conversation_EncryptionWaiting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[495]!, self._r[495]!, [_0]) + return formatWithArgumentRanges(self._s[496]!, self._r[496]!, [_0]) } - public var Channel_BanUser_PermissionSendStickersAndGifs: String { return self._s[496]! } + public var Channel_BanUser_PermissionSendStickersAndGifs: String { return self._s[497]! } public func PUSH_PINNED_GAME(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[497]!, self._r[497]!, [_1]) + return formatWithArgumentRanges(self._s[498]!, self._r[498]!, [_1]) } - public var ReportPeer_ReasonViolence: String { return self._s[499]! } - public var Appearance_ShareThemeColor: String { return self._s[500]! } - public var Map_Locating: String { return self._s[501]! } + public var ReportPeer_ReasonViolence: String { return self._s[500]! } + public var Appearance_ShareThemeColor: String { return self._s[501]! } + public var Map_Locating: String { return self._s[502]! } public func VoiceOver_Chat_VideoFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[502]!, self._r[502]!, [_0]) + return formatWithArgumentRanges(self._s[503]!, self._r[503]!, [_0]) } public func PUSH_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[503]!, self._r[503]!, [_1]) + return formatWithArgumentRanges(self._s[504]!, self._r[504]!, [_1]) } - public var AutoDownloadSettings_GroupChats: String { return self._s[505]! } - public var CheckoutInfo_SaveInfo: String { return self._s[506]! } - public var SharedMedia_EmptyLinksText: String { return self._s[508]! } - public var Passport_Address_CityPlaceholder: String { return self._s[509]! } - public var CheckoutInfo_ErrorStateInvalid: String { return self._s[510]! } - public var Privacy_ProfilePhoto_CustomHelp: String { return self._s[511]! } - public var Wallet_Send_OwnAddressAlertTitle: String { return self._s[513]! } - public var Channel_AdminLog_CanAddAdmins: String { return self._s[514]! } + public var AutoDownloadSettings_GroupChats: String { return self._s[506]! } + public var CheckoutInfo_SaveInfo: String { return self._s[507]! } + public var SharedMedia_EmptyLinksText: String { return self._s[509]! } + public var Passport_Address_CityPlaceholder: String { return self._s[510]! } + public var CheckoutInfo_ErrorStateInvalid: String { return self._s[511]! } + public var Privacy_ProfilePhoto_CustomHelp: String { return self._s[512]! } + public var Wallet_Send_OwnAddressAlertTitle: String { return self._s[514]! } + public var Channel_AdminLog_CanAddAdmins: String { return self._s[515]! } public func PUSH_CHANNEL_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[515]!, self._r[515]!, [_1]) + return formatWithArgumentRanges(self._s[516]!, self._r[516]!, [_1]) } public func Time_MonthOfYear_m8(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[516]!, self._r[516]!, [_0]) + return formatWithArgumentRanges(self._s[517]!, self._r[517]!, [_0]) } - public var InfoPlist_NSLocationWhenInUseUsageDescription: String { return self._s[517]! } - public var GroupInfo_InviteLink_RevokeAlert_Success: String { return self._s[518]! } - public var ChangePhoneNumberCode_Code: String { return self._s[519]! } - public var Appearance_CreateTheme: String { return self._s[520]! } + public var InfoPlist_NSLocationWhenInUseUsageDescription: String { return self._s[518]! } + public var GroupInfo_InviteLink_RevokeAlert_Success: String { return self._s[519]! } + public var ChangePhoneNumberCode_Code: String { return self._s[520]! } + public var Appearance_CreateTheme: String { return self._s[521]! } public func UserInfo_NotificationsDefaultSound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[521]!, self._r[521]!, [_0]) + return formatWithArgumentRanges(self._s[522]!, self._r[522]!, [_0]) } - public var TwoStepAuth_SetupEmail: String { return self._s[522]! } - public var HashtagSearch_AllChats: String { return self._s[523]! } - public var MediaPlayer_UnknownTrack: String { return self._s[524]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[526]! } + public var TwoStepAuth_SetupEmail: String { return self._s[523]! } + public var HashtagSearch_AllChats: String { return self._s[524]! } + public var MediaPlayer_UnknownTrack: String { return self._s[525]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[527]! } public func ChatList_DeleteForEveryone(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[527]!, self._r[527]!, [_0]) + return formatWithArgumentRanges(self._s[528]!, self._r[528]!, [_0]) } - public var PhotoEditor_QualityHigh: String { return self._s[529]! } + public var PhotoEditor_QualityHigh: String { return self._s[530]! } public func Passport_Phone_UseTelegramNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[530]!, self._r[530]!, [_0]) + return formatWithArgumentRanges(self._s[531]!, self._r[531]!, [_0]) } - public var ApplyLanguage_ApplyLanguageAction: String { return self._s[531]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[532]! } - public var Message_LiveLocation: String { return self._s[533]! } - public var Cache_LowDiskSpaceText: String { return self._s[534]! } - public var Wallet_Receive_ShareAddress: String { return self._s[535]! } - public var EditTheme_ErrorLinkTaken: String { return self._s[536]! } - public var Conversation_SendMessage: String { return self._s[537]! } - public var AuthSessions_EmptyTitle: String { return self._s[538]! } - public var Privacy_PhoneNumber: String { return self._s[539]! } - public var PeopleNearby_CreateGroup: String { return self._s[540]! } - public var CallSettings_UseLessData: String { return self._s[541]! } - public var NetworkUsageSettings_MediaDocumentDataSection: String { return self._s[542]! } - public var Stickers_AddToFavorites: String { return self._s[543]! } - public var Wallet_WordImport_Title: String { return self._s[544]! } - public var PhotoEditor_QualityLow: String { return self._s[545]! } - public var Watch_UserInfo_Unblock: String { return self._s[546]! } - public var Settings_Logout: String { return self._s[547]! } + public var ApplyLanguage_ApplyLanguageAction: String { return self._s[532]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[533]! } + public var Message_LiveLocation: String { return self._s[534]! } + public var Cache_LowDiskSpaceText: String { return self._s[535]! } + public var Wallet_Receive_ShareAddress: String { return self._s[536]! } + public var EditTheme_ErrorLinkTaken: String { return self._s[537]! } + public var Conversation_SendMessage: String { return self._s[538]! } + public var AuthSessions_EmptyTitle: String { return self._s[539]! } + public var Privacy_PhoneNumber: String { return self._s[540]! } + public var PeopleNearby_CreateGroup: String { return self._s[541]! } + public var CallSettings_UseLessData: String { return self._s[542]! } + public var NetworkUsageSettings_MediaDocumentDataSection: String { return self._s[543]! } + public var Stickers_AddToFavorites: String { return self._s[544]! } + public var Wallet_WordImport_Title: String { return self._s[545]! } + public var PhotoEditor_QualityLow: String { return self._s[546]! } + public var Watch_UserInfo_Unblock: String { return self._s[547]! } + public var Settings_Logout: String { return self._s[548]! } public func PUSH_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[548]!, self._r[548]!, [_1]) + return formatWithArgumentRanges(self._s[549]!, self._r[549]!, [_1]) } - public var ContactInfo_PhoneLabelWork: String { return self._s[549]! } - public var ChannelInfo_Stats: String { return self._s[550]! } - public var TextFormat_Link: String { return self._s[551]! } + public var ContactInfo_PhoneLabelWork: String { return self._s[550]! } + public var ChannelInfo_Stats: String { return self._s[551]! } + public var TextFormat_Link: String { return self._s[552]! } public func Date_ChatDateHeader(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[552]!, self._r[552]!, [_1, _2]) + return formatWithArgumentRanges(self._s[553]!, self._r[553]!, [_1, _2]) } - public var Wallet_TransactionInfo_Title: String { return self._s[553]! } + public var Wallet_TransactionInfo_Title: String { return self._s[554]! } public func Message_ForwardedMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[554]!, self._r[554]!, [_0]) + return formatWithArgumentRanges(self._s[555]!, self._r[555]!, [_0]) } - public var Watch_Notification_Joined: String { return self._s[555]! } - public var Group_Setup_TypePublicHelp: String { return self._s[556]! } - public var Passport_Scans_UploadNew: String { return self._s[557]! } - public var Checkout_LiabilityAlertTitle: String { return self._s[558]! } - public var DialogList_Title: String { return self._s[561]! } - public var NotificationSettings_ContactJoined: String { return self._s[562]! } - public var GroupInfo_LabelAdmin: String { return self._s[563]! } - public var KeyCommand_ChatInfo: String { return self._s[564]! } - public var Conversation_EditingCaptionPanelTitle: String { return self._s[565]! } - public var Call_ReportIncludeLog: String { return self._s[566]! } + public var Watch_Notification_Joined: String { return self._s[556]! } + public var Group_Setup_TypePublicHelp: String { return self._s[557]! } + public var Passport_Scans_UploadNew: String { return self._s[558]! } + public var Checkout_LiabilityAlertTitle: String { return self._s[559]! } + public var DialogList_Title: String { return self._s[562]! } + public var NotificationSettings_ContactJoined: String { return self._s[563]! } + public var GroupInfo_LabelAdmin: String { return self._s[564]! } + public var KeyCommand_ChatInfo: String { return self._s[565]! } + public var Conversation_EditingCaptionPanelTitle: String { return self._s[566]! } + public var Call_ReportIncludeLog: String { return self._s[567]! } public func Notifications_ExceptionsChangeSound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[569]!, self._r[569]!, [_0]) + return formatWithArgumentRanges(self._s[570]!, self._r[570]!, [_0]) } - public var Channel_AdminLog_InfoPanelChannelAlertText: String { return self._s[570]! } - public var ChatAdmins_AllMembersAreAdmins: String { return self._s[571]! } - public var LocalGroup_IrrelevantWarning: String { return self._s[572]! } - public var Conversation_DefaultRestrictedInline: String { return self._s[573]! } - public var Message_Sticker: String { return self._s[574]! } - public var LastSeen_JustNow: String { return self._s[576]! } - public var Passport_Email_EmailPlaceholder: String { return self._s[578]! } - public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[579]! } - public var Channel_AdminLogFilter_EventsEditedMessages: String { return self._s[580]! } - public var Channel_EditAdmin_PermissionsHeader: String { return self._s[581]! } - public var TwoStepAuth_Email: String { return self._s[582]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsSound: String { return self._s[583]! } - public var PhotoEditor_BlurToolOff: String { return self._s[584]! } - public var Message_PinnedStickerMessage: String { return self._s[585]! } - public var ContactInfo_PhoneLabelPager: String { return self._s[586]! } - public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[587]! } - public var Passport_DiscardMessageTitle: String { return self._s[588]! } - public var Privacy_PaymentsTitle: String { return self._s[589]! } - public var EditTheme_Edit_Preview_IncomingReplyName: String { return self._s[590]! } - public var ClearCache_StorageCache: String { return self._s[591]! } - public var Appearance_TextSizeSetting: String { return self._s[592]! } - public var Channel_DiscussionGroup_Header: String { return self._s[594]! } - public var VoiceOver_Chat_OptionSelected: String { return self._s[595]! } - public var Appearance_ColorTheme: String { return self._s[596]! } - public var UserInfo_ShareContact: String { return self._s[597]! } - public var Passport_Address_TypePassportRegistration: String { return self._s[598]! } - public var Common_More: String { return self._s[599]! } - public var Watch_Message_Call: String { return self._s[600]! } - public var Profile_EncryptionKey: String { return self._s[603]! } - public var Privacy_TopPeers: String { return self._s[604]! } - public var Conversation_StopPollConfirmation: String { return self._s[605]! } - public var Wallet_Words_NotDoneText: String { return self._s[607]! } - public var Privacy_TopPeersWarning: String { return self._s[609]! } - public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[610]! } - public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[611]! } - public var Wallet_RestoreFailed_EnterWords: String { return self._s[614]! } - public var DialogList_SearchSectionMessages: String { return self._s[615]! } - public var Notifications_ChannelNotifications: String { return self._s[616]! } - public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[617]! } - public var Passport_Language_sk: String { return self._s[618]! } - public var Notification_MessageLifetime1h: String { return self._s[619]! } - public var Wallpaper_ResetWallpapersInfo: String { return self._s[620]! } - public var Appearance_ThemePreview_Chat_5_Text: String { return self._s[621]! } - public var Call_ReportSkip: String { return self._s[623]! } - public var Cache_ServiceFiles: String { return self._s[624]! } - public var Group_ErrorAddTooMuchAdmins: String { return self._s[625]! } - public var VoiceOver_Chat_YourFile: String { return self._s[626]! } - public var Map_Hybrid: String { return self._s[627]! } - public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[629]! } - public var ChatSettings_AutoDownloadVideos: String { return self._s[631]! } - public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[632]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[633]! } - public var SocksProxySetup_ProxyTelegram: String { return self._s[636]! } + public var Channel_AdminLog_InfoPanelChannelAlertText: String { return self._s[571]! } + public var ChatAdmins_AllMembersAreAdmins: String { return self._s[572]! } + public var LocalGroup_IrrelevantWarning: String { return self._s[573]! } + public var Conversation_DefaultRestrictedInline: String { return self._s[574]! } + public var Message_Sticker: String { return self._s[575]! } + public var LastSeen_JustNow: String { return self._s[577]! } + public var Passport_Email_EmailPlaceholder: String { return self._s[579]! } + public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[580]! } + public var Channel_AdminLogFilter_EventsEditedMessages: String { return self._s[581]! } + public var Channel_EditAdmin_PermissionsHeader: String { return self._s[582]! } + public var TwoStepAuth_Email: String { return self._s[583]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsSound: String { return self._s[584]! } + public var PhotoEditor_BlurToolOff: String { return self._s[585]! } + public var Message_PinnedStickerMessage: String { return self._s[586]! } + public var ContactInfo_PhoneLabelPager: String { return self._s[587]! } + public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[588]! } + public var Passport_DiscardMessageTitle: String { return self._s[589]! } + public var Privacy_PaymentsTitle: String { return self._s[590]! } + public var EditTheme_Edit_Preview_IncomingReplyName: String { return self._s[591]! } + public var ClearCache_StorageCache: String { return self._s[592]! } + public var Appearance_TextSizeSetting: String { return self._s[593]! } + public var Channel_DiscussionGroup_Header: String { return self._s[595]! } + public var VoiceOver_Chat_OptionSelected: String { return self._s[596]! } + public var Appearance_ColorTheme: String { return self._s[597]! } + public var UserInfo_ShareContact: String { return self._s[598]! } + public var Passport_Address_TypePassportRegistration: String { return self._s[599]! } + public var Common_More: String { return self._s[600]! } + public var Watch_Message_Call: String { return self._s[601]! } + public var Profile_EncryptionKey: String { return self._s[604]! } + public var Privacy_TopPeers: String { return self._s[605]! } + public var Conversation_StopPollConfirmation: String { return self._s[606]! } + public var Wallet_Words_NotDoneText: String { return self._s[608]! } + public var Privacy_TopPeersWarning: String { return self._s[610]! } + public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[611]! } + public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[612]! } + public var Wallet_RestoreFailed_EnterWords: String { return self._s[615]! } + public var DialogList_SearchSectionMessages: String { return self._s[616]! } + public var Notifications_ChannelNotifications: String { return self._s[617]! } + public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[618]! } + public var Passport_Language_sk: String { return self._s[619]! } + public var Notification_MessageLifetime1h: String { return self._s[620]! } + public var Wallpaper_ResetWallpapersInfo: String { return self._s[621]! } + public var Appearance_ThemePreview_Chat_5_Text: String { return self._s[622]! } + public var Call_ReportSkip: String { return self._s[624]! } + public var Cache_ServiceFiles: String { return self._s[625]! } + public var Group_ErrorAddTooMuchAdmins: String { return self._s[626]! } + public var VoiceOver_Chat_YourFile: String { return self._s[627]! } + public var Map_Hybrid: String { return self._s[628]! } + public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[630]! } + public var ChatSettings_AutoDownloadVideos: String { return self._s[632]! } + public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[633]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[634]! } + public var SocksProxySetup_ProxyTelegram: String { return self._s[637]! } public func PUSH_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[637]!, self._r[637]!, [_1]) + return formatWithArgumentRanges(self._s[638]!, self._r[638]!, [_1]) } - public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[639]! } - public var ScheduledMessages_ScheduledToday: String { return self._s[640]! } + public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[640]! } + public var ScheduledMessages_ScheduledToday: String { return self._s[641]! } public func PUSH_CHAT_TITLE_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[641]!, self._r[641]!, [_1, _2]) + return formatWithArgumentRanges(self._s[642]!, self._r[642]!, [_1, _2]) } - public var Conversation_LiveLocationYou: String { return self._s[642]! } - public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[643]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[644]! } - public var UserInfo_ShareBot: String { return self._s[647]! } + public var Conversation_LiveLocationYou: String { return self._s[643]! } + public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[644]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[645]! } + public var UserInfo_ShareBot: String { return self._s[648]! } public func PUSH_AUTH_REGION(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[648]!, self._r[648]!, [_1, _2]) + return formatWithArgumentRanges(self._s[649]!, self._r[649]!, [_1, _2]) } - public var Conversation_ClearCache: String { return self._s[649]! } - public var PhotoEditor_ShadowsTint: String { return self._s[650]! } - public var Message_Audio: String { return self._s[651]! } - public var Passport_Language_lt: String { return self._s[652]! } + public var Conversation_ClearCache: String { return self._s[650]! } + public var PhotoEditor_ShadowsTint: String { return self._s[651]! } + public var Message_Audio: String { return self._s[652]! } + public var Passport_Language_lt: String { return self._s[653]! } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[653]!, self._r[653]!, [_0]) + return formatWithArgumentRanges(self._s[654]!, self._r[654]!, [_0]) } - public var Permissions_SiriText_v0: String { return self._s[654]! } - public var Conversation_FileICloudDrive: String { return self._s[655]! } - public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[656]! } - public var Notifications_Badge_IncludeMutedChats: String { return self._s[657]! } + public var Permissions_SiriText_v0: String { return self._s[655]! } + public var Conversation_FileICloudDrive: String { return self._s[656]! } + public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[657]! } + public var Notifications_Badge_IncludeMutedChats: String { return self._s[658]! } public func Notification_NewAuthDetected(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[658]!, self._r[658]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[659]!, self._r[659]!, [_1, _2, _3, _4, _5, _6]) } - public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[659]! } + public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[660]! } public func Time_MonthOfYear_m5(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[660]!, self._r[660]!, [_0]) + return formatWithArgumentRanges(self._s[661]!, self._r[661]!, [_0]) } - public var Channel_SignMessages: String { return self._s[661]! } + public var Channel_SignMessages: String { return self._s[662]! } public func PUSH_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[662]!, self._r[662]!, [_1]) + return formatWithArgumentRanges(self._s[663]!, self._r[663]!, [_1]) } - public var Compose_ChannelTokenListPlaceholder: String { return self._s[663]! } - public var Passport_ScanPassport: String { return self._s[664]! } - public var Watch_Suggestion_Thanks: String { return self._s[665]! } - public var BlockedUsers_AddNew: String { return self._s[666]! } + public var Compose_ChannelTokenListPlaceholder: String { return self._s[664]! } + public var Passport_ScanPassport: String { return self._s[665]! } + public var Watch_Suggestion_Thanks: String { return self._s[666]! } + public var BlockedUsers_AddNew: String { return self._s[667]! } public func PUSH_CHAT_MESSAGE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[667]!, self._r[667]!, [_1, _2]) + return formatWithArgumentRanges(self._s[668]!, self._r[668]!, [_1, _2]) } - public var Watch_Message_Invoice: String { return self._s[668]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[669]! } - public var Month_GenJuly: String { return self._s[670]! } - public var UserInfo_StartSecretChatStart: String { return self._s[671]! } - public var SocksProxySetup_ProxySocks5: String { return self._s[672]! } - public var IntentsSettings_SuggestByShare: String { return self._s[674]! } - public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[675]! } - public var Notification_ChannelInviterSelf: String { return self._s[676]! } - public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[677]! } + public var Watch_Message_Invoice: String { return self._s[669]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[670]! } + public var Month_GenJuly: String { return self._s[671]! } + public var CreatePoll_QuizInfo: String { return self._s[672]! } + public var UserInfo_StartSecretChatStart: String { return self._s[673]! } + public var SocksProxySetup_ProxySocks5: String { return self._s[674]! } + public var IntentsSettings_SuggestByShare: String { return self._s[676]! } + public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[677]! } + public var Notification_ChannelInviterSelf: String { return self._s[678]! } + public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[679]! } public func ApplyLanguage_ChangeLanguageUnofficialText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[678]!, self._r[678]!, [_1, _2]) + return formatWithArgumentRanges(self._s[680]!, self._r[680]!, [_1, _2]) } - public var CheckoutInfo_Title: String { return self._s[679]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[680]! } + public var CheckoutInfo_Title: String { return self._s[681]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[682]! } public func Map_DistanceAway(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[681]!, self._r[681]!, [_0]) + return formatWithArgumentRanges(self._s[683]!, self._r[683]!, [_0]) } - public var Passport_Identity_MainPage: String { return self._s[682]! } - public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[683]! } - public var Passport_Language_de: String { return self._s[684]! } - public var Update_Title: String { return self._s[685]! } - public var ContactInfo_PhoneLabelWorkFax: String { return self._s[686]! } - public var Channel_AdminLog_BanEmbedLinks: String { return self._s[687]! } - public var Passport_Email_UseTelegramEmailHelp: String { return self._s[688]! } - public var Notifications_ChannelNotificationsPreview: String { return self._s[689]! } - public var NotificationsSound_Telegraph: String { return self._s[690]! } - public var Watch_LastSeen_ALongTimeAgo: String { return self._s[691]! } - public var ChannelMembers_WhoCanAddMembers: String { return self._s[692]! } + public var Passport_Identity_MainPage: String { return self._s[684]! } + public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[685]! } + public var Passport_Language_de: String { return self._s[686]! } + public var Update_Title: String { return self._s[687]! } + public var ContactInfo_PhoneLabelWorkFax: String { return self._s[688]! } + public var Channel_AdminLog_BanEmbedLinks: String { return self._s[689]! } + public var Passport_Email_UseTelegramEmailHelp: String { return self._s[690]! } + public var Notifications_ChannelNotificationsPreview: String { return self._s[691]! } + public var NotificationsSound_Telegraph: String { return self._s[692]! } + public var Watch_LastSeen_ALongTimeAgo: String { return self._s[693]! } + public var ChannelMembers_WhoCanAddMembers: String { return self._s[694]! } public func AutoDownloadSettings_UpTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[693]!, self._r[693]!, [_0]) + return formatWithArgumentRanges(self._s[695]!, self._r[695]!, [_0]) } - public var ClearCache_Description: String { return self._s[694]! } - public var Stickers_SuggestAll: String { return self._s[695]! } - public var Conversation_ForwardTitle: String { return self._s[696]! } - public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[697]! } + public var ClearCache_Description: String { return self._s[696]! } + public var Stickers_SuggestAll: String { return self._s[697]! } + public var Conversation_ForwardTitle: String { return self._s[698]! } + public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[699]! } public func Notification_JoinedChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[698]!, self._r[698]!, [_0]) + return formatWithArgumentRanges(self._s[700]!, self._r[700]!, [_0]) } - public var Calls_NewCall: String { return self._s[699]! } - public var Call_StatusEnded: String { return self._s[700]! } - public var AutoDownloadSettings_DataUsageLow: String { return self._s[701]! } - public var Settings_ProxyConnected: String { return self._s[702]! } - public var Channel_AdminLogFilter_EventsPinned: String { return self._s[703]! } - public var PhotoEditor_QualityVeryLow: String { return self._s[704]! } - public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[705]! } - public var Passport_PasswordPlaceholder: String { return self._s[706]! } - public var Message_PinnedInvoice: String { return self._s[707]! } - public var Passport_Identity_IssueDate: String { return self._s[708]! } - public var Passport_Language_pl: String { return self._s[709]! } + public var Calls_NewCall: String { return self._s[701]! } + public var Call_StatusEnded: String { return self._s[702]! } + public var AutoDownloadSettings_DataUsageLow: String { return self._s[703]! } + public var Settings_ProxyConnected: String { return self._s[704]! } + public var Channel_AdminLogFilter_EventsPinned: String { return self._s[705]! } + public var PhotoEditor_QualityVeryLow: String { return self._s[706]! } + public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[707]! } + public var Passport_PasswordPlaceholder: String { return self._s[708]! } + public var Message_PinnedInvoice: String { return self._s[709]! } + public var Passport_Identity_IssueDate: String { return self._s[710]! } + public var Passport_Language_pl: String { return self._s[711]! } public func ChannelInfo_ChannelForbidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[710]!, self._r[710]!, [_0]) + return formatWithArgumentRanges(self._s[712]!, self._r[712]!, [_0]) } - public var SocksProxySetup_PasteFromClipboard: String { return self._s[711]! } - public var Call_StatusConnecting: String { return self._s[712]! } + public var SocksProxySetup_PasteFromClipboard: String { return self._s[713]! } + public var Call_StatusConnecting: String { return self._s[714]! } public func Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[713]!, self._r[713]!, [_0]) + return formatWithArgumentRanges(self._s[715]!, self._r[715]!, [_0]) } - public var ChatSettings_ConnectionType_UseProxy: String { return self._s[715]! } - public var Common_Edit: String { return self._s[716]! } - public var PrivacySettings_LastSeenNobody: String { return self._s[717]! } + public var ChatSettings_ConnectionType_UseProxy: String { return self._s[717]! } + public var Common_Edit: String { return self._s[718]! } + public var PrivacySettings_LastSeenNobody: String { return self._s[719]! } public func Notification_LeftChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[718]!, self._r[718]!, [_0]) + return formatWithArgumentRanges(self._s[720]!, self._r[720]!, [_0]) } - public var GroupInfo_ChatAdmins: String { return self._s[719]! } - public var PrivateDataSettings_Title: String { return self._s[720]! } - public var Login_CancelPhoneVerificationStop: String { return self._s[721]! } - public var ChatList_Read: String { return self._s[722]! } - public var Wallet_WordImport_Text: String { return self._s[723]! } - public var Undo_ChatClearedForBothSides: String { return self._s[724]! } - public var GroupPermission_SectionTitle: String { return self._s[725]! } - public var TwoFactorSetup_Intro_Title: String { return self._s[727]! } + public var GroupInfo_ChatAdmins: String { return self._s[721]! } + public var PrivateDataSettings_Title: String { return self._s[722]! } + public var Login_CancelPhoneVerificationStop: String { return self._s[723]! } + public var ChatList_Read: String { return self._s[724]! } + public var Wallet_WordImport_Text: String { return self._s[725]! } + public var Undo_ChatClearedForBothSides: String { return self._s[726]! } + public var GroupPermission_SectionTitle: String { return self._s[727]! } + public var TwoFactorSetup_Intro_Title: String { return self._s[729]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[728]!, self._r[728]!, [_1, _2]) + return formatWithArgumentRanges(self._s[730]!, self._r[730]!, [_1, _2]) } - public var Checkout_ErrorPaymentFailed: String { return self._s[729]! } - public var Update_UpdateApp: String { return self._s[730]! } - public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[731]! } - public var Settings_Appearance: String { return self._s[732]! } - public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[736]! } - public var Watch_Location_Access: String { return self._s[737]! } - public var ShareMenu_CopyShareLink: String { return self._s[739]! } - public var TwoStepAuth_SetupHintTitle: String { return self._s[740]! } - public var Conversation_Theme: String { return self._s[742]! } + public var Checkout_ErrorPaymentFailed: String { return self._s[731]! } + public var Update_UpdateApp: String { return self._s[732]! } + public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[733]! } + public var Settings_Appearance: String { return self._s[734]! } + public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[738]! } + public var Watch_Location_Access: String { return self._s[739]! } + public var ShareMenu_CopyShareLink: String { return self._s[741]! } + public var TwoStepAuth_SetupHintTitle: String { return self._s[742]! } + public var Conversation_Theme: String { return self._s[744]! } public func DialogList_SingleRecordingVideoMessageSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[743]!, self._r[743]!, [_0]) + return formatWithArgumentRanges(self._s[745]!, self._r[745]!, [_0]) } - public var Notifications_ClassicTones: String { return self._s[744]! } - public var Weekday_ShortWednesday: String { return self._s[745]! } - public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[746]! } - public var Undo_LeftGroup: String { return self._s[749]! } - public var Wallet_RestoreFailed_Text: String { return self._s[750]! } - public var Conversation_LinkDialogCopy: String { return self._s[751]! } - public var Wallet_TransactionInfo_NoAddress: String { return self._s[753]! } - public var Wallet_Navigation_Back: String { return self._s[754]! } - public var KeyCommand_FocusOnInputField: String { return self._s[755]! } - public var Contacts_SelectAll: String { return self._s[756]! } - public var Preview_SaveToCameraRoll: String { return self._s[757]! } - public var PrivacySettings_PasscodeOff: String { return self._s[758]! } - public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[759]! } - public var Wallpaper_Title: String { return self._s[760]! } - public var Conversation_FilePhotoOrVideo: String { return self._s[761]! } - public var AccessDenied_Camera: String { return self._s[762]! } - public var Watch_Compose_CurrentLocation: String { return self._s[763]! } - public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[765]! } + public var Notifications_ClassicTones: String { return self._s[746]! } + public var Weekday_ShortWednesday: String { return self._s[747]! } + public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[748]! } + public var Undo_LeftGroup: String { return self._s[751]! } + public var Wallet_RestoreFailed_Text: String { return self._s[752]! } + public var Conversation_LinkDialogCopy: String { return self._s[753]! } + public var Wallet_TransactionInfo_NoAddress: String { return self._s[755]! } + public var Wallet_Navigation_Back: String { return self._s[756]! } + public var KeyCommand_FocusOnInputField: String { return self._s[757]! } + public var Contacts_SelectAll: String { return self._s[758]! } + public var Preview_SaveToCameraRoll: String { return self._s[759]! } + public var PrivacySettings_PasscodeOff: String { return self._s[760]! } + public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[761]! } + public var Wallpaper_Title: String { return self._s[762]! } + public var Conversation_FilePhotoOrVideo: String { return self._s[763]! } + public var AccessDenied_Camera: String { return self._s[764]! } + public var Watch_Compose_CurrentLocation: String { return self._s[765]! } + public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[767]! } public func SecretImage_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[766]!, self._r[766]!, [_0]) + return formatWithArgumentRanges(self._s[768]!, self._r[768]!, [_0]) } - public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[767]! } - public var Passport_Language_ro: String { return self._s[768]! } - public var EditTheme_UploadNewTheme: String { return self._s[769]! } - public var CheckoutInfo_SaveInfoHelp: String { return self._s[770]! } - public var Wallet_Intro_Terms: String { return self._s[771]! } + public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[769]! } + public var Passport_Language_ro: String { return self._s[770]! } + public var EditTheme_UploadNewTheme: String { return self._s[771]! } + public var CheckoutInfo_SaveInfoHelp: String { return self._s[772]! } + public var Wallet_Intro_Terms: String { return self._s[773]! } public func Notification_SecretChatMessageScreenshot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[772]!, self._r[772]!, [_0]) + return formatWithArgumentRanges(self._s[774]!, self._r[774]!, [_0]) } - public var Login_CancelPhoneVerification: String { return self._s[773]! } - public var State_ConnectingToProxy: String { return self._s[774]! } - public var Calls_RatingTitle: String { return self._s[775]! } - public var Generic_ErrorMoreInfo: String { return self._s[776]! } - public var ChatList_Search_ShowMore: String { return self._s[777]! } - public var Appearance_PreviewReplyText: String { return self._s[778]! } - public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[779]! } + public var Login_CancelPhoneVerification: String { return self._s[775]! } + public var State_ConnectingToProxy: String { return self._s[776]! } + public var Calls_RatingTitle: String { return self._s[777]! } + public var Generic_ErrorMoreInfo: String { return self._s[778]! } + public var ChatList_Search_ShowMore: String { return self._s[779]! } + public var Appearance_PreviewReplyText: String { return self._s[780]! } + public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[781]! } public func Wallet_Send_Balance(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[780]!, self._r[780]!, [_0]) + return formatWithArgumentRanges(self._s[782]!, self._r[782]!, [_0]) } - public var IntentsSettings_SuggestedChatsContacts: String { return self._s[781]! } - public var SharedMedia_CategoryLinks: String { return self._s[782]! } - public var Calls_Missed: String { return self._s[783]! } - public var Cache_Photos: String { return self._s[787]! } - public var GroupPermission_NoAddMembers: String { return self._s[788]! } - public var ScheduledMessages_Title: String { return self._s[789]! } + public var IntentsSettings_SuggestedChatsContacts: String { return self._s[783]! } + public var SharedMedia_CategoryLinks: String { return self._s[784]! } + public var Calls_Missed: String { return self._s[785]! } + public var Cache_Photos: String { return self._s[789]! } + public var GroupPermission_NoAddMembers: String { return self._s[790]! } + public var ScheduledMessages_Title: String { return self._s[791]! } public func Channel_AdminLog_MessageUnpinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[790]!, self._r[790]!, [_0]) + return formatWithArgumentRanges(self._s[792]!, self._r[792]!, [_0]) } - public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[791]! } - public var Settings_ProxyDisabled: String { return self._s[792]! } + public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[793]! } + public var Settings_ProxyDisabled: String { return self._s[794]! } public func Settings_ApplyProxyAlertCredentials(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[793]!, self._r[793]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[795]!, self._r[795]!, [_1, _2, _3, _4]) } public func Conversation_RestrictedMediaTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[794]!, self._r[794]!, [_0]) + return formatWithArgumentRanges(self._s[796]!, self._r[796]!, [_0]) } - public var ChatList_Context_RemoveFromRecents: String { return self._s[796]! } - public var Appearance_Title: String { return self._s[797]! } + public var ChatList_Context_RemoveFromRecents: String { return self._s[798]! } + public var Appearance_Title: String { return self._s[799]! } public func Time_MonthOfYear_m2(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[799]!, self._r[799]!, [_0]) + return formatWithArgumentRanges(self._s[801]!, self._r[801]!, [_0]) } - public var Conversation_WalletRequiredText: String { return self._s[800]! } - public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[801]! } - public var OldChannels_NoticeCreateText: String { return self._s[802]! } - public var Channel_EditMessageErrorGeneric: String { return self._s[803]! } - public var Privacy_Calls_IntegrationHelp: String { return self._s[804]! } - public var Preview_DeletePhoto: String { return self._s[805]! } - public var Appearance_AppIconFilledX: String { return self._s[806]! } - public var PrivacySettings_PrivacyTitle: String { return self._s[807]! } + public var Conversation_WalletRequiredText: String { return self._s[802]! } + public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[803]! } + public var OldChannels_NoticeCreateText: String { return self._s[804]! } + public var Channel_EditMessageErrorGeneric: String { return self._s[805]! } + public var Privacy_Calls_IntegrationHelp: String { return self._s[806]! } + public var Preview_DeletePhoto: String { return self._s[807]! } + public var Appearance_AppIconFilledX: String { return self._s[808]! } + public var PrivacySettings_PrivacyTitle: String { return self._s[809]! } public func Conversation_BotInteractiveUrlAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[808]!, self._r[808]!, [_0]) + return formatWithArgumentRanges(self._s[810]!, self._r[810]!, [_0]) } - public var Coub_TapForSound: String { return self._s[810]! } - public var Map_LocatingError: String { return self._s[811]! } - public var TwoStepAuth_EmailChangeSuccess: String { return self._s[813]! } - public var Conversation_SendMessage_SendSilently: String { return self._s[814]! } - public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[815]! } + public var Coub_TapForSound: String { return self._s[812]! } + public var Map_LocatingError: String { return self._s[813]! } + public var TwoStepAuth_EmailChangeSuccess: String { return self._s[815]! } + public var Conversation_SendMessage_SendSilently: String { return self._s[816]! } + public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[817]! } public func Wallet_Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[816]!, self._r[816]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[818]!, self._r[818]!, [_1, _2, _3]) } - public var Passport_ForgottenPassword: String { return self._s[817]! } - public var GroupInfo_InviteLink_RevokeLink: String { return self._s[818]! } - public var StickerPacksSettings_ArchivedPacks: String { return self._s[819]! } - public var Login_TermsOfServiceSignupDecline: String { return self._s[821]! } - public var Channel_Moderator_AccessLevelRevoke: String { return self._s[822]! } - public var Message_Location: String { return self._s[823]! } - public var Passport_Identity_NamePlaceholder: String { return self._s[824]! } - public var Channel_Management_Title: String { return self._s[825]! } - public var DialogList_SearchSectionDialogs: String { return self._s[827]! } - public var Compose_NewChannel_Members: String { return self._s[828]! } + public var Passport_ForgottenPassword: String { return self._s[819]! } + public var GroupInfo_InviteLink_RevokeLink: String { return self._s[820]! } + public var StickerPacksSettings_ArchivedPacks: String { return self._s[821]! } + public var Login_TermsOfServiceSignupDecline: String { return self._s[823]! } + public var Channel_Moderator_AccessLevelRevoke: String { return self._s[824]! } + public var Message_Location: String { return self._s[825]! } + public var Passport_Identity_NamePlaceholder: String { return self._s[826]! } + public var Channel_Management_Title: String { return self._s[827]! } + public var DialogList_SearchSectionDialogs: String { return self._s[829]! } + public var Compose_NewChannel_Members: String { return self._s[830]! } public func DialogList_SingleUploadingFileSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[829]!, self._r[829]!, [_0]) + return formatWithArgumentRanges(self._s[831]!, self._r[831]!, [_0]) } - public var GroupInfo_Location: String { return self._s[830]! } - public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[831]! } - public var ClearCache_Clear: String { return self._s[832]! } - public var AutoNightTheme_ScheduledFrom: String { return self._s[833]! } - public var PhotoEditor_WarmthTool: String { return self._s[834]! } - public var Passport_Language_tr: String { return self._s[835]! } + public var GroupInfo_Location: String { return self._s[832]! } + public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[833]! } + public var ClearCache_Clear: String { return self._s[834]! } + public var AutoNightTheme_ScheduledFrom: String { return self._s[835]! } + public var PhotoEditor_WarmthTool: String { return self._s[836]! } + public var Passport_Language_tr: String { return self._s[837]! } public func PUSH_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[836]!, self._r[836]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[838]!, self._r[838]!, [_1, _2, _3]) } - public var OldChannels_NoticeUpgradeText: String { return self._s[837]! } - public var Login_ResetAccountProtected_Reset: String { return self._s[839]! } - public var Watch_PhotoView_Title: String { return self._s[840]! } - public var Passport_Phone_Delete: String { return self._s[841]! } - public var Undo_ChatDeletedForBothSides: String { return self._s[842]! } - public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[843]! } - public var GroupInfo_Permissions: String { return self._s[844]! } - public var PasscodeSettings_TurnPasscodeOff: String { return self._s[845]! } - public var Profile_ShareContactButton: String { return self._s[846]! } - public var ChatSettings_Other: String { return self._s[847]! } - public var UserInfo_NotificationsDisabled: String { return self._s[848]! } - public var CheckoutInfo_ShippingInfoCity: String { return self._s[849]! } - public var LastSeen_WithinAMonth: String { return self._s[850]! } - public var VoiceOver_Chat_PlayHint: String { return self._s[851]! } - public var Conversation_ReportGroupLocation: String { return self._s[852]! } - public var Conversation_EncryptionCanceled: String { return self._s[853]! } - public var MediaPicker_GroupDescription: String { return self._s[854]! } - public var WebSearch_Images: String { return self._s[855]! } + public var OldChannels_NoticeUpgradeText: String { return self._s[839]! } + public var Login_ResetAccountProtected_Reset: String { return self._s[841]! } + public var Watch_PhotoView_Title: String { return self._s[842]! } + public var Passport_Phone_Delete: String { return self._s[843]! } + public var Undo_ChatDeletedForBothSides: String { return self._s[844]! } + public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[845]! } + public var GroupInfo_Permissions: String { return self._s[846]! } + public var PasscodeSettings_TurnPasscodeOff: String { return self._s[847]! } + public var Profile_ShareContactButton: String { return self._s[848]! } + public var ChatSettings_Other: String { return self._s[849]! } + public var UserInfo_NotificationsDisabled: String { return self._s[850]! } + public var CheckoutInfo_ShippingInfoCity: String { return self._s[851]! } + public var LastSeen_WithinAMonth: String { return self._s[852]! } + public var VoiceOver_Chat_PlayHint: String { return self._s[853]! } + public var Conversation_ReportGroupLocation: String { return self._s[854]! } + public var Conversation_EncryptionCanceled: String { return self._s[855]! } + public var MediaPicker_GroupDescription: String { return self._s[856]! } + public var WebSearch_Images: String { return self._s[857]! } public func Channel_Management_PromotedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[856]!, self._r[856]!, [_0]) + return formatWithArgumentRanges(self._s[858]!, self._r[858]!, [_0]) } - public var Message_Photo: String { return self._s[857]! } - public var PasscodeSettings_HelpBottom: String { return self._s[858]! } - public var AutoDownloadSettings_VideosTitle: String { return self._s[859]! } - public var VoiceOver_Media_PlaybackRateChange: String { return self._s[860]! } - public var Passport_Identity_AddDriversLicense: String { return self._s[861]! } - public var TwoStepAuth_EnterPasswordPassword: String { return self._s[862]! } - public var NotificationsSound_Calypso: String { return self._s[863]! } - public var Map_Map: String { return self._s[864]! } - public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[866]! } - public var ChatSettings_TextSizeUnits: String { return self._s[867]! } + public var Message_Photo: String { return self._s[859]! } + public var PasscodeSettings_HelpBottom: String { return self._s[860]! } + public var AutoDownloadSettings_VideosTitle: String { return self._s[861]! } + public var VoiceOver_Media_PlaybackRateChange: String { return self._s[862]! } + public var Passport_Identity_AddDriversLicense: String { return self._s[863]! } + public var TwoStepAuth_EnterPasswordPassword: String { return self._s[864]! } + public var NotificationsSound_Calypso: String { return self._s[865]! } + public var Map_Map: String { return self._s[866]! } + public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[868]! } + public var ChatSettings_TextSizeUnits: String { return self._s[869]! } public func VoiceOver_Chat_FileFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[868]!, self._r[868]!, [_0]) + return formatWithArgumentRanges(self._s[870]!, self._r[870]!, [_0]) } - public var Common_of: String { return self._s[869]! } - public var Conversation_ForwardContacts: String { return self._s[872]! } - public var IntentsSettings_SuggestByAll: String { return self._s[874]! } + public var Common_of: String { return self._s[871]! } + public var Conversation_ForwardContacts: String { return self._s[874]! } + public var IntentsSettings_SuggestByAll: String { return self._s[876]! } public func Call_AnsweringWithAccount(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[875]!, self._r[875]!, [_0]) + return formatWithArgumentRanges(self._s[877]!, self._r[877]!, [_0]) } - public var Passport_Language_hy: String { return self._s[876]! } - public var Notifications_MessageNotificationsHelp: String { return self._s[877]! } - public var AutoDownloadSettings_Reset: String { return self._s[878]! } - public var Wallet_TransactionInfo_AddressCopied: String { return self._s[879]! } - public var Paint_ClearConfirm: String { return self._s[880]! } - public var Camera_VideoMode: String { return self._s[881]! } + public var Passport_Language_hy: String { return self._s[878]! } + public var Notifications_MessageNotificationsHelp: String { return self._s[879]! } + public var AutoDownloadSettings_Reset: String { return self._s[880]! } + public var Wallet_TransactionInfo_AddressCopied: String { return self._s[881]! } + public var Paint_ClearConfirm: String { return self._s[882]! } + public var Camera_VideoMode: String { return self._s[883]! } public func Conversation_RestrictedStickersTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[882]!, self._r[882]!, [_0]) + return formatWithArgumentRanges(self._s[884]!, self._r[884]!, [_0]) } - public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[883]! } - public var Conversation_ViewBackground: String { return self._s[884]! } + public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[885]! } + public var Conversation_ViewBackground: String { return self._s[886]! } public func Wallet_Info_TransactionDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[885]!, self._r[885]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[887]!, self._r[887]!, [_1, _2, _3]) } - public var Passport_Language_el: String { return self._s[886]! } - public var PhotoEditor_Original: String { return self._s[887]! } - public var Settings_FAQ_Button: String { return self._s[889]! } - public var Channel_Setup_PublicNoLink: String { return self._s[891]! } - public var Conversation_UnsupportedMedia: String { return self._s[892]! } - public var Conversation_SlideToCancel: String { return self._s[893]! } - public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[894]! } - public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[895]! } - public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[896]! } - public var Conversation_ReportSpamChannelConfirmation: String { return self._s[897]! } - public var AutoNightTheme_NotAvailable: String { return self._s[898]! } - public var Conversation_Owner: String { return self._s[899]! } - public var Common_Create: String { return self._s[900]! } - public var Settings_ApplyProxyAlertEnable: String { return self._s[901]! } - public var ContactList_Context_Call: String { return self._s[902]! } - public var Localization_ChooseLanguage: String { return self._s[904]! } - public var ChatList_Context_AddToContacts: String { return self._s[906]! } - public var OldChannels_NoticeTitle: String { return self._s[907]! } - public var Settings_Proxy: String { return self._s[909]! } - public var Privacy_TopPeersHelp: String { return self._s[910]! } - public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[911]! } - public var Chat_UnsendMyMessages: String { return self._s[912]! } + public var Passport_Language_el: String { return self._s[888]! } + public var PhotoEditor_Original: String { return self._s[889]! } + public var Settings_FAQ_Button: String { return self._s[891]! } + public var Channel_Setup_PublicNoLink: String { return self._s[893]! } + public var Conversation_UnsupportedMedia: String { return self._s[894]! } + public var Conversation_SlideToCancel: String { return self._s[895]! } + public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[896]! } + public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[897]! } + public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[898]! } + public var Conversation_ReportSpamChannelConfirmation: String { return self._s[899]! } + public var AutoNightTheme_NotAvailable: String { return self._s[900]! } + public var Conversation_Owner: String { return self._s[901]! } + public var Common_Create: String { return self._s[902]! } + public var Settings_ApplyProxyAlertEnable: String { return self._s[903]! } + public var ContactList_Context_Call: String { return self._s[904]! } + public var Localization_ChooseLanguage: String { return self._s[906]! } + public var ChatList_Context_AddToContacts: String { return self._s[908]! } + public var OldChannels_NoticeTitle: String { return self._s[909]! } + public var Settings_Proxy: String { return self._s[911]! } + public var Privacy_TopPeersHelp: String { return self._s[912]! } + public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[913]! } + public var Chat_UnsendMyMessages: String { return self._s[914]! } public func VoiceOver_Chat_Duration(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[913]!, self._r[913]!, [_0]) + return formatWithArgumentRanges(self._s[915]!, self._r[915]!, [_0]) } - public var TwoStepAuth_ConfirmationAbort: String { return self._s[914]! } + public var TwoStepAuth_ConfirmationAbort: String { return self._s[916]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[916]!, self._r[916]!, [_0]) + return formatWithArgumentRanges(self._s[918]!, self._r[918]!, [_0]) } - public var Contacts_SortedByPresence: String { return self._s[917]! } - public var Passport_Identity_SurnamePlaceholder: String { return self._s[918]! } - public var Cache_Title: String { return self._s[919]! } + public var Contacts_SortedByPresence: String { return self._s[919]! } + public var Passport_Identity_SurnamePlaceholder: String { return self._s[920]! } + public var Cache_Title: String { return self._s[921]! } public func Login_PhoneBannedEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[920]!, self._r[920]!, [_0]) + return formatWithArgumentRanges(self._s[922]!, self._r[922]!, [_0]) } - public var TwoStepAuth_EmailCodeExpired: String { return self._s[921]! } - public var Channel_Moderator_Title: String { return self._s[922]! } - public var InstantPage_AutoNightTheme: String { return self._s[924]! } + public var TwoStepAuth_EmailCodeExpired: String { return self._s[923]! } + public var Channel_Moderator_Title: String { return self._s[924]! } + public var InstantPage_AutoNightTheme: String { return self._s[926]! } public func PUSH_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[927]!, self._r[927]!, [_1]) + return formatWithArgumentRanges(self._s[929]!, self._r[929]!, [_1]) } - public var Passport_Scans_Upload: String { return self._s[928]! } - public var Undo_Undo: String { return self._s[930]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[931]! } - public var TwoStepAuth_RemovePassword: String { return self._s[932]! } - public var Common_Delete: String { return self._s[933]! } - public var Contacts_AddPeopleNearby: String { return self._s[935]! } - public var Conversation_ContextMenuDelete: String { return self._s[936]! } - public var SocksProxySetup_Credentials: String { return self._s[937]! } - public var Appearance_EditTheme: String { return self._s[939]! } - public var ClearCache_StorageOtherApps: String { return self._s[940]! } - public var PasscodeSettings_AutoLock_Disabled: String { return self._s[941]! } - public var Wallet_Send_NetworkErrorText: String { return self._s[942]! } - public var AuthSessions_DevicesTitle: String { return self._s[944]! } - public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[946]! } - public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[947]! } - public var Passport_Language_id: String { return self._s[949]! } - public var WallpaperSearch_ColorTeal: String { return self._s[950]! } - public var ChannelIntro_Title: String { return self._s[951]! } + public var Passport_Scans_Upload: String { return self._s[930]! } + public var Undo_Undo: String { return self._s[932]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[933]! } + public var TwoStepAuth_RemovePassword: String { return self._s[934]! } + public var Common_Delete: String { return self._s[935]! } + public var Contacts_AddPeopleNearby: String { return self._s[937]! } + public var Conversation_ContextMenuDelete: String { return self._s[938]! } + public var SocksProxySetup_Credentials: String { return self._s[939]! } + public var Appearance_EditTheme: String { return self._s[941]! } + public var ClearCache_StorageOtherApps: String { return self._s[942]! } + public var PasscodeSettings_AutoLock_Disabled: String { return self._s[943]! } + public var Wallet_Send_NetworkErrorText: String { return self._s[944]! } + public var AuthSessions_DevicesTitle: String { return self._s[946]! } + public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[948]! } + public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[949]! } + public var Passport_Language_id: String { return self._s[951]! } + public var WallpaperSearch_ColorTeal: String { return self._s[952]! } + public var ChannelIntro_Title: String { return self._s[953]! } public func Channel_AdminLog_MessageToggleSignaturesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[952]!, self._r[952]!, [_0]) + return formatWithArgumentRanges(self._s[954]!, self._r[954]!, [_0]) } - public var VoiceOver_Chat_OpenLinkHint: String { return self._s[954]! } - public var VoiceOver_Chat_Reply: String { return self._s[955]! } - public var ScheduledMessages_BotActionUnavailable: String { return self._s[956]! } - public var Channel_Info_Description: String { return self._s[957]! } - public var Stickers_FavoriteStickers: String { return self._s[958]! } - public var Channel_BanUser_PermissionAddMembers: String { return self._s[959]! } - public var Notifications_DisplayNamesOnLockScreen: String { return self._s[960]! } - public var ChatSearch_ResultsTooltip: String { return self._s[961]! } - public var Wallet_VoiceOver_Editing_ClearText: String { return self._s[962]! } - public var Calls_NoMissedCallsPlacehoder: String { return self._s[963]! } - public var Group_PublicLink_Placeholder: String { return self._s[964]! } - public var Notifications_ExceptionsDefaultSound: String { return self._s[965]! } + public var VoiceOver_Chat_OpenLinkHint: String { return self._s[956]! } + public var VoiceOver_Chat_Reply: String { return self._s[957]! } + public var ScheduledMessages_BotActionUnavailable: String { return self._s[958]! } + public var Channel_Info_Description: String { return self._s[959]! } + public var Stickers_FavoriteStickers: String { return self._s[960]! } + public var Channel_BanUser_PermissionAddMembers: String { return self._s[961]! } + public var Notifications_DisplayNamesOnLockScreen: String { return self._s[962]! } + public var ChatSearch_ResultsTooltip: String { return self._s[963]! } + public var Wallet_VoiceOver_Editing_ClearText: String { return self._s[964]! } + public var Calls_NoMissedCallsPlacehoder: String { return self._s[965]! } + public var Group_PublicLink_Placeholder: String { return self._s[966]! } + public var Notifications_ExceptionsDefaultSound: String { return self._s[967]! } public func PUSH_CHANNEL_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[966]!, self._r[966]!, [_1]) + return formatWithArgumentRanges(self._s[968]!, self._r[968]!, [_1]) } - public var TextFormat_Underline: String { return self._s[967]! } + public var TextFormat_Underline: String { return self._s[969]! } public func DialogList_SearchSubtitleFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[969]!, self._r[969]!, [_1, _2]) + return formatWithArgumentRanges(self._s[971]!, self._r[971]!, [_1, _2]) } public func Channel_AdminLog_MessageRemovedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[970]!, self._r[970]!, [_0]) + return formatWithArgumentRanges(self._s[972]!, self._r[972]!, [_0]) } - public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[971]! } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[973]! } public func Channel_OwnershipTransfer_TransferCompleted(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[972]!, self._r[972]!, [_1, _2]) + return formatWithArgumentRanges(self._s[974]!, self._r[974]!, [_1, _2]) } - public var Wallet_Intro_ImportExisting: String { return self._s[973]! } - public var GroupPermission_Delete: String { return self._s[974]! } - public var Passport_Language_uk: String { return self._s[975]! } - public var StickerPack_HideStickers: String { return self._s[977]! } - public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[978]! } + public var Wallet_Intro_ImportExisting: String { return self._s[975]! } + public var GroupPermission_Delete: String { return self._s[976]! } + public var Passport_Language_uk: String { return self._s[977]! } + public var StickerPack_HideStickers: String { return self._s[979]! } + public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[980]! } public func PUSH_CHAT_MESSAGE_PHOTO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[979]!, self._r[979]!, [_1, _2]) + return formatWithArgumentRanges(self._s[981]!, self._r[981]!, [_1, _2]) } - public var Activity_UploadingVideoMessage: String { return self._s[980]! } + public var Activity_UploadingVideoMessage: String { return self._s[982]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[981]!, self._r[981]!, [_0]) + return formatWithArgumentRanges(self._s[983]!, self._r[983]!, [_0]) } - public var Channel_TitleInfo: String { return self._s[982]! } - public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[983]! } - public var Settings_CallSettings: String { return self._s[984]! } - public var Camera_SquareMode: String { return self._s[985]! } - public var Conversation_SendMessage_ScheduleMessage: String { return self._s[986]! } - public var GroupInfo_SharedMediaNone: String { return self._s[987]! } + public var Channel_TitleInfo: String { return self._s[984]! } + public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[985]! } + public var Settings_CallSettings: String { return self._s[986]! } + public var Camera_SquareMode: String { return self._s[987]! } + public var Conversation_SendMessage_ScheduleMessage: String { return self._s[988]! } + public var GroupInfo_SharedMediaNone: String { return self._s[989]! } public func PUSH_MESSAGE_VIDEO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[988]!, self._r[988]!, [_1]) + return formatWithArgumentRanges(self._s[990]!, self._r[990]!, [_1]) } - public var Bot_GenericBotStatus: String { return self._s[989]! } - public var Application_Update: String { return self._s[991]! } - public var Month_ShortJanuary: String { return self._s[992]! } - public var Contacts_PermissionsKeepDisabled: String { return self._s[993]! } - public var Channel_AdminLog_BanReadMessages: String { return self._s[994]! } - public var Settings_AppLanguage_Unofficial: String { return self._s[995]! } - public var Passport_Address_Street2Placeholder: String { return self._s[996]! } + public var Bot_GenericBotStatus: String { return self._s[991]! } + public var Application_Update: String { return self._s[993]! } + public var Month_ShortJanuary: String { return self._s[994]! } + public var Contacts_PermissionsKeepDisabled: String { return self._s[995]! } + public var Channel_AdminLog_BanReadMessages: String { return self._s[996]! } + public var Settings_AppLanguage_Unofficial: String { return self._s[997]! } + public var Passport_Address_Street2Placeholder: String { return self._s[998]! } public func Map_LiveLocationShortHour(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[997]!, self._r[997]!, [_0]) + return formatWithArgumentRanges(self._s[999]!, self._r[999]!, [_0]) } - public var NetworkUsageSettings_Cellular: String { return self._s[998]! } - public var Appearance_PreviewOutgoingText: String { return self._s[999]! } + public var NetworkUsageSettings_Cellular: String { return self._s[1000]! } + public var Appearance_PreviewOutgoingText: String { return self._s[1001]! } public func StickerPackActionInfo_RemovedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1000]!, self._r[1000]!, [_0]) + return formatWithArgumentRanges(self._s[1002]!, self._r[1002]!, [_0]) } - public var Notifications_PermissionsAllowInSettings: String { return self._s[1001]! } - public var AutoDownloadSettings_OnForAll: String { return self._s[1003]! } - public var Map_Directions: String { return self._s[1004]! } - public var Passport_FieldIdentityTranslationHelp: String { return self._s[1006]! } - public var Appearance_ThemeDay: String { return self._s[1007]! } - public var LogoutOptions_LogOut: String { return self._s[1008]! } - public var Group_PublicLink_Title: String { return self._s[1010]! } - public var Channel_AddBotErrorNoRights: String { return self._s[1011]! } - public var ChatList_Search_ShowLess: String { return self._s[1012]! } - public var Passport_Identity_AddPassport: String { return self._s[1013]! } - public var LocalGroup_ButtonTitle: String { return self._s[1014]! } - public var Call_Message: String { return self._s[1015]! } - public var PhotoEditor_ExposureTool: String { return self._s[1016]! } - public var Wallet_Receive_CommentInfo: String { return self._s[1018]! } - public var Passport_FieldOneOf_Delimeter: String { return self._s[1019]! } - public var Channel_AdminLog_CanBanUsers: String { return self._s[1021]! } - public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[1022]! } - public var Appearance_Preview: String { return self._s[1023]! } - public var Compose_ChannelMembers: String { return self._s[1024]! } - public var Conversation_DeleteManyMessages: String { return self._s[1025]! } - public var ReportPeer_ReasonOther_Title: String { return self._s[1026]! } - public var Checkout_ErrorProviderAccountTimeout: String { return self._s[1027]! } - public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[1028]! } - public var Channel_Stickers_CreateYourOwn: String { return self._s[1031]! } - public var Conversation_UpdateTelegram: String { return self._s[1032]! } - public var EditTheme_Create_TopInfo: String { return self._s[1033]! } + public var Notifications_PermissionsAllowInSettings: String { return self._s[1003]! } + public var AutoDownloadSettings_OnForAll: String { return self._s[1005]! } + public var Map_Directions: String { return self._s[1006]! } + public var Passport_FieldIdentityTranslationHelp: String { return self._s[1008]! } + public var Appearance_ThemeDay: String { return self._s[1009]! } + public var LogoutOptions_LogOut: String { return self._s[1010]! } + public var Group_PublicLink_Title: String { return self._s[1012]! } + public var Channel_AddBotErrorNoRights: String { return self._s[1013]! } + public var ChatList_Search_ShowLess: String { return self._s[1014]! } + public var Passport_Identity_AddPassport: String { return self._s[1015]! } + public var LocalGroup_ButtonTitle: String { return self._s[1016]! } + public var Call_Message: String { return self._s[1017]! } + public var PhotoEditor_ExposureTool: String { return self._s[1018]! } + public var Wallet_Receive_CommentInfo: String { return self._s[1020]! } + public var Passport_FieldOneOf_Delimeter: String { return self._s[1021]! } + public var Channel_AdminLog_CanBanUsers: String { return self._s[1023]! } + public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[1024]! } + public var Appearance_Preview: String { return self._s[1025]! } + public var Compose_ChannelMembers: String { return self._s[1026]! } + public var Conversation_DeleteManyMessages: String { return self._s[1027]! } + public var ReportPeer_ReasonOther_Title: String { return self._s[1028]! } + public var Checkout_ErrorProviderAccountTimeout: String { return self._s[1029]! } + public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[1030]! } + public var Channel_Stickers_CreateYourOwn: String { return self._s[1033]! } + public var Conversation_UpdateTelegram: String { return self._s[1034]! } + public var EditTheme_Create_TopInfo: String { return self._s[1035]! } public func Notification_PinnedPhotoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1034]!, self._r[1034]!, [_0]) + return formatWithArgumentRanges(self._s[1036]!, self._r[1036]!, [_0]) } - public var Wallet_WordCheck_Continue: String { return self._s[1035]! } - public var TwoFactorSetup_Hint_Action: String { return self._s[1036]! } - public var IntentsSettings_ResetAll: String { return self._s[1037]! } + public var Wallet_WordCheck_Continue: String { return self._s[1037]! } + public var TwoFactorSetup_Hint_Action: String { return self._s[1038]! } + public var IntentsSettings_ResetAll: String { return self._s[1039]! } public func PUSH_PINNED_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1038]!, self._r[1038]!, [_1]) + return formatWithArgumentRanges(self._s[1040]!, self._r[1040]!, [_1]) } - public var GroupInfo_Administrators_Title: String { return self._s[1039]! } - public var Privacy_Forwards_PreviewMessageText: String { return self._s[1040]! } + public var GroupInfo_Administrators_Title: String { return self._s[1041]! } + public var Privacy_Forwards_PreviewMessageText: String { return self._s[1042]! } public func PrivacySettings_LastSeenNobodyPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1041]!, self._r[1041]!, [_0]) + return formatWithArgumentRanges(self._s[1043]!, self._r[1043]!, [_0]) } - public var Tour_Title3: String { return self._s[1042]! } - public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[1043]! } - public var Clipboard_SendPhoto: String { return self._s[1047]! } - public var MediaPicker_Videos: String { return self._s[1048]! } - public var Passport_Email_Title: String { return self._s[1049]! } + public var Tour_Title3: String { return self._s[1044]! } + public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[1045]! } + public var Clipboard_SendPhoto: String { return self._s[1049]! } + public var MediaPicker_Videos: String { return self._s[1050]! } + public var Passport_Email_Title: String { return self._s[1051]! } public func PrivacySettings_LastSeenEverybodyMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1050]!, self._r[1050]!, [_0]) + return formatWithArgumentRanges(self._s[1052]!, self._r[1052]!, [_0]) } - public var StickerPacksSettings_Title: String { return self._s[1051]! } - public var Conversation_MessageDialogDelete: String { return self._s[1052]! } - public var Privacy_Calls_CustomHelp: String { return self._s[1054]! } - public var Message_Wallpaper: String { return self._s[1055]! } - public var MemberSearch_BotSection: String { return self._s[1056]! } - public var GroupInfo_SetSound: String { return self._s[1057]! } - public var Core_ServiceUserStatus: String { return self._s[1058]! } - public var LiveLocationUpdated_JustNow: String { return self._s[1059]! } - public var Call_StatusFailed: String { return self._s[1060]! } - public var TwoFactorSetup_Email_Placeholder: String { return self._s[1061]! } - public var TwoStepAuth_SetupPasswordDescription: String { return self._s[1062]! } - public var TwoStepAuth_SetPassword: String { return self._s[1063]! } - public var Permissions_PeopleNearbyText_v0: String { return self._s[1064]! } + public var StickerPacksSettings_Title: String { return self._s[1053]! } + public var Conversation_MessageDialogDelete: String { return self._s[1054]! } + public var Privacy_Calls_CustomHelp: String { return self._s[1056]! } + public var Message_Wallpaper: String { return self._s[1057]! } + public var MemberSearch_BotSection: String { return self._s[1058]! } + public var GroupInfo_SetSound: String { return self._s[1059]! } + public var Core_ServiceUserStatus: String { return self._s[1060]! } + public var LiveLocationUpdated_JustNow: String { return self._s[1061]! } + public var Call_StatusFailed: String { return self._s[1062]! } + public var TwoFactorSetup_Email_Placeholder: String { return self._s[1063]! } + public var TwoStepAuth_SetupPasswordDescription: String { return self._s[1064]! } + public var TwoStepAuth_SetPassword: String { return self._s[1065]! } + public var Permissions_PeopleNearbyText_v0: String { return self._s[1066]! } public func SocksProxySetup_ProxyStatusPing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1066]!, self._r[1066]!, [_0]) + return formatWithArgumentRanges(self._s[1068]!, self._r[1068]!, [_0]) } - public var Calls_SubmitRating: String { return self._s[1067]! } - public var Map_NoPlacesNearby: String { return self._s[1068]! } - public var Profile_Username: String { return self._s[1069]! } - public var Bot_DescriptionTitle: String { return self._s[1070]! } - public var MaskStickerSettings_Title: String { return self._s[1071]! } - public var SharedMedia_CategoryOther: String { return self._s[1072]! } - public var GroupInfo_SetGroupPhoto: String { return self._s[1073]! } - public var Common_NotNow: String { return self._s[1074]! } - public var CallFeedback_IncludeLogsInfo: String { return self._s[1075]! } - public var Conversation_ShareMyPhoneNumber: String { return self._s[1076]! } - public var Map_Location: String { return self._s[1077]! } - public var Invitation_JoinGroup: String { return self._s[1078]! } - public var AutoDownloadSettings_Title: String { return self._s[1080]! } - public var Conversation_DiscardVoiceMessageDescription: String { return self._s[1081]! } - public var Channel_ErrorAddBlocked: String { return self._s[1082]! } - public var Conversation_UnblockUser: String { return self._s[1083]! } - public var EditTheme_Edit_TopInfo: String { return self._s[1084]! } - public var Watch_Bot_Restart: String { return self._s[1085]! } - public var TwoStepAuth_Title: String { return self._s[1086]! } - public var Channel_AdminLog_BanSendMessages: String { return self._s[1087]! } - public var Checkout_ShippingMethod: String { return self._s[1088]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[1089]! } + public var Calls_SubmitRating: String { return self._s[1069]! } + public var Map_NoPlacesNearby: String { return self._s[1070]! } + public var Profile_Username: String { return self._s[1071]! } + public var Bot_DescriptionTitle: String { return self._s[1072]! } + public var MaskStickerSettings_Title: String { return self._s[1073]! } + public var SharedMedia_CategoryOther: String { return self._s[1074]! } + public var GroupInfo_SetGroupPhoto: String { return self._s[1075]! } + public var Common_NotNow: String { return self._s[1076]! } + public var CallFeedback_IncludeLogsInfo: String { return self._s[1077]! } + public var Conversation_ShareMyPhoneNumber: String { return self._s[1078]! } + public var Map_Location: String { return self._s[1079]! } + public var Invitation_JoinGroup: String { return self._s[1080]! } + public var AutoDownloadSettings_Title: String { return self._s[1082]! } + public var Conversation_DiscardVoiceMessageDescription: String { return self._s[1083]! } + public var Channel_ErrorAddBlocked: String { return self._s[1084]! } + public var Conversation_UnblockUser: String { return self._s[1085]! } + public var EditTheme_Edit_TopInfo: String { return self._s[1086]! } + public var Watch_Bot_Restart: String { return self._s[1087]! } + public var TwoStepAuth_Title: String { return self._s[1088]! } + public var Channel_AdminLog_BanSendMessages: String { return self._s[1089]! } + public var Checkout_ShippingMethod: String { return self._s[1090]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[1091]! } public func PUSH_CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1090]!, self._r[1090]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1092]!, self._r[1092]!, [_1, _2, _3]) } - public var EditTheme_ChangeColors: String { return self._s[1092]! } + public var EditTheme_ChangeColors: String { return self._s[1094]! } public func Chat_UnsendMyMessagesAlertTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1093]!, self._r[1093]!, [_0]) + return formatWithArgumentRanges(self._s[1095]!, self._r[1095]!, [_0]) } public func Channel_Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1094]!, self._r[1094]!, [_0]) + return formatWithArgumentRanges(self._s[1096]!, self._r[1096]!, [_0]) } - public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[1095]! } - public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[1096]! } - public var AuthSessions_TerminateOtherSessions: String { return self._s[1097]! } - public var Contacts_FailedToSendInvitesMessage: String { return self._s[1098]! } - public var PrivacySettings_TwoStepAuth: String { return self._s[1099]! } - public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[1100]! } - public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[1101]! } - public var Conversation_EditingMessagePanelMedia: String { return self._s[1102]! } - public var Checkout_PaymentMethod_Title: String { return self._s[1103]! } - public var SocksProxySetup_Connection: String { return self._s[1104]! } - public var Group_MessagePhotoRemoved: String { return self._s[1105]! } - public var Channel_Stickers_NotFound: String { return self._s[1108]! } - public var Group_About_Help: String { return self._s[1109]! } - public var Notification_PassportValueProofOfIdentity: String { return self._s[1110]! } - public var PeopleNearby_Title: String { return self._s[1112]! } + public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[1097]! } + public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[1098]! } + public var AuthSessions_TerminateOtherSessions: String { return self._s[1099]! } + public var Contacts_FailedToSendInvitesMessage: String { return self._s[1100]! } + public var PrivacySettings_TwoStepAuth: String { return self._s[1101]! } + public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[1102]! } + public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[1103]! } + public var Conversation_EditingMessagePanelMedia: String { return self._s[1104]! } + public var Checkout_PaymentMethod_Title: String { return self._s[1105]! } + public var SocksProxySetup_Connection: String { return self._s[1106]! } + public var Group_MessagePhotoRemoved: String { return self._s[1107]! } + public var Channel_Stickers_NotFound: String { return self._s[1110]! } + public var Group_About_Help: String { return self._s[1111]! } + public var Notification_PassportValueProofOfIdentity: String { return self._s[1112]! } + public var PeopleNearby_Title: String { return self._s[1114]! } public func ApplyLanguage_ChangeLanguageOfficialText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1113]!, self._r[1113]!, [_1]) + return formatWithArgumentRanges(self._s[1115]!, self._r[1115]!, [_1]) } - public var Map_Home: String { return self._s[1114]! } - public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[1116]! } - public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[1117]! } - public var SocksProxySetup_Password: String { return self._s[1118]! } - public var Notifications_PermissionsEnable: String { return self._s[1119]! } - public var TwoStepAuth_ChangeEmail: String { return self._s[1121]! } + public var Map_Home: String { return self._s[1116]! } + public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[1118]! } + public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[1119]! } + public var SocksProxySetup_Password: String { return self._s[1120]! } + public var Notifications_PermissionsEnable: String { return self._s[1121]! } + public var TwoStepAuth_ChangeEmail: String { return self._s[1123]! } public func Channel_AdminLog_MessageInvitedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1122]!, self._r[1122]!, [_1]) + return formatWithArgumentRanges(self._s[1124]!, self._r[1124]!, [_1]) } public func Time_MonthOfYear_m10(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1124]!, self._r[1124]!, [_0]) + return formatWithArgumentRanges(self._s[1126]!, self._r[1126]!, [_0]) } - public var Passport_Identity_TypeDriversLicense: String { return self._s[1125]! } - public var ArchivedPacksAlert_Title: String { return self._s[1126]! } - public var Wallet_Receive_InvoiceUrlCopied: String { return self._s[1127]! } - public var Map_PlacesNearby: String { return self._s[1128]! } + public var Passport_Identity_TypeDriversLicense: String { return self._s[1127]! } + public var ArchivedPacksAlert_Title: String { return self._s[1128]! } + public var Wallet_Receive_InvoiceUrlCopied: String { return self._s[1129]! } + public var Map_PlacesNearby: String { return self._s[1130]! } public func Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1129]!, self._r[1129]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1131]!, self._r[1131]!, [_1, _2, _3]) } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[1130]! } - public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[1132]! } - public var Conversation_StatusTyping: String { return self._s[1133]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[1134]! } - public var Notification_PassportValueProofOfAddress: String { return self._s[1135]! } - public var UserInfo_CreateNewContact: String { return self._s[1136]! } - public var Passport_Identity_FrontSide: String { return self._s[1137]! } - public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[1138]! } - public var Calls_CallTabTitle: String { return self._s[1139]! } - public var Channel_AdminLog_ChannelEmptyText: String { return self._s[1140]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[1132]! } + public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[1134]! } + public var Conversation_StatusTyping: String { return self._s[1135]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[1136]! } + public var Notification_PassportValueProofOfAddress: String { return self._s[1137]! } + public var UserInfo_CreateNewContact: String { return self._s[1138]! } + public var Passport_Identity_FrontSide: String { return self._s[1139]! } + public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[1140]! } + public var Calls_CallTabTitle: String { return self._s[1141]! } + public var Channel_AdminLog_ChannelEmptyText: String { return self._s[1142]! } public func Login_BannedPhoneBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1142]!, self._r[1142]!, [_0]) + return formatWithArgumentRanges(self._s[1144]!, self._r[1144]!, [_0]) } - public var Watch_UserInfo_MuteTitle: String { return self._s[1143]! } - public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[1144]! } - public var SharedMedia_EmptyMusicText: String { return self._s[1145]! } - public var Wallet_Completed_Text: String { return self._s[1146]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[1147]! } - public var Paint_Stickers: String { return self._s[1148]! } - public var Privacy_GroupsAndChannels: String { return self._s[1149]! } - public var ChatList_Context_Delete: String { return self._s[1151]! } - public var UserInfo_AddContact: String { return self._s[1152]! } + public var Watch_UserInfo_MuteTitle: String { return self._s[1145]! } + public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[1146]! } + public var SharedMedia_EmptyMusicText: String { return self._s[1147]! } + public var Wallet_Completed_Text: String { return self._s[1148]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[1149]! } + public var Paint_Stickers: String { return self._s[1150]! } + public var Privacy_GroupsAndChannels: String { return self._s[1151]! } + public var ChatList_Context_Delete: String { return self._s[1153]! } + public var UserInfo_AddContact: String { return self._s[1154]! } public func Conversation_MessageViaUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1153]!, self._r[1153]!, [_0]) + return formatWithArgumentRanges(self._s[1155]!, self._r[1155]!, [_0]) } - public var PhoneNumberHelp_ChangeNumber: String { return self._s[1155]! } + public var PhoneNumberHelp_ChangeNumber: String { return self._s[1157]! } public func ChatList_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1157]!, self._r[1157]!, [_0]) + return formatWithArgumentRanges(self._s[1159]!, self._r[1159]!, [_0]) } - public var DialogList_NoMessagesTitle: String { return self._s[1158]! } - public var EditProfile_NameAndPhotoHelp: String { return self._s[1159]! } - public var BlockedUsers_BlockUser: String { return self._s[1160]! } - public var Notifications_PermissionsOpenSettings: String { return self._s[1161]! } - public var MediaPicker_UngroupDescription: String { return self._s[1162]! } - public var Watch_NoConnection: String { return self._s[1163]! } - public var Month_GenSeptember: String { return self._s[1164]! } - public var Conversation_ViewGroup: String { return self._s[1166]! } - public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[1169]! } - public var Privacy_Forwards_AlwaysLink: String { return self._s[1170]! } - public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1171]! } - public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[1172]! } - public var Wallet_WordCheck_IncorrectHeader: String { return self._s[1173]! } - public var MediaPicker_CameraRoll: String { return self._s[1175]! } - public var Month_GenAugust: String { return self._s[1176]! } - public var Wallet_Configuration_SourceHeader: String { return self._s[1177]! } - public var AccessDenied_VideoMessageMicrophone: String { return self._s[1178]! } - public var SharedMedia_EmptyText: String { return self._s[1179]! } - public var Map_ShareLiveLocation: String { return self._s[1180]! } - public var Calls_All: String { return self._s[1181]! } - public var Map_SendThisPlace: String { return self._s[1183]! } - public var Appearance_ThemeNight: String { return self._s[1185]! } - public var Conversation_HoldForAudio: String { return self._s[1186]! } - public var SettingsSearch_Synonyms_Support: String { return self._s[1189]! } - public var GroupInfo_GroupHistoryHidden: String { return self._s[1190]! } - public var SocksProxySetup_Secret: String { return self._s[1191]! } + public var DialogList_NoMessagesTitle: String { return self._s[1160]! } + public var EditProfile_NameAndPhotoHelp: String { return self._s[1161]! } + public var BlockedUsers_BlockUser: String { return self._s[1162]! } + public var Notifications_PermissionsOpenSettings: String { return self._s[1163]! } + public var MediaPicker_UngroupDescription: String { return self._s[1164]! } + public var Watch_NoConnection: String { return self._s[1165]! } + public var Month_GenSeptember: String { return self._s[1166]! } + public var Conversation_ViewGroup: String { return self._s[1168]! } + public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[1171]! } + public var Privacy_Forwards_AlwaysLink: String { return self._s[1172]! } + public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1173]! } + public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[1174]! } + public var Wallet_WordCheck_IncorrectHeader: String { return self._s[1175]! } + public var MediaPicker_CameraRoll: String { return self._s[1177]! } + public var Month_GenAugust: String { return self._s[1178]! } + public var Wallet_Configuration_SourceHeader: String { return self._s[1179]! } + public var AccessDenied_VideoMessageMicrophone: String { return self._s[1180]! } + public var SharedMedia_EmptyText: String { return self._s[1181]! } + public var Map_ShareLiveLocation: String { return self._s[1182]! } + public var Calls_All: String { return self._s[1183]! } + public var Map_SendThisPlace: String { return self._s[1185]! } + public var Appearance_ThemeNight: String { return self._s[1187]! } + public var Conversation_HoldForAudio: String { return self._s[1188]! } + public var SettingsSearch_Synonyms_Support: String { return self._s[1191]! } + public var GroupInfo_GroupHistoryHidden: String { return self._s[1192]! } + public var SocksProxySetup_Secret: String { return self._s[1193]! } public func Activity_RemindAboutChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1192]!, self._r[1192]!, [_0]) + return formatWithArgumentRanges(self._s[1194]!, self._r[1194]!, [_0]) } - public var Channel_BanList_RestrictedTitle: String { return self._s[1194]! } - public var Conversation_Location: String { return self._s[1195]! } + public var Channel_BanList_RestrictedTitle: String { return self._s[1196]! } + public var Conversation_Location: String { return self._s[1197]! } public func AutoDownloadSettings_UpToFor(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1196]!, self._r[1196]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1198]!, self._r[1198]!, [_1, _2]) } - public var ChatSettings_AutoDownloadPhotos: String { return self._s[1198]! } - public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1199]! } - public var Notifications_PermissionsText: String { return self._s[1200]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1201]! } - public var Call_Flip: String { return self._s[1202]! } - public var Channel_AdminLog_CanDeleteMessagesOfOthers: String { return self._s[1204]! } - public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1205]! } - public var Wallet_TransactionInfo_StorageFeeInfoUrl: String { return self._s[1206]! } - public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[1207]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1209]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1211]! } - public var Channel_TooMuchBots: String { return self._s[1213]! } - public var Passport_DeletePassportConfirmation: String { return self._s[1214]! } - public var Login_InvalidCodeError: String { return self._s[1215]! } - public var StickerPacksSettings_FeaturedPacks: String { return self._s[1216]! } + public var ChatSettings_AutoDownloadPhotos: String { return self._s[1200]! } + public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1201]! } + public var Notifications_PermissionsText: String { return self._s[1202]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1203]! } + public var Call_Flip: String { return self._s[1204]! } + public var Channel_AdminLog_CanDeleteMessagesOfOthers: String { return self._s[1206]! } + public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1207]! } + public var Wallet_TransactionInfo_StorageFeeInfoUrl: String { return self._s[1208]! } + public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[1209]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1211]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1213]! } + public var Channel_TooMuchBots: String { return self._s[1215]! } + public var Passport_DeletePassportConfirmation: String { return self._s[1216]! } + public var Login_InvalidCodeError: String { return self._s[1217]! } + public var StickerPacksSettings_FeaturedPacks: String { return self._s[1218]! } public func ChatList_DeleteSecretChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1217]!, self._r[1217]!, [_0]) + return formatWithArgumentRanges(self._s[1219]!, self._r[1219]!, [_0]) } public func GroupInfo_InvitationLinkAcceptChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1218]!, self._r[1218]!, [_0]) + return formatWithArgumentRanges(self._s[1220]!, self._r[1220]!, [_0]) } - public var VoiceOver_Navigation_ProxySettings: String { return self._s[1219]! } - public var Call_CallInProgressTitle: String { return self._s[1220]! } - public var Month_ShortSeptember: String { return self._s[1221]! } - public var Watch_ChannelInfo_Title: String { return self._s[1222]! } - public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1225]! } - public var DialogList_PasscodeLockHelp: String { return self._s[1226]! } - public var Chat_MultipleTextMessagesDisabled: String { return self._s[1227]! } - public var Wallet_Receive_Title: String { return self._s[1228]! } - public var Notifications_Badge_IncludePublicGroups: String { return self._s[1229]! } - public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1230]! } - public var PhotoEditor_CropReset: String { return self._s[1231]! } - public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1233]! } - public var Channel_Management_LabelEditor: String { return self._s[1234]! } - public var Passport_Identity_LatinNameHelp: String { return self._s[1236]! } - public var PhotoEditor_HighlightsTool: String { return self._s[1237]! } - public var Wallet_Info_WalletCreated: String { return self._s[1238]! } - public var UserInfo_Title: String { return self._s[1239]! } - public var ChatList_HideAction: String { return self._s[1240]! } - public var AccessDenied_Title: String { return self._s[1241]! } - public var DialogList_SearchLabel: String { return self._s[1242]! } - public var Group_Setup_HistoryHidden: String { return self._s[1243]! } - public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1244]! } - public var State_Updating: String { return self._s[1246]! } - public var Contacts_TabTitle: String { return self._s[1247]! } - public var Notifications_Badge_CountUnreadMessages: String { return self._s[1249]! } - public var GroupInfo_GroupHistory: String { return self._s[1250]! } - public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1251]! } - public var Wallpaper_SetColor: String { return self._s[1252]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1253]! } - public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1254]! } - public var Chat_AttachmentLimitReached: String { return self._s[1255]! } - public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1256]! } - public var Contacts_NotRegisteredSection: String { return self._s[1257]! } + public var VoiceOver_Navigation_ProxySettings: String { return self._s[1221]! } + public var Call_CallInProgressTitle: String { return self._s[1222]! } + public var Month_ShortSeptember: String { return self._s[1223]! } + public var Watch_ChannelInfo_Title: String { return self._s[1224]! } + public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1227]! } + public var DialogList_PasscodeLockHelp: String { return self._s[1228]! } + public var Chat_MultipleTextMessagesDisabled: String { return self._s[1229]! } + public var Wallet_Receive_Title: String { return self._s[1230]! } + public var Notifications_Badge_IncludePublicGroups: String { return self._s[1231]! } + public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1232]! } + public var PhotoEditor_CropReset: String { return self._s[1233]! } + public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1235]! } + public var Channel_Management_LabelEditor: String { return self._s[1236]! } + public var Passport_Identity_LatinNameHelp: String { return self._s[1238]! } + public var PhotoEditor_HighlightsTool: String { return self._s[1239]! } + public var Wallet_Info_WalletCreated: String { return self._s[1240]! } + public var UserInfo_Title: String { return self._s[1241]! } + public var ChatList_HideAction: String { return self._s[1242]! } + public var AccessDenied_Title: String { return self._s[1243]! } + public var DialogList_SearchLabel: String { return self._s[1244]! } + public var Group_Setup_HistoryHidden: String { return self._s[1245]! } + public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1246]! } + public var State_Updating: String { return self._s[1248]! } + public var Contacts_TabTitle: String { return self._s[1249]! } + public var Notifications_Badge_CountUnreadMessages: String { return self._s[1251]! } + public var GroupInfo_GroupHistory: String { return self._s[1252]! } + public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1253]! } + public var Wallpaper_SetColor: String { return self._s[1254]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1255]! } + public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1256]! } + public var Chat_AttachmentLimitReached: String { return self._s[1257]! } + public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1258]! } + public var Contacts_NotRegisteredSection: String { return self._s[1259]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1258]!, self._r[1258]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1260]!, self._r[1260]!, [_1, _2, _3]) } - public var Paint_Clear: String { return self._s[1259]! } - public var StickerPacksSettings_ArchivedMasks: String { return self._s[1260]! } - public var SocksProxySetup_Connecting: String { return self._s[1261]! } - public var ExplicitContent_AlertChannel: String { return self._s[1262]! } - public var CreatePoll_AllOptionsAdded: String { return self._s[1263]! } - public var Conversation_Contact: String { return self._s[1264]! } - public var Login_CodeExpired: String { return self._s[1265]! } - public var Passport_DiscardMessageAction: String { return self._s[1266]! } - public var ChatList_Context_Unpin: String { return self._s[1267]! } - public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1268]! } + public var Paint_Clear: String { return self._s[1261]! } + public var StickerPacksSettings_ArchivedMasks: String { return self._s[1262]! } + public var SocksProxySetup_Connecting: String { return self._s[1263]! } + public var ExplicitContent_AlertChannel: String { return self._s[1264]! } + public var CreatePoll_AllOptionsAdded: String { return self._s[1265]! } + public var Conversation_Contact: String { return self._s[1266]! } + public var Login_CodeExpired: String { return self._s[1267]! } + public var Passport_DiscardMessageAction: String { return self._s[1268]! } + public var ChatList_Context_Unpin: String { return self._s[1269]! } + public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1270]! } public func VoiceOver_Chat_MusicFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1269]!, self._r[1269]!, [_0]) + return formatWithArgumentRanges(self._s[1271]!, self._r[1271]!, [_0]) } - public var Channel_AdminLog_EmptyMessageText: String { return self._s[1270]! } - public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1271]! } + public var Channel_AdminLog_EmptyMessageText: String { return self._s[1272]! } + public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1273]! } public func Group_EditAdmin_RankInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1272]!, self._r[1272]!, [_0]) + return formatWithArgumentRanges(self._s[1274]!, self._r[1274]!, [_0]) } - public var Month_ShortApril: String { return self._s[1273]! } - public var AuthSessions_CurrentSession: String { return self._s[1274]! } - public var Chat_AttachmentMultipleFilesDisabled: String { return self._s[1277]! } - public var Wallet_Navigation_Cancel: String { return self._s[1279]! } - public var WallpaperPreview_CropTopText: String { return self._s[1280]! } - public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1281]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1282]! } + public var Month_ShortApril: String { return self._s[1275]! } + public var AuthSessions_CurrentSession: String { return self._s[1276]! } + public var Chat_AttachmentMultipleFilesDisabled: String { return self._s[1279]! } + public var Wallet_Navigation_Cancel: String { return self._s[1281]! } + public var WallpaperPreview_CropTopText: String { return self._s[1282]! } + public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1283]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1284]! } public func Conversation_ScheduleMessage_SendOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1283]!, self._r[1283]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1285]!, self._r[1285]!, [_0, _1]) } - public var Appearance_ThemePreview_Chat_2_Text: String { return self._s[1284]! } - public var Channel_Setup_TypePrivate: String { return self._s[1286]! } - public var Forward_ChannelReadOnly: String { return self._s[1289]! } - public var PhotoEditor_CurvesBlue: String { return self._s[1290]! } - public var AddContact_SharedContactException: String { return self._s[1291]! } - public var UserInfo_BotPrivacy: String { return self._s[1293]! } - public var Wallet_CreateInvoice_Title: String { return self._s[1294]! } - public var Notification_PassportValueEmail: String { return self._s[1295]! } - public var EmptyGroupInfo_Subtitle: String { return self._s[1296]! } - public var GroupPermission_NewTitle: String { return self._s[1297]! } - public var CallFeedback_ReasonDropped: String { return self._s[1298]! } - public var GroupInfo_Permissions_AddException: String { return self._s[1299]! } - public var Channel_SignMessages_Help: String { return self._s[1301]! } - public var Undo_ChatDeleted: String { return self._s[1303]! } - public var Conversation_ChatBackground: String { return self._s[1304]! } + public var Appearance_ThemePreview_Chat_2_Text: String { return self._s[1286]! } + public var Channel_Setup_TypePrivate: String { return self._s[1288]! } + public var Forward_ChannelReadOnly: String { return self._s[1291]! } + public var PhotoEditor_CurvesBlue: String { return self._s[1292]! } + public var AddContact_SharedContactException: String { return self._s[1293]! } + public var UserInfo_BotPrivacy: String { return self._s[1295]! } + public var Wallet_CreateInvoice_Title: String { return self._s[1296]! } + public var Notification_PassportValueEmail: String { return self._s[1297]! } + public var EmptyGroupInfo_Subtitle: String { return self._s[1298]! } + public var GroupPermission_NewTitle: String { return self._s[1299]! } + public var CallFeedback_ReasonDropped: String { return self._s[1300]! } + public var GroupInfo_Permissions_AddException: String { return self._s[1301]! } + public var Channel_SignMessages_Help: String { return self._s[1303]! } + public var Undo_ChatDeleted: String { return self._s[1305]! } + public var Conversation_ChatBackground: String { return self._s[1306]! } public func Wallet_WordCheck_Text(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1305]!, self._r[1305]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1307]!, self._r[1307]!, [_1, _2, _3]) } - public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1306]! } - public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1307]! } - public var Passport_Language_pt: String { return self._s[1308]! } - public var VoiceOver_Chat_YourVoiceMessage: String { return self._s[1309]! } - public var NotificationsSound_Popcorn: String { return self._s[1312]! } - public var AutoNightTheme_Disabled: String { return self._s[1313]! } - public var BlockedUsers_LeavePrefix: String { return self._s[1314]! } - public var WallpaperPreview_CustomColorTopText: String { return self._s[1315]! } - public var Contacts_PermissionsSuppressWarningText: String { return self._s[1316]! } - public var WallpaperSearch_ColorBlue: String { return self._s[1317]! } + public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1308]! } + public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1309]! } + public var Passport_Language_pt: String { return self._s[1310]! } + public var VoiceOver_Chat_YourVoiceMessage: String { return self._s[1311]! } + public var NotificationsSound_Popcorn: String { return self._s[1314]! } + public var AutoNightTheme_Disabled: String { return self._s[1315]! } + public var BlockedUsers_LeavePrefix: String { return self._s[1316]! } + public var WallpaperPreview_CustomColorTopText: String { return self._s[1317]! } + public var Contacts_PermissionsSuppressWarningText: String { return self._s[1318]! } + public var WallpaperSearch_ColorBlue: String { return self._s[1319]! } public func CancelResetAccount_TextSMS(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1318]!, self._r[1318]!, [_0]) + return formatWithArgumentRanges(self._s[1320]!, self._r[1320]!, [_0]) } - public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1319]! } - public var SocksProxySetup_UseForCalls: String { return self._s[1320]! } - public var Passport_DeleteDocumentConfirmation: String { return self._s[1322]! } + public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1321]! } + public var SocksProxySetup_UseForCalls: String { return self._s[1322]! } + public var Passport_DeleteDocumentConfirmation: String { return self._s[1324]! } public func Conversation_Megabytes(_ _0: Float) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1323]!, self._r[1323]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1325]!, self._r[1325]!, ["\(_0)"]) } - public var SocksProxySetup_Hostname: String { return self._s[1326]! } - public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1327]! } - public var Compose_NewEncryptedChat: String { return self._s[1328]! } - public var Login_CodeFloodError: String { return self._s[1329]! } - public var Calls_TabTitle: String { return self._s[1330]! } - public var Privacy_ProfilePhoto: String { return self._s[1331]! } - public var Passport_Language_he: String { return self._s[1332]! } + public var SocksProxySetup_Hostname: String { return self._s[1328]! } + public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1329]! } + public var Compose_NewEncryptedChat: String { return self._s[1330]! } + public var Login_CodeFloodError: String { return self._s[1331]! } + public var Calls_TabTitle: String { return self._s[1332]! } + public var Privacy_ProfilePhoto: String { return self._s[1333]! } + public var Passport_Language_he: String { return self._s[1334]! } public func Conversation_SetReminder_RemindToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1333]!, self._r[1333]!, [_0]) - } - public var GroupPermission_Title: String { return self._s[1334]! } - public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1335]!, self._r[1335]!, [_0]) } - public var Wallet_TransactionInfo_SenderHeader: String { return self._s[1336]! } - public var GroupPermission_NoChangeInfo: String { return self._s[1337]! } - public var ChatList_DeleteForCurrentUser: String { return self._s[1338]! } - public var Tour_Text1: String { return self._s[1339]! } - public var Channel_EditAdmin_TransferOwnership: String { return self._s[1340]! } - public var Month_ShortFebruary: String { return self._s[1341]! } - public var TwoStepAuth_EmailSkip: String { return self._s[1342]! } + public var GroupPermission_Title: String { return self._s[1336]! } + public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1337]!, self._r[1337]!, [_0]) + } + public var Wallet_TransactionInfo_SenderHeader: String { return self._s[1338]! } + public var GroupPermission_NoChangeInfo: String { return self._s[1339]! } + public var ChatList_DeleteForCurrentUser: String { return self._s[1340]! } + public var Tour_Text1: String { return self._s[1341]! } + public var Channel_EditAdmin_TransferOwnership: String { return self._s[1342]! } + public var Month_ShortFebruary: String { return self._s[1343]! } + public var TwoStepAuth_EmailSkip: String { return self._s[1344]! } public func Wallet_Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1343]!, self._r[1343]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1345]!, self._r[1345]!, [_1, _2, _3]) } - public var NotificationsSound_Glass: String { return self._s[1344]! } - public var Appearance_ThemeNightBlue: String { return self._s[1345]! } - public var CheckoutInfo_Pay: String { return self._s[1346]! } - public var Invite_LargeRecipientsCountWarning: String { return self._s[1348]! } - public var Call_CallAgain: String { return self._s[1350]! } - public var AttachmentMenu_SendAsFile: String { return self._s[1351]! } - public var AccessDenied_MicrophoneRestricted: String { return self._s[1352]! } - public var Passport_InvalidPasswordError: String { return self._s[1353]! } - public var Watch_Message_Game: String { return self._s[1354]! } - public var Stickers_Install: String { return self._s[1355]! } - public var VoiceOver_Chat_Message: String { return self._s[1356]! } - public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1357]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[1359]! } - public var Notifications_GroupNotificationsHelp: String { return self._s[1360]! } - public var AuthSessions_OtherSessions: String { return self._s[1361]! } - public var Channel_Username_Help: String { return self._s[1362]! } - public var Camera_Title: String { return self._s[1363]! } - public var IntentsSettings_Title: String { return self._s[1364]! } - public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1366]! } - public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1367]! } - public var Channel_AdminLog_SendPolls: String { return self._s[1368]! } - public var Channel_AdminLog_TitleAllEvents: String { return self._s[1369]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1370]! } - public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1371]! } - public var ScheduledMessages_DeleteMany: String { return self._s[1372]! } - public var Conversation_RestrictedStickers: String { return self._s[1373]! } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[1375]! } - public var UserInfo_TelegramCall: String { return self._s[1377]! } - public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1378]! } - public var CreatePoll_OptionsHeader: String { return self._s[1379]! } - public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1380]! } - public var ArchivedChats_IntroTitle1: String { return self._s[1381]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1382]! } - public var Theme_Colors_Proceed: String { return self._s[1383]! } - public var Passport_Identity_EditPersonalDetails: String { return self._s[1384]! } + public var NotificationsSound_Glass: String { return self._s[1346]! } + public var Appearance_ThemeNightBlue: String { return self._s[1347]! } + public var CheckoutInfo_Pay: String { return self._s[1348]! } + public var Invite_LargeRecipientsCountWarning: String { return self._s[1350]! } + public var Call_CallAgain: String { return self._s[1352]! } + public var AttachmentMenu_SendAsFile: String { return self._s[1353]! } + public var AccessDenied_MicrophoneRestricted: String { return self._s[1354]! } + public var Passport_InvalidPasswordError: String { return self._s[1355]! } + public var Watch_Message_Game: String { return self._s[1356]! } + public var Stickers_Install: String { return self._s[1357]! } + public var VoiceOver_Chat_Message: String { return self._s[1358]! } + public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1359]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[1361]! } + public var Notifications_GroupNotificationsHelp: String { return self._s[1362]! } + public var AuthSessions_OtherSessions: String { return self._s[1363]! } + public var Channel_Username_Help: String { return self._s[1364]! } + public var Camera_Title: String { return self._s[1365]! } + public var IntentsSettings_Title: String { return self._s[1366]! } + public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1368]! } + public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1369]! } + public var Channel_AdminLog_SendPolls: String { return self._s[1370]! } + public var Channel_AdminLog_TitleAllEvents: String { return self._s[1371]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1372]! } + public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1373]! } + public var ScheduledMessages_DeleteMany: String { return self._s[1374]! } + public var Conversation_RestrictedStickers: String { return self._s[1375]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[1377]! } + public var UserInfo_TelegramCall: String { return self._s[1379]! } + public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1380]! } + public var CreatePoll_OptionsHeader: String { return self._s[1381]! } + public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1382]! } + public var ArchivedChats_IntroTitle1: String { return self._s[1383]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1384]! } + public var Theme_Colors_Proceed: String { return self._s[1385]! } + public var Passport_Identity_EditPersonalDetails: String { return self._s[1386]! } public func Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1385]!, self._r[1385]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1387]!, self._r[1387]!, [_1, _2, _3]) } - public var Wallet_Month_GenAugust: String { return self._s[1386]! } - public var Settings_SaveEditedPhotos: String { return self._s[1387]! } - public var TwoStepAuth_ConfirmationTitle: String { return self._s[1388]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1389]! } - public var Conversation_MessageDialogRetry: String { return self._s[1390]! } - public var ChatList_Context_MarkAsUnread: String { return self._s[1391]! } - public var Conversation_DiscardVoiceMessageAction: String { return self._s[1392]! } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1393]! } - public var Group_Setup_TypeHeader: String { return self._s[1394]! } - public var Paint_RecentStickers: String { return self._s[1395]! } - public var PhotoEditor_GrainTool: String { return self._s[1396]! } - public var CheckoutInfo_ShippingInfoState: String { return self._s[1397]! } - public var EmptyGroupInfo_Line4: String { return self._s[1398]! } - public var Watch_AuthRequired: String { return self._s[1400]! } + public var Wallet_Month_GenAugust: String { return self._s[1388]! } + public var Settings_SaveEditedPhotos: String { return self._s[1389]! } + public var TwoStepAuth_ConfirmationTitle: String { return self._s[1390]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1391]! } + public var Conversation_MessageDialogRetry: String { return self._s[1392]! } + public var ChatList_Context_MarkAsUnread: String { return self._s[1393]! } + public var MessagePoll_SubmitVote: String { return self._s[1394]! } + public var Conversation_DiscardVoiceMessageAction: String { return self._s[1395]! } + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1396]! } + public var Group_Setup_TypeHeader: String { return self._s[1397]! } + public var Paint_RecentStickers: String { return self._s[1398]! } + public var PhotoEditor_GrainTool: String { return self._s[1399]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[1400]! } + public var EmptyGroupInfo_Line4: String { return self._s[1401]! } + public var Watch_AuthRequired: String { return self._s[1403]! } public func Passport_Email_UseTelegramEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1401]!, self._r[1401]!, [_0]) + return formatWithArgumentRanges(self._s[1404]!, self._r[1404]!, [_0]) } - public var Conversation_EncryptedDescriptionTitle: String { return self._s[1402]! } - public var ChannelIntro_Text: String { return self._s[1403]! } - public var DialogList_DeleteBotConfirmation: String { return self._s[1404]! } - public var GroupPermission_NoSendMedia: String { return self._s[1405]! } - public var Calls_AddTab: String { return self._s[1406]! } - public var Message_ReplyActionButtonShowReceipt: String { return self._s[1407]! } - public var Channel_AdminLog_EmptyFilterText: String { return self._s[1408]! } - public var Conversation_WalletRequiredSetup: String { return self._s[1409]! } - public var Notification_MessageLifetime1d: String { return self._s[1410]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1411]! } - public var Channel_BanUser_PermissionsHeader: String { return self._s[1412]! } - public var Passport_Identity_GenderFemale: String { return self._s[1413]! } - public var BlockedUsers_BlockTitle: String { return self._s[1414]! } + public var Conversation_EncryptedDescriptionTitle: String { return self._s[1405]! } + public var ChannelIntro_Text: String { return self._s[1406]! } + public var DialogList_DeleteBotConfirmation: String { return self._s[1407]! } + public var GroupPermission_NoSendMedia: String { return self._s[1408]! } + public var Calls_AddTab: String { return self._s[1409]! } + public var Message_ReplyActionButtonShowReceipt: String { return self._s[1410]! } + public var Channel_AdminLog_EmptyFilterText: String { return self._s[1411]! } + public var Conversation_WalletRequiredSetup: String { return self._s[1412]! } + public var Notification_MessageLifetime1d: String { return self._s[1413]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1414]! } + public var Channel_BanUser_PermissionsHeader: String { return self._s[1415]! } + public var Passport_Identity_GenderFemale: String { return self._s[1416]! } + public var BlockedUsers_BlockTitle: String { return self._s[1417]! } public func PUSH_CHANNEL_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1415]!, self._r[1415]!, [_1]) + return formatWithArgumentRanges(self._s[1418]!, self._r[1418]!, [_1]) } - public var Weekday_Yesterday: String { return self._s[1416]! } - public var WallpaperSearch_ColorBlack: String { return self._s[1417]! } - public var Settings_Context_Logout: String { return self._s[1418]! } - public var Wallet_Info_UnknownTransaction: String { return self._s[1419]! } - public var ChatList_ArchiveAction: String { return self._s[1420]! } - public var AutoNightTheme_Scheduled: String { return self._s[1421]! } - public var TwoFactorSetup_Email_SkipAction: String { return self._s[1422]! } - public var Settings_Devices: String { return self._s[1423]! } - public var ContactInfo_Note: String { return self._s[1424]! } + public var Weekday_Yesterday: String { return self._s[1419]! } + public var WallpaperSearch_ColorBlack: String { return self._s[1420]! } + public var Settings_Context_Logout: String { return self._s[1421]! } + public var Wallet_Info_UnknownTransaction: String { return self._s[1422]! } + public var ChatList_ArchiveAction: String { return self._s[1423]! } + public var AutoNightTheme_Scheduled: String { return self._s[1424]! } + public var TwoFactorSetup_Email_SkipAction: String { return self._s[1425]! } + public var Settings_Devices: String { return self._s[1426]! } + public var ContactInfo_Note: String { return self._s[1427]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1425]!, self._r[1425]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[1428]!, self._r[1428]!, [_1, _2, _3, _4, _5, _6]) } - public var EditTheme_ThemeTemplateAlertTitle: String { return self._s[1426]! } - public var Wallet_Receive_CreateInvoice: String { return self._s[1427]! } - public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1428]! } - public var Theme_Colors_ColorWallpaperWarningProceed: String { return self._s[1429]! } + public var EditTheme_ThemeTemplateAlertTitle: String { return self._s[1429]! } + public var Wallet_Receive_CreateInvoice: String { return self._s[1430]! } + public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1431]! } + public var Theme_Colors_ColorWallpaperWarningProceed: String { return self._s[1432]! } public func PUSH_CHAT_JOINED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1430]!, self._r[1430]!, [_1, _2]) - } - public var CreatePoll_Create: String { return self._s[1431]! } - public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1432]! } - public func Notification_CallFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1433]!, self._r[1433]!, [_1, _2]) } - public var ScheduledMessages_ClearAllConfirmation: String { return self._s[1434]! } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1435]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[1437]! } - public func PUSH_PINNED_GAME_SCORE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1438]!, self._r[1438]!, [_1]) + public var CreatePoll_Create: String { return self._s[1434]! } + public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1435]! } + public func Notification_CallFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1436]!, self._r[1436]!, [_1, _2]) } - public var Preview_OpenInInstagram: String { return self._s[1439]! } - public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1440]! } + public var ScheduledMessages_ClearAllConfirmation: String { return self._s[1437]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1438]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[1440]! } + public func PUSH_PINNED_GAME_SCORE(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1441]!, self._r[1441]!, [_1]) + } + public var Preview_OpenInInstagram: String { return self._s[1442]! } + public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1443]! } public func PUSH_CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1441]!, self._r[1441]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1444]!, self._r[1444]!, [_1, _2, _3]) } public func Passport_PrivacyPolicy(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1442]!, self._r[1442]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1445]!, self._r[1445]!, [_1, _2]) } - public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1443]! } - public var ArchivedChats_IntroText3: String { return self._s[1444]! } - public var ChatList_UndoArchiveHiddenText: String { return self._s[1445]! } - public var NetworkUsageSettings_TotalSection: String { return self._s[1446]! } - public var Wallet_Month_GenSeptember: String { return self._s[1447]! } - public var Channel_Setup_TypePrivateHelp: String { return self._s[1448]! } + public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1446]! } + public var ArchivedChats_IntroText3: String { return self._s[1447]! } + public var ChatList_UndoArchiveHiddenText: String { return self._s[1448]! } + public var NetworkUsageSettings_TotalSection: String { return self._s[1449]! } + public var Wallet_Month_GenSeptember: String { return self._s[1450]! } + public var Channel_Setup_TypePrivateHelp: String { return self._s[1451]! } public func PUSH_CHAT_MESSAGE_POLL(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1449]!, self._r[1449]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1452]!, self._r[1452]!, [_1, _2, _3]) } - public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1451]! } - public var FastTwoStepSetup_HintSection: String { return self._s[1452]! } - public var Wallpaper_PhotoLibrary: String { return self._s[1453]! } - public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1454]! } - public var Gif_NoGifsFound: String { return self._s[1455]! } - public var Watch_LastSeen_WithinAMonth: String { return self._s[1456]! } - public var VoiceOver_MessageContextDelete: String { return self._s[1457]! } - public var EditTheme_Preview: String { return self._s[1458]! } + public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1454]! } + public var FastTwoStepSetup_HintSection: String { return self._s[1455]! } + public var Wallpaper_PhotoLibrary: String { return self._s[1456]! } + public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1457]! } + public var Gif_NoGifsFound: String { return self._s[1458]! } + public var Watch_LastSeen_WithinAMonth: String { return self._s[1459]! } + public var VoiceOver_MessageContextDelete: String { return self._s[1460]! } + public var EditTheme_Preview: String { return self._s[1461]! } public func ClearCache_StorageTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1459]!, self._r[1459]!, [_0]) + return formatWithArgumentRanges(self._s[1462]!, self._r[1462]!, [_0]) } - public var GroupInfo_ActionPromote: String { return self._s[1460]! } - public var PasscodeSettings_SimplePasscode: String { return self._s[1461]! } - public var GroupInfo_Permissions_Title: String { return self._s[1462]! } - public var Permissions_ContactsText_v0: String { return self._s[1463]! } - public var PrivacyPhoneNumberSettings_CustomDisabledHelp: String { return self._s[1464]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1465]! } - public var PrivacySettings_DataSettingsHelp: String { return self._s[1468]! } - public var Passport_FieldEmailHelp: String { return self._s[1469]! } + public var GroupInfo_ActionPromote: String { return self._s[1463]! } + public var PasscodeSettings_SimplePasscode: String { return self._s[1464]! } + public var GroupInfo_Permissions_Title: String { return self._s[1465]! } + public var Permissions_ContactsText_v0: String { return self._s[1466]! } + public var PrivacyPhoneNumberSettings_CustomDisabledHelp: String { return self._s[1467]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1468]! } + public var PrivacySettings_DataSettingsHelp: String { return self._s[1471]! } + public var Passport_FieldEmailHelp: String { return self._s[1472]! } public func Activity_RemindAboutUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1470]!, self._r[1470]!, [_0]) + return formatWithArgumentRanges(self._s[1473]!, self._r[1473]!, [_0]) } - public var Passport_Identity_GenderPlaceholder: String { return self._s[1471]! } - public var Weekday_ShortSaturday: String { return self._s[1472]! } - public var ContactInfo_PhoneLabelMain: String { return self._s[1473]! } - public var Watch_Conversation_UserInfo: String { return self._s[1474]! } - public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1475]! } - public var GroupPermission_PermissionDisabledByDefault: String { return self._s[1476]! } - public var PrivacyLastSeenSettings_Title: String { return self._s[1477]! } - public var Conversation_ShareBotLocationConfirmation: String { return self._s[1478]! } - public var PhotoEditor_VignetteTool: String { return self._s[1479]! } - public var Passport_Address_Street1Placeholder: String { return self._s[1480]! } - public var Passport_Language_et: String { return self._s[1481]! } - public var AppUpgrade_Running: String { return self._s[1482]! } - public var Channel_DiscussionGroup_Info: String { return self._s[1484]! } - public var EditTheme_Create_Preview_IncomingReplyName: String { return self._s[1485]! } - public var Passport_Language_bg: String { return self._s[1486]! } - public var Stickers_NoStickersFound: String { return self._s[1488]! } + public var Passport_Identity_GenderPlaceholder: String { return self._s[1474]! } + public var Weekday_ShortSaturday: String { return self._s[1475]! } + public var ContactInfo_PhoneLabelMain: String { return self._s[1476]! } + public var Watch_Conversation_UserInfo: String { return self._s[1477]! } + public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1478]! } + public var GroupPermission_PermissionDisabledByDefault: String { return self._s[1479]! } + public var PrivacyLastSeenSettings_Title: String { return self._s[1480]! } + public var Conversation_ShareBotLocationConfirmation: String { return self._s[1481]! } + public var PhotoEditor_VignetteTool: String { return self._s[1482]! } + public var Passport_Address_Street1Placeholder: String { return self._s[1483]! } + public var Passport_Language_et: String { return self._s[1484]! } + public var AppUpgrade_Running: String { return self._s[1485]! } + public var Channel_DiscussionGroup_Info: String { return self._s[1487]! } + public var EditTheme_Create_Preview_IncomingReplyName: String { return self._s[1488]! } + public var Passport_Language_bg: String { return self._s[1489]! } + public var Stickers_NoStickersFound: String { return self._s[1491]! } public func PUSH_CHANNEL_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1490]!, self._r[1490]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1493]!, self._r[1493]!, [_1, _2]) } public func VoiceOver_Chat_ContactFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1491]!, self._r[1491]!, [_0]) + return formatWithArgumentRanges(self._s[1494]!, self._r[1494]!, [_0]) } - public var Wallet_Month_GenJuly: String { return self._s[1492]! } - public var Wallet_Receive_AddressHeader: String { return self._s[1493]! } - public var Wallet_Send_AmountText: String { return self._s[1494]! } - public var Settings_About: String { return self._s[1495]! } + public var Wallet_Month_GenJuly: String { return self._s[1495]! } + public var Wallet_Receive_AddressHeader: String { return self._s[1496]! } + public var Wallet_Send_AmountText: String { return self._s[1497]! } + public var Settings_About: String { return self._s[1498]! } public func Channel_AdminLog_MessageRestricted(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1496]!, self._r[1496]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1499]!, self._r[1499]!, [_0, _1, _2]) } - public var ChatList_Context_MarkAsRead: String { return self._s[1498]! } - public var KeyCommand_NewMessage: String { return self._s[1499]! } - public var Group_ErrorAddBlocked: String { return self._s[1500]! } + public var ChatList_Context_MarkAsRead: String { return self._s[1501]! } + public var KeyCommand_NewMessage: String { return self._s[1502]! } + public var Group_ErrorAddBlocked: String { return self._s[1503]! } public func Message_PaymentSent(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1501]!, self._r[1501]!, [_0]) + return formatWithArgumentRanges(self._s[1504]!, self._r[1504]!, [_0]) } - public var Map_LocationTitle: String { return self._s[1502]! } - public var ReportGroupLocation_Title: String { return self._s[1503]! } - public var CallSettings_UseLessDataLongDescription: String { return self._s[1504]! } - public var Cache_ClearProgress: String { return self._s[1505]! } + public var Map_LocationTitle: String { return self._s[1505]! } + public var ReportGroupLocation_Title: String { return self._s[1506]! } + public var CallSettings_UseLessDataLongDescription: String { return self._s[1507]! } + public var Cache_ClearProgress: String { return self._s[1508]! } public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1506]!, self._r[1506]!, [_0]) + return formatWithArgumentRanges(self._s[1509]!, self._r[1509]!, [_0]) } - public var GroupRemoved_AddToGroup: String { return self._s[1507]! } - public var Passport_UpdateRequiredError: String { return self._s[1508]! } - public var Wallet_SecureStorageNotAvailable_Text: String { return self._s[1509]! } + public var GroupRemoved_AddToGroup: String { return self._s[1510]! } + public var Passport_UpdateRequiredError: String { return self._s[1511]! } + public var Wallet_SecureStorageNotAvailable_Text: String { return self._s[1512]! } public func PUSH_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1510]!, self._r[1510]!, [_1]) + return formatWithArgumentRanges(self._s[1513]!, self._r[1513]!, [_1]) } - public var Notifications_PermissionsSuppressWarningText: String { return self._s[1512]! } - public var Passport_Identity_MainPageHelp: String { return self._s[1513]! } - public var Conversation_StatusKickedFromGroup: String { return self._s[1514]! } - public var Passport_Language_ka: String { return self._s[1515]! } + public var Notifications_PermissionsSuppressWarningText: String { return self._s[1515]! } + public var Passport_Identity_MainPageHelp: String { return self._s[1516]! } + public var Conversation_StatusKickedFromGroup: String { return self._s[1517]! } + public var Passport_Language_ka: String { return self._s[1518]! } public func Wallet_Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1516]!, self._r[1516]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1519]!, self._r[1519]!, [_1, _2, _3]) } - public var Call_Decline: String { return self._s[1517]! } - public var SocksProxySetup_ProxyEnabled: String { return self._s[1518]! } - public var TwoFactorSetup_Email_SkipConfirmationText: String { return self._s[1521]! } + public var Call_Decline: String { return self._s[1520]! } + public var SocksProxySetup_ProxyEnabled: String { return self._s[1521]! } + public var TwoFactorSetup_Email_SkipConfirmationText: String { return self._s[1524]! } public func AuthCode_Alert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1522]!, self._r[1522]!, [_0]) + return formatWithArgumentRanges(self._s[1525]!, self._r[1525]!, [_0]) } - public var CallFeedback_Send: String { return self._s[1523]! } - public var EditTheme_EditTitle: String { return self._s[1524]! } + public var CallFeedback_Send: String { return self._s[1526]! } + public var EditTheme_EditTitle: String { return self._s[1527]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1525]!, self._r[1525]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1528]!, self._r[1528]!, [_1, _2]) } - public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1526]! } + public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1529]! } public func Wallet_Updated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1528]!, self._r[1528]!, [_0]) + return formatWithArgumentRanges(self._s[1531]!, self._r[1531]!, [_0]) } - public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1529]! } - public var Passport_DeletePassport: String { return self._s[1530]! } - public var Appearance_AppIconFilled: String { return self._s[1531]! } - public var Privacy_Calls_P2PAlways: String { return self._s[1532]! } - public var Month_ShortDecember: String { return self._s[1533]! } - public var Channel_AdminLog_CanEditMessages: String { return self._s[1535]! } + public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1532]! } + public var Passport_DeletePassport: String { return self._s[1533]! } + public var Appearance_AppIconFilled: String { return self._s[1534]! } + public var Privacy_Calls_P2PAlways: String { return self._s[1535]! } + public var Month_ShortDecember: String { return self._s[1536]! } + public var Channel_AdminLog_CanEditMessages: String { return self._s[1538]! } public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1536]!, self._r[1536]!, [_0]) + return formatWithArgumentRanges(self._s[1539]!, self._r[1539]!, [_0]) } - public var Channel_Stickers_Searching: String { return self._s[1537]! } - public var Conversation_EncryptedDescription1: String { return self._s[1538]! } - public var Conversation_EncryptedDescription2: String { return self._s[1539]! } - public var PasscodeSettings_PasscodeOptions: String { return self._s[1540]! } - public var Conversation_EncryptedDescription3: String { return self._s[1542]! } - public var PhotoEditor_SharpenTool: String { return self._s[1543]! } - public var Wallet_Configuration_Title: String { return self._s[1544]! } + public var Channel_Stickers_Searching: String { return self._s[1540]! } + public var Conversation_EncryptedDescription1: String { return self._s[1541]! } + public var Conversation_EncryptedDescription2: String { return self._s[1542]! } + public var PasscodeSettings_PasscodeOptions: String { return self._s[1543]! } + public var Conversation_EncryptedDescription3: String { return self._s[1545]! } + public var PhotoEditor_SharpenTool: String { return self._s[1546]! } + public var Wallet_Configuration_Title: String { return self._s[1547]! } public func Conversation_AddNameToContacts(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1545]!, self._r[1545]!, [_0]) + return formatWithArgumentRanges(self._s[1548]!, self._r[1548]!, [_0]) } - public var Conversation_EncryptedDescription4: String { return self._s[1547]! } - public var Channel_Members_AddMembers: String { return self._s[1548]! } - public var Wallpaper_Search: String { return self._s[1549]! } - public var Weekday_Friday: String { return self._s[1551]! } - public var Privacy_ContactsSync: String { return self._s[1552]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1553]! } - public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1554]! } + public var Conversation_EncryptedDescription4: String { return self._s[1550]! } + public var Channel_Members_AddMembers: String { return self._s[1551]! } + public var Wallpaper_Search: String { return self._s[1552]! } + public var Weekday_Friday: String { return self._s[1554]! } + public var Privacy_ContactsSync: String { return self._s[1555]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1556]! } + public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1557]! } public func Channel_Management_RestrictedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1555]!, self._r[1555]!, [_0]) + return formatWithArgumentRanges(self._s[1558]!, self._r[1558]!, [_0]) } - public var Wallet_Configuration_BlockchainIdHeader: String { return self._s[1556]! } - public var GroupInfo_Permissions_Removed: String { return self._s[1557]! } - public var ScheduledMessages_ScheduledOnline: String { return self._s[1558]! } - public var Passport_Identity_GenderMale: String { return self._s[1559]! } + public var Wallet_Configuration_BlockchainIdHeader: String { return self._s[1559]! } + public var GroupInfo_Permissions_Removed: String { return self._s[1560]! } + public var ScheduledMessages_ScheduledOnline: String { return self._s[1561]! } + public var Passport_Identity_GenderMale: String { return self._s[1562]! } public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1560]!, self._r[1560]!, [_0]) + return formatWithArgumentRanges(self._s[1563]!, self._r[1563]!, [_0]) } - public var Notifications_PermissionsKeepDisabled: String { return self._s[1561]! } - public var Conversation_JumpToDate: String { return self._s[1562]! } - public var Contacts_GlobalSearch: String { return self._s[1563]! } - public var AutoDownloadSettings_ResetHelp: String { return self._s[1564]! } - public var SettingsSearch_Synonyms_FAQ: String { return self._s[1565]! } - public var Profile_MessageLifetime1d: String { return self._s[1566]! } + public var Notifications_PermissionsKeepDisabled: String { return self._s[1564]! } + public var Conversation_JumpToDate: String { return self._s[1565]! } + public var Contacts_GlobalSearch: String { return self._s[1566]! } + public var AutoDownloadSettings_ResetHelp: String { return self._s[1567]! } + public var SettingsSearch_Synonyms_FAQ: String { return self._s[1568]! } + public var Profile_MessageLifetime1d: String { return self._s[1569]! } public func MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1567]!, self._r[1567]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1570]!, self._r[1570]!, [_1, _2]) } - public var StickerPack_BuiltinPackName: String { return self._s[1570]! } + public var StickerPack_BuiltinPackName: String { return self._s[1573]! } public func PUSH_CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1571]!, self._r[1571]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1574]!, self._r[1574]!, [_1, _2]) } - public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[1572]! } - public var Passport_InfoTitle: String { return self._s[1574]! } - public var Notifications_PermissionsUnreachableText: String { return self._s[1575]! } + public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[1575]! } + public var Passport_InfoTitle: String { return self._s[1577]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[1578]! } public func NetworkUsageSettings_CellularUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1579]!, self._r[1579]!, [_0]) + return formatWithArgumentRanges(self._s[1582]!, self._r[1582]!, [_0]) } public func PUSH_CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1580]!, self._r[1580]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1583]!, self._r[1583]!, [_1, _2]) } - public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1581]! } - public var Profile_BotInfo: String { return self._s[1582]! } - public var Watch_Compose_CreateMessage: String { return self._s[1583]! } - public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1584]! } - public var Month_ShortNovember: String { return self._s[1585]! } - public var Conversation_ScamWarning: String { return self._s[1586]! } - public var Wallpaper_SetCustomBackground: String { return self._s[1587]! } - public var Appearance_TextSize_Title: String { return self._s[1588]! } - public var Passport_Identity_TranslationsHelp: String { return self._s[1589]! } - public var NotificationsSound_Chime: String { return self._s[1590]! } - public var Passport_Language_ko: String { return self._s[1592]! } - public var InviteText_URL: String { return self._s[1593]! } - public var TextFormat_Monospace: String { return self._s[1594]! } + public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1584]! } + public var Profile_BotInfo: String { return self._s[1585]! } + public var Watch_Compose_CreateMessage: String { return self._s[1586]! } + public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1587]! } + public var Month_ShortNovember: String { return self._s[1588]! } + public var Conversation_ScamWarning: String { return self._s[1589]! } + public var Wallpaper_SetCustomBackground: String { return self._s[1590]! } + public var Appearance_TextSize_Title: String { return self._s[1591]! } + public var Passport_Identity_TranslationsHelp: String { return self._s[1592]! } + public var NotificationsSound_Chime: String { return self._s[1593]! } + public var Passport_Language_ko: String { return self._s[1595]! } + public var InviteText_URL: String { return self._s[1596]! } + public var TextFormat_Monospace: String { return self._s[1597]! } public func Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1595]!, self._r[1595]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1598]!, self._r[1598]!, [_1, _2, _3]) } - public var EditTheme_Edit_BottomInfo: String { return self._s[1596]! } + public var EditTheme_Edit_BottomInfo: String { return self._s[1599]! } public func Login_WillSendSms(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1597]!, self._r[1597]!, [_0]) + return formatWithArgumentRanges(self._s[1600]!, self._r[1600]!, [_0]) } public func Watch_Time_ShortWeekdayAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1598]!, self._r[1598]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1601]!, self._r[1601]!, [_1, _2]) } - public var Wallet_Words_Title: String { return self._s[1599]! } - public var Wallet_Month_ShortMay: String { return self._s[1600]! } - public var EditTheme_CreateTitle: String { return self._s[1602]! } - public var Passport_InfoLearnMore: String { return self._s[1603]! } - public var TwoStepAuth_EmailPlaceholder: String { return self._s[1604]! } - public var Passport_Identity_AddIdentityCard: String { return self._s[1605]! } - public var Your_card_has_expired: String { return self._s[1606]! } - public var StickerPacksSettings_StickerPacksSection: String { return self._s[1607]! } - public var GroupInfo_InviteLink_Help: String { return self._s[1608]! } - public var TwoFactorSetup_EmailVerification_ResendAction: String { return self._s[1612]! } - public var Conversation_Report: String { return self._s[1614]! } - public var Notifications_MessageNotificationsSound: String { return self._s[1615]! } - public var Notification_MessageLifetime1m: String { return self._s[1616]! } - public var Privacy_ContactsTitle: String { return self._s[1617]! } - public var Conversation_ShareMyContactInfo: String { return self._s[1618]! } - public var Wallet_WordCheck_Title: String { return self._s[1619]! } - public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1620]! } - public var Channel_Members_Title: String { return self._s[1621]! } - public var Map_OpenInWaze: String { return self._s[1622]! } - public var Appearance_RemoveThemeColorConfirmation: String { return self._s[1623]! } - public var Login_PhoneBannedError: String { return self._s[1624]! } + public var Wallet_Words_Title: String { return self._s[1602]! } + public var Wallet_Month_ShortMay: String { return self._s[1603]! } + public var EditTheme_CreateTitle: String { return self._s[1605]! } + public var Passport_InfoLearnMore: String { return self._s[1606]! } + public var TwoStepAuth_EmailPlaceholder: String { return self._s[1607]! } + public var Passport_Identity_AddIdentityCard: String { return self._s[1608]! } + public var Your_card_has_expired: String { return self._s[1609]! } + public var StickerPacksSettings_StickerPacksSection: String { return self._s[1610]! } + public var GroupInfo_InviteLink_Help: String { return self._s[1611]! } + public var TwoFactorSetup_EmailVerification_ResendAction: String { return self._s[1615]! } + public var Conversation_Report: String { return self._s[1617]! } + public var Notifications_MessageNotificationsSound: String { return self._s[1618]! } + public var Notification_MessageLifetime1m: String { return self._s[1619]! } + public var Privacy_ContactsTitle: String { return self._s[1620]! } + public var Conversation_ShareMyContactInfo: String { return self._s[1621]! } + public var Wallet_WordCheck_Title: String { return self._s[1622]! } + public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1623]! } + public var Channel_Members_Title: String { return self._s[1624]! } + public var Map_OpenInWaze: String { return self._s[1625]! } + public var Appearance_RemoveThemeColorConfirmation: String { return self._s[1626]! } + public var Login_PhoneBannedError: String { return self._s[1627]! } public func LiveLocationUpdated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1625]!, self._r[1625]!, [_0]) + return formatWithArgumentRanges(self._s[1628]!, self._r[1628]!, [_0]) } - public var IntentsSettings_MainAccount: String { return self._s[1626]! } - public var Group_Management_AddModeratorHelp: String { return self._s[1627]! } - public var AutoDownloadSettings_WifiTitle: String { return self._s[1628]! } - public var Common_OK: String { return self._s[1629]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1630]! } - public var Wallet_Words_NotDoneResponse: String { return self._s[1631]! } - public var Cache_Music: String { return self._s[1632]! } - public var Wallet_Configuration_SourceURL: String { return self._s[1633]! } - public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1634]! } - public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1635]! } - public var TwoStepAuth_HintPlaceholder: String { return self._s[1636]! } + public var IntentsSettings_MainAccount: String { return self._s[1629]! } + public var Group_Management_AddModeratorHelp: String { return self._s[1630]! } + public var AutoDownloadSettings_WifiTitle: String { return self._s[1631]! } + public var Common_OK: String { return self._s[1632]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1633]! } + public var Wallet_Words_NotDoneResponse: String { return self._s[1634]! } + public var Cache_Music: String { return self._s[1635]! } + public var Wallet_Configuration_SourceURL: String { return self._s[1636]! } + public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1637]! } + public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1639]! } + public var TwoStepAuth_HintPlaceholder: String { return self._s[1640]! } public func PUSH_PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1637]!, self._r[1637]!, [_1]) + return formatWithArgumentRanges(self._s[1641]!, self._r[1641]!, [_1]) } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1638]!, self._r[1638]!, [_0]) + return formatWithArgumentRanges(self._s[1642]!, self._r[1642]!, [_0]) } - public var TwoFactorSetup_Done_Action: String { return self._s[1639]! } + public var TwoFactorSetup_Done_Action: String { return self._s[1643]! } public func VoiceOver_Chat_ContactOrganization(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1640]!, self._r[1640]!, [_0]) + return formatWithArgumentRanges(self._s[1644]!, self._r[1644]!, [_0]) } - public var Wallet_Send_ErrorNotEnoughFundsText: String { return self._s[1641]! } - public var Watch_MessageView_ViewOnPhone: String { return self._s[1643]! } - public var Privacy_Calls_CustomShareHelp: String { return self._s[1644]! } - public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[1646]! } - public var ChangePhoneNumberNumber_Title: String { return self._s[1647]! } - public var State_ConnectingToProxyInfo: String { return self._s[1648]! } - public var Conversation_SwipeToReplyHintTitle: String { return self._s[1649]! } - public var Message_VideoMessage: String { return self._s[1651]! } - public var ChannelInfo_DeleteChannel: String { return self._s[1652]! } - public var ContactInfo_PhoneLabelOther: String { return self._s[1653]! } - public var Channel_EditAdmin_CannotEdit: String { return self._s[1654]! } - public var Passport_DeleteAddressConfirmation: String { return self._s[1655]! } + public var Wallet_Send_ErrorNotEnoughFundsText: String { return self._s[1645]! } + public var Watch_MessageView_ViewOnPhone: String { return self._s[1647]! } + public var Privacy_Calls_CustomShareHelp: String { return self._s[1648]! } + public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[1650]! } + public var ChangePhoneNumberNumber_Title: String { return self._s[1651]! } + public var State_ConnectingToProxyInfo: String { return self._s[1652]! } + public var Conversation_SwipeToReplyHintTitle: String { return self._s[1653]! } + public var Message_VideoMessage: String { return self._s[1655]! } + public var ChannelInfo_DeleteChannel: String { return self._s[1656]! } + public var ContactInfo_PhoneLabelOther: String { return self._s[1657]! } + public var Channel_EditAdmin_CannotEdit: String { return self._s[1658]! } + public var Passport_DeleteAddressConfirmation: String { return self._s[1659]! } public func Wallet_Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1656]!, self._r[1656]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1660]!, self._r[1660]!, [_1, _2, _3]) } - public var WallpaperPreview_SwipeBottomText: String { return self._s[1657]! } - public var Activity_RecordingAudio: String { return self._s[1658]! } - public var SettingsSearch_Synonyms_Watch: String { return self._s[1659]! } - public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1660]! } - public var Wallet_Info_Address: String { return self._s[1661]! } + public var WallpaperPreview_SwipeBottomText: String { return self._s[1661]! } + public var Activity_RecordingAudio: String { return self._s[1662]! } + public var SettingsSearch_Synonyms_Watch: String { return self._s[1663]! } + public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1664]! } + public var Wallet_Info_Address: String { return self._s[1665]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1663]!, self._r[1663]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1667]!, self._r[1667]!, [_0, _1]) } public func EmptyGroupInfo_Line1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1667]!, self._r[1667]!, [_0]) + return formatWithArgumentRanges(self._s[1671]!, self._r[1671]!, [_0]) } - public var Conversation_ApplyLocalization: String { return self._s[1668]! } - public var TwoFactorSetup_Intro_Action: String { return self._s[1669]! } - public var UserInfo_AddPhone: String { return self._s[1670]! } - public var Map_ShareLiveLocationHelp: String { return self._s[1671]! } + public var Conversation_ApplyLocalization: String { return self._s[1672]! } + public var TwoFactorSetup_Intro_Action: String { return self._s[1673]! } + public var UserInfo_AddPhone: String { return self._s[1674]! } + public var Map_ShareLiveLocationHelp: String { return self._s[1675]! } public func Passport_Identity_NativeNameGenericHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1672]!, self._r[1672]!, [_0]) + return formatWithArgumentRanges(self._s[1676]!, self._r[1676]!, [_0]) } - public var Passport_Scans: String { return self._s[1674]! } - public var BlockedUsers_Unblock: String { return self._s[1675]! } + public var Passport_Scans: String { return self._s[1678]! } + public var BlockedUsers_Unblock: String { return self._s[1679]! } public func PUSH_ENCRYPTION_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1676]!, self._r[1676]!, [_1]) + return formatWithArgumentRanges(self._s[1680]!, self._r[1680]!, [_1]) } - public var Channel_Management_LabelCreator: String { return self._s[1677]! } - public var Conversation_ReportSpamAndLeave: String { return self._s[1678]! } - public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1679]! } - public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1680]! } - public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1681]! } + public var Channel_Management_LabelCreator: String { return self._s[1681]! } + public var Conversation_ReportSpamAndLeave: String { return self._s[1682]! } + public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1683]! } + public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1684]! } + public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1685]! } public func Login_EmailPhoneBody(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1682]!, self._r[1682]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1686]!, self._r[1686]!, [_0, _1, _2]) } - public var Login_PhoneNumberHelp: String { return self._s[1683]! } - public var LastSeen_ALongTimeAgo: String { return self._s[1684]! } - public var Channel_AdminLog_CanPinMessages: String { return self._s[1685]! } - public var ChannelIntro_CreateChannel: String { return self._s[1686]! } - public var Conversation_UnreadMessages: String { return self._s[1687]! } - public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1688]! } - public var Channel_AdminLog_EmptyText: String { return self._s[1689]! } - public var Theme_Context_Apply: String { return self._s[1690]! } - public var Notification_GroupActivated: String { return self._s[1691]! } - public var NotificationSettings_ContactJoinedInfo: String { return self._s[1692]! } - public var Wallet_Intro_CreateWallet: String { return self._s[1693]! } + public var Login_PhoneNumberHelp: String { return self._s[1687]! } + public var LastSeen_ALongTimeAgo: String { return self._s[1688]! } + public var Channel_AdminLog_CanPinMessages: String { return self._s[1689]! } + public var ChannelIntro_CreateChannel: String { return self._s[1690]! } + public var Conversation_UnreadMessages: String { return self._s[1691]! } + public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1692]! } + public var Channel_AdminLog_EmptyText: String { return self._s[1693]! } + public var Theme_Context_Apply: String { return self._s[1694]! } + public var Notification_GroupActivated: String { return self._s[1695]! } + public var NotificationSettings_ContactJoinedInfo: String { return self._s[1696]! } + public var Wallet_Intro_CreateWallet: String { return self._s[1697]! } public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1694]!, self._r[1694]!, [_0]) - } - public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1695]!, self._r[1695]!, [_0, _1]) - } - public var GroupInfo_ConvertToSupergroup: String { return self._s[1697]! } - public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1698]!, self._r[1698]!, [_0]) } - public var Undo_DeletedChannel: String { return self._s[1699]! } - public var CallFeedback_AddComment: String { return self._s[1700]! } + public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1699]!, self._r[1699]!, [_0, _1]) + } + public var GroupInfo_ConvertToSupergroup: String { return self._s[1701]! } + public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1702]!, self._r[1702]!, [_0]) + } + public var Undo_DeletedChannel: String { return self._s[1703]! } + public var CallFeedback_AddComment: String { return self._s[1704]! } public func Conversation_OpenBotLinkAllowMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1701]!, self._r[1701]!, [_0]) + return formatWithArgumentRanges(self._s[1705]!, self._r[1705]!, [_0]) } - public var Document_TargetConfirmationFormat: String { return self._s[1702]! } + public var Document_TargetConfirmationFormat: String { return self._s[1706]! } public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1703]!, self._r[1703]!, [_0]) + return formatWithArgumentRanges(self._s[1707]!, self._r[1707]!, [_0]) } - public var LogoutOptions_SetPasscodeTitle: String { return self._s[1704]! } + public var LogoutOptions_SetPasscodeTitle: String { return self._s[1708]! } public func PUSH_CHAT_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1705]!, self._r[1705]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[1709]!, self._r[1709]!, [_1, _2, _3, _4]) } - public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[1706]! } - public var Theme_ErrorNotFound: String { return self._s[1707]! } - public var Contacts_SortByName: String { return self._s[1708]! } - public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1709]! } + public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[1710]! } + public var Theme_ErrorNotFound: String { return self._s[1711]! } + public var Contacts_SortByName: String { return self._s[1712]! } + public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1713]! } public func CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1711]!, self._r[1711]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1715]!, self._r[1715]!, [_1, _2, _3]) } - public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1712]! } - public var ScheduledMessages_EditTime: String { return self._s[1713]! } - public var Conversation_ClearSelfHistory: String { return self._s[1714]! } - public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1715]! } - public var PasscodeSettings_DoNotMatch: String { return self._s[1716]! } - public var Stickers_SuggestNone: String { return self._s[1717]! } - public var ChatSettings_Cache: String { return self._s[1718]! } - public var Settings_SaveIncomingPhotos: String { return self._s[1719]! } - public var Media_ShareThisPhoto: String { return self._s[1720]! } - public var Chat_SlowmodeTooltipPending: String { return self._s[1721]! } - public var InfoPlist_NSContactsUsageDescription: String { return self._s[1722]! } - public var Conversation_ContextMenuCopyLink: String { return self._s[1723]! } - public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1724]! } - public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1725]! } - public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1726]! } - public var Appearance_ThemePreview_Chat_6_Text: String { return self._s[1727]! } + public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1716]! } + public var ScheduledMessages_EditTime: String { return self._s[1717]! } + public var Conversation_ClearSelfHistory: String { return self._s[1718]! } + public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1719]! } + public var PasscodeSettings_DoNotMatch: String { return self._s[1720]! } + public var Stickers_SuggestNone: String { return self._s[1721]! } + public var ChatSettings_Cache: String { return self._s[1722]! } + public var Settings_SaveIncomingPhotos: String { return self._s[1723]! } + public var Media_ShareThisPhoto: String { return self._s[1724]! } + public var Chat_SlowmodeTooltipPending: String { return self._s[1725]! } + public var InfoPlist_NSContactsUsageDescription: String { return self._s[1726]! } + public var Conversation_ContextMenuCopyLink: String { return self._s[1727]! } + public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1728]! } + public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1729]! } + public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1730]! } + public var Appearance_ThemePreview_Chat_6_Text: String { return self._s[1731]! } public func Wallet_SecureStorageReset_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1728]!, self._r[1728]!, [_0]) + return formatWithArgumentRanges(self._s[1732]!, self._r[1732]!, [_0]) } - public var Permissions_CellularDataTitle_v0: String { return self._s[1729]! } - public var WallpaperSearch_ColorWhite: String { return self._s[1731]! } - public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1732]! } - public var Conversation_ErrorInaccessibleMessage: String { return self._s[1733]! } - public var Map_OpenIn: String { return self._s[1734]! } + public var Permissions_CellularDataTitle_v0: String { return self._s[1733]! } + public var WallpaperSearch_ColorWhite: String { return self._s[1735]! } + public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1736]! } + public var Conversation_ErrorInaccessibleMessage: String { return self._s[1737]! } + public var Map_OpenIn: String { return self._s[1738]! } public func PUSH_PHONE_CALL_MISSED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1737]!, self._r[1737]!, [_1]) + return formatWithArgumentRanges(self._s[1741]!, self._r[1741]!, [_1]) } public func ChannelInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1738]!, self._r[1738]!, [_0]) + return formatWithArgumentRanges(self._s[1742]!, self._r[1742]!, [_0]) } - public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1739]! } - public var MessagePoll_LabelClosed: String { return self._s[1740]! } - public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1742]! } - public var Wallet_Send_SendAnyway: String { return self._s[1743]! } - public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1744]! } - public var UserInfo_FirstNamePlaceholder: String { return self._s[1745]! } - public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1746]! } - public var Map_SetThisPlace: String { return self._s[1747]! } - public var Login_SelectCountry_Title: String { return self._s[1748]! } - public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1749]! } + public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1743]! } + public var MessagePoll_LabelClosed: String { return self._s[1744]! } + public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1746]! } + public var Wallet_Send_SendAnyway: String { return self._s[1747]! } + public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1748]! } + public var UserInfo_FirstNamePlaceholder: String { return self._s[1749]! } + public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1750]! } + public var Map_SetThisPlace: String { return self._s[1751]! } + public var Login_SelectCountry_Title: String { return self._s[1752]! } + public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1753]! } public func Conversation_OpenBotLinkLogin(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1750]!, self._r[1750]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1754]!, self._r[1754]!, [_1, _2]) } - public var Channel_AdminLog_ChangeInfo: String { return self._s[1751]! } - public var Watch_Suggestion_BRB: String { return self._s[1752]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[1753]! } - public var Contacts_PermissionsTitle: String { return self._s[1754]! } - public var Conversation_RestrictedInline: String { return self._s[1755]! } - public var Appearance_RemoveThemeColor: String { return self._s[1757]! } - public var StickerPack_ViewPack: String { return self._s[1758]! } - public var Wallet_UnknownError: String { return self._s[1759]! } + public var Channel_AdminLog_ChangeInfo: String { return self._s[1755]! } + public var Watch_Suggestion_BRB: String { return self._s[1756]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[1757]! } + public var Contacts_PermissionsTitle: String { return self._s[1758]! } + public var Conversation_RestrictedInline: String { return self._s[1759]! } + public var Appearance_RemoveThemeColor: String { return self._s[1761]! } + public var StickerPack_ViewPack: String { return self._s[1762]! } + public var Wallet_UnknownError: String { return self._s[1763]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1760]!, self._r[1760]!, [_0]) + return formatWithArgumentRanges(self._s[1764]!, self._r[1764]!, [_0]) } - public var Compose_NewChannel: String { return self._s[1762]! } - public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1765]! } - public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1767]! } - public var Channel_Info_Stickers: String { return self._s[1768]! } - public var AutoNightTheme_PreferredTheme: String { return self._s[1769]! } - public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1770]! } - public var Passport_DeletePersonalDetails: String { return self._s[1771]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[1772]! } - public var Channel_DiscussionGroupInfo: String { return self._s[1773]! } - public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1774]! } - public var Conversation_SearchNoResults: String { return self._s[1777]! } - public var Wallet_Configuration_ApplyErrorTextURLInvalid: String { return self._s[1778]! } - public var MessagePoll_LabelAnonymous: String { return self._s[1779]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1780]! } - public var Login_Code: String { return self._s[1781]! } - public var EditTheme_Create_BottomInfo: String { return self._s[1782]! } - public var Watch_Suggestion_WhatsUp: String { return self._s[1783]! } - public var Weekday_ShortThursday: String { return self._s[1784]! } - public var Resolve_ErrorNotFound: String { return self._s[1786]! } - public var LastSeen_Offline: String { return self._s[1787]! } - public var PeopleNearby_NoMembers: String { return self._s[1788]! } - public var GroupPermission_AddMembersNotAvailable: String { return self._s[1789]! } - public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1790]! } - public var GroupInfo_Title: String { return self._s[1792]! } - public var NotificationsSound_Note: String { return self._s[1793]! } - public var Conversation_EditingMessagePanelTitle: String { return self._s[1794]! } - public var Watch_Message_Poll: String { return self._s[1795]! } - public var Privacy_Calls: String { return self._s[1796]! } + public var Compose_NewChannel: String { return self._s[1766]! } + public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1769]! } + public var MessagePoll_LabelQuiz: String { return self._s[1771]! } + public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1772]! } + public var Channel_Info_Stickers: String { return self._s[1773]! } + public var AutoNightTheme_PreferredTheme: String { return self._s[1774]! } + public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1775]! } + public var Passport_DeletePersonalDetails: String { return self._s[1776]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[1777]! } + public var Channel_DiscussionGroupInfo: String { return self._s[1778]! } + public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1779]! } + public var Conversation_SearchNoResults: String { return self._s[1782]! } + public var Wallet_Configuration_ApplyErrorTextURLInvalid: String { return self._s[1783]! } + public var MessagePoll_LabelAnonymous: String { return self._s[1784]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1785]! } + public var Login_Code: String { return self._s[1786]! } + public var EditTheme_Create_BottomInfo: String { return self._s[1787]! } + public var Watch_Suggestion_WhatsUp: String { return self._s[1788]! } + public var Weekday_ShortThursday: String { return self._s[1789]! } + public var Resolve_ErrorNotFound: String { return self._s[1791]! } + public var LastSeen_Offline: String { return self._s[1792]! } + public var PeopleNearby_NoMembers: String { return self._s[1793]! } + public var GroupPermission_AddMembersNotAvailable: String { return self._s[1794]! } + public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1795]! } + public var GroupInfo_Title: String { return self._s[1797]! } + public var NotificationsSound_Note: String { return self._s[1798]! } + public var Conversation_EditingMessagePanelTitle: String { return self._s[1799]! } + public var Watch_Message_Poll: String { return self._s[1800]! } + public var Privacy_Calls: String { return self._s[1801]! } public func Channel_AdminLog_MessageRankUsername(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1797]!, self._r[1797]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1802]!, self._r[1802]!, [_1, _2, _3]) } - public var Month_ShortAugust: String { return self._s[1798]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[1799]! } - public var Notifications_Reset: String { return self._s[1800]! } - public var Conversation_Pin: String { return self._s[1801]! } - public var Passport_Language_lv: String { return self._s[1802]! } - public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1803]! } - public var BlockedUsers_Info: String { return self._s[1804]! } - public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1806]! } - public var Watch_Conversation_Unblock: String { return self._s[1808]! } + public var Month_ShortAugust: String { return self._s[1803]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[1804]! } + public var Notifications_Reset: String { return self._s[1805]! } + public var Conversation_Pin: String { return self._s[1806]! } + public var Passport_Language_lv: String { return self._s[1807]! } + public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1808]! } + public var BlockedUsers_Info: String { return self._s[1809]! } + public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1811]! } + public var Watch_Conversation_Unblock: String { return self._s[1813]! } public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1809]!, self._r[1809]!, [_0]) + return formatWithArgumentRanges(self._s[1814]!, self._r[1814]!, [_0]) } - public var CloudStorage_Title: String { return self._s[1810]! } - public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1811]! } + public var CloudStorage_Title: String { return self._s[1815]! } + public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1816]! } public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1812]!, self._r[1812]!, [_0]) + return formatWithArgumentRanges(self._s[1817]!, self._r[1817]!, [_0]) } - public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1813]! } - public var Watch_Suggestion_OnMyWay: String { return self._s[1814]! } - public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1815]! } - public var Passport_Address_EditBankStatement: String { return self._s[1816]! } + public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1818]! } + public var Watch_Suggestion_OnMyWay: String { return self._s[1819]! } + public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1820]! } + public var Passport_Address_EditBankStatement: String { return self._s[1821]! } public func Channel_AdminLog_MessageChangedUnlinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1817]!, self._r[1817]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1822]!, self._r[1822]!, [_1, _2]) } - public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1818]! } - public var ShareMenu_Comment: String { return self._s[1819]! } - public var Permissions_ContactsTitle_v0: String { return self._s[1820]! } - public var Notifications_PermissionsTitle: String { return self._s[1821]! } - public var GroupPermission_NoSendLinks: String { return self._s[1822]! } - public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1823]! } - public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1824]! } - public var Settings_Support: String { return self._s[1825]! } - public var Notifications_ChannelNotificationsSound: String { return self._s[1826]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1827]! } - public var Privacy_Forwards_Preview: String { return self._s[1828]! } - public var GroupPermission_ApplyAlertAction: String { return self._s[1829]! } - public var Watch_Stickers_StickerPacks: String { return self._s[1830]! } - public var Common_Select: String { return self._s[1832]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1833]! } - public var WallpaperSearch_ColorGray: String { return self._s[1836]! } - public var TwoFactorSetup_Password_PlaceholderPassword: String { return self._s[1837]! } - public var TwoFactorSetup_Hint_SkipAction: String { return self._s[1838]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1839]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1840]! } - public var Appearance_PreviewReplyAuthor: String { return self._s[1841]! } - public var TwoStepAuth_RecoveryTitle: String { return self._s[1842]! } - public var Widget_AuthRequired: String { return self._s[1843]! } - public var Camera_FlashOn: String { return self._s[1844]! } - public var Conversation_ContextMenuLookUp: String { return self._s[1845]! } - public var Channel_Stickers_NotFoundHelp: String { return self._s[1846]! } - public var Watch_Suggestion_OK: String { return self._s[1847]! } + public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1823]! } + public var ShareMenu_Comment: String { return self._s[1824]! } + public var Permissions_ContactsTitle_v0: String { return self._s[1825]! } + public var Notifications_PermissionsTitle: String { return self._s[1826]! } + public var GroupPermission_NoSendLinks: String { return self._s[1827]! } + public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1828]! } + public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1829]! } + public var Settings_Support: String { return self._s[1830]! } + public var Notifications_ChannelNotificationsSound: String { return self._s[1831]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1832]! } + public var Privacy_Forwards_Preview: String { return self._s[1833]! } + public var GroupPermission_ApplyAlertAction: String { return self._s[1834]! } + public var Watch_Stickers_StickerPacks: String { return self._s[1835]! } + public var Common_Select: String { return self._s[1837]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1838]! } + public var WallpaperSearch_ColorGray: String { return self._s[1841]! } + public var TwoFactorSetup_Password_PlaceholderPassword: String { return self._s[1842]! } + public var TwoFactorSetup_Hint_SkipAction: String { return self._s[1843]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1844]! } + public var PollResults_Title: String { return self._s[1845]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1846]! } + public var Appearance_PreviewReplyAuthor: String { return self._s[1847]! } + public var TwoStepAuth_RecoveryTitle: String { return self._s[1848]! } + public var Widget_AuthRequired: String { return self._s[1849]! } + public var Camera_FlashOn: String { return self._s[1850]! } + public var Conversation_ContextMenuLookUp: String { return self._s[1851]! } + public var Channel_Stickers_NotFoundHelp: String { return self._s[1852]! } + public var Watch_Suggestion_OK: String { return self._s[1853]! } public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1849]!, self._r[1849]!, [_0]) + return formatWithArgumentRanges(self._s[1855]!, self._r[1855]!, [_0]) } public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1851]!, self._r[1851]!, [_0]) + return formatWithArgumentRanges(self._s[1857]!, self._r[1857]!, [_0]) } - public var TextFormat_Strikethrough: String { return self._s[1852]! } - public var DialogList_AdLabel: String { return self._s[1853]! } - public var WatchRemote_NotificationText: String { return self._s[1854]! } - public var IntentsSettings_SuggestedChatsSavedMessages: String { return self._s[1855]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1856]! } - public var Conversation_ReportSpam: String { return self._s[1857]! } - public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1858]! } - public var Settings_LogoutConfirmationTitle: String { return self._s[1860]! } - public var PhoneLabel_Title: String { return self._s[1861]! } - public var Passport_Address_EditRentalAgreement: String { return self._s[1862]! } - public var Settings_ChangePhoneNumber: String { return self._s[1863]! } - public var Notifications_ExceptionsTitle: String { return self._s[1864]! } - public var Notifications_AlertTones: String { return self._s[1865]! } - public var Call_ReportIncludeLogDescription: String { return self._s[1866]! } - public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1867]! } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1868]! } - public var VoiceOver_Chat_Photo: String { return self._s[1870]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[1871]! } - public var ReportPeer_ReasonOther: String { return self._s[1872]! } - public var ChatList_Context_JoinChannel: String { return self._s[1873]! } - public var KeyCommand_ScrollDown: String { return self._s[1875]! } - public var Conversation_ScheduleMessage_Title: String { return self._s[1876]! } + public var TextFormat_Strikethrough: String { return self._s[1858]! } + public var DialogList_AdLabel: String { return self._s[1859]! } + public var WatchRemote_NotificationText: String { return self._s[1860]! } + public var IntentsSettings_SuggestedChatsSavedMessages: String { return self._s[1861]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1862]! } + public var Conversation_ReportSpam: String { return self._s[1863]! } + public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1864]! } + public var Settings_LogoutConfirmationTitle: String { return self._s[1866]! } + public var PhoneLabel_Title: String { return self._s[1867]! } + public var Passport_Address_EditRentalAgreement: String { return self._s[1868]! } + public var Settings_ChangePhoneNumber: String { return self._s[1869]! } + public var Notifications_ExceptionsTitle: String { return self._s[1870]! } + public var Notifications_AlertTones: String { return self._s[1871]! } + public var Call_ReportIncludeLogDescription: String { return self._s[1872]! } + public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1873]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1874]! } + public var VoiceOver_Chat_Photo: String { return self._s[1876]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[1877]! } + public var ReportPeer_ReasonOther: String { return self._s[1878]! } + public var ChatList_Context_JoinChannel: String { return self._s[1879]! } + public var KeyCommand_ScrollDown: String { return self._s[1881]! } + public var Conversation_ScheduleMessage_Title: String { return self._s[1882]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1877]!, self._r[1877]!, [_0]) + return formatWithArgumentRanges(self._s[1883]!, self._r[1883]!, [_0]) } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1878]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1879]! } - public var AuthSessions_LogOut: String { return self._s[1880]! } - public var Passport_Identity_TypeInternalPassport: String { return self._s[1881]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1882]! } - public var Passport_Phone_Title: String { return self._s[1883]! } - public var ContactList_Context_StartSecretChat: String { return self._s[1884]! } - public var Settings_PhoneNumber: String { return self._s[1885]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1884]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1885]! } + public var AuthSessions_LogOut: String { return self._s[1886]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[1887]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1888]! } + public var Passport_Phone_Title: String { return self._s[1889]! } + public var ContactList_Context_StartSecretChat: String { return self._s[1890]! } + public var Settings_PhoneNumber: String { return self._s[1891]! } public func Conversation_ScheduleMessage_SendToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1886]!, self._r[1886]!, [_0]) + return formatWithArgumentRanges(self._s[1892]!, self._r[1892]!, [_0]) } - public var NotificationsSound_Alert: String { return self._s[1888]! } - public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1889]! } - public var WebSearch_SearchNoResults: String { return self._s[1890]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1892]! } - public var Wallet_Configuration_SourceInfo: String { return self._s[1893]! } - public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1894]! } - public var SettingsSearch_Synonyms_Passport: String { return self._s[1895]! } - public var PhotoEditor_CurvesTool: String { return self._s[1896]! } - public var Checkout_PaymentMethod: String { return self._s[1898]! } + public var NotificationsSound_Alert: String { return self._s[1894]! } + public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1895]! } + public var WebSearch_SearchNoResults: String { return self._s[1896]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1898]! } + public var Wallet_Configuration_SourceInfo: String { return self._s[1899]! } + public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1900]! } + public var SettingsSearch_Synonyms_Passport: String { return self._s[1901]! } + public var PhotoEditor_CurvesTool: String { return self._s[1902]! } + public var Checkout_PaymentMethod: String { return self._s[1904]! } public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1899]!, self._r[1899]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1905]!, self._r[1905]!, [_1, _2]) } - public var Contacts_AccessDeniedError: String { return self._s[1900]! } - public var Camera_PhotoMode: String { return self._s[1903]! } - public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1904]! } - public var Appearance_TextSize_Apply: String { return self._s[1905]! } - public var Passport_Address_AddUtilityBill: String { return self._s[1907]! } - public var CallSettings_OnMobile: String { return self._s[1908]! } - public var Tour_Text2: String { return self._s[1909]! } + public var Contacts_AccessDeniedError: String { return self._s[1906]! } + public var Camera_PhotoMode: String { return self._s[1909]! } + public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1910]! } + public var Appearance_TextSize_Apply: String { return self._s[1911]! } + public var Passport_Address_AddUtilityBill: String { return self._s[1913]! } + public var CallSettings_OnMobile: String { return self._s[1914]! } + public var Tour_Text2: String { return self._s[1915]! } public func PUSH_CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1910]!, self._r[1910]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1916]!, self._r[1916]!, [_1, _2]) } - public var DialogList_EncryptionProcessing: String { return self._s[1912]! } - public var Permissions_Skip: String { return self._s[1913]! } - public var Wallet_Words_NotDoneOk: String { return self._s[1914]! } - public var SecretImage_Title: String { return self._s[1915]! } - public var Watch_MessageView_Title: String { return self._s[1916]! } - public var Channel_DiscussionGroupAdd: String { return self._s[1917]! } - public var AttachmentMenu_Poll: String { return self._s[1918]! } + public var DialogList_EncryptionProcessing: String { return self._s[1918]! } + public var Permissions_Skip: String { return self._s[1919]! } + public var Wallet_Words_NotDoneOk: String { return self._s[1920]! } + public var SecretImage_Title: String { return self._s[1921]! } + public var Watch_MessageView_Title: String { return self._s[1922]! } + public var Channel_DiscussionGroupAdd: String { return self._s[1923]! } + public var AttachmentMenu_Poll: String { return self._s[1924]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1919]!, self._r[1919]!, [_0]) + return formatWithArgumentRanges(self._s[1925]!, self._r[1925]!, [_0]) } public func Channel_DiscussionGroup_PrivateChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1920]!, self._r[1920]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1926]!, self._r[1926]!, [_1, _2]) } - public var Notification_CallCanceled: String { return self._s[1921]! } - public var WallpaperPreview_Title: String { return self._s[1922]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1923]! } - public var Settings_ProxyConnecting: String { return self._s[1924]! } - public var Settings_CheckPhoneNumberText: String { return self._s[1926]! } - public var VoiceOver_Chat_YourVideo: String { return self._s[1927]! } - public var Wallet_Intro_Title: String { return self._s[1928]! } - public var TwoFactorSetup_Password_Action: String { return self._s[1929]! } - public var Profile_MessageLifetime5s: String { return self._s[1930]! } - public var Username_InvalidCharacters: String { return self._s[1931]! } - public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1932]! } - public var ScheduledMessages_ClearAll: String { return self._s[1933]! } - public var WallpaperPreview_CropBottomText: String { return self._s[1934]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[1935]! } - public var Settings_AddAccount: String { return self._s[1936]! } - public var Notification_CreatedChannel: String { return self._s[1939]! } + public var Notification_CallCanceled: String { return self._s[1927]! } + public var WallpaperPreview_Title: String { return self._s[1928]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1929]! } + public var Settings_ProxyConnecting: String { return self._s[1930]! } + public var Settings_CheckPhoneNumberText: String { return self._s[1932]! } + public var VoiceOver_Chat_YourVideo: String { return self._s[1933]! } + public var Wallet_Intro_Title: String { return self._s[1934]! } + public var TwoFactorSetup_Password_Action: String { return self._s[1935]! } + public var Profile_MessageLifetime5s: String { return self._s[1936]! } + public var Username_InvalidCharacters: String { return self._s[1937]! } + public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1938]! } + public var ScheduledMessages_ClearAll: String { return self._s[1939]! } + public var WallpaperPreview_CropBottomText: String { return self._s[1940]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[1941]! } + public var Settings_AddAccount: String { return self._s[1942]! } + public var Notification_CreatedChannel: String { return self._s[1945]! } public func PUSH_CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1940]!, self._r[1940]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1946]!, self._r[1946]!, [_1, _2, _3]) } - public var Passcode_AppLockedAlert: String { return self._s[1942]! } - public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1943]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[1944]! } - public var Contacts_TopSection: String { return self._s[1945]! } - public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[1946]! } + public var Passcode_AppLockedAlert: String { return self._s[1948]! } + public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1949]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[1950]! } + public var Contacts_TopSection: String { return self._s[1951]! } + public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[1952]! } public func Conversation_SetReminder_RemindOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1947]!, self._r[1947]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1953]!, self._r[1953]!, [_0, _1]) } - public var Wallet_Info_Receive: String { return self._s[1948]! } - public var Wallet_Completed_ViewWallet: String { return self._s[1949]! } + public var Wallet_Info_Receive: String { return self._s[1954]! } + public var Wallet_Completed_ViewWallet: String { return self._s[1955]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1950]!, self._r[1950]!, [_0]) + return formatWithArgumentRanges(self._s[1956]!, self._r[1956]!, [_0]) } - public var ReportPeer_ReasonSpam: String { return self._s[1951]! } - public var UserInfo_TapToCall: String { return self._s[1952]! } - public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1954]! } - public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1955]! } - public var Common_Search: String { return self._s[1956]! } - public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1957]! } + public var ReportPeer_ReasonSpam: String { return self._s[1957]! } + public var UserInfo_TapToCall: String { return self._s[1958]! } + public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1960]! } + public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1961]! } + public var Common_Search: String { return self._s[1962]! } + public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1963]! } public func Channel_AdminLog_MessageChangedGroupGeoLocation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1958]!, self._r[1958]!, [_0]) + return formatWithArgumentRanges(self._s[1964]!, self._r[1964]!, [_0]) } - public var Wallet_Month_ShortJuly: String { return self._s[1959]! } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1961]! } - public var Message_InvoiceLabel: String { return self._s[1962]! } - public var Conversation_InputTextPlaceholder: String { return self._s[1963]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1964]! } + public var Wallet_Month_ShortJuly: String { return self._s[1965]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1967]! } + public var Message_InvoiceLabel: String { return self._s[1968]! } + public var Conversation_InputTextPlaceholder: String { return self._s[1969]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1970]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1965]!, self._r[1965]!, [_0]) + return formatWithArgumentRanges(self._s[1971]!, self._r[1971]!, [_0]) } - public var IntentsSettings_Reset: String { return self._s[1966]! } - public var Conversation_Info: String { return self._s[1967]! } - public var Login_InfoDeletePhoto: String { return self._s[1968]! } - public var Passport_Language_vi: String { return self._s[1970]! } - public var UserInfo_ScamUserWarning: String { return self._s[1971]! } - public var Conversation_Search: String { return self._s[1972]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1974]! } - public var ReportPeer_ReasonPornography: String { return self._s[1975]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[1976]! } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1977]! } - public var Map_LiveLocationGroupDescription: String { return self._s[1978]! } - public var Channel_Setup_TypeHeader: String { return self._s[1979]! } - public var AuthSessions_LoggedIn: String { return self._s[1980]! } - public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1981]! } - public var Login_SmsRequestState3: String { return self._s[1982]! } - public var Passport_Address_EditUtilityBill: String { return self._s[1983]! } - public var Appearance_ReduceMotionInfo: String { return self._s[1984]! } - public var Join_ChannelsTooMuch: String { return self._s[1985]! } - public var Channel_Edit_LinkItem: String { return self._s[1986]! } - public var Privacy_Calls_P2PNever: String { return self._s[1987]! } - public var Conversation_AddToReadingList: String { return self._s[1989]! } - public var Share_MultipleMessagesDisabled: String { return self._s[1990]! } - public var Message_Animation: String { return self._s[1991]! } - public var Conversation_DefaultRestrictedMedia: String { return self._s[1992]! } - public var Map_Unknown: String { return self._s[1993]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[1994]! } + public var IntentsSettings_Reset: String { return self._s[1972]! } + public var Conversation_Info: String { return self._s[1973]! } + public var Login_InfoDeletePhoto: String { return self._s[1974]! } + public var Passport_Language_vi: String { return self._s[1976]! } + public var UserInfo_ScamUserWarning: String { return self._s[1977]! } + public var Conversation_Search: String { return self._s[1978]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1980]! } + public var ReportPeer_ReasonPornography: String { return self._s[1981]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[1982]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1983]! } + public var Map_LiveLocationGroupDescription: String { return self._s[1984]! } + public var Channel_Setup_TypeHeader: String { return self._s[1985]! } + public var AuthSessions_LoggedIn: String { return self._s[1986]! } + public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1987]! } + public var Login_SmsRequestState3: String { return self._s[1988]! } + public var Passport_Address_EditUtilityBill: String { return self._s[1989]! } + public var Appearance_ReduceMotionInfo: String { return self._s[1990]! } + public var Join_ChannelsTooMuch: String { return self._s[1991]! } + public var Channel_Edit_LinkItem: String { return self._s[1992]! } + public var Privacy_Calls_P2PNever: String { return self._s[1993]! } + public var Conversation_AddToReadingList: String { return self._s[1995]! } + public var Share_MultipleMessagesDisabled: String { return self._s[1996]! } + public var Message_Animation: String { return self._s[1997]! } + public var Conversation_DefaultRestrictedMedia: String { return self._s[1998]! } + public var Map_Unknown: String { return self._s[1999]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[2000]! } public func PUSH_PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1995]!, self._r[1995]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2001]!, self._r[2001]!, [_1, _2]) } public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1996]!, self._r[1996]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2002]!, self._r[2002]!, [_1, _2]) } - public var Call_StatusRequesting: String { return self._s[1997]! } - public var Conversation_SecretChatContextBotAlert: String { return self._s[1998]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1999]! } + public var Call_StatusRequesting: String { return self._s[2003]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[2004]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[2005]! } public func PUSH_CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2000]!, self._r[2000]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2006]!, self._r[2006]!, [_1, _2]) } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2001]!, self._r[2001]!, [_0]) + return formatWithArgumentRanges(self._s[2007]!, self._r[2007]!, [_0]) } - public var Update_Skip: String { return self._s[2002]! } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[2003]! } - public var Message_PinnedPollMessage: String { return self._s[2004]! } - public var BlockedUsers_Title: String { return self._s[2005]! } + public var Update_Skip: String { return self._s[2008]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[2009]! } + public var Message_PinnedPollMessage: String { return self._s[2010]! } + public var BlockedUsers_Title: String { return self._s[2011]! } public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2006]!, self._r[2006]!, [_1]) + return formatWithArgumentRanges(self._s[2012]!, self._r[2012]!, [_1]) } - public var Username_CheckingUsername: String { return self._s[2007]! } - public var NotificationsSound_Bell: String { return self._s[2008]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[2009]! } - public var Weekday_Monday: String { return self._s[2010]! } - public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[2011]! } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[2012]! } - public var ChatSettings_Groups: String { return self._s[2013]! } - public var WallpaperPreview_PatternPaternDiscard: String { return self._s[2014]! } + public var Username_CheckingUsername: String { return self._s[2013]! } + public var NotificationsSound_Bell: String { return self._s[2014]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[2015]! } + public var Weekday_Monday: String { return self._s[2016]! } + public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[2017]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[2018]! } + public var ChatSettings_Groups: String { return self._s[2019]! } + public var WallpaperPreview_PatternPaternDiscard: String { return self._s[2020]! } public func Conversation_SetReminder_RemindTomorrow(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_0]) + return formatWithArgumentRanges(self._s[2021]!, self._r[2021]!, [_0]) } - public var Your_card_was_declined: String { return self._s[2016]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[2018]! } - public var Wallet_Month_ShortApril: String { return self._s[2019]! } - public var ChatList_Unmute: String { return self._s[2020]! } - public var AuthSessions_AddDevice_ScanTitle: String { return self._s[2021]! } - public var PhotoEditor_CurvesAll: String { return self._s[2022]! } - public var Weekday_ShortTuesday: String { return self._s[2023]! } - public var DialogList_Read: String { return self._s[2024]! } - public var Appearance_AppIconClassic: String { return self._s[2025]! } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[2026]! } - public var Passport_Identity_Gender: String { return self._s[2027]! } + public var Your_card_was_declined: String { return self._s[2022]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[2024]! } + public var Wallet_Month_ShortApril: String { return self._s[2025]! } + public var ChatList_Unmute: String { return self._s[2026]! } + public var AuthSessions_AddDevice_ScanTitle: String { return self._s[2027]! } + public var PhotoEditor_CurvesAll: String { return self._s[2028]! } + public var Weekday_ShortTuesday: String { return self._s[2029]! } + public var DialogList_Read: String { return self._s[2030]! } + public var Appearance_AppIconClassic: String { return self._s[2031]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[2032]! } + public var Passport_Identity_Gender: String { return self._s[2033]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2028]!, self._r[2028]!, [_0]) + return formatWithArgumentRanges(self._s[2034]!, self._r[2034]!, [_0]) } - public var Target_SelectGroup: String { return self._s[2029]! } - public var Map_HomeAndWorkInfo: String { return self._s[2031]! } + public var Target_SelectGroup: String { return self._s[2035]! } + public var Map_HomeAndWorkInfo: String { return self._s[2037]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2032]!, self._r[2032]!, [_0]) + return formatWithArgumentRanges(self._s[2038]!, self._r[2038]!, [_0]) } - public var Passport_Language_en: String { return self._s[2033]! } - public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[2034]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[2035]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[2036]! } - public var ScheduledMessages_SendNow: String { return self._s[2037]! } - public var Checkout_NewCard_PaymentCard: String { return self._s[2039]! } - public var Login_InfoHelp: String { return self._s[2040]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[2041]! } - public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[2042]! } + public var Passport_Language_en: String { return self._s[2039]! } + public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[2040]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[2041]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[2042]! } + public var ScheduledMessages_SendNow: String { return self._s[2043]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[2045]! } + public var Login_InfoHelp: String { return self._s[2046]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[2047]! } + public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[2048]! } public func Channel_AdminLog_MessageChangedLinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2043]!, self._r[2043]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2049]!, self._r[2049]!, [_1, _2]) } - public var SocksProxySetup_AddProxy: String { return self._s[2046]! } - public var CreatePoll_Title: String { return self._s[2047]! } - public var Conversation_ViewTheme: String { return self._s[2048]! } - public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[2049]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[2050]! } - public var TwoFactorSetup_Intro_Text: String { return self._s[2051]! } - public var UserInfo_GroupsInCommon: String { return self._s[2052]! } - public var TelegramWallet_Intro_TermsUrl: String { return self._s[2053]! } - public var Call_AudioRouteHide: String { return self._s[2054]! } + public var SocksProxySetup_AddProxy: String { return self._s[2052]! } + public var CreatePoll_Title: String { return self._s[2053]! } + public var Conversation_ViewTheme: String { return self._s[2054]! } + public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[2055]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[2056]! } + public var TwoFactorSetup_Intro_Text: String { return self._s[2057]! } + public var UserInfo_GroupsInCommon: String { return self._s[2058]! } + public var TelegramWallet_Intro_TermsUrl: String { return self._s[2059]! } + public var Call_AudioRouteHide: String { return self._s[2060]! } public func Wallet_Info_TransactionDateHeader(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2056]!, self._r[2056]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2062]!, self._r[2062]!, [_1, _2]) } - public var ContactInfo_PhoneLabelMobile: String { return self._s[2057]! } - public var IntentsSettings_SuggestedChatsInfo: String { return self._s[2058]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[2063]! } + public var IntentsSettings_SuggestedChatsInfo: String { return self._s[2064]! } public func ChatList_LeaveGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_0]) + return formatWithArgumentRanges(self._s[2065]!, self._r[2065]!, [_0]) } - public var TextFormat_Bold: String { return self._s[2060]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[2061]! } - public var StickerPackActionInfo_AddedTitle: String { return self._s[2062]! } - public var Notifications_Title: String { return self._s[2063]! } - public var Group_Username_InvalidTooShort: String { return self._s[2064]! } - public var Channel_ErrorAddTooMuch: String { return self._s[2065]! } + public var TextFormat_Bold: String { return self._s[2066]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[2067]! } + public var StickerPackActionInfo_AddedTitle: String { return self._s[2068]! } + public var Notifications_Title: String { return self._s[2069]! } + public var Group_Username_InvalidTooShort: String { return self._s[2070]! } + public var Channel_ErrorAddTooMuch: String { return self._s[2071]! } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2066]!, self._r[2066]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2072]!, self._r[2072]!, ["\(_0)"]) } - public var VoiceOver_DiscardPreparedContent: String { return self._s[2068]! } - public var Stickers_SuggestAdded: String { return self._s[2069]! } - public var Login_CountryCode: String { return self._s[2070]! } - public var ChatSettings_AutoPlayVideos: String { return self._s[2071]! } - public var Map_GetDirections: String { return self._s[2072]! } - public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[2073]! } - public var Login_PhoneFloodError: String { return self._s[2074]! } + public var VoiceOver_DiscardPreparedContent: String { return self._s[2074]! } + public var Stickers_SuggestAdded: String { return self._s[2075]! } + public var Login_CountryCode: String { return self._s[2076]! } + public var ChatSettings_AutoPlayVideos: String { return self._s[2077]! } + public var Map_GetDirections: String { return self._s[2078]! } + public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[2079]! } + public var Login_PhoneFloodError: String { return self._s[2080]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2075]!, self._r[2075]!, [_0]) + return formatWithArgumentRanges(self._s[2081]!, self._r[2081]!, [_0]) } public func Wallet_Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2076]!, self._r[2076]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2082]!, self._r[2082]!, [_1, _2, _3]) } - public var IntentsSettings_SuggestedChatsPrivateChats: String { return self._s[2077]! } - public var Settings_SetUsername: String { return self._s[2079]! } - public var Group_Location_ChangeLocation: String { return self._s[2080]! } - public var Notification_GroupInviterSelf: String { return self._s[2081]! } - public var InstantPage_TapToOpenLink: String { return self._s[2082]! } + public var IntentsSettings_SuggestedChatsPrivateChats: String { return self._s[2083]! } + public var Settings_SetUsername: String { return self._s[2085]! } + public var Group_Location_ChangeLocation: String { return self._s[2086]! } + public var Notification_GroupInviterSelf: String { return self._s[2087]! } + public var InstantPage_TapToOpenLink: String { return self._s[2088]! } public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2083]!, self._r[2083]!, [_0]) + return formatWithArgumentRanges(self._s[2089]!, self._r[2089]!, [_0]) } - public var Watch_Suggestion_TalkLater: String { return self._s[2084]! } - public var SecretChat_Title: String { return self._s[2085]! } - public var Group_UpgradeNoticeText1: String { return self._s[2086]! } - public var AuthSessions_Title: String { return self._s[2087]! } + public var Watch_Suggestion_TalkLater: String { return self._s[2090]! } + public var SecretChat_Title: String { return self._s[2091]! } + public var Group_UpgradeNoticeText1: String { return self._s[2092]! } + public var AuthSessions_Title: String { return self._s[2093]! } public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2088]!, self._r[2088]!, [_0]) + return formatWithArgumentRanges(self._s[2094]!, self._r[2094]!, [_0]) } - public var PhotoEditor_CropAuto: String { return self._s[2089]! } - public var Channel_About_Title: String { return self._s[2090]! } - public var Theme_ThemeChanged: String { return self._s[2091]! } - public var FastTwoStepSetup_EmailHelp: String { return self._s[2092]! } + public var PhotoEditor_CropAuto: String { return self._s[2095]! } + public var Channel_About_Title: String { return self._s[2096]! } + public var Theme_ThemeChanged: String { return self._s[2097]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[2098]! } public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2094]!, self._r[2094]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2100]!, self._r[2100]!, ["\(_0)"]) } - public var VoiceOver_MessageContextReport: String { return self._s[2095]! } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[2097]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[2098]! } + public var VoiceOver_MessageContextReport: String { return self._s[2101]! } + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[2103]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[2104]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2099]!, self._r[2099]!, [_1]) + return formatWithArgumentRanges(self._s[2105]!, self._r[2105]!, [_1]) } public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2101]!, self._r[2101]!, [_0]) + return formatWithArgumentRanges(self._s[2107]!, self._r[2107]!, [_0]) } public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2102]!, self._r[2102]!, [_0]) + return formatWithArgumentRanges(self._s[2108]!, self._r[2108]!, [_0]) } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[2103]! } - public var Presence_online: String { return self._s[2106]! } - public var PasscodeSettings_Title: String { return self._s[2107]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[2108]! } - public var Web_OpenExternal: String { return self._s[2109]! } - public var AutoDownloadSettings_AutoDownload: String { return self._s[2111]! } - public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[2112]! } - public var LocalGroup_Title: String { return self._s[2113]! } + public var Privacy_PaymentsClearInfoHelp: String { return self._s[2109]! } + public var Presence_online: String { return self._s[2112]! } + public var PasscodeSettings_Title: String { return self._s[2113]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[2114]! } + public var Web_OpenExternal: String { return self._s[2115]! } + public var AutoDownloadSettings_AutoDownload: String { return self._s[2117]! } + public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[2118]! } + public var LocalGroup_Title: String { return self._s[2119]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2114]!, self._r[2114]!, [_0]) + return formatWithArgumentRanges(self._s[2120]!, self._r[2120]!, [_0]) } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[2115]! } - public var Map_YouAreHere: String { return self._s[2116]! } + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[2121]! } + public var Map_YouAreHere: String { return self._s[2122]! } public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2117]!, self._r[2117]!, [_0]) - } - public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2118]!, self._r[2118]!, [_0]) - } - public var Theme_Context_ChangeColors: String { return self._s[2119]! } - public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[2120]! } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[2121]! } - public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2122]!, self._r[2122]!, [_0]) - } - public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2123]!, self._r[2123]!, [_0]) } - public var SocksProxySetup_Username: String { return self._s[2124]! } - public var Bot_Start: String { return self._s[2125]! } + public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2124]!, self._r[2124]!, [_0]) + } + public var Theme_Context_ChangeColors: String { return self._s[2125]! } + public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[2126]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[2127]! } + public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2128]!, self._r[2128]!, [_0]) + } + public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2129]!, self._r[2129]!, [_0]) + } + public var SocksProxySetup_Username: String { return self._s[2130]! } + public var Bot_Start: String { return self._s[2131]! } public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2126]!, self._r[2126]!, [_0]) + return formatWithArgumentRanges(self._s[2132]!, self._r[2132]!, [_0]) } public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2127]!, self._r[2127]!, [_0]) - } - public var Contacts_SortByPresence: String { return self._s[2128]! } - public var AccentColor_Title: String { return self._s[2130]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[2131]! } - public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2132]!, self._r[2132]!, [_1, _2]) - } - public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2133]!, self._r[2133]!, [_0]) } + public var Contacts_SortByPresence: String { return self._s[2134]! } + public var AccentColor_Title: String { return self._s[2136]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[2137]! } + public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2138]!, self._r[2138]!, [_1, _2]) + } + public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2139]!, self._r[2139]!, [_0]) + } public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2134]!, self._r[2134]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2140]!, self._r[2140]!, [_1, _2]) } - public var Passport_Email_EnterOtherEmail: String { return self._s[2135]! } - public var Login_InfoAvatarPhoto: String { return self._s[2136]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2137]! } - public var Tour_Title4: String { return self._s[2138]! } - public var Passport_Identity_Translation: String { return self._s[2139]! } - public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[2140]! } - public var Login_TermsOfServiceLabel: String { return self._s[2142]! } - public var Passport_Language_it: String { return self._s[2143]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2144]! } - public var Passport_Identity_SelfieHelp: String { return self._s[2145]! } - public var Conversation_ClearAll: String { return self._s[2147]! } - public var Wallet_Send_UninitializedText: String { return self._s[2149]! } - public var Channel_OwnershipTransfer_Title: String { return self._s[2150]! } - public var TwoStepAuth_FloodError: String { return self._s[2151]! } + public var Passport_Email_EnterOtherEmail: String { return self._s[2141]! } + public var Login_InfoAvatarPhoto: String { return self._s[2142]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2143]! } + public var Tour_Title4: String { return self._s[2144]! } + public var Passport_Identity_Translation: String { return self._s[2145]! } + public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[2146]! } + public var Login_TermsOfServiceLabel: String { return self._s[2148]! } + public var Passport_Language_it: String { return self._s[2149]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2150]! } + public var Passport_Identity_SelfieHelp: String { return self._s[2151]! } + public var Conversation_ClearAll: String { return self._s[2153]! } + public var Wallet_Send_UninitializedText: String { return self._s[2155]! } + public var Channel_OwnershipTransfer_Title: String { return self._s[2156]! } + public var TwoStepAuth_FloodError: String { return self._s[2157]! } public func PUSH_CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2152]!, self._r[2152]!, [_1]) + return formatWithArgumentRanges(self._s[2158]!, self._r[2158]!, [_1]) } - public var Paint_Delete: String { return self._s[2153]! } + public var Paint_Delete: String { return self._s[2159]! } public func Wallet_Sent_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2154]!, self._r[2154]!, [_0]) - } - public var Privacy_AddNewPeer: String { return self._s[2155]! } - public func Channel_AdminLog_MessageRank(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2156]!, self._r[2156]!, [_1]) - } - public var LogoutOptions_SetPasscodeText: String { return self._s[2157]! } - public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2158]!, self._r[2158]!, [_1, _2]) - } - public var Message_PinnedAudioMessage: String { return self._s[2159]! } - public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2160]!, self._r[2160]!, [_0]) } - public var Notification_Mute1hMin: String { return self._s[2161]! } - public var Notifications_GroupNotificationsSound: String { return self._s[2162]! } - public var Wallet_Month_GenNovember: String { return self._s[2163]! } - public var SocksProxySetup_ShareProxyList: String { return self._s[2164]! } - public var Conversation_MessageEditedLabel: String { return self._s[2165]! } + public var Privacy_AddNewPeer: String { return self._s[2161]! } + public func Channel_AdminLog_MessageRank(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2162]!, self._r[2162]!, [_1]) + } + public var LogoutOptions_SetPasscodeText: String { return self._s[2163]! } + public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2164]!, self._r[2164]!, [_1, _2]) + } + public var Message_PinnedAudioMessage: String { return self._s[2165]! } + public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2166]!, self._r[2166]!, [_0]) + } + public var Notification_Mute1hMin: String { return self._s[2167]! } + public var Notifications_GroupNotificationsSound: String { return self._s[2168]! } + public var Wallet_Month_GenNovember: String { return self._s[2169]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[2170]! } + public var Conversation_MessageEditedLabel: String { return self._s[2171]! } public func ClearCache_Success(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2166]!, self._r[2166]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2172]!, self._r[2172]!, [_0, _1]) } - public var Notification_Exceptions_AlwaysOff: String { return self._s[2167]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2168]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[2173]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2174]! } public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2169]!, self._r[2169]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[2175]!, self._r[2175]!, [_0, _1, _2]) } - public var NetworkUsageSettings_ResetStats: String { return self._s[2170]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[2176]! } public func PUSH_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2171]!, self._r[2171]!, [_1]) + return formatWithArgumentRanges(self._s[2177]!, self._r[2177]!, [_1]) } - public var AccessDenied_LocationTracking: String { return self._s[2172]! } - public var Month_GenOctober: String { return self._s[2173]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2174]! } - public var EnterPasscode_EnterPasscode: String { return self._s[2175]! } - public var MediaPicker_TimerTooltip: String { return self._s[2177]! } - public var SharedMedia_TitleAll: String { return self._s[2178]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2181]! } - public var Conversation_RestrictedMedia: String { return self._s[2182]! } - public var AccessDenied_PhotosRestricted: String { return self._s[2183]! } - public var Privacy_Forwards_WhoCanForward: String { return self._s[2185]! } - public var ChangePhoneNumberCode_Called: String { return self._s[2186]! } + public var AccessDenied_LocationTracking: String { return self._s[2178]! } + public var Month_GenOctober: String { return self._s[2179]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2180]! } + public var EnterPasscode_EnterPasscode: String { return self._s[2181]! } + public var MediaPicker_TimerTooltip: String { return self._s[2183]! } + public var SharedMedia_TitleAll: String { return self._s[2184]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2187]! } + public var Conversation_RestrictedMedia: String { return self._s[2188]! } + public var AccessDenied_PhotosRestricted: String { return self._s[2189]! } + public var Privacy_Forwards_WhoCanForward: String { return self._s[2191]! } + public var ChangePhoneNumberCode_Called: String { return self._s[2192]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2187]!, self._r[2187]!, [_0]) + return formatWithArgumentRanges(self._s[2193]!, self._r[2193]!, [_0]) } - public var Conversation_SavedMessages: String { return self._s[2190]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[2192]! } - public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2193]! } + public var Conversation_SavedMessages: String { return self._s[2196]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[2198]! } + public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2199]! } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2195]!, self._r[2195]!, [_0]) + return formatWithArgumentRanges(self._s[2201]!, self._r[2201]!, [_0]) } - public var VoiceOver_Chat_YourMessage: String { return self._s[2196]! } + public var VoiceOver_Chat_YourMessage: String { return self._s[2202]! } public func VoiceOver_Chat_Title(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2197]!, self._r[2197]!, [_0]) + return formatWithArgumentRanges(self._s[2203]!, self._r[2203]!, [_0]) } - public var ReportPeer_AlertSuccess: String { return self._s[2198]! } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2199]! } + public var ReportPeer_AlertSuccess: String { return self._s[2204]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2205]! } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2200]!, self._r[2200]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2206]!, self._r[2206]!, [_1, _2]) } - public var Checkout_PasswordEntry_Title: String { return self._s[2201]! } - public var PhotoEditor_FadeTool: String { return self._s[2202]! } - public var Privacy_ContactsReset: String { return self._s[2203]! } + public var Checkout_PasswordEntry_Title: String { return self._s[2207]! } + public var PhotoEditor_FadeTool: String { return self._s[2208]! } + public var Privacy_ContactsReset: String { return self._s[2209]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2205]!, self._r[2205]!, [_0]) + return formatWithArgumentRanges(self._s[2211]!, self._r[2211]!, [_0]) } - public var Message_PinnedVideoMessage: String { return self._s[2206]! } - public var ChatList_Mute: String { return self._s[2207]! } + public var Message_PinnedVideoMessage: String { return self._s[2212]! } + public var ChatList_Mute: String { return self._s[2213]! } public func Wallet_Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2208]!, self._r[2208]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2214]!, self._r[2214]!, [_1, _2, _3]) } - public var Permissions_CellularDataText_v0: String { return self._s[2209]! } - public var ShareMenu_SelectChats: String { return self._s[2212]! } - public var ChatList_Context_Unarchive: String { return self._s[2213]! } - public var MusicPlayer_VoiceNote: String { return self._s[2214]! } - public var Conversation_RestrictedText: String { return self._s[2215]! } - public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2216]! } - public var Wallet_Month_GenApril: String { return self._s[2217]! } - public var Wallet_Month_ShortMarch: String { return self._s[2218]! } - public var TwoStepAuth_DisableSuccess: String { return self._s[2219]! } - public var Cache_Videos: String { return self._s[2220]! } - public var PrivacySettings_PhoneNumber: String { return self._s[2221]! } - public var Wallet_Month_GenFebruary: String { return self._s[2222]! } - public var FeatureDisabled_Oops: String { return self._s[2224]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[2225]! } + public var Permissions_CellularDataText_v0: String { return self._s[2215]! } + public var ShareMenu_SelectChats: String { return self._s[2218]! } + public var ChatList_Context_Unarchive: String { return self._s[2219]! } + public var MusicPlayer_VoiceNote: String { return self._s[2220]! } + public var Conversation_RestrictedText: String { return self._s[2221]! } + public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2222]! } + public var Wallet_Month_GenApril: String { return self._s[2223]! } + public var Wallet_Month_ShortMarch: String { return self._s[2224]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[2225]! } + public var Cache_Videos: String { return self._s[2226]! } + public var PrivacySettings_PhoneNumber: String { return self._s[2227]! } + public var Wallet_Month_GenFebruary: String { return self._s[2228]! } + public var FeatureDisabled_Oops: String { return self._s[2230]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[2231]! } public func AddContact_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2226]!, self._r[2226]!, [_0]) + return formatWithArgumentRanges(self._s[2232]!, self._r[2232]!, [_0]) } - public var Stickers_GroupStickersHelp: String { return self._s[2227]! } - public var GroupPermission_NoSendPolls: String { return self._s[2228]! } - public var Wallet_Qr_ScanCode: String { return self._s[2229]! } - public var Message_VideoExpired: String { return self._s[2231]! } - public var GroupInfo_GroupHistoryVisible: String { return self._s[2232]! } - public var Notifications_Badge: String { return self._s[2233]! } - public var Wallet_Receive_AddressCopied: String { return self._s[2234]! } - public var CreatePoll_OptionPlaceholder: String { return self._s[2235]! } - public var Username_InvalidTooShort: String { return self._s[2236]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2237]! } - public var Channel_AdminLog_PinMessages: String { return self._s[2238]! } - public var ArchivedChats_IntroTitle3: String { return self._s[2239]! } + public var Stickers_GroupStickersHelp: String { return self._s[2233]! } + public var GroupPermission_NoSendPolls: String { return self._s[2234]! } + public var Wallet_Qr_ScanCode: String { return self._s[2235]! } + public var Message_VideoExpired: String { return self._s[2237]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[2238]! } + public var Notifications_Badge: String { return self._s[2239]! } + public var Wallet_Receive_AddressCopied: String { return self._s[2240]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[2241]! } + public var Username_InvalidTooShort: String { return self._s[2242]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2243]! } + public var Channel_AdminLog_PinMessages: String { return self._s[2244]! } + public var ArchivedChats_IntroTitle3: String { return self._s[2245]! } public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2240]!, self._r[2240]!, [_1]) - } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[2241]! } - public var Conversation_DefaultRestrictedText: String { return self._s[2242]! } - public var SharedMedia_CategoryDocs: String { return self._s[2245]! } - public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2246]!, self._r[2246]!, [_1]) } - public var Wallet_Send_UninitializedTitle: String { return self._s[2247]! } - public var StickerPackActionInfo_ArchivedTitle: String { return self._s[2248]! } - public var Privacy_Forwards_NeverLink: String { return self._s[2250]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[2247]! } + public var Conversation_DefaultRestrictedText: String { return self._s[2248]! } + public var SharedMedia_CategoryDocs: String { return self._s[2251]! } + public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2252]!, self._r[2252]!, [_1]) + } + public var Wallet_Send_UninitializedTitle: String { return self._s[2253]! } + public var StickerPackActionInfo_ArchivedTitle: String { return self._s[2254]! } + public var Privacy_Forwards_NeverLink: String { return self._s[2256]! } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2251]!, self._r[2251]!, [_1]) + return formatWithArgumentRanges(self._s[2257]!, self._r[2257]!, [_1]) } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2252]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2258]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2253]!, self._r[2253]!, [_0]) + return formatWithArgumentRanges(self._s[2259]!, self._r[2259]!, [_0]) } - public var ChatSettings_PrivateChats: String { return self._s[2254]! } - public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2255]! } - public var Conversation_PrivateMessageLinkCopied: String { return self._s[2256]! } - public var Channel_UpdatePhotoItem: String { return self._s[2257]! } - public var GroupInfo_LeftStatus: String { return self._s[2258]! } - public var Watch_MessageView_Forward: String { return self._s[2260]! } - public var ReportPeer_ReasonChildAbuse: String { return self._s[2261]! } - public var Cache_ClearEmpty: String { return self._s[2263]! } - public var Localization_LanguageName: String { return self._s[2264]! } - public var Wallet_AccessDenied_Title: String { return self._s[2265]! } - public var WebSearch_GIFs: String { return self._s[2266]! } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2267]! } - public var Wallet_AccessDenied_Settings: String { return self._s[2268]! } - public var Username_InvalidStartsWithNumber: String { return self._s[2269]! } - public var Common_Back: String { return self._s[2270]! } - public var GroupInfo_Permissions_EditingDisabled: String { return self._s[2271]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2272]! } - public var Wallet_Send_Send: String { return self._s[2273]! } + public var ChatSettings_PrivateChats: String { return self._s[2260]! } + public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2261]! } + public var Conversation_PrivateMessageLinkCopied: String { return self._s[2262]! } + public var Channel_UpdatePhotoItem: String { return self._s[2263]! } + public var GroupInfo_LeftStatus: String { return self._s[2264]! } + public var Watch_MessageView_Forward: String { return self._s[2266]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[2267]! } + public var Cache_ClearEmpty: String { return self._s[2269]! } + public var Localization_LanguageName: String { return self._s[2270]! } + public var Wallet_AccessDenied_Title: String { return self._s[2271]! } + public var WebSearch_GIFs: String { return self._s[2272]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2273]! } + public var Wallet_AccessDenied_Settings: String { return self._s[2274]! } + public var Username_InvalidStartsWithNumber: String { return self._s[2275]! } + public var Common_Back: String { return self._s[2276]! } + public var GroupInfo_Permissions_EditingDisabled: String { return self._s[2277]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2278]! } + public var Wallet_Send_Send: String { return self._s[2279]! } public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2275]!, self._r[2275]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2281]!, self._r[2281]!, [_1, _2]) } - public var Wallet_Info_RefreshErrorTitle: String { return self._s[2276]! } - public var Wallet_Month_GenJune: String { return self._s[2277]! } - public var Passport_Email_Help: String { return self._s[2278]! } - public var Watch_Conversation_Reply: String { return self._s[2280]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[2283]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2284]! } - public var Channel_BanUser_Unban: String { return self._s[2286]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2287]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[2288]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2290]! } - public var Wallet_Send_AddressHeader: String { return self._s[2291]! } - public var Passport_Identity_Name: String { return self._s[2292]! } + public var Wallet_Info_RefreshErrorTitle: String { return self._s[2282]! } + public var Wallet_Month_GenJune: String { return self._s[2283]! } + public var Passport_Email_Help: String { return self._s[2284]! } + public var Watch_Conversation_Reply: String { return self._s[2286]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[2289]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2290]! } + public var Channel_BanUser_Unban: String { return self._s[2292]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2293]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[2294]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2296]! } + public var Wallet_Send_AddressHeader: String { return self._s[2297]! } + public var Passport_Identity_Name: String { return self._s[2298]! } public func Channel_DiscussionGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2293]!, self._r[2293]!, [_0]) + return formatWithArgumentRanges(self._s[2299]!, self._r[2299]!, [_0]) } - public var GroupRemoved_ViewUserInfo: String { return self._s[2294]! } - public var Conversation_BlockUser: String { return self._s[2295]! } - public var Month_GenJanuary: String { return self._s[2296]! } - public var ChatSettings_TextSize: String { return self._s[2297]! } - public var Notification_PassportValuePhone: String { return self._s[2298]! } - public var MediaPlayer_UnknownArtist: String { return self._s[2299]! } - public var Passport_Language_ne: String { return self._s[2300]! } - public var Notification_CallBack: String { return self._s[2301]! } - public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2302]! } - public var TwoStepAuth_EmailHelp: String { return self._s[2303]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[2300]! } + public var Conversation_BlockUser: String { return self._s[2301]! } + public var Month_GenJanuary: String { return self._s[2302]! } + public var ChatSettings_TextSize: String { return self._s[2303]! } + public var Notification_PassportValuePhone: String { return self._s[2304]! } + public var MediaPlayer_UnknownArtist: String { return self._s[2305]! } + public var Passport_Language_ne: String { return self._s[2306]! } + public var Notification_CallBack: String { return self._s[2307]! } + public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2308]! } + public var TwoStepAuth_EmailHelp: String { return self._s[2309]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2304]!, self._r[2304]!, [_0]) + return formatWithArgumentRanges(self._s[2310]!, self._r[2310]!, [_0]) } - public var Channel_Info_Management: String { return self._s[2305]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[2306]! } - public var Stickers_FrequentlyUsed: String { return self._s[2307]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[2308]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2310]! } + public var Channel_Info_Management: String { return self._s[2311]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[2312]! } + public var Stickers_FrequentlyUsed: String { return self._s[2313]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[2314]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2316]! } public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2311]!, self._r[2311]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[2317]!, self._r[2317]!, [_1, "\(_2)"]) } - public var TwoFactorSetup_Password_Title: String { return self._s[2312]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[2313]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[2314]! } - public var CreatePoll_TextHeader: String { return self._s[2315]! } + public var TwoFactorSetup_Password_Title: String { return self._s[2318]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[2319]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[2320]! } + public var CreatePoll_TextHeader: String { return self._s[2321]! } public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2316]!, self._r[2316]!, [_0]) + return formatWithArgumentRanges(self._s[2322]!, self._r[2322]!, [_0]) } - public var PhotoEditor_QualityMedium: String { return self._s[2317]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2318]! } - public var Conversation_StatusKickedFromChannel: String { return self._s[2320]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[2321]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[2322]! } + public var PhotoEditor_QualityMedium: String { return self._s[2323]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2324]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[2326]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[2327]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[2328]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2323]!, self._r[2323]!, [_0]) + return formatWithArgumentRanges(self._s[2329]!, self._r[2329]!, [_0]) } public func Channel_AdminLog_MessageTransferedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2324]!, self._r[2324]!, [_1]) + return formatWithArgumentRanges(self._s[2330]!, self._r[2330]!, [_1]) } - public var LogoutOptions_LogOutWalletInfo: String { return self._s[2325]! } - public var TwoFactorSetup_Email_SkipConfirmationTitle: String { return self._s[2326]! } - public var Conversation_LinkDialogOpen: String { return self._s[2328]! } - public var TwoFactorSetup_Hint_Title: String { return self._s[2329]! } - public var VoiceOver_Chat_PollNoVotes: String { return self._s[2330]! } - public var Settings_Username: String { return self._s[2332]! } - public var Conversation_Block: String { return self._s[2334]! } - public var Wallpaper_Wallpaper: String { return self._s[2335]! } - public var SocksProxySetup_UseProxy: String { return self._s[2337]! } - public var Wallet_Send_Confirmation: String { return self._s[2338]! } - public var EditTheme_UploadEditedTheme: String { return self._s[2339]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[2340]! } - public var MessageTimer_Forever: String { return self._s[2341]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[2342]! } - public var PhotoEditor_DiscardChanges: String { return self._s[2343]! } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2344]! } - public var Passport_Language_da: String { return self._s[2345]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[2346]! } + public var LogoutOptions_LogOutWalletInfo: String { return self._s[2331]! } + public var TwoFactorSetup_Email_SkipConfirmationTitle: String { return self._s[2332]! } + public var Conversation_LinkDialogOpen: String { return self._s[2334]! } + public var TwoFactorSetup_Hint_Title: String { return self._s[2335]! } + public var VoiceOver_Chat_PollNoVotes: String { return self._s[2336]! } + public var Settings_Username: String { return self._s[2338]! } + public var Conversation_Block: String { return self._s[2340]! } + public var Wallpaper_Wallpaper: String { return self._s[2341]! } + public var SocksProxySetup_UseProxy: String { return self._s[2343]! } + public var Wallet_Send_Confirmation: String { return self._s[2344]! } + public var EditTheme_UploadEditedTheme: String { return self._s[2345]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[2346]! } + public var MessageTimer_Forever: String { return self._s[2347]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[2348]! } + public var PhotoEditor_DiscardChanges: String { return self._s[2349]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2350]! } + public var Passport_Language_da: String { return self._s[2351]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[2352]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2347]!, self._r[2347]!, [_0]) + return formatWithArgumentRanges(self._s[2353]!, self._r[2353]!, [_0]) } - public var Passport_Address_EditPassportRegistration: String { return self._s[2348]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[2354]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2350]!, self._r[2350]!, [_0]) + return formatWithArgumentRanges(self._s[2356]!, self._r[2356]!, [_0]) } - public var Settings_AddDevice: String { return self._s[2351]! } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2353]! } - public var AuthSessions_AddDeviceIntro_Text1: String { return self._s[2354]! } - public var Conversation_SearchByName_Prefix: String { return self._s[2355]! } - public var Conversation_PinnedPoll: String { return self._s[2356]! } - public var AuthSessions_AddDeviceIntro_Text2: String { return self._s[2357]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2358]! } - public var AuthSessions_AddDeviceIntro_Text3: String { return self._s[2359]! } + public var Settings_AddDevice: String { return self._s[2357]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2359]! } + public var AuthSessions_AddDeviceIntro_Text1: String { return self._s[2360]! } + public var Conversation_SearchByName_Prefix: String { return self._s[2361]! } + public var Conversation_PinnedPoll: String { return self._s[2362]! } + public var AuthSessions_AddDeviceIntro_Text2: String { return self._s[2363]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2364]! } + public var AuthSessions_AddDeviceIntro_Text3: String { return self._s[2365]! } public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2360]!, self._r[2360]!, [_1]) + return formatWithArgumentRanges(self._s[2366]!, self._r[2366]!, [_1]) } - public var WallpaperSearch_ColorPurple: String { return self._s[2361]! } - public var Cache_ByPeerHeader: String { return self._s[2362]! } + public var WallpaperSearch_ColorPurple: String { return self._s[2367]! } + public var Cache_ByPeerHeader: String { return self._s[2368]! } public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2363]!, self._r[2363]!, [_0]) + return formatWithArgumentRanges(self._s[2369]!, self._r[2369]!, [_0]) } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[2364]! } - public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2367]! } - public var Wallet_Completed_Title: String { return self._s[2368]! } - public var Notification_PinnedMessage: String { return self._s[2369]! } - public var TwoFactorSetup_EmailVerification_Placeholder: String { return self._s[2370]! } - public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2372]! } - public var Contacts_SortBy: String { return self._s[2373]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[2370]! } + public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2373]! } + public var Wallet_Completed_Title: String { return self._s[2374]! } + public var Notification_PinnedMessage: String { return self._s[2375]! } + public var TwoFactorSetup_EmailVerification_Placeholder: String { return self._s[2376]! } + public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2378]! } + public var Contacts_SortBy: String { return self._s[2379]! } public func PUSH_CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2374]!, self._r[2374]!, [_1]) + return formatWithArgumentRanges(self._s[2380]!, self._r[2380]!, [_1]) } - public var Appearance_ColorThemeNight: String { return self._s[2376]! } + public var Appearance_ColorThemeNight: String { return self._s[2382]! } public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2377]!, self._r[2377]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2383]!, self._r[2383]!, [_1, _2]) } - public var Call_EncryptionKey_Title: String { return self._s[2378]! } - public var Watch_UserInfo_Service: String { return self._s[2379]! } - public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2381]! } - public var Conversation_Unpin: String { return self._s[2383]! } - public var CancelResetAccount_Title: String { return self._s[2384]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[2385]! } + public var Call_EncryptionKey_Title: String { return self._s[2384]! } + public var Watch_UserInfo_Service: String { return self._s[2385]! } + public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2387]! } + public var Conversation_Unpin: String { return self._s[2389]! } + public var CancelResetAccount_Title: String { return self._s[2390]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[2391]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2387]!, self._r[2387]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2393]!, self._r[2393]!, [_1, _2, _3]) } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2388]! } - public var CallSettings_Title: String { return self._s[2389]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2390]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[2392]! } - public var AutoDownloadSettings_Contacts: String { return self._s[2393]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2394]! } + public var CallSettings_Title: String { return self._s[2395]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2396]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[2398]! } + public var AutoDownloadSettings_Contacts: String { return self._s[2399]! } public func Channel_AdminLog_MessageRankName(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2394]!, self._r[2394]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2400]!, self._r[2400]!, [_1, _2]) } - public var Passport_Identity_DocumentDetails: String { return self._s[2395]! } - public var LoginPassword_PasswordHelp: String { return self._s[2396]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2397]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2398]! } - public var ChatContextMenu_TextSelectionTip: String { return self._s[2399]! } - public var Checkout_TotalPaidAmount: String { return self._s[2400]! } + public var Passport_Identity_DocumentDetails: String { return self._s[2401]! } + public var LoginPassword_PasswordHelp: String { return self._s[2402]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2403]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2404]! } + public var ChatContextMenu_TextSelectionTip: String { return self._s[2405]! } + public var Checkout_TotalPaidAmount: String { return self._s[2406]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2401]!, self._r[2401]!, [_0]) + return formatWithArgumentRanges(self._s[2407]!, self._r[2407]!, [_0]) } - public var PasscodeSettings_ChangePasscode: String { return self._s[2402]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[2404]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[2405]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[2408]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[2410]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[2411]! } public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2406]!, self._r[2406]!, [_1]) + return formatWithArgumentRanges(self._s[2412]!, self._r[2412]!, [_1]) } - public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2407]! } - public var Contacts_InviteFriends: String { return self._s[2409]! } - public var Map_ChooseLocationTitle: String { return self._s[2410]! } - public var Conversation_StopPoll: String { return self._s[2412]! } + public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2413]! } + public var Contacts_InviteFriends: String { return self._s[2415]! } + public var Map_ChooseLocationTitle: String { return self._s[2416]! } + public var Conversation_StopPoll: String { return self._s[2418]! } public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2413]!, self._r[2413]!, [_0]) + return formatWithArgumentRanges(self._s[2419]!, self._r[2419]!, [_0]) } - public var Call_Camera: String { return self._s[2414]! } - public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2415]! } - public var AppWallet_Intro_Text: String { return self._s[2416]! } - public var Calls_RatingFeedback: String { return self._s[2417]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2419]! } - public var Wallet_Alert_OK: String { return self._s[2420]! } - public var NotificationsSound_Pulse: String { return self._s[2421]! } - public var Watch_LastSeen_Lately: String { return self._s[2422]! } - public var ReportGroupLocation_Report: String { return self._s[2425]! } - public var Widget_NoUsers: String { return self._s[2426]! } - public var Conversation_UnvotePoll: String { return self._s[2427]! } - public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2429]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2430]! } - public var NotificationsSound_Circles: String { return self._s[2431]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2434]! } - public var Wallet_Settings_DeleteWallet: String { return self._s[2435]! } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2436]! } - public var Proxy_TooltipUnavailable: String { return self._s[2437]! } - public var Passport_Identity_CountryPlaceholder: String { return self._s[2439]! } - public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2441]! } - public var Conversation_FileDropbox: String { return self._s[2442]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[2443]! } - public var Tour_Text3: String { return self._s[2445]! } - public var Login_ResetAccountProtected_Title: String { return self._s[2447]! } - public var GroupPermission_NoSendMessages: String { return self._s[2448]! } - public var WallpaperSearch_ColorTitle: String { return self._s[2449]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2450]! } + public var Call_Camera: String { return self._s[2420]! } + public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2421]! } + public var AppWallet_Intro_Text: String { return self._s[2422]! } + public var Calls_RatingFeedback: String { return self._s[2423]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2425]! } + public var Wallet_Alert_OK: String { return self._s[2426]! } + public var NotificationsSound_Pulse: String { return self._s[2427]! } + public var Watch_LastSeen_Lately: String { return self._s[2428]! } + public var ReportGroupLocation_Report: String { return self._s[2431]! } + public var Widget_NoUsers: String { return self._s[2432]! } + public var Conversation_UnvotePoll: String { return self._s[2433]! } + public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2435]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2436]! } + public var NotificationsSound_Circles: String { return self._s[2437]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2440]! } + public var Wallet_Settings_DeleteWallet: String { return self._s[2441]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2442]! } + public var Proxy_TooltipUnavailable: String { return self._s[2443]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[2445]! } + public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2447]! } + public var Conversation_FileDropbox: String { return self._s[2448]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[2449]! } + public var Tour_Text3: String { return self._s[2451]! } + public var Login_ResetAccountProtected_Title: String { return self._s[2453]! } + public var GroupPermission_NoSendMessages: String { return self._s[2454]! } + public var WallpaperSearch_ColorTitle: String { return self._s[2455]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2456]! } public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2452]!, self._r[2452]!, [_0]) + return formatWithArgumentRanges(self._s[2458]!, self._r[2458]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[2453]! } - public var Checkout_ShippingOption_Title: String { return self._s[2454]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[2455]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[2459]! } + public var Checkout_ShippingOption_Title: String { return self._s[2460]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[2461]! } public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2456]!, self._r[2456]!, [_0]) + return formatWithArgumentRanges(self._s[2462]!, self._r[2462]!, [_0]) } public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2457]!, self._r[2457]!, [_0]) + return formatWithArgumentRanges(self._s[2463]!, self._r[2463]!, [_0]) } - public var Channel_Management_LabelAdministrator: String { return self._s[2458]! } - public var EditTheme_FileReadError: String { return self._s[2459]! } - public var OwnershipTransfer_ComeBackLater: String { return self._s[2460]! } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2461]! } - public var AutoDownloadSettings_Photos: String { return self._s[2463]! } - public var Appearance_PreviewIncomingText: String { return self._s[2464]! } - public var ChatList_Context_MarkAllAsRead: String { return self._s[2465]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[2466]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2467]! } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2468]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2469]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2470]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[2471]! } - public var Notification_SecretChatScreenshot: String { return self._s[2472]! } - public var AccessDenied_Wallpapers: String { return self._s[2473]! } - public var ChatList_Context_Mute: String { return self._s[2475]! } - public var Passport_Address_City: String { return self._s[2476]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2477]! } - public var Appearance_ThemeCarouselClassic: String { return self._s[2478]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[2479]! } - public var AccessDenied_LocationDisabled: String { return self._s[2480]! } - public var Group_Location_Title: String { return self._s[2481]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2483]! } - public var GroupInfo_Sound: String { return self._s[2484]! } - public var SettingsSearch_Synonyms_ChatSettings_OpenLinksIn: String { return self._s[2485]! } - public var ChannelInfo_ScamChannelWarning: String { return self._s[2486]! } - public var Stickers_RemoveFromFavorites: String { return self._s[2487]! } - public var Contacts_Title: String { return self._s[2488]! } - public var EditTheme_ThemeTemplateAlertText: String { return self._s[2489]! } - public var Passport_Language_fr: String { return self._s[2490]! } - public var TwoFactorSetup_EmailVerification_Action: String { return self._s[2491]! } - public var Notifications_ResetAllNotifications: String { return self._s[2492]! } - public var IntentsSettings_SuggestedChats: String { return self._s[2494]! } - public var PrivacySettings_SecurityTitle: String { return self._s[2496]! } - public var Checkout_NewCard_Title: String { return self._s[2497]! } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[2498]! } - public var Conversation_ForwardChats: String { return self._s[2499]! } - public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2501]! } - public var PasscodeSettings_4DigitCode: String { return self._s[2502]! } - public var Settings_FAQ: String { return self._s[2504]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2505]! } - public var Conversation_ContextMenuForward: String { return self._s[2506]! } - public var VoiceOver_Chat_YourPhoto: String { return self._s[2509]! } - public var PrivacyPolicy_Title: String { return self._s[2512]! } - public var Notifications_TextTone: String { return self._s[2513]! } - public var Profile_CreateNewContact: String { return self._s[2514]! } - public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2515]! } - public var TwoFactorSetup_EmailVerification_Title: String { return self._s[2517]! } - public var Call_Speaker: String { return self._s[2518]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[2519]! } - public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2521]! } - public var Channel_Username_InvalidCharacters: String { return self._s[2522]! } + public var Channel_Management_LabelAdministrator: String { return self._s[2464]! } + public var EditTheme_FileReadError: String { return self._s[2465]! } + public var OwnershipTransfer_ComeBackLater: String { return self._s[2466]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2467]! } + public var AutoDownloadSettings_Photos: String { return self._s[2469]! } + public var Appearance_PreviewIncomingText: String { return self._s[2470]! } + public var ChatList_Context_MarkAllAsRead: String { return self._s[2471]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[2472]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2473]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2474]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2475]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2476]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[2477]! } + public var Notification_SecretChatScreenshot: String { return self._s[2478]! } + public var AccessDenied_Wallpapers: String { return self._s[2479]! } + public var ChatList_Context_Mute: String { return self._s[2481]! } + public var Passport_Address_City: String { return self._s[2482]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2483]! } + public var Appearance_ThemeCarouselClassic: String { return self._s[2484]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[2485]! } + public var AccessDenied_LocationDisabled: String { return self._s[2486]! } + public var Group_Location_Title: String { return self._s[2487]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2489]! } + public var GroupInfo_Sound: String { return self._s[2490]! } + public var SettingsSearch_Synonyms_ChatSettings_OpenLinksIn: String { return self._s[2491]! } + public var ChannelInfo_ScamChannelWarning: String { return self._s[2492]! } + public var Stickers_RemoveFromFavorites: String { return self._s[2493]! } + public var Contacts_Title: String { return self._s[2494]! } + public var EditTheme_ThemeTemplateAlertText: String { return self._s[2495]! } + public var Passport_Language_fr: String { return self._s[2496]! } + public var TwoFactorSetup_EmailVerification_Action: String { return self._s[2497]! } + public var Notifications_ResetAllNotifications: String { return self._s[2498]! } + public var IntentsSettings_SuggestedChats: String { return self._s[2500]! } + public var PrivacySettings_SecurityTitle: String { return self._s[2502]! } + public var Checkout_NewCard_Title: String { return self._s[2503]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[2504]! } + public var Conversation_ForwardChats: String { return self._s[2505]! } + public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2507]! } + public var PasscodeSettings_4DigitCode: String { return self._s[2508]! } + public var Settings_FAQ: String { return self._s[2510]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2511]! } + public var Conversation_ContextMenuForward: String { return self._s[2512]! } + public var VoiceOver_Chat_YourPhoto: String { return self._s[2515]! } + public var PrivacyPolicy_Title: String { return self._s[2518]! } + public var Notifications_TextTone: String { return self._s[2519]! } + public var Profile_CreateNewContact: String { return self._s[2520]! } + public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2521]! } + public var TwoFactorSetup_EmailVerification_Title: String { return self._s[2523]! } + public var Call_Speaker: String { return self._s[2524]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[2525]! } + public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2527]! } + public var Channel_Username_InvalidCharacters: String { return self._s[2528]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2523]!, self._r[2523]!, [_0]) + return formatWithArgumentRanges(self._s[2529]!, self._r[2529]!, [_0]) } - public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2524]! } - public var PrivacySettings_LastSeenTitle: String { return self._s[2525]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[2526]! } - public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2527]! } - public var OwnershipTransfer_SecurityCheck: String { return self._s[2528]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[2529]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[2530]! } - public var Bot_Unblock: String { return self._s[2531]! } - public var TextFormat_Italic: String { return self._s[2532]! } - public var WallpaperSearch_ColorPink: String { return self._s[2533]! } - public var Settings_About_Help: String { return self._s[2535]! } - public var SearchImages_Title: String { return self._s[2536]! } - public var Weekday_Wednesday: String { return self._s[2537]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[2538]! } - public var ExplicitContent_AlertTitle: String { return self._s[2539]! } + public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2530]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[2531]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[2532]! } + public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2533]! } + public var OwnershipTransfer_SecurityCheck: String { return self._s[2534]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[2535]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[2536]! } + public var Bot_Unblock: String { return self._s[2537]! } + public var TextFormat_Italic: String { return self._s[2538]! } + public var WallpaperSearch_ColorPink: String { return self._s[2539]! } + public var Settings_About_Help: String { return self._s[2541]! } + public var SearchImages_Title: String { return self._s[2542]! } + public var Weekday_Wednesday: String { return self._s[2543]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[2544]! } + public var ExplicitContent_AlertTitle: String { return self._s[2545]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2540]!, self._r[2540]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2546]!, self._r[2546]!, [_1, _2, _3]) } - public var Channel_DiscussionGroup_Create: String { return self._s[2541]! } - public var Weekday_Thursday: String { return self._s[2542]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2543]! } - public var Channel_Members_AddMembersHelp: String { return self._s[2544]! } + public var Channel_DiscussionGroup_Create: String { return self._s[2547]! } + public var Weekday_Thursday: String { return self._s[2548]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2549]! } + public var Channel_Members_AddMembersHelp: String { return self._s[2550]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2545]!, self._r[2545]!, [_0]) + return formatWithArgumentRanges(self._s[2551]!, self._r[2551]!, [_0]) } - public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2546]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2547]! } - public var Passport_RequestedInformation: String { return self._s[2548]! } - public var Login_PhoneAndCountryHelp: String { return self._s[2549]! } - public var Conversation_EncryptionProcessing: String { return self._s[2551]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2552]! } - public var PhotoEditor_EnhanceTool: String { return self._s[2554]! } - public var Channel_Setup_Title: String { return self._s[2555]! } - public var Conversation_SearchPlaceholder: String { return self._s[2556]! } - public var OldChannels_GroupEmptyFormat: String { return self._s[2557]! } - public var AccessDenied_LocationAlwaysDenied: String { return self._s[2558]! } - public var Checkout_ErrorGeneric: String { return self._s[2559]! } - public var Passport_Language_hu: String { return self._s[2560]! } - public var GroupPermission_EditingDisabled: String { return self._s[2561]! } - public var Wallet_Month_ShortSeptember: String { return self._s[2563]! } + public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2552]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2553]! } + public var Passport_RequestedInformation: String { return self._s[2554]! } + public var Login_PhoneAndCountryHelp: String { return self._s[2555]! } + public var Conversation_EncryptionProcessing: String { return self._s[2557]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2558]! } + public var PhotoEditor_EnhanceTool: String { return self._s[2560]! } + public var Channel_Setup_Title: String { return self._s[2561]! } + public var Conversation_SearchPlaceholder: String { return self._s[2562]! } + public var OldChannels_GroupEmptyFormat: String { return self._s[2563]! } + public var AccessDenied_LocationAlwaysDenied: String { return self._s[2564]! } + public var Checkout_ErrorGeneric: String { return self._s[2565]! } + public var Passport_Language_hu: String { return self._s[2566]! } + public var GroupPermission_EditingDisabled: String { return self._s[2567]! } + public var Wallet_Month_ShortSeptember: String { return self._s[2569]! } public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2564]!, self._r[2564]!, [_0]) + return formatWithArgumentRanges(self._s[2570]!, self._r[2570]!, [_0]) } public func PUSH_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2567]!, self._r[2567]!, [_1]) + return formatWithArgumentRanges(self._s[2573]!, self._r[2573]!, [_1]) } - public var ChatList_DeleteSavedMessagesConfirmationTitle: String { return self._s[2568]! } + public var ChatList_DeleteSavedMessagesConfirmationTitle: String { return self._s[2574]! } public func UserInfo_BlockConfirmationTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2569]!, self._r[2569]!, [_0]) + return formatWithArgumentRanges(self._s[2575]!, self._r[2575]!, [_0]) } - public var Conversation_CloudStorageInfo_Title: String { return self._s[2570]! } - public var Group_Location_Info: String { return self._s[2571]! } - public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2572]! } - public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2573]! } + public var Conversation_CloudStorageInfo_Title: String { return self._s[2576]! } + public var Group_Location_Info: String { return self._s[2577]! } + public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2578]! } + public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2579]! } public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2574]!, self._r[2574]!, [_0]) + return formatWithArgumentRanges(self._s[2580]!, self._r[2580]!, [_0]) } - public var Conversation_ClearPrivateHistory: String { return self._s[2575]! } - public var ContactInfo_PhoneLabelHome: String { return self._s[2576]! } - public var Appearance_RemoveThemeConfirmation: String { return self._s[2577]! } - public var PrivacySettings_LastSeenContacts: String { return self._s[2578]! } + public var Conversation_ClearPrivateHistory: String { return self._s[2581]! } + public var ContactInfo_PhoneLabelHome: String { return self._s[2582]! } + public var Appearance_RemoveThemeConfirmation: String { return self._s[2583]! } + public var PrivacySettings_LastSeenContacts: String { return self._s[2584]! } public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2579]!, self._r[2579]!, [_0]) + return formatWithArgumentRanges(self._s[2585]!, self._r[2585]!, [_0]) } - public var Passport_Language_cs: String { return self._s[2580]! } - public var Message_PinnedAnimationMessage: String { return self._s[2582]! } - public var Passport_Identity_ReverseSideHelp: String { return self._s[2584]! } - public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2585]! } - public var Wallet_Info_TransactionTo: String { return self._s[2587]! } - public var ChatList_DeleteForEveryoneConfirmationText: String { return self._s[2588]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2589]! } - public var Embed_PlayingInPIP: String { return self._s[2590]! } - public var Appearance_ThemePreview_Chat_3_TextWithLink: String { return self._s[2591]! } - public var AutoNightTheme_ScheduleSection: String { return self._s[2592]! } + public var Passport_Language_cs: String { return self._s[2586]! } + public var Message_PinnedAnimationMessage: String { return self._s[2588]! } + public var Passport_Identity_ReverseSideHelp: String { return self._s[2590]! } + public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2591]! } + public var Wallet_Info_TransactionTo: String { return self._s[2593]! } + public var ChatList_DeleteForEveryoneConfirmationText: String { return self._s[2594]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2595]! } + public var Embed_PlayingInPIP: String { return self._s[2596]! } + public var Appearance_ThemePreview_Chat_3_TextWithLink: String { return self._s[2597]! } + public var AutoNightTheme_ScheduleSection: String { return self._s[2598]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2593]!, self._r[2593]!, [_0]) + return formatWithArgumentRanges(self._s[2599]!, self._r[2599]!, [_0]) } - public var MediaPicker_LivePhotoDescription: String { return self._s[2594]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[2600]! } public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2595]!, self._r[2595]!, [_1]) + return formatWithArgumentRanges(self._s[2601]!, self._r[2601]!, [_1]) } - public var Notification_PaymentSent: String { return self._s[2596]! } - public var PhotoEditor_CurvesGreen: String { return self._s[2597]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2598]! } - public var AutoNightTheme_System: String { return self._s[2599]! } - public var SaveIncomingPhotosSettings_Title: String { return self._s[2600]! } - public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2601]! } - public var VoiceOver_Chat_PagePreview: String { return self._s[2602]! } + public var Notification_PaymentSent: String { return self._s[2602]! } + public var PhotoEditor_CurvesGreen: String { return self._s[2603]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2604]! } + public var AutoNightTheme_System: String { return self._s[2605]! } + public var SaveIncomingPhotosSettings_Title: String { return self._s[2606]! } + public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2607]! } + public var VoiceOver_Chat_PagePreview: String { return self._s[2608]! } public func PUSH_MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2605]!, self._r[2605]!, [_1]) + return formatWithArgumentRanges(self._s[2611]!, self._r[2611]!, [_1]) } public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2606]!, self._r[2606]!, [_1]) + return formatWithArgumentRanges(self._s[2612]!, self._r[2612]!, [_1]) } public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2607]!, self._r[2607]!, [_1]) + return formatWithArgumentRanges(self._s[2613]!, self._r[2613]!, [_1]) } - public var NetworkUsageSettings_CallDataSection: String { return self._s[2609]! } - public var PasscodeSettings_HelpTop: String { return self._s[2610]! } - public var Conversation_WalletRequiredTitle: String { return self._s[2611]! } - public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2612]! } - public var Passport_Address_TypeRentalAgreement: String { return self._s[2613]! } - public var EditTheme_ShortLink: String { return self._s[2614]! } - public var Theme_Colors_ColorWallpaperWarning: String { return self._s[2615]! } - public var ProxyServer_VoiceOver_Active: String { return self._s[2616]! } - public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2617]! } - public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2618]! } - public var Call_Accept: String { return self._s[2620]! } - public var GroupRemoved_RemoveInfo: String { return self._s[2621]! } - public var Month_GenMarch: String { return self._s[2623]! } - public var PhotoEditor_ShadowsTool: String { return self._s[2624]! } - public var LoginPassword_Title: String { return self._s[2625]! } - public var Call_End: String { return self._s[2626]! } - public var Watch_Conversation_GroupInfo: String { return self._s[2627]! } - public var VoiceOver_Chat_Contact: String { return self._s[2628]! } - public var EditTheme_Create_Preview_IncomingText: String { return self._s[2629]! } - public var CallSettings_Always: String { return self._s[2630]! } - public var CallFeedback_Success: String { return self._s[2631]! } - public var TwoStepAuth_SetupHint: String { return self._s[2632]! } + public var NetworkUsageSettings_CallDataSection: String { return self._s[2615]! } + public var PasscodeSettings_HelpTop: String { return self._s[2616]! } + public var Conversation_WalletRequiredTitle: String { return self._s[2617]! } + public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2618]! } + public var Passport_Address_TypeRentalAgreement: String { return self._s[2619]! } + public var EditTheme_ShortLink: String { return self._s[2620]! } + public var Theme_Colors_ColorWallpaperWarning: String { return self._s[2621]! } + public var ProxyServer_VoiceOver_Active: String { return self._s[2622]! } + public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2623]! } + public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2624]! } + public var Call_Accept: String { return self._s[2626]! } + public var GroupRemoved_RemoveInfo: String { return self._s[2627]! } + public var Month_GenMarch: String { return self._s[2629]! } + public var PhotoEditor_ShadowsTool: String { return self._s[2630]! } + public var LoginPassword_Title: String { return self._s[2631]! } + public var Call_End: String { return self._s[2632]! } + public var Watch_Conversation_GroupInfo: String { return self._s[2633]! } + public var VoiceOver_Chat_Contact: String { return self._s[2634]! } + public var EditTheme_Create_Preview_IncomingText: String { return self._s[2635]! } + public var CallSettings_Always: String { return self._s[2636]! } + public var CallFeedback_Success: String { return self._s[2637]! } + public var TwoStepAuth_SetupHint: String { return self._s[2638]! } public func AddContact_ContactWillBeSharedAfterMutual(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2633]!, self._r[2633]!, [_1]) + return formatWithArgumentRanges(self._s[2639]!, self._r[2639]!, [_1]) } - public var ConversationProfile_UsersTooMuchError: String { return self._s[2634]! } - public var Login_PhoneTitle: String { return self._s[2635]! } - public var Passport_FieldPhoneHelp: String { return self._s[2636]! } - public var Weekday_ShortSunday: String { return self._s[2637]! } - public var Passport_InfoFAQ_URL: String { return self._s[2638]! } - public var ContactInfo_Job: String { return self._s[2640]! } - public var UserInfo_InviteBotToGroup: String { return self._s[2641]! } - public var Appearance_ThemeCarouselNightBlue: String { return self._s[2642]! } - public var TwoFactorSetup_Email_Text: String { return self._s[2643]! } - public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2644]! } - public var Invite_ChannelsTooMuch: String { return self._s[2645]! } - public var Wallet_Send_ConfirmationConfirm: String { return self._s[2646]! } - public var Wallet_TransactionInfo_OtherFeeInfo: String { return self._s[2647]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2648]! } - public var Wallet_Receive_AmountText: String { return self._s[2649]! } - public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2650]! } - public var CallFeedback_ReasonNoise: String { return self._s[2651]! } - public var Appearance_AppIconDefault: String { return self._s[2653]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[2654]! } - public var MediaPicker_AddCaption: String { return self._s[2655]! } - public var CallSettings_TabIconDescription: String { return self._s[2656]! } + public var ConversationProfile_UsersTooMuchError: String { return self._s[2640]! } + public var Login_PhoneTitle: String { return self._s[2641]! } + public var Passport_FieldPhoneHelp: String { return self._s[2642]! } + public var Weekday_ShortSunday: String { return self._s[2643]! } + public var Passport_InfoFAQ_URL: String { return self._s[2644]! } + public var ContactInfo_Job: String { return self._s[2646]! } + public var UserInfo_InviteBotToGroup: String { return self._s[2647]! } + public var Appearance_ThemeCarouselNightBlue: String { return self._s[2648]! } + public var CreatePoll_QuizTip: String { return self._s[2649]! } + public var TwoFactorSetup_Email_Text: String { return self._s[2650]! } + public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2651]! } + public var Invite_ChannelsTooMuch: String { return self._s[2652]! } + public var Wallet_Send_ConfirmationConfirm: String { return self._s[2653]! } + public var Wallet_TransactionInfo_OtherFeeInfo: String { return self._s[2654]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2655]! } + public var Wallet_Receive_AmountText: String { return self._s[2656]! } + public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2657]! } + public var CallFeedback_ReasonNoise: String { return self._s[2658]! } + public var Appearance_AppIconDefault: String { return self._s[2660]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[2661]! } + public var MediaPicker_AddCaption: String { return self._s[2662]! } + public var CallSettings_TabIconDescription: String { return self._s[2663]! } public func VoiceOver_Chat_Caption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2657]!, self._r[2657]!, [_0]) + return formatWithArgumentRanges(self._s[2664]!, self._r[2664]!, [_0]) } - public var IntentsSettings_SuggestedChatsGroups: String { return self._s[2658]! } + public var IntentsSettings_SuggestedChatsGroups: String { return self._s[2665]! } public func Map_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2659]!, self._r[2659]!, [_0]) + return formatWithArgumentRanges(self._s[2666]!, self._r[2666]!, [_0]) } - public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2660]! } - public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2661]! } - public var Passport_Identity_TypePersonalDetails: String { return self._s[2662]! } - public var DialogList_SearchSectionRecent: String { return self._s[2663]! } - public var PrivacyPolicy_DeclineMessage: String { return self._s[2664]! } - public var LogoutOptions_ClearCacheText: String { return self._s[2667]! } - public var LastSeen_WithinAWeek: String { return self._s[2668]! } - public var ChannelMembers_GroupAdminsTitle: String { return self._s[2669]! } - public var Conversation_CloudStorage_ChatStatus: String { return self._s[2671]! } - public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[2672]! } + public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2667]! } + public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2668]! } + public var Passport_Identity_TypePersonalDetails: String { return self._s[2669]! } + public var DialogList_SearchSectionRecent: String { return self._s[2670]! } + public var PrivacyPolicy_DeclineMessage: String { return self._s[2671]! } + public var CreatePoll_Anonymous: String { return self._s[2672]! } + public var LogoutOptions_ClearCacheText: String { return self._s[2675]! } + public var LastSeen_WithinAWeek: String { return self._s[2676]! } + public var ChannelMembers_GroupAdminsTitle: String { return self._s[2677]! } + public var Conversation_CloudStorage_ChatStatus: String { return self._s[2679]! } + public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[2680]! } public func AddContact_SharedContactExceptionInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2673]!, self._r[2673]!, [_0]) + return formatWithArgumentRanges(self._s[2681]!, self._r[2681]!, [_0]) } - public var Passport_Address_TypeResidentialAddress: String { return self._s[2674]! } - public var Conversation_StatusLeftGroup: String { return self._s[2675]! } - public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2676]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2678]! } - public var GroupPermission_AddSuccess: String { return self._s[2679]! } - public var PhotoEditor_BlurToolRadial: String { return self._s[2681]! } - public var Conversation_ContextMenuCopy: String { return self._s[2682]! } - public var AccessDenied_CallMicrophone: String { return self._s[2683]! } + public var Passport_Address_TypeResidentialAddress: String { return self._s[2682]! } + public var Conversation_StatusLeftGroup: String { return self._s[2683]! } + public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2684]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2686]! } + public var GroupPermission_AddSuccess: String { return self._s[2687]! } + public var PhotoEditor_BlurToolRadial: String { return self._s[2689]! } + public var Conversation_ContextMenuCopy: String { return self._s[2690]! } + public var AccessDenied_CallMicrophone: String { return self._s[2691]! } public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2684]!, self._r[2684]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2692]!, self._r[2692]!, [_1, _2, _3]) } - public var Login_InvalidFirstNameError: String { return self._s[2685]! } - public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2686]! } - public var Checkout_PaymentMethod_New: String { return self._s[2687]! } - public var ShareMenu_CopyShareLinkGame: String { return self._s[2688]! } - public var PhotoEditor_QualityTool: String { return self._s[2689]! } - public var Login_SendCodeViaSms: String { return self._s[2690]! } - public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2691]! } - public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[2692]! } - public var Wallet_Receive_CopyAddress: String { return self._s[2693]! } - public var Login_EmailNotConfiguredError: String { return self._s[2694]! } - public var SocksProxySetup_Status: String { return self._s[2695]! } - public var Conversation_ScheduleMessage_SendWhenOnline: String { return self._s[2696]! } - public var PrivacyPolicy_Accept: String { return self._s[2697]! } - public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2698]! } - public var Appearance_AppIconClassicX: String { return self._s[2699]! } + public var Login_InvalidFirstNameError: String { return self._s[2693]! } + public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2694]! } + public var Checkout_PaymentMethod_New: String { return self._s[2695]! } + public var ShareMenu_CopyShareLinkGame: String { return self._s[2696]! } + public var PhotoEditor_QualityTool: String { return self._s[2697]! } + public var Login_SendCodeViaSms: String { return self._s[2698]! } + public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2699]! } + public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[2700]! } + public var Wallet_Receive_CopyAddress: String { return self._s[2701]! } + public var Login_EmailNotConfiguredError: String { return self._s[2702]! } + public var SocksProxySetup_Status: String { return self._s[2703]! } + public var Conversation_ScheduleMessage_SendWhenOnline: String { return self._s[2704]! } + public var PrivacyPolicy_Accept: String { return self._s[2705]! } + public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2706]! } + public var Appearance_AppIconClassicX: String { return self._s[2707]! } public func PUSH_CHAT_MESSAGE_TEXT(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2700]!, self._r[2700]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2708]!, self._r[2708]!, [_1, _2, _3]) } - public var OwnershipTransfer_SecurityRequirements: String { return self._s[2701]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2703]! } - public var AutoNightTheme_Automatic: String { return self._s[2704]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2705]! } - public var Privacy_ContactsSyncHelp: String { return self._s[2706]! } - public var Cache_Help: String { return self._s[2707]! } - public var Group_ErrorAccessDenied: String { return self._s[2708]! } - public var Passport_Language_fa: String { return self._s[2709]! } - public var Wallet_Intro_Text: String { return self._s[2710]! } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2711]! } - public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2712]! } - public var PrivacySettings_LastSeen: String { return self._s[2713]! } + public var OwnershipTransfer_SecurityRequirements: String { return self._s[2709]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2711]! } + public var AutoNightTheme_Automatic: String { return self._s[2712]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2713]! } + public var Privacy_ContactsSyncHelp: String { return self._s[2714]! } + public var Cache_Help: String { return self._s[2715]! } + public var Group_ErrorAccessDenied: String { return self._s[2716]! } + public var Passport_Language_fa: String { return self._s[2717]! } + public var Wallet_Intro_Text: String { return self._s[2718]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2719]! } + public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2720]! } + public var PrivacySettings_LastSeen: String { return self._s[2721]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2714]!, self._r[2714]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2722]!, self._r[2722]!, [_0, _1]) } - public var Wallet_Configuration_Apply: String { return self._s[2718]! } - public var Preview_SaveGif: String { return self._s[2719]! } - public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2720]! } - public var Profile_About: String { return self._s[2721]! } - public var Channel_About_Placeholder: String { return self._s[2722]! } - public var Login_InfoTitle: String { return self._s[2723]! } + public var Wallet_Configuration_Apply: String { return self._s[2726]! } + public var Preview_SaveGif: String { return self._s[2727]! } + public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2728]! } + public var Profile_About: String { return self._s[2729]! } + public var Channel_About_Placeholder: String { return self._s[2730]! } + public var Login_InfoTitle: String { return self._s[2731]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2724]!, self._r[2724]!, [_0]) + return formatWithArgumentRanges(self._s[2732]!, self._r[2732]!, [_0]) } - public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[2725]! } - public var Watch_Suggestion_CantTalk: String { return self._s[2727]! } - public var ContactInfo_Title: String { return self._s[2728]! } - public var Media_ShareThisVideo: String { return self._s[2729]! } - public var Weekday_ShortFriday: String { return self._s[2730]! } - public var AccessDenied_Contacts: String { return self._s[2732]! } - public var Notification_CallIncomingShort: String { return self._s[2733]! } - public var Group_Setup_TypePublic: String { return self._s[2734]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[2735]! } - public var Notifications_Badge_IncludeChannels: String { return self._s[2736]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[2739]! } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2740]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[2741]! } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2742]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2743]! } + public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[2733]! } + public var Watch_Suggestion_CantTalk: String { return self._s[2735]! } + public var ContactInfo_Title: String { return self._s[2736]! } + public var Media_ShareThisVideo: String { return self._s[2737]! } + public var Weekday_ShortFriday: String { return self._s[2738]! } + public var AccessDenied_Contacts: String { return self._s[2740]! } + public var Notification_CallIncomingShort: String { return self._s[2741]! } + public var Group_Setup_TypePublic: String { return self._s[2742]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[2743]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[2744]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[2747]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2748]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[2749]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2750]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2751]! } public func Wallet_SecureStorageChanged_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2744]!, self._r[2744]!, [_0]) + return formatWithArgumentRanges(self._s[2752]!, self._r[2752]!, [_0]) } - public var DialogList_Typing: String { return self._s[2745]! } - public var CallFeedback_IncludeLogs: String { return self._s[2747]! } - public var Checkout_Phone: String { return self._s[2749]! } - public var Login_InfoFirstNamePlaceholder: String { return self._s[2752]! } - public var Privacy_Calls_Integration: String { return self._s[2753]! } - public var Notifications_PermissionsAllow: String { return self._s[2754]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[2758]! } - public var Settings_ChatSettings: String { return self._s[2759]! } - public var Conversation_SendingOptionsTooltip: String { return self._s[2760]! } + public var DialogList_Typing: String { return self._s[2753]! } + public var CallFeedback_IncludeLogs: String { return self._s[2755]! } + public var Checkout_Phone: String { return self._s[2757]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[2760]! } + public var Privacy_Calls_Integration: String { return self._s[2761]! } + public var Notifications_PermissionsAllow: String { return self._s[2762]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[2766]! } + public var Settings_ChatSettings: String { return self._s[2767]! } + public var Conversation_SendingOptionsTooltip: String { return self._s[2768]! } public func UserInfo_StartSecretChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2762]!, self._r[2762]!, [_0]) + return formatWithArgumentRanges(self._s[2770]!, self._r[2770]!, [_0]) } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2763]!, self._r[2763]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2771]!, self._r[2771]!, [_1, _2]) } - public var GroupRemoved_DeleteUser: String { return self._s[2765]! } + public var GroupRemoved_DeleteUser: String { return self._s[2773]! } public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2766]!, self._r[2766]!, [_0]) + return formatWithArgumentRanges(self._s[2774]!, self._r[2774]!, [_0]) } public func PUSH_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2767]!, self._r[2767]!, [_1]) + return formatWithArgumentRanges(self._s[2775]!, self._r[2775]!, [_1]) } - public var Login_ContinueWithLocalization: String { return self._s[2768]! } - public var Watch_Message_ForwardedFrom: String { return self._s[2769]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[2771]! } - public var Conversation_Unblock: String { return self._s[2772]! } - public var PrivacySettings_DataSettings: String { return self._s[2773]! } - public var WallpaperPreview_PatternPaternApply: String { return self._s[2774]! } - public var Group_PublicLink_Info: String { return self._s[2775]! } + public var Login_ContinueWithLocalization: String { return self._s[2776]! } + public var Watch_Message_ForwardedFrom: String { return self._s[2777]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[2779]! } + public var Conversation_Unblock: String { return self._s[2780]! } + public var PrivacySettings_DataSettings: String { return self._s[2781]! } + public var WallpaperPreview_PatternPaternApply: String { return self._s[2782]! } + public var Group_PublicLink_Info: String { return self._s[2783]! } public func Wallet_Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2776]!, self._r[2776]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2784]!, self._r[2784]!, [_1, _2, _3]) } - public var Notifications_InAppNotificationsVibrate: String { return self._s[2777]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[2785]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2778]!, self._r[2778]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2786]!, self._r[2786]!, [_0, _1]) } - public var OldChannels_ChannelsHeader: String { return self._s[2780]! } - public var Wallet_RestoreFailed_CreateWallet: String { return self._s[2781]! } - public var PrivacySettings_Passcode: String { return self._s[2783]! } - public var Call_Mute: String { return self._s[2784]! } - public var Wallet_Weekday_Yesterday: String { return self._s[2785]! } - public var Passport_Language_dz: String { return self._s[2786]! } - public var Wallet_Receive_AmountHeader: String { return self._s[2787]! } - public var Wallet_TransactionInfo_OtherFeeInfoUrl: String { return self._s[2788]! } - public var Passport_Language_tk: String { return self._s[2789]! } + public var OldChannels_ChannelsHeader: String { return self._s[2788]! } + public var Wallet_RestoreFailed_CreateWallet: String { return self._s[2789]! } + public var PrivacySettings_Passcode: String { return self._s[2791]! } + public var Call_Mute: String { return self._s[2792]! } + public var Wallet_Weekday_Yesterday: String { return self._s[2793]! } + public var Passport_Language_dz: String { return self._s[2794]! } + public var Wallet_Receive_AmountHeader: String { return self._s[2795]! } + public var Wallet_TransactionInfo_OtherFeeInfoUrl: String { return self._s[2796]! } + public var Passport_Language_tk: String { return self._s[2797]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2790]!, self._r[2790]!, [_0]) + return formatWithArgumentRanges(self._s[2798]!, self._r[2798]!, [_0]) } - public var Settings_Search: String { return self._s[2791]! } - public var Wallet_Month_ShortFebruary: String { return self._s[2792]! } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2793]! } - public var Wallet_Configuration_SourceJSON: String { return self._s[2794]! } - public var Conversation_ContextMenuReply: String { return self._s[2795]! } - public var WallpaperSearch_ColorBrown: String { return self._s[2796]! } - public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2797]! } - public var Tour_Title1: String { return self._s[2798]! } - public var Wallet_Alert_Cancel: String { return self._s[2799]! } - public var Conversation_ClearGroupHistory: String { return self._s[2801]! } - public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[2802]! } - public var WallpaperPreview_Motion: String { return self._s[2803]! } + public var Settings_Search: String { return self._s[2799]! } + public var Wallet_Month_ShortFebruary: String { return self._s[2800]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2801]! } + public var Wallet_Configuration_SourceJSON: String { return self._s[2802]! } + public var Conversation_ContextMenuReply: String { return self._s[2803]! } + public var WallpaperSearch_ColorBrown: String { return self._s[2804]! } + public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2805]! } + public var Tour_Title1: String { return self._s[2806]! } + public var Wallet_Alert_Cancel: String { return self._s[2807]! } + public var Conversation_ClearGroupHistory: String { return self._s[2809]! } + public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[2810]! } + public var WallpaperPreview_Motion: String { return self._s[2811]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2804]!, self._r[2804]!, [_0]) + return formatWithArgumentRanges(self._s[2812]!, self._r[2812]!, [_0]) } - public var Wallet_Configuration_ApplyErrorTextJSONInvalidData: String { return self._s[2805]! } - public var Call_RateCall: String { return self._s[2806]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2807]! } - public var Passport_PasswordCompleteSetup: String { return self._s[2808]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2809]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[2811]! } + public var Wallet_Configuration_ApplyErrorTextJSONInvalidData: String { return self._s[2813]! } + public var Call_RateCall: String { return self._s[2814]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2815]! } + public var Passport_PasswordCompleteSetup: String { return self._s[2816]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2817]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[2819]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2813]!, self._r[2813]!, [_0]) + return formatWithArgumentRanges(self._s[2821]!, self._r[2821]!, [_0]) } - public var Compose_Create: String { return self._s[2814]! } - public var Contacts_InviteToTelegram: String { return self._s[2815]! } - public var GroupInfo_Notifications: String { return self._s[2816]! } - public var ChatList_DeleteSavedMessagesConfirmationAction: String { return self._s[2818]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[2819]! } - public var Month_GenApril: String { return self._s[2820]! } - public var Appearance_AutoNightTheme: String { return self._s[2821]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[2823]! } - public var Login_CodeSentSms: String { return self._s[2825]! } + public var Compose_Create: String { return self._s[2822]! } + public var Contacts_InviteToTelegram: String { return self._s[2823]! } + public var GroupInfo_Notifications: String { return self._s[2824]! } + public var ChatList_DeleteSavedMessagesConfirmationAction: String { return self._s[2826]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[2827]! } + public var Month_GenApril: String { return self._s[2828]! } + public var Appearance_AutoNightTheme: String { return self._s[2829]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[2831]! } + public var Login_CodeSentSms: String { return self._s[2833]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2826]!, self._r[2826]!, [_0]) + return formatWithArgumentRanges(self._s[2834]!, self._r[2834]!, [_0]) } - public var EmptyGroupInfo_Line3: String { return self._s[2827]! } - public var LogoutOptions_ContactSupportText: String { return self._s[2828]! } - public var Passport_Language_hr: String { return self._s[2829]! } - public var Common_ActionNotAllowedError: String { return self._s[2830]! } + public var EmptyGroupInfo_Line3: String { return self._s[2835]! } + public var LogoutOptions_ContactSupportText: String { return self._s[2836]! } + public var Passport_Language_hr: String { return self._s[2837]! } + public var Common_ActionNotAllowedError: String { return self._s[2838]! } public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2831]!, self._r[2831]!, [_0]) + return formatWithArgumentRanges(self._s[2839]!, self._r[2839]!, [_0]) } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[2832]! } - public var Wallet_Info_TransactionFrom: String { return self._s[2833]! } - public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[2834]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2835]! } - public var Privacy_SecretChatsTitle: String { return self._s[2836]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2838]! } - public var GroupInfo_AddUserLeftError: String { return self._s[2839]! } - public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2840]! } - public var LogoutOptions_ContactSupportTitle: String { return self._s[2841]! } - public var Appearance_ThemePreview_Chat_7_Text: String { return self._s[2842]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[2843]! } - public var Preview_DeleteGif: String { return self._s[2844]! } - public var GroupInfo_Permissions_Exceptions: String { return self._s[2845]! } - public var Group_ErrorNotMutualContact: String { return self._s[2846]! } - public var Notification_MessageLifetime5s: String { return self._s[2847]! } - public var Wallet_Send_OwnAddressAlertText: String { return self._s[2848]! } - public var OldChannels_ChannelFormat: String { return self._s[2849]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[2840]! } + public var Wallet_Info_TransactionFrom: String { return self._s[2841]! } + public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[2842]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2843]! } + public var Privacy_SecretChatsTitle: String { return self._s[2844]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2846]! } + public var GroupInfo_AddUserLeftError: String { return self._s[2847]! } + public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2848]! } + public var LogoutOptions_ContactSupportTitle: String { return self._s[2849]! } + public var Appearance_ThemePreview_Chat_7_Text: String { return self._s[2850]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[2851]! } + public var Preview_DeleteGif: String { return self._s[2852]! } + public var GroupInfo_Permissions_Exceptions: String { return self._s[2853]! } + public var Group_ErrorNotMutualContact: String { return self._s[2854]! } + public var Notification_MessageLifetime5s: String { return self._s[2855]! } + public var Wallet_Send_OwnAddressAlertText: String { return self._s[2856]! } + public var OldChannels_ChannelFormat: String { return self._s[2857]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2850]!, self._r[2850]!, [_0]) + return formatWithArgumentRanges(self._s[2858]!, self._r[2858]!, [_0]) } - public var VoiceOver_Chat_Video: String { return self._s[2851]! } - public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2853]! } - public var ReportSpam_DeleteThisChat: String { return self._s[2854]! } - public var Passport_Address_AddBankStatement: String { return self._s[2855]! } - public var Notification_CallIncoming: String { return self._s[2856]! } - public var Wallet_Words_NotDoneTitle: String { return self._s[2857]! } - public var Compose_NewGroupTitle: String { return self._s[2858]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2860]! } - public var Passport_Address_Postcode: String { return self._s[2862]! } + public var VoiceOver_Chat_Video: String { return self._s[2859]! } + public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2861]! } + public var ReportSpam_DeleteThisChat: String { return self._s[2862]! } + public var Passport_Address_AddBankStatement: String { return self._s[2863]! } + public var Notification_CallIncoming: String { return self._s[2864]! } + public var Wallet_Words_NotDoneTitle: String { return self._s[2865]! } + public var Compose_NewGroupTitle: String { return self._s[2866]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2868]! } + public var Passport_Address_Postcode: String { return self._s[2870]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2863]!, self._r[2863]!, [_0]) - } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2864]! } - public var Wallet_Month_ShortOctober: String { return self._s[2865]! } - public var VoiceOver_Chat_YourMusic: String { return self._s[2866]! } - public var WallpaperColors_Title: String { return self._s[2867]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2868]! } - public var VoiceOver_MessageContextForward: String { return self._s[2869]! } - public var GroupPermission_Duration: String { return self._s[2870]! } - public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2871]!, self._r[2871]!, [_0]) } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2872]! } - public var Username_Placeholder: String { return self._s[2873]! } - public var CallFeedback_WhatWentWrong: String { return self._s[2874]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2875]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2876]! } - public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2878]!, self._r[2878]!, [_1, _2]) + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2872]! } + public var Wallet_Month_ShortOctober: String { return self._s[2873]! } + public var VoiceOver_Chat_YourMusic: String { return self._s[2874]! } + public var WallpaperColors_Title: String { return self._s[2875]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2876]! } + public var VoiceOver_MessageContextForward: String { return self._s[2877]! } + public var GroupPermission_Duration: String { return self._s[2878]! } + public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2879]!, self._r[2879]!, [_0]) } - public var Passport_PasswordDescription: String { return self._s[2879]! } - public var Channel_MessagePhotoUpdated: String { return self._s[2880]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[2881]! } - public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2882]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[2883]! } - public var Conversation_ContextMenuMore: String { return self._s[2884]! } - public var Privacy_PaymentsClearInfo: String { return self._s[2885]! } - public var CallSettings_TabIcon: String { return self._s[2886]! } - public var KeyCommand_Find: String { return self._s[2887]! } - public var ClearCache_FreeSpaceDescription: String { return self._s[2888]! } - public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2889]! } - public var EditTheme_Edit_Preview_IncomingText: String { return self._s[2890]! } - public var Message_PinnedGame: String { return self._s[2891]! } - public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[2892]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2894]! } - public var Login_CallRequestState2: String { return self._s[2896]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2898]! } + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2880]! } + public var Username_Placeholder: String { return self._s[2881]! } + public var CallFeedback_WhatWentWrong: String { return self._s[2882]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2883]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2884]! } + public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2886]!, self._r[2886]!, [_1, _2]) + } + public var Passport_PasswordDescription: String { return self._s[2887]! } + public var Channel_MessagePhotoUpdated: String { return self._s[2888]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[2889]! } + public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2890]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[2891]! } + public var Conversation_ContextMenuMore: String { return self._s[2892]! } + public var Privacy_PaymentsClearInfo: String { return self._s[2893]! } + public var CallSettings_TabIcon: String { return self._s[2894]! } + public var KeyCommand_Find: String { return self._s[2895]! } + public var ClearCache_FreeSpaceDescription: String { return self._s[2896]! } + public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2897]! } + public var EditTheme_Edit_Preview_IncomingText: String { return self._s[2898]! } + public var Message_PinnedGame: String { return self._s[2899]! } + public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[2900]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2902]! } + public var Login_CallRequestState2: String { return self._s[2904]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2906]! } public func VoiceOver_Chat_PhotoFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2899]!, self._r[2899]!, [_0]) + return formatWithArgumentRanges(self._s[2907]!, self._r[2907]!, [_0]) } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2901]!, self._r[2901]!, [_0]) + return formatWithArgumentRanges(self._s[2909]!, self._r[2909]!, [_0]) } - public var AuthSessions_AddDevice: String { return self._s[2902]! } - public var WallpaperPreview_Blurred: String { return self._s[2903]! } - public var Conversation_InstantPagePreview: String { return self._s[2904]! } + public var AuthSessions_AddDevice: String { return self._s[2910]! } + public var WallpaperPreview_Blurred: String { return self._s[2911]! } + public var Conversation_InstantPagePreview: String { return self._s[2912]! } public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2905]!, self._r[2905]!, [_0]) + return formatWithArgumentRanges(self._s[2913]!, self._r[2913]!, [_0]) } - public var SecretTimer_VideoDescription: String { return self._s[2908]! } - public var WallpaperSearch_ColorRed: String { return self._s[2909]! } - public var GroupPermission_NoPinMessages: String { return self._s[2910]! } - public var Passport_Language_es: String { return self._s[2911]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2913]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2914]! } + public var SecretTimer_VideoDescription: String { return self._s[2916]! } + public var WallpaperSearch_ColorRed: String { return self._s[2917]! } + public var GroupPermission_NoPinMessages: String { return self._s[2918]! } + public var Passport_Language_es: String { return self._s[2919]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2921]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2922]! } public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2915]!, self._r[2915]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2923]!, self._r[2923]!, [_1, _2]) } - public var Privacy_Forwards_CustomHelp: String { return self._s[2916]! } - public var WebPreview_GettingLinkInfo: String { return self._s[2917]! } - public var Watch_UserInfo_Unmute: String { return self._s[2918]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2919]! } - public var AccessDenied_CameraRestricted: String { return self._s[2921]! } + public var Privacy_Forwards_CustomHelp: String { return self._s[2924]! } + public var WebPreview_GettingLinkInfo: String { return self._s[2925]! } + public var Watch_UserInfo_Unmute: String { return self._s[2926]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2927]! } + public var AccessDenied_CameraRestricted: String { return self._s[2929]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2922]!, self._r[2922]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2930]!, self._r[2930]!, ["\(_0)"]) } - public var ChatList_ReadAll: String { return self._s[2924]! } - public var Settings_CopyUsername: String { return self._s[2925]! } - public var Contacts_SearchLabel: String { return self._s[2926]! } - public var Map_OpenInYandexNavigator: String { return self._s[2928]! } - public var PasscodeSettings_EncryptData: String { return self._s[2929]! } - public var Settings_Wallet: String { return self._s[2930]! } - public var Group_ErrorSupergroupConversionNotPossible: String { return self._s[2931]! } - public var WallpaperSearch_ColorPrefix: String { return self._s[2932]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[2933]! } - public var DialogList_AdNoticeAlert: String { return self._s[2934]! } - public var Wallet_Month_GenMay: String { return self._s[2936]! } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2937]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2938]! } - public var Localization_LanguageCustom: String { return self._s[2939]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2940]! } - public var CallFeedback_Title: String { return self._s[2941]! } - public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[2944]! } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2945]! } - public var Wallet_Intro_CreateErrorTitle: String { return self._s[2946]! } - public var Conversation_InfoGroup: String { return self._s[2947]! } - public var Compose_NewMessage: String { return self._s[2948]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2949]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2950]! } - public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[2951]! } - public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2952]! } + public var ChatList_ReadAll: String { return self._s[2932]! } + public var Settings_CopyUsername: String { return self._s[2933]! } + public var Contacts_SearchLabel: String { return self._s[2934]! } + public var Map_OpenInYandexNavigator: String { return self._s[2936]! } + public var PasscodeSettings_EncryptData: String { return self._s[2937]! } + public var Settings_Wallet: String { return self._s[2938]! } + public var Group_ErrorSupergroupConversionNotPossible: String { return self._s[2939]! } + public var WallpaperSearch_ColorPrefix: String { return self._s[2940]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[2941]! } + public var DialogList_AdNoticeAlert: String { return self._s[2942]! } + public var Wallet_Month_GenMay: String { return self._s[2944]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2945]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2946]! } + public var Localization_LanguageCustom: String { return self._s[2947]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2948]! } + public var CallFeedback_Title: String { return self._s[2949]! } + public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[2952]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2953]! } + public var Wallet_Intro_CreateErrorTitle: String { return self._s[2954]! } + public var Conversation_InfoGroup: String { return self._s[2955]! } + public var Compose_NewMessage: String { return self._s[2956]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2957]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2958]! } + public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[2959]! } + public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2960]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2953]!, self._r[2953]!, [_0]) + return formatWithArgumentRanges(self._s[2961]!, self._r[2961]!, [_0]) } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2954]! } - public var Login_CancelSignUpConfirmation: String { return self._s[2955]! } - public var ChangePhoneNumberCode_Help: String { return self._s[2956]! } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2957]! } - public var Channel_BlackList_Title: String { return self._s[2958]! } - public var UserInfo_PhoneCall: String { return self._s[2959]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2961]! } - public var Wallet_Month_ShortJanuary: String { return self._s[2962]! } - public var State_connecting: String { return self._s[2963]! } - public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2964]! } - public var Wallet_Month_GenMarch: String { return self._s[2965]! } - public var EditTheme_Expand_BottomInfo: String { return self._s[2966]! } - public var AuthSessions_AddedDeviceTerminate: String { return self._s[2967]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2962]! } + public var Login_CancelSignUpConfirmation: String { return self._s[2963]! } + public var ChangePhoneNumberCode_Help: String { return self._s[2964]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2965]! } + public var Channel_BlackList_Title: String { return self._s[2966]! } + public var UserInfo_PhoneCall: String { return self._s[2967]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2969]! } + public var Wallet_Month_ShortJanuary: String { return self._s[2970]! } + public var State_connecting: String { return self._s[2971]! } + public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2972]! } + public var Wallet_Month_GenMarch: String { return self._s[2973]! } + public var EditTheme_Expand_BottomInfo: String { return self._s[2974]! } + public var AuthSessions_AddedDeviceTerminate: String { return self._s[2975]! } public func LastSeen_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2968]!, self._r[2968]!, [_0]) + return formatWithArgumentRanges(self._s[2976]!, self._r[2976]!, [_0]) } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2969]!, self._r[2969]!, [_0]) + return formatWithArgumentRanges(self._s[2977]!, self._r[2977]!, [_0]) } - public var Notifications_GroupNotifications: String { return self._s[2970]! } - public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[2971]! } - public var Passport_Identity_EditPassport: String { return self._s[2972]! } - public var EnterPasscode_RepeatNewPasscode: String { return self._s[2974]! } - public var Localization_EnglishLanguageName: String { return self._s[2975]! } - public var Share_AuthDescription: String { return self._s[2976]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2977]! } - public var Passport_Identity_Surname: String { return self._s[2978]! } - public var Compose_TokenListPlaceholder: String { return self._s[2979]! } - public var Wallet_AccessDenied_Camera: String { return self._s[2980]! } - public var Passport_Identity_OneOfTypePassport: String { return self._s[2981]! } - public var Settings_AboutEmpty: String { return self._s[2982]! } - public var Conversation_Unmute: String { return self._s[2983]! } - public var CreateGroup_ChannelsTooMuch: String { return self._s[2985]! } - public var Wallet_Sending_Text: String { return self._s[2986]! } + public var Notifications_GroupNotifications: String { return self._s[2978]! } + public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[2979]! } + public var Passport_Identity_EditPassport: String { return self._s[2980]! } + public var EnterPasscode_RepeatNewPasscode: String { return self._s[2982]! } + public var Localization_EnglishLanguageName: String { return self._s[2983]! } + public var Share_AuthDescription: String { return self._s[2984]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2985]! } + public var Passport_Identity_Surname: String { return self._s[2986]! } + public var Compose_TokenListPlaceholder: String { return self._s[2987]! } + public var Wallet_AccessDenied_Camera: String { return self._s[2988]! } + public var Passport_Identity_OneOfTypePassport: String { return self._s[2989]! } + public var Settings_AboutEmpty: String { return self._s[2990]! } + public var Conversation_Unmute: String { return self._s[2991]! } + public var CreateGroup_ChannelsTooMuch: String { return self._s[2993]! } + public var Wallet_Sending_Text: String { return self._s[2994]! } public func PUSH_CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2987]!, self._r[2987]!, [_1]) - } - public var Login_CodeSentCall: String { return self._s[2988]! } - public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2990]! } - public var ChatSettings_Appearance: String { return self._s[2991]! } - public var ClearCache_StorageUsage: String { return self._s[2992]! } - public var Appearance_PickAccentColor: String { return self._s[2993]! } - public func PUSH_CHAT_MESSAGE_NOTEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2994]!, self._r[2994]!, [_1, _2]) - } - public func PUSH_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2995]!, self._r[2995]!, [_1]) } - public var Notification_CallMissed: String { return self._s[2996]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2997]! } - public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2998]! } - public var Wallet_Month_GenOctober: String { return self._s[3000]! } - public var ChatAdmins_AdminLabel: String { return self._s[3001]! } - public var KeyCommand_JumpToNextChat: String { return self._s[3002]! } - public var Conversation_StopPollConfirmationTitle: String { return self._s[3004]! } - public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[3005]! } - public var Month_GenJune: String { return self._s[3006]! } - public var IntentsSettings_MainAccountInfo: String { return self._s[3007]! } - public var Watch_Location_Current: String { return self._s[3008]! } - public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[3009]! } - public var Conversation_TitleMute: String { return self._s[3010]! } + public var Login_CodeSentCall: String { return self._s[2996]! } + public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2998]! } + public var ChatSettings_Appearance: String { return self._s[2999]! } + public var ClearCache_StorageUsage: String { return self._s[3000]! } + public var Appearance_PickAccentColor: String { return self._s[3001]! } + public func PUSH_CHAT_MESSAGE_NOTEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3002]!, self._r[3002]!, [_1, _2]) + } + public func PUSH_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3003]!, self._r[3003]!, [_1]) + } + public var Notification_CallMissed: String { return self._s[3004]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[3005]! } + public var Channel_AdminLogFilter_EventsInfo: String { return self._s[3006]! } + public var Wallet_Month_GenOctober: String { return self._s[3008]! } + public var ChatAdmins_AdminLabel: String { return self._s[3009]! } + public var KeyCommand_JumpToNextChat: String { return self._s[3010]! } + public var Conversation_StopPollConfirmationTitle: String { return self._s[3012]! } + public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[3013]! } + public var Month_GenJune: String { return self._s[3014]! } + public var IntentsSettings_MainAccountInfo: String { return self._s[3015]! } + public var Watch_Location_Current: String { return self._s[3016]! } + public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[3017]! } + public var Conversation_TitleMute: String { return self._s[3018]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3011]!, self._r[3011]!, [_1]) + return formatWithArgumentRanges(self._s[3019]!, self._r[3019]!, [_1]) } - public var GroupInfo_DeleteAndExit: String { return self._s[3012]! } + public var GroupInfo_DeleteAndExit: String { return self._s[3020]! } public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3013]!, self._r[3013]!, [_0]) + return formatWithArgumentRanges(self._s[3021]!, self._r[3021]!, [_0]) } - public var Call_ReportPlaceholder: String { return self._s[3014]! } - public var Chat_SlowmodeSendError: String { return self._s[3015]! } - public var MaskStickerSettings_Info: String { return self._s[3016]! } - public var EditTheme_Expand_TopInfo: String { return self._s[3017]! } + public var Call_ReportPlaceholder: String { return self._s[3022]! } + public var Chat_SlowmodeSendError: String { return self._s[3023]! } + public var MaskStickerSettings_Info: String { return self._s[3024]! } + public var EditTheme_Expand_TopInfo: String { return self._s[3025]! } public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3018]!, self._r[3018]!, [_0]) + return formatWithArgumentRanges(self._s[3026]!, self._r[3026]!, [_0]) } - public var Checkout_NewCard_PostcodeTitle: String { return self._s[3019]! } - public var Passport_Address_RegionPlaceholder: String { return self._s[3021]! } - public var Contacts_ShareTelegram: String { return self._s[3022]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[3023]! } - public var Map_AddressOnMap: String { return self._s[3024]! } - public var Channel_ErrorAccessDenied: String { return self._s[3025]! } - public var UserInfo_ScamBotWarning: String { return self._s[3027]! } - public var Stickers_GroupChooseStickerPack: String { return self._s[3028]! } - public var Call_ConnectionErrorTitle: String { return self._s[3029]! } - public var UserInfo_NotificationsEnable: String { return self._s[3030]! } - public var ArchivedChats_IntroText1: String { return self._s[3031]! } - public var Tour_Text4: String { return self._s[3034]! } - public var WallpaperSearch_Recent: String { return self._s[3035]! } - public var GroupInfo_ScamGroupWarning: String { return self._s[3036]! } - public var Profile_MessageLifetime2s: String { return self._s[3038]! } - public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[3039]! } - public var Notification_MessageLifetime2s: String { return self._s[3040]! } + public var Checkout_NewCard_PostcodeTitle: String { return self._s[3027]! } + public var Passport_Address_RegionPlaceholder: String { return self._s[3029]! } + public var Contacts_ShareTelegram: String { return self._s[3030]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[3031]! } + public var Map_AddressOnMap: String { return self._s[3032]! } + public var Channel_ErrorAccessDenied: String { return self._s[3033]! } + public var UserInfo_ScamBotWarning: String { return self._s[3035]! } + public var Stickers_GroupChooseStickerPack: String { return self._s[3036]! } + public var Call_ConnectionErrorTitle: String { return self._s[3037]! } + public var UserInfo_NotificationsEnable: String { return self._s[3038]! } + public var ArchivedChats_IntroText1: String { return self._s[3039]! } + public var Tour_Text4: String { return self._s[3042]! } + public var WallpaperSearch_Recent: String { return self._s[3043]! } + public var GroupInfo_ScamGroupWarning: String { return self._s[3044]! } + public var Profile_MessageLifetime2s: String { return self._s[3046]! } + public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[3047]! } + public var Notification_MessageLifetime2s: String { return self._s[3048]! } public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3041]!, self._r[3041]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3049]!, self._r[3049]!, [_1, _2, _3]) } - public var Cache_ClearCache: String { return self._s[3042]! } - public var AutoNightTheme_UpdateLocation: String { return self._s[3043]! } - public var Permissions_NotificationsUnreachableText_v0: String { return self._s[3044]! } + public var Cache_ClearCache: String { return self._s[3050]! } + public var AutoNightTheme_UpdateLocation: String { return self._s[3051]! } + public var Permissions_NotificationsUnreachableText_v0: String { return self._s[3052]! } public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3048]!, self._r[3048]!, [_0]) + return formatWithArgumentRanges(self._s[3056]!, self._r[3056]!, [_0]) } public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3050]!, self._r[3050]!, [_0]) + return formatWithArgumentRanges(self._s[3058]!, self._r[3058]!, [_0]) } - public var LocalGroup_Text: String { return self._s[3051]! } - public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[3052]! } - public var SocksProxySetup_TypeSocks: String { return self._s[3053]! } - public var ChatList_UnarchiveAction: String { return self._s[3054]! } - public var AutoNightTheme_Title: String { return self._s[3055]! } - public var InstantPage_FeedbackButton: String { return self._s[3056]! } - public var Passport_FieldAddress: String { return self._s[3057]! } + public var LocalGroup_Text: String { return self._s[3059]! } + public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[3060]! } + public var SocksProxySetup_TypeSocks: String { return self._s[3061]! } + public var ChatList_UnarchiveAction: String { return self._s[3062]! } + public var AutoNightTheme_Title: String { return self._s[3063]! } + public var InstantPage_FeedbackButton: String { return self._s[3064]! } + public var Passport_FieldAddress: String { return self._s[3065]! } public func Channel_AdminLog_SetSlowmode(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3058]!, self._r[3058]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3066]!, self._r[3066]!, [_1, _2]) } - public var Month_ShortMarch: String { return self._s[3059]! } + public var Month_ShortMarch: String { return self._s[3067]! } public func PUSH_MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3060]!, self._r[3060]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3068]!, self._r[3068]!, [_1, _2]) } - public var SocksProxySetup_UsernamePlaceholder: String { return self._s[3061]! } - public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[3062]! } - public var Passport_FloodError: String { return self._s[3063]! } - public var SecretGif_Title: String { return self._s[3064]! } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[3065]! } - public var ChatList_Context_UnhideArchive: String { return self._s[3066]! } - public var Passport_Language_th: String { return self._s[3068]! } - public var Passport_Address_Address: String { return self._s[3069]! } - public var Login_InvalidLastNameError: String { return self._s[3070]! } - public var Notifications_InAppNotificationsPreview: String { return self._s[3071]! } - public var Notifications_PermissionsUnreachableTitle: String { return self._s[3072]! } - public var ChatList_Context_Archive: String { return self._s[3073]! } - public var SettingsSearch_FAQ: String { return self._s[3074]! } - public var ShareMenu_Send: String { return self._s[3075]! } - public var WallpaperSearch_ColorYellow: String { return self._s[3077]! } - public var Month_GenNovember: String { return self._s[3079]! } - public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[3081]! } + public var SocksProxySetup_UsernamePlaceholder: String { return self._s[3069]! } + public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[3070]! } + public var Passport_FloodError: String { return self._s[3071]! } + public var SecretGif_Title: String { return self._s[3072]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[3073]! } + public var ChatList_Context_UnhideArchive: String { return self._s[3074]! } + public var Passport_Language_th: String { return self._s[3076]! } + public var Passport_Address_Address: String { return self._s[3077]! } + public var Login_InvalidLastNameError: String { return self._s[3078]! } + public var Notifications_InAppNotificationsPreview: String { return self._s[3079]! } + public var Notifications_PermissionsUnreachableTitle: String { return self._s[3080]! } + public var ChatList_Context_Archive: String { return self._s[3081]! } + public var SettingsSearch_FAQ: String { return self._s[3082]! } + public var ShareMenu_Send: String { return self._s[3083]! } + public var WallpaperSearch_ColorYellow: String { return self._s[3085]! } + public var Month_GenNovember: String { return self._s[3087]! } + public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[3089]! } public func Conversation_ShareMyPhoneNumberConfirmation(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3082]!, self._r[3082]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3090]!, self._r[3090]!, [_1, _2]) } - public var Conversation_SwipeToReplyHintText: String { return self._s[3083]! } - public var Checkout_Email: String { return self._s[3084]! } - public var NotificationsSound_Tritone: String { return self._s[3085]! } - public var StickerPacksSettings_ManagingHelp: String { return self._s[3087]! } - public var Wallet_ContextMenuCopy: String { return self._s[3089]! } + public var Conversation_SwipeToReplyHintText: String { return self._s[3091]! } + public var Checkout_Email: String { return self._s[3092]! } + public var NotificationsSound_Tritone: String { return self._s[3093]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[3095]! } + public var Wallet_ContextMenuCopy: String { return self._s[3097]! } public func Wallet_Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3091]!, self._r[3091]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3099]!, self._r[3099]!, [_1, _2, _3]) } - public var Appearance_TextSize_Automatic: String { return self._s[3092]! } + public var Appearance_TextSize_Automatic: String { return self._s[3100]! } public func PUSH_PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3093]!, self._r[3093]!, [_1]) + return formatWithArgumentRanges(self._s[3101]!, self._r[3101]!, [_1]) } public func StickerPackActionInfo_AddedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3094]!, self._r[3094]!, [_0]) + return formatWithArgumentRanges(self._s[3102]!, self._r[3102]!, [_0]) } - public var ChangePhoneNumberNumber_Help: String { return self._s[3095]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[3103]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3096]!, self._r[3096]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[3104]!, self._r[3104]!, [_1, _1, _1, _2]) } - public var ChatList_UndoArchiveTitle: String { return self._s[3097]! } - public var Notification_Exceptions_Add: String { return self._s[3098]! } - public var DialogList_You: String { return self._s[3099]! } - public var MediaPicker_Send: String { return self._s[3102]! } - public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[3103]! } - public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[3104]! } - public var Call_AudioRouteSpeaker: String { return self._s[3105]! } - public var Watch_UserInfo_Title: String { return self._s[3106]! } - public var VoiceOver_Chat_PollFinalResults: String { return self._s[3107]! } - public var Appearance_AccentColor: String { return self._s[3109]! } + public var ChatList_UndoArchiveTitle: String { return self._s[3105]! } + public var Notification_Exceptions_Add: String { return self._s[3106]! } + public var DialogList_You: String { return self._s[3107]! } + public var MediaPicker_Send: String { return self._s[3110]! } + public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[3111]! } + public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[3112]! } + public var Call_AudioRouteSpeaker: String { return self._s[3113]! } + public var Watch_UserInfo_Title: String { return self._s[3114]! } + public var VoiceOver_Chat_PollFinalResults: String { return self._s[3115]! } + public var Appearance_AccentColor: String { return self._s[3117]! } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3110]!, self._r[3110]!, [_0]) + return formatWithArgumentRanges(self._s[3118]!, self._r[3118]!, [_0]) } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[3111]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[3119]! } public func PUSH_CHANNEL_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3112]!, self._r[3112]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3120]!, self._r[3120]!, [_1, _2]) } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[3113]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[3114]! } - public var Notification_CallOutgoing: String { return self._s[3115]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[3116]! } - public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[3117]! } - public var Call_RecordingDisabledMessage: String { return self._s[3118]! } - public var Message_Game: String { return self._s[3119]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[3120]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[3121]! } - public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[3122]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[3123]! } - public var Date_DialogDateFormat: String { return self._s[3125]! } - public var WallpaperColors_SetCustomColor: String { return self._s[3126]! } - public var Notifications_InAppNotifications: String { return self._s[3127]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[3121]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[3122]! } + public var Notification_CallOutgoing: String { return self._s[3123]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[3124]! } + public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[3125]! } + public var Call_RecordingDisabledMessage: String { return self._s[3126]! } + public var Message_Game: String { return self._s[3127]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[3128]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[3129]! } + public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[3130]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[3131]! } + public var Date_DialogDateFormat: String { return self._s[3133]! } + public var WallpaperColors_SetCustomColor: String { return self._s[3134]! } + public var Notifications_InAppNotifications: String { return self._s[3135]! } public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3128]!, self._r[3128]!, [_0]) + return formatWithArgumentRanges(self._s[3136]!, self._r[3136]!, [_0]) } public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3129]!, self._r[3129]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3137]!, self._r[3137]!, [_1, _2]) } - public var NewContact_Title: String { return self._s[3130]! } + public var NewContact_Title: String { return self._s[3138]! } public func AutoDownloadSettings_UpToForAll(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3131]!, self._r[3131]!, [_0]) + return formatWithArgumentRanges(self._s[3139]!, self._r[3139]!, [_0]) } - public var Conversation_ViewContactDetails: String { return self._s[3132]! } + public var Conversation_ViewContactDetails: String { return self._s[3140]! } public func PUSH_CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3134]!, self._r[3134]!, [_1]) + return formatWithArgumentRanges(self._s[3142]!, self._r[3142]!, [_1]) } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[3135]! } - public var Passport_Identity_ExpiryDateNone: String { return self._s[3136]! } - public var PrivacySettings_Title: String { return self._s[3137]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[3140]! } - public var GroupRemoved_UsersSectionTitle: String { return self._s[3141]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[3142]! } - public var Contacts_PhoneNumber: String { return self._s[3143]! } - public var TwoFactorSetup_Password_PlaceholderConfirmPassword: String { return self._s[3145]! } - public var Map_ShowPlaces: String { return self._s[3146]! } - public var ChatAdmins_Title: String { return self._s[3147]! } - public var InstantPage_Reference: String { return self._s[3149]! } - public var Wallet_Info_Updating: String { return self._s[3150]! } - public var ReportGroupLocation_Text: String { return self._s[3151]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[3143]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[3144]! } + public var PrivacySettings_Title: String { return self._s[3145]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[3148]! } + public var GroupRemoved_UsersSectionTitle: String { return self._s[3149]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[3150]! } + public var Contacts_PhoneNumber: String { return self._s[3151]! } + public var TwoFactorSetup_Password_PlaceholderConfirmPassword: String { return self._s[3153]! } + public var Map_ShowPlaces: String { return self._s[3154]! } + public var ChatAdmins_Title: String { return self._s[3155]! } + public var InstantPage_Reference: String { return self._s[3157]! } + public var Wallet_Info_Updating: String { return self._s[3158]! } + public var ReportGroupLocation_Text: String { return self._s[3159]! } public func PUSH_CHAT_MESSAGE_FWD(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3152]!, self._r[3152]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3160]!, self._r[3160]!, [_1, _2]) } - public var Camera_FlashOff: String { return self._s[3153]! } - public var Watch_UserInfo_Block: String { return self._s[3154]! } - public var ChatSettings_Stickers: String { return self._s[3155]! } - public var ChatSettings_DownloadInBackground: String { return self._s[3156]! } - public var Appearance_ThemeCarouselTintedNight: String { return self._s[3157]! } + public var Camera_FlashOff: String { return self._s[3161]! } + public var Watch_UserInfo_Block: String { return self._s[3162]! } + public var ChatSettings_Stickers: String { return self._s[3163]! } + public var ChatSettings_DownloadInBackground: String { return self._s[3164]! } + public var Appearance_ThemeCarouselTintedNight: String { return self._s[3165]! } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3158]!, self._r[3158]!, [_0]) - } - public var Settings_ViewPhoto: String { return self._s[3159]! } - public var Login_CheckOtherSessionMessages: String { return self._s[3160]! } - public var AutoDownloadSettings_Cellular: String { return self._s[3161]! } - public var Wallet_Created_ExportErrorTitle: String { return self._s[3162]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[3163]! } - public var VoiceOver_MessageContextShare: String { return self._s[3164]! } - public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3166]!, self._r[3166]!, [_0]) } - public var Privacy_DeleteDrafts: String { return self._s[3167]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[3168]! } - public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3169]!, self._r[3169]!, [_0]) + public var Settings_ViewPhoto: String { return self._s[3167]! } + public var Login_CheckOtherSessionMessages: String { return self._s[3168]! } + public var AutoDownloadSettings_Cellular: String { return self._s[3169]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[3170]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[3171]! } + public var VoiceOver_MessageContextShare: String { return self._s[3172]! } + public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3174]!, self._r[3174]!, [_0]) } - public var DialogList_SavedMessagesHelp: String { return self._s[3170]! } - public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[3171]! } - public var DialogList_SavedMessages: String { return self._s[3172]! } - public var GroupInfo_UpgradeButton: String { return self._s[3173]! } - public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[3175]! } - public var DialogList_Pin: String { return self._s[3176]! } + public var Privacy_DeleteDrafts: String { return self._s[3175]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[3176]! } + public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3177]!, self._r[3177]!, [_0]) + } + public var DialogList_SavedMessagesHelp: String { return self._s[3178]! } + public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[3179]! } + public var DialogList_SavedMessages: String { return self._s[3180]! } + public var GroupInfo_UpgradeButton: String { return self._s[3181]! } + public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[3183]! } + public var DialogList_Pin: String { return self._s[3184]! } public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3177]!, self._r[3177]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3185]!, self._r[3185]!, [_0, _1]) } public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3178]!, self._r[3178]!, [_0]) + return formatWithArgumentRanges(self._s[3186]!, self._r[3186]!, [_0]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[3179]! } - public var UserInfo_NotificationsDisable: String { return self._s[3180]! } - public var Conversation_ContextMenuCancelEditing: String { return self._s[3181]! } - public var Paint_Outlined: String { return self._s[3182]! } - public var Activity_PlayingGame: String { return self._s[3183]! } - public var SearchImages_NoImagesFound: String { return self._s[3184]! } - public var SocksProxySetup_ProxyType: String { return self._s[3185]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[3187]! } - public var Conversation_ContextMenuCancelSending: String { return self._s[3188]! } - public var Settings_AppLanguage: String { return self._s[3189]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[3190]! } - public var Common_ChoosePhoto: String { return self._s[3191]! } - public var AuthSessions_AddDevice_InvalidQRCode: String { return self._s[3192]! } - public var CallFeedback_ReasonEcho: String { return self._s[3193]! } + public var Notification_Exceptions_AlwaysOn: String { return self._s[3187]! } + public var UserInfo_NotificationsDisable: String { return self._s[3188]! } + public var Conversation_ContextMenuCancelEditing: String { return self._s[3189]! } + public var Paint_Outlined: String { return self._s[3190]! } + public var Activity_PlayingGame: String { return self._s[3191]! } + public var SearchImages_NoImagesFound: String { return self._s[3192]! } + public var SocksProxySetup_ProxyType: String { return self._s[3193]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[3195]! } + public var Conversation_ContextMenuCancelSending: String { return self._s[3196]! } + public var Settings_AppLanguage: String { return self._s[3197]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[3198]! } + public var Common_ChoosePhoto: String { return self._s[3199]! } + public var AuthSessions_AddDevice_InvalidQRCode: String { return self._s[3200]! } + public var CallFeedback_ReasonEcho: String { return self._s[3201]! } public func PUSH_PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3194]!, self._r[3194]!, [_1]) + return formatWithArgumentRanges(self._s[3202]!, self._r[3202]!, [_1]) } - public var Privacy_Calls_AlwaysAllow: String { return self._s[3195]! } - public var Activity_UploadingVideo: String { return self._s[3196]! } - public var Conversation_WalletRequiredNotNow: String { return self._s[3197]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[3198]! } - public var NetworkUsageSettings_Wifi: String { return self._s[3199]! } - public var VoiceOver_Editing_ClearText: String { return self._s[3200]! } - public var PUSH_SENDER_YOU: String { return self._s[3201]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[3202]! } - public var Checkout_PayWithTouchId: String { return self._s[3203]! } - public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[3204]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[3203]! } + public var PollResults_Collapse: String { return self._s[3204]! } + public var Activity_UploadingVideo: String { return self._s[3205]! } + public var Conversation_WalletRequiredNotNow: String { return self._s[3206]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[3207]! } + public var NetworkUsageSettings_Wifi: String { return self._s[3208]! } + public var VoiceOver_Editing_ClearText: String { return self._s[3209]! } + public var PUSH_SENDER_YOU: String { return self._s[3210]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[3211]! } + public var Checkout_PayWithTouchId: String { return self._s[3212]! } + public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[3213]! } public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3206]!, self._r[3206]!, [_1]) + return formatWithArgumentRanges(self._s[3215]!, self._r[3215]!, [_1]) } - public var Notifications_ExceptionsNone: String { return self._s[3207]! } + public var Notifications_ExceptionsNone: String { return self._s[3216]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3208]!, self._r[3208]!, [_0]) + return formatWithArgumentRanges(self._s[3217]!, self._r[3217]!, [_0]) } public func PUSH_PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3209]!, self._r[3209]!, [_1]) + return formatWithArgumentRanges(self._s[3218]!, self._r[3218]!, [_1]) } - public var AuthSessions_IncompleteAttempts: String { return self._s[3211]! } - public var Passport_Address_Region: String { return self._s[3214]! } - public var ChatList_DeleteChat: String { return self._s[3215]! } - public var LogoutOptions_ClearCacheTitle: String { return self._s[3216]! } - public var PhotoEditor_TiltShift: String { return self._s[3217]! } - public var Settings_FAQ_URL: String { return self._s[3218]! } - public var TwoFactorSetup_EmailVerification_ChangeAction: String { return self._s[3219]! } - public var Passport_Language_sl: String { return self._s[3220]! } - public var Settings_PrivacySettings: String { return self._s[3222]! } - public var SharedMedia_TitleLink: String { return self._s[3223]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[3224]! } - public var Settings_SetProfilePhoto: String { return self._s[3225]! } - public var Channel_About_Help: String { return self._s[3226]! } - public var Contacts_PermissionsEnable: String { return self._s[3227]! } - public var Wallet_Sending_Title: String { return self._s[3228]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[3229]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[3230]! } - public var CallFeedback_ReasonInterruption: String { return self._s[3232]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[3233]! } - public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3234]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3235]! } - public var OldChannels_Title: String { return self._s[3236]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[3237]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[3239]! } - public var Map_OpenInYandexMaps: String { return self._s[3241]! } - public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3242]! } - public var VoiceOver_MessageContextReply: String { return self._s[3243]! } - public var PhotoEditor_SaturationTool: String { return self._s[3245]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[3220]! } + public var Passport_Address_Region: String { return self._s[3223]! } + public var ChatList_DeleteChat: String { return self._s[3224]! } + public var LogoutOptions_ClearCacheTitle: String { return self._s[3225]! } + public var PhotoEditor_TiltShift: String { return self._s[3226]! } + public var Settings_FAQ_URL: String { return self._s[3227]! } + public var TwoFactorSetup_EmailVerification_ChangeAction: String { return self._s[3228]! } + public var Passport_Language_sl: String { return self._s[3229]! } + public var Settings_PrivacySettings: String { return self._s[3231]! } + public var SharedMedia_TitleLink: String { return self._s[3232]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[3233]! } + public var Settings_SetProfilePhoto: String { return self._s[3234]! } + public var Channel_About_Help: String { return self._s[3235]! } + public var Contacts_PermissionsEnable: String { return self._s[3236]! } + public var Wallet_Sending_Title: String { return self._s[3237]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[3238]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[3239]! } + public var CallFeedback_ReasonInterruption: String { return self._s[3241]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[3242]! } + public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3243]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3244]! } + public var OldChannels_Title: String { return self._s[3245]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[3246]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[3248]! } + public var Map_OpenInYandexMaps: String { return self._s[3250]! } + public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3251]! } + public var VoiceOver_MessageContextReply: String { return self._s[3252]! } + public var PhotoEditor_SaturationTool: String { return self._s[3254]! } public func PUSH_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3246]!, self._r[3246]!, [_1, _2]) - } - public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3247]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3248]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3249]! } - public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3250]!, self._r[3250]!, [_1, "\(_2)"]) - } - public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3251]! } - public var Channel_Username_InvalidTooShort: String { return self._s[3253]! } - public var SettingsSearch_Synonyms_Wallet: String { return self._s[3254]! } - public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3255]!, self._r[3255]!, [_1, _2]) } - public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3256]!, self._r[3256]!, [_1, _2, _3]) + public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3256]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3257]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3258]! } + public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3259]!, self._r[3259]!, [_1, "\(_2)"]) } - public var WallpaperPreview_PatternTitle: String { return self._s[3257]! } - public var GroupInfo_PublicLinkAdd: String { return self._s[3258]! } - public var Passport_PassportInformation: String { return self._s[3261]! } - public var Theme_Unsupported: String { return self._s[3262]! } - public var WatchRemote_AlertTitle: String { return self._s[3263]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3264]! } - public var ConvertToSupergroup_HelpText: String { return self._s[3266]! } + public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3260]! } + public var Channel_Username_InvalidTooShort: String { return self._s[3262]! } + public var SettingsSearch_Synonyms_Wallet: String { return self._s[3263]! } + public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3264]!, self._r[3264]!, [_1, _2]) + } + public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3265]!, self._r[3265]!, [_1, _2, _3]) + } + public var WallpaperPreview_PatternTitle: String { return self._s[3266]! } + public var GroupInfo_PublicLinkAdd: String { return self._s[3267]! } + public var Passport_PassportInformation: String { return self._s[3270]! } + public var Theme_Unsupported: String { return self._s[3271]! } + public var WatchRemote_AlertTitle: String { return self._s[3272]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3273]! } + public var ConvertToSupergroup_HelpText: String { return self._s[3275]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3267]!, self._r[3267]!, [_0]) + return formatWithArgumentRanges(self._s[3276]!, self._r[3276]!, [_0]) } public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3268]!, self._r[3268]!, [_1]) + return formatWithArgumentRanges(self._s[3277]!, self._r[3277]!, [_1]) } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3269]! } - public var Wallet_Navigation_Done: String { return self._s[3271]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3272]! } - public var AccessDenied_CameraDisabled: String { return self._s[3273]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3278]! } + public var Wallet_Navigation_Done: String { return self._s[3280]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3281]! } + public var AccessDenied_CameraDisabled: String { return self._s[3282]! } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3274]!, self._r[3274]!, [_0]) + return formatWithArgumentRanges(self._s[3283]!, self._r[3283]!, [_0]) } - public var ClearCache_Forever: String { return self._s[3275]! } - public var AuthSessions_AddDeviceIntro_Title: String { return self._s[3276]! } - public var PhotoEditor_ContrastTool: String { return self._s[3279]! } + public var ClearCache_Forever: String { return self._s[3284]! } + public var AuthSessions_AddDeviceIntro_Title: String { return self._s[3285]! } + public var CreatePoll_Quiz: String { return self._s[3286]! } + public var PhotoEditor_ContrastTool: String { return self._s[3289]! } public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3280]!, self._r[3280]!, [_1]) + return formatWithArgumentRanges(self._s[3290]!, self._r[3290]!, [_1]) } - public var DialogList_Draft: String { return self._s[3281]! } - public var Wallet_Configuration_BlockchainIdInfo: String { return self._s[3282]! } - public var Privacy_TopPeersDelete: String { return self._s[3284]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[3285]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3286]! } - public var WebSearch_RecentSectionClear: String { return self._s[3287]! } - public var EditTheme_ErrorInvalidCharacters: String { return self._s[3288]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[3290]! } - public var Common_Done: String { return self._s[3292]! } - public var Shortcut_SwitchAccount: String { return self._s[3293]! } - public var AuthSessions_EmptyText: String { return self._s[3294]! } - public var Wallet_Configuration_BlockchainNameChangedTitle: String { return self._s[3295]! } - public var Conversation_ShareBotContactConfirmation: String { return self._s[3296]! } - public var Tour_Title5: String { return self._s[3297]! } - public var Wallet_Settings_Title: String { return self._s[3298]! } + public var DialogList_Draft: String { return self._s[3291]! } + public var Wallet_Configuration_BlockchainIdInfo: String { return self._s[3292]! } + public var Privacy_TopPeersDelete: String { return self._s[3294]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[3295]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3296]! } + public var WebSearch_RecentSectionClear: String { return self._s[3297]! } + public var EditTheme_ErrorInvalidCharacters: String { return self._s[3298]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[3300]! } + public var Common_Done: String { return self._s[3302]! } + public var Shortcut_SwitchAccount: String { return self._s[3303]! } + public var AuthSessions_EmptyText: String { return self._s[3304]! } + public var Wallet_Configuration_BlockchainNameChangedTitle: String { return self._s[3305]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[3306]! } + public var Tour_Title5: String { return self._s[3307]! } + public var Wallet_Settings_Title: String { return self._s[3308]! } public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3299]!, self._r[3299]!, [_0]) + return formatWithArgumentRanges(self._s[3309]!, self._r[3309]!, [_0]) } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3300]! } - public var Conversation_LinkDialogSave: String { return self._s[3301]! } - public var GroupInfo_ActionRestrict: String { return self._s[3302]! } - public var Checkout_Title: String { return self._s[3303]! } - public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3305]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[3307]! } - public var Notification_RenamedGroup: String { return self._s[3308]! } - public var PeopleNearby_Groups: String { return self._s[3309]! } - public var Checkout_PayWithFaceId: String { return self._s[3310]! } - public var Channel_BanList_BlockedTitle: String { return self._s[3311]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3313]! } - public var Checkout_WebConfirmation_Title: String { return self._s[3314]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[3315]! } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3310]! } + public var Conversation_LinkDialogSave: String { return self._s[3311]! } + public var GroupInfo_ActionRestrict: String { return self._s[3312]! } + public var Checkout_Title: String { return self._s[3313]! } + public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3315]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[3317]! } + public var Notification_RenamedGroup: String { return self._s[3318]! } + public var PeopleNearby_Groups: String { return self._s[3319]! } + public var Checkout_PayWithFaceId: String { return self._s[3320]! } + public var Channel_BanList_BlockedTitle: String { return self._s[3321]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3323]! } + public var Checkout_WebConfirmation_Title: String { return self._s[3324]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[3325]! } public func Activity_RemindAboutGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3316]!, self._r[3316]!, [_0]) + return formatWithArgumentRanges(self._s[3326]!, self._r[3326]!, [_0]) } - public var Profile_AddToExisting: String { return self._s[3318]! } + public var Profile_AddToExisting: String { return self._s[3328]! } public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3319]!, self._r[3319]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3329]!, self._r[3329]!, [_0, _1]) } - public var Cache_Files: String { return self._s[3321]! } - public var Permissions_PrivacyPolicy: String { return self._s[3322]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[3323]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3324]! } - public var AutoDownloadSettings_TypeContacts: String { return self._s[3326]! } - public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3328]! } - public var Calls_NoCallsPlaceholder: String { return self._s[3329]! } + public var Cache_Files: String { return self._s[3331]! } + public var Permissions_PrivacyPolicy: String { return self._s[3332]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[3333]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3334]! } + public var AutoDownloadSettings_TypeContacts: String { return self._s[3336]! } + public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3338]! } + public var Calls_NoCallsPlaceholder: String { return self._s[3339]! } public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3330]!, self._r[3330]!, [_0]) + return formatWithArgumentRanges(self._s[3340]!, self._r[3340]!, [_0]) } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3331]! } - public var VoiceOver_AttachMedia: String { return self._s[3334]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3335]! } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3341]! } + public var VoiceOver_AttachMedia: String { return self._s[3344]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3345]! } public func PUSH_CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3336]!, self._r[3336]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3346]!, self._r[3346]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3337]! } - public var Conversation_SetReminder_Title: String { return self._s[3338]! } - public var Passport_FieldAddressHelp: String { return self._s[3339]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3340]! } - public var PUSH_REMINDER_TITLE: String { return self._s[3341]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3347]! } + public var Conversation_SetReminder_Title: String { return self._s[3348]! } + public var Passport_FieldAddressHelp: String { return self._s[3349]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3350]! } + public var PUSH_REMINDER_TITLE: String { return self._s[3351]! } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3342]!, self._r[3342]!, [_0]) + return formatWithArgumentRanges(self._s[3352]!, self._r[3352]!, [_0]) } - public var Channel_AdminLog_EmptyTitle: String { return self._s[3343]! } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[3344]! } - public var Login_UnknownError: String { return self._s[3345]! } - public var Group_UpgradeNoticeText2: String { return self._s[3348]! } - public var Watch_Compose_AddContact: String { return self._s[3349]! } - public var ClearCache_StorageServiceFiles: String { return self._s[3350]! } - public var Web_Error: String { return self._s[3351]! } - public var Gif_Search: String { return self._s[3352]! } - public var Profile_MessageLifetime1h: String { return self._s[3353]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3354]! } - public var Channel_Username_CheckingUsername: String { return self._s[3355]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[3356]! } - public var AutoDownloadSettings_TypeChannels: String { return self._s[3357]! } - public var Channel_AboutItem: String { return self._s[3358]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3360]! } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[3361]! } - public var GroupInfo_SharedMedia: String { return self._s[3362]! } + public var Channel_AdminLog_EmptyTitle: String { return self._s[3353]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[3354]! } + public var Login_UnknownError: String { return self._s[3355]! } + public var Group_UpgradeNoticeText2: String { return self._s[3358]! } + public var Watch_Compose_AddContact: String { return self._s[3359]! } + public var ClearCache_StorageServiceFiles: String { return self._s[3360]! } + public var Web_Error: String { return self._s[3361]! } + public var Gif_Search: String { return self._s[3362]! } + public var Profile_MessageLifetime1h: String { return self._s[3363]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3364]! } + public var Channel_Username_CheckingUsername: String { return self._s[3365]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[3366]! } + public var AutoDownloadSettings_TypeChannels: String { return self._s[3367]! } + public var Channel_AboutItem: String { return self._s[3368]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3370]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[3371]! } + public var GroupInfo_SharedMedia: String { return self._s[3372]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3363]!, self._r[3363]!, [_1]) + return formatWithArgumentRanges(self._s[3373]!, self._r[3373]!, [_1]) } - public var Call_PhoneCallInProgressMessage: String { return self._s[3364]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[3374]! } public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3365]!, self._r[3365]!, [_1]) + return formatWithArgumentRanges(self._s[3375]!, self._r[3375]!, [_1]) } - public var ChatList_UndoArchiveRevealedText: String { return self._s[3366]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3367]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[3368]! } - public var CreatePoll_AddOption: String { return self._s[3369]! } - public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3370]! } - public var Group_UpgradeNoticeHeader: String { return self._s[3371]! } - public var Channel_Management_AddModerator: String { return self._s[3372]! } - public var AutoDownloadSettings_MaxFileSize: String { return self._s[3373]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[3374]! } - public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[3375]! } - public var Theme_Colors_Background: String { return self._s[3376]! } - public var NotificationsSound_Hello: String { return self._s[3378]! } - public var SocksProxySetup_SavedProxies: String { return self._s[3379]! } - public var Channel_Stickers_Placeholder: String { return self._s[3381]! } + public var ChatList_UndoArchiveRevealedText: String { return self._s[3376]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3377]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[3378]! } + public var CreatePoll_AddOption: String { return self._s[3379]! } + public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3380]! } + public var Group_UpgradeNoticeHeader: String { return self._s[3381]! } + public var Channel_Management_AddModerator: String { return self._s[3382]! } + public var AutoDownloadSettings_MaxFileSize: String { return self._s[3383]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[3384]! } + public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[3385]! } + public var Theme_Colors_Background: String { return self._s[3386]! } + public var NotificationsSound_Hello: String { return self._s[3388]! } + public var SocksProxySetup_SavedProxies: String { return self._s[3389]! } + public var Channel_Stickers_Placeholder: String { return self._s[3391]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3382]!, self._r[3382]!, [_0]) + return formatWithArgumentRanges(self._s[3392]!, self._r[3392]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3383]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[3384]! } - public var ContactInfo_BirthdayLabel: String { return self._s[3385]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3386]! } - public var AutoDownloadSettings_Channels: String { return self._s[3387]! } - public var Passport_Language_mn: String { return self._s[3388]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[3391]! } - public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3392]! } - public var Passport_Language_ja: String { return self._s[3394]! } - public var Settings_About_Title: String { return self._s[3395]! } - public var Settings_NotificationsAndSounds: String { return self._s[3396]! } - public var ChannelInfo_DeleteGroup: String { return self._s[3397]! } - public var Settings_BlockedUsers: String { return self._s[3398]! } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3393]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[3394]! } + public var ContactInfo_BirthdayLabel: String { return self._s[3395]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3396]! } + public var AutoDownloadSettings_Channels: String { return self._s[3397]! } + public var Passport_Language_mn: String { return self._s[3398]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[3401]! } + public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3402]! } + public var Passport_Language_ja: String { return self._s[3404]! } + public var Settings_About_Title: String { return self._s[3405]! } + public var Settings_NotificationsAndSounds: String { return self._s[3406]! } + public var ChannelInfo_DeleteGroup: String { return self._s[3407]! } + public var Settings_BlockedUsers: String { return self._s[3408]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3399]!, self._r[3399]!, [_0]) + return formatWithArgumentRanges(self._s[3409]!, self._r[3409]!, [_0]) } - public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3400]! } - public var Wallet_Weekday_Today: String { return self._s[3401]! } - public var AutoDownloadSettings_PreloadVideo: String { return self._s[3402]! } - public var Widget_ApplicationLocked: String { return self._s[3403]! } - public var Passport_Address_AddResidentialAddress: String { return self._s[3404]! } - public var Channel_Username_Title: String { return self._s[3405]! } + public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3410]! } + public var Wallet_Weekday_Today: String { return self._s[3411]! } + public var AutoDownloadSettings_PreloadVideo: String { return self._s[3412]! } + public var Widget_ApplicationLocked: String { return self._s[3413]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[3414]! } + public var Channel_Username_Title: String { return self._s[3415]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3406]!, self._r[3406]!, [_0]) + return formatWithArgumentRanges(self._s[3416]!, self._r[3416]!, [_0]) } - public var AttachmentMenu_File: String { return self._s[3408]! } - public var AppleWatch_Title: String { return self._s[3409]! } - public var Activity_RecordingVideoMessage: String { return self._s[3410]! } + public var AttachmentMenu_File: String { return self._s[3418]! } + public var AppleWatch_Title: String { return self._s[3419]! } + public var Activity_RecordingVideoMessage: String { return self._s[3420]! } public func Channel_DiscussionGroup_PublicChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3411]!, self._r[3411]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3421]!, self._r[3421]!, [_1, _2]) } - public var Theme_Colors_Messages: String { return self._s[3412]! } - public var Weekday_Saturday: String { return self._s[3413]! } - public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3414]! } - public var Profile_CreateEncryptedChatError: String { return self._s[3415]! } - public var Common_Next: String { return self._s[3417]! } - public var Channel_Stickers_YourStickers: String { return self._s[3419]! } - public var Message_Theme: String { return self._s[3420]! } - public var Call_AudioRouteHeadphones: String { return self._s[3421]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3423]! } - public var Watch_Contacts_NoResults: String { return self._s[3425]! } - public var PhotoEditor_TintTool: String { return self._s[3428]! } - public var LoginPassword_ResetAccount: String { return self._s[3430]! } - public var Settings_SavedMessages: String { return self._s[3431]! } - public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3432]! } - public var Bot_GenericSupportStatus: String { return self._s[3433]! } - public var StickerPack_Add: String { return self._s[3434]! } - public var Checkout_TotalAmount: String { return self._s[3435]! } - public var Your_cards_number_is_invalid: String { return self._s[3436]! } - public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3437]! } - public var VoiceOver_Chat_VideoMessage: String { return self._s[3438]! } + public var Theme_Colors_Messages: String { return self._s[3422]! } + public var Weekday_Saturday: String { return self._s[3423]! } + public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3424]! } + public var Profile_CreateEncryptedChatError: String { return self._s[3425]! } + public var Common_Next: String { return self._s[3427]! } + public var Channel_Stickers_YourStickers: String { return self._s[3429]! } + public var Message_Theme: String { return self._s[3430]! } + public var Call_AudioRouteHeadphones: String { return self._s[3431]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3433]! } + public var Watch_Contacts_NoResults: String { return self._s[3435]! } + public var PhotoEditor_TintTool: String { return self._s[3438]! } + public var LoginPassword_ResetAccount: String { return self._s[3440]! } + public var Settings_SavedMessages: String { return self._s[3441]! } + public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3442]! } + public var Bot_GenericSupportStatus: String { return self._s[3443]! } + public var StickerPack_Add: String { return self._s[3444]! } + public var Checkout_TotalAmount: String { return self._s[3445]! } + public var Your_cards_number_is_invalid: String { return self._s[3446]! } + public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3447]! } + public var VoiceOver_Chat_VideoMessage: String { return self._s[3448]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3439]!, self._r[3439]!, [_0]) + return formatWithArgumentRanges(self._s[3449]!, self._r[3449]!, [_0]) } public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3440]!, self._r[3440]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3450]!, self._r[3450]!, [_1, _2]) } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3441]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3451]! } public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3443]!, self._r[3443]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3453]!, self._r[3453]!, [_1, _2]) } public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3444]!, self._r[3444]!, [_0]) + return formatWithArgumentRanges(self._s[3454]!, self._r[3454]!, [_0]) } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[3445]! } - public var StickerPack_Share: String { return self._s[3446]! } - public var Passport_DeleteAddress: String { return self._s[3447]! } - public var Settings_Passport: String { return self._s[3448]! } - public var SharedMedia_EmptyFilesText: String { return self._s[3449]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[3450]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3451]! } - public var Contacts_PermissionsText: String { return self._s[3452]! } - public var Group_Setup_HistoryVisible: String { return self._s[3453]! } - public var Wallet_Month_ShortDecember: String { return self._s[3455]! } - public var Channel_EditAdmin_PermissionEnabledByDefault: String { return self._s[3456]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[3457]! } - public var SocksProxySetup_Title: String { return self._s[3458]! } - public var Notification_Mute1h: String { return self._s[3459]! } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[3455]! } + public var StickerPack_Share: String { return self._s[3456]! } + public var Passport_DeleteAddress: String { return self._s[3457]! } + public var Settings_Passport: String { return self._s[3458]! } + public var SharedMedia_EmptyFilesText: String { return self._s[3459]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[3460]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3461]! } + public var Contacts_PermissionsText: String { return self._s[3462]! } + public var Group_Setup_HistoryVisible: String { return self._s[3463]! } + public var Wallet_Month_ShortDecember: String { return self._s[3465]! } + public var Channel_EditAdmin_PermissionEnabledByDefault: String { return self._s[3466]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[3467]! } + public var SocksProxySetup_Title: String { return self._s[3468]! } + public var Notification_Mute1h: String { return self._s[3469]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3460]!, self._r[3460]!, [_0]) + return formatWithArgumentRanges(self._s[3470]!, self._r[3470]!, [_0]) } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3461]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3471]! } public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3462]!, self._r[3462]!, [_1]) + return formatWithArgumentRanges(self._s[3472]!, self._r[3472]!, [_1]) } - public var FastTwoStepSetup_PasswordSection: String { return self._s[3463]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3466]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3468]! } - public var DialogList_NoMessagesText: String { return self._s[3469]! } - public var Privacy_ContactsResetConfirmation: String { return self._s[3470]! } - public var Privacy_Calls_P2PHelp: String { return self._s[3471]! } - public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3473]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[3474]! } - public var Common_TakePhotoOrVideo: String { return self._s[3475]! } - public var Wallet_Words_Text: String { return self._s[3476]! } - public var Call_StatusBusy: String { return self._s[3477]! } - public var Conversation_PinnedMessage: String { return self._s[3478]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3479]! } - public var Wallet_Configuration_BlockchainNameChangedProceed: String { return self._s[3480]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3481]! } - public var Undo_ChatCleared: String { return self._s[3482]! } - public var AppleWatch_ReplyPresets: String { return self._s[3483]! } - public var Passport_DiscardMessageDescription: String { return self._s[3485]! } - public var Login_NetworkError: String { return self._s[3486]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[3473]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3476]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3478]! } + public var DialogList_NoMessagesText: String { return self._s[3479]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[3480]! } + public var Privacy_Calls_P2PHelp: String { return self._s[3481]! } + public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3483]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[3484]! } + public var Common_TakePhotoOrVideo: String { return self._s[3485]! } + public var Wallet_Words_Text: String { return self._s[3486]! } + public var Call_StatusBusy: String { return self._s[3487]! } + public var Conversation_PinnedMessage: String { return self._s[3488]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3489]! } + public var Wallet_Configuration_BlockchainNameChangedProceed: String { return self._s[3490]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3491]! } + public var Undo_ChatCleared: String { return self._s[3492]! } + public var AppleWatch_ReplyPresets: String { return self._s[3493]! } + public var Passport_DiscardMessageDescription: String { return self._s[3495]! } + public var Login_NetworkError: String { return self._s[3496]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3487]!, self._r[3487]!, [_0]) + return formatWithArgumentRanges(self._s[3497]!, self._r[3497]!, [_0]) } public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3488]!, self._r[3488]!, [_0]) + return formatWithArgumentRanges(self._s[3498]!, self._r[3498]!, [_0]) } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3489]! } - public var Wallet_WordCheck_ViewWords: String { return self._s[3491]! } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3492]! } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3499]! } + public var Wallet_WordCheck_ViewWords: String { return self._s[3501]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3502]! } public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3494]!, self._r[3494]!, [_0]) + return formatWithArgumentRanges(self._s[3504]!, self._r[3504]!, [_0]) } - public var Call_ConnectionErrorMessage: String { return self._s[3495]! } - public var VoiceOver_Chat_Music: String { return self._s[3496]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3497]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[3499]! } - public var ConversationMedia_Title: String { return self._s[3500]! } - public var EncryptionKey_Title: String { return self._s[3502]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3503]! } - public var Notification_Exceptions_AddException: String { return self._s[3504]! } - public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3505]! } - public var Profile_MessageLifetime1m: String { return self._s[3506]! } + public var Call_ConnectionErrorMessage: String { return self._s[3505]! } + public var VoiceOver_Chat_Music: String { return self._s[3506]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3507]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[3509]! } + public var ConversationMedia_Title: String { return self._s[3510]! } + public var EncryptionKey_Title: String { return self._s[3512]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3513]! } + public var Notification_Exceptions_AddException: String { return self._s[3514]! } + public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3515]! } + public var Profile_MessageLifetime1m: String { return self._s[3516]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3507]!, self._r[3507]!, [_1]) + return formatWithArgumentRanges(self._s[3517]!, self._r[3517]!, [_1]) } - public var Month_GenMay: String { return self._s[3508]! } + public var Month_GenMay: String { return self._s[3518]! } public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3509]!, self._r[3509]!, [_0]) + return formatWithArgumentRanges(self._s[3519]!, self._r[3519]!, [_0]) } - public var PeopleNearby_Users: String { return self._s[3510]! } - public var Wallet_Send_AddressInfo: String { return self._s[3511]! } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3512]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[3513]! } + public var PeopleNearby_Users: String { return self._s[3520]! } + public var Wallet_Send_AddressInfo: String { return self._s[3521]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3522]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[3523]! } public func Wallet_Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3515]!, self._r[3515]!, [_0]) + return formatWithArgumentRanges(self._s[3525]!, self._r[3525]!, [_0]) } - public var Conversation_EmptyPlaceholder: String { return self._s[3516]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[3517]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[3518]! } - public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3519]! } - public var Camera_TapAndHoldForVideo: String { return self._s[3520]! } - public var Channel_JoinChannel: String { return self._s[3522]! } - public var Appearance_Animations: String { return self._s[3525]! } + public var Conversation_EmptyPlaceholder: String { return self._s[3526]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[3527]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[3528]! } + public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3529]! } + public var Camera_TapAndHoldForVideo: String { return self._s[3530]! } + public var Channel_JoinChannel: String { return self._s[3532]! } + public var Appearance_Animations: String { return self._s[3535]! } public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3526]!, self._r[3526]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3536]!, self._r[3536]!, [_1, _2]) } - public var Stickers_GroupStickers: String { return self._s[3528]! } - public var Appearance_ShareTheme: String { return self._s[3529]! } - public var TwoFactorSetup_Hint_Placeholder: String { return self._s[3530]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[3532]! } - public var StickerPackActionInfo_RemovedTitle: String { return self._s[3533]! } - public var Passport_Address_Street: String { return self._s[3534]! } - public var Conversation_AddContact: String { return self._s[3535]! } - public var Login_PhonePlaceholder: String { return self._s[3536]! } - public var Channel_Members_InviteLink: String { return self._s[3538]! } - public var Bot_Stop: String { return self._s[3539]! } - public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3541]! } - public var Notification_PassportValueAddress: String { return self._s[3542]! } - public var Month_ShortJuly: String { return self._s[3543]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3544]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[3545]! } - public var Passport_Identity_ReverseSide: String { return self._s[3546]! } - public var Watch_Stickers_Recents: String { return self._s[3549]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3551]! } - public var Map_SendThisLocation: String { return self._s[3552]! } + public var Stickers_GroupStickers: String { return self._s[3538]! } + public var Appearance_ShareTheme: String { return self._s[3539]! } + public var TwoFactorSetup_Hint_Placeholder: String { return self._s[3540]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[3542]! } + public var StickerPackActionInfo_RemovedTitle: String { return self._s[3543]! } + public var Passport_Address_Street: String { return self._s[3544]! } + public var Conversation_AddContact: String { return self._s[3545]! } + public var Login_PhonePlaceholder: String { return self._s[3546]! } + public var Channel_Members_InviteLink: String { return self._s[3548]! } + public var Bot_Stop: String { return self._s[3549]! } + public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3551]! } + public var Notification_PassportValueAddress: String { return self._s[3552]! } + public var Month_ShortJuly: String { return self._s[3553]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3554]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[3555]! } + public var Passport_Identity_ReverseSide: String { return self._s[3556]! } + public var Watch_Stickers_Recents: String { return self._s[3559]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3561]! } + public var Map_SendThisLocation: String { return self._s[3562]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3553]!, self._r[3553]!, [_0]) + return formatWithArgumentRanges(self._s[3563]!, self._r[3563]!, [_0]) } public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3554]!, self._r[3554]!, [_0]) + return formatWithArgumentRanges(self._s[3564]!, self._r[3564]!, [_0]) } - public var ConvertToSupergroup_Note: String { return self._s[3555]! } - public var Wallet_Intro_NotNow: String { return self._s[3556]! } + public var ConvertToSupergroup_Note: String { return self._s[3565]! } + public var Wallet_Intro_NotNow: String { return self._s[3566]! } public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3557]!, self._r[3557]!, [_0]) + return formatWithArgumentRanges(self._s[3567]!, self._r[3567]!, [_0]) } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3558]! } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3568]! } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3559]!, self._r[3559]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3569]!, self._r[3569]!, [_0, _1]) } - public var Login_CallRequestState3: String { return self._s[3561]! } - public var Wallpaper_SearchShort: String { return self._s[3562]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3564]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3565]! } - public var Channel_BotDoesntSupportGroups: String { return self._s[3566]! } + public var Login_CallRequestState3: String { return self._s[3571]! } + public var Wallpaper_SearchShort: String { return self._s[3572]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3574]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3575]! } + public var Channel_BotDoesntSupportGroups: String { return self._s[3576]! } public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3567]!, self._r[3567]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3577]!, self._r[3577]!, [_1, _2]) } - public var Channel_AdminLogFilter_Title: String { return self._s[3568]! } - public var Appearance_ThemePreview_Chat_4_Text: String { return self._s[3570]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[3573]! } + public var Channel_AdminLogFilter_Title: String { return self._s[3578]! } + public var Appearance_ThemePreview_Chat_4_Text: String { return self._s[3580]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[3583]! } public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3574]!, self._r[3574]!, [_0]) + return formatWithArgumentRanges(self._s[3584]!, self._r[3584]!, [_0]) } - public var Passport_CorrectErrors: String { return self._s[3575]! } - public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3576]! } + public var Passport_CorrectErrors: String { return self._s[3585]! } + public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3586]! } public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3577]!, self._r[3577]!, [_0]) + return formatWithArgumentRanges(self._s[3587]!, self._r[3587]!, [_0]) } - public var Map_SendMyCurrentLocation: String { return self._s[3578]! } - public var Channel_DiscussionGroup: String { return self._s[3579]! } - public var TwoFactorSetup_Email_SkipConfirmationSkip: String { return self._s[3580]! } + public var Map_SendMyCurrentLocation: String { return self._s[3588]! } + public var Channel_DiscussionGroup: String { return self._s[3589]! } + public var TwoFactorSetup_Email_SkipConfirmationSkip: String { return self._s[3590]! } public func PUSH_PINNED_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3581]!, self._r[3581]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3591]!, self._r[3591]!, [_1, _2]) } - public var SharedMedia_SearchNoResults: String { return self._s[3582]! } - public var Permissions_NotificationsText_v0: String { return self._s[3583]! } - public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3584]! } - public var Appearance_AppIcon: String { return self._s[3585]! } - public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3586]! } - public var LoginPassword_FloodError: String { return self._s[3587]! } - public var Wallet_Send_OwnAddressAlertProceed: String { return self._s[3589]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[3590]! } + public var SharedMedia_SearchNoResults: String { return self._s[3592]! } + public var Permissions_NotificationsText_v0: String { return self._s[3593]! } + public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3594]! } + public var Appearance_AppIcon: String { return self._s[3595]! } + public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3596]! } + public var LoginPassword_FloodError: String { return self._s[3597]! } + public var Wallet_Send_OwnAddressAlertProceed: String { return self._s[3599]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[3600]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3591]!, self._r[3591]!, [_0]) + return formatWithArgumentRanges(self._s[3601]!, self._r[3601]!, [_0]) } - public var Passport_Language_bn: String { return self._s[3592]! } + public var Passport_Language_bn: String { return self._s[3602]! } public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3593]!, self._r[3593]!, [_0]) + return formatWithArgumentRanges(self._s[3603]!, self._r[3603]!, [_0]) } - public var ChatList_Context_Pin: String { return self._s[3594]! } + public var ChatList_Context_Pin: String { return self._s[3604]! } public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3595]!, self._r[3595]!, [_0]) + return formatWithArgumentRanges(self._s[3605]!, self._r[3605]!, [_0]) } public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3596]!, self._r[3596]!, [_0]) + return formatWithArgumentRanges(self._s[3606]!, self._r[3606]!, [_0]) } - public var Wallet_Navigation_Close: String { return self._s[3597]! } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3601]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3603]! } - public var Wallet_Month_GenDecember: String { return self._s[3604]! } - public var Contacts_PermissionsAllow: String { return self._s[3605]! } - public var ReportPeer_ReasonCopyright: String { return self._s[3606]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3607]! } - public var WallpaperPreview_Pattern: String { return self._s[3608]! } - public var Paint_Duplicate: String { return self._s[3609]! } - public var Passport_Address_Country: String { return self._s[3610]! } - public var Notification_RenamedChannel: String { return self._s[3612]! } - public var ChatList_Context_Unmute: String { return self._s[3613]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3614]! } - public var Group_MessagePhotoUpdated: String { return self._s[3615]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[3616]! } - public var Conversation_ContextMenuBan: String { return self._s[3617]! } - public var TwoStepAuth_EmailSent: String { return self._s[3618]! } - public var MessagePoll_NoVotes: String { return self._s[3619]! } - public var Wallet_Send_ErrorNotEnoughFundsTitle: String { return self._s[3620]! } - public var Passport_Language_is: String { return self._s[3621]! } - public var PeopleNearby_UsersEmpty: String { return self._s[3623]! } - public var Tour_Text5: String { return self._s[3624]! } + public var Wallet_Navigation_Close: String { return self._s[3607]! } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3611]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3613]! } + public var Wallet_Month_GenDecember: String { return self._s[3614]! } + public var Contacts_PermissionsAllow: String { return self._s[3615]! } + public var ReportPeer_ReasonCopyright: String { return self._s[3616]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3617]! } + public var WallpaperPreview_Pattern: String { return self._s[3618]! } + public var Paint_Duplicate: String { return self._s[3619]! } + public var Passport_Address_Country: String { return self._s[3620]! } + public var Notification_RenamedChannel: String { return self._s[3622]! } + public var ChatList_Context_Unmute: String { return self._s[3623]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3624]! } + public var Group_MessagePhotoUpdated: String { return self._s[3625]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[3626]! } + public var Conversation_ContextMenuBan: String { return self._s[3627]! } + public var TwoStepAuth_EmailSent: String { return self._s[3628]! } + public var MessagePoll_NoVotes: String { return self._s[3629]! } + public var Wallet_Send_ErrorNotEnoughFundsTitle: String { return self._s[3630]! } + public var Passport_Language_is: String { return self._s[3631]! } + public var PeopleNearby_UsersEmpty: String { return self._s[3633]! } + public var Tour_Text5: String { return self._s[3634]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3626]!, self._r[3626]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3636]!, self._r[3636]!, [_1, _2]) } - public var Undo_SecretChatDeleted: String { return self._s[3627]! } - public var SocksProxySetup_ShareQRCode: String { return self._s[3628]! } + public var Undo_SecretChatDeleted: String { return self._s[3637]! } + public var SocksProxySetup_ShareQRCode: String { return self._s[3638]! } public func VoiceOver_Chat_Size(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3629]!, self._r[3629]!, [_0]) + return formatWithArgumentRanges(self._s[3639]!, self._r[3639]!, [_0]) } - public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3630]! } - public var Paint_Edit: String { return self._s[3632]! } - public var ScheduledMessages_ReminderNotification: String { return self._s[3634]! } - public var Undo_DeletedGroup: String { return self._s[3636]! } - public var LoginPassword_ForgotPassword: String { return self._s[3637]! } - public var Wallet_WordImport_IncorrectTitle: String { return self._s[3638]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[3639]! } + public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3640]! } + public var Paint_Edit: String { return self._s[3642]! } + public var ScheduledMessages_ReminderNotification: String { return self._s[3644]! } + public var Undo_DeletedGroup: String { return self._s[3646]! } + public var LoginPassword_ForgotPassword: String { return self._s[3647]! } + public var Wallet_WordImport_IncorrectTitle: String { return self._s[3648]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[3649]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3640]!, self._r[3640]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3650]!, self._r[3650]!, [_0, _1]) } - public var AppWallet_TransactionInfo_FeeInfoURL: String { return self._s[3641]! } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3642]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3643]! } - public var Passport_Language_uz: String { return self._s[3644]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[3645]! } - public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3646]! } - public var Map_StopLiveLocation: String { return self._s[3648]! } - public var VoiceOver_MessageContextSend: String { return self._s[3650]! } - public var PasscodeSettings_Help: String { return self._s[3651]! } - public var NotificationsSound_Input: String { return self._s[3652]! } - public var Share_Title: String { return self._s[3655]! } - public var LogoutOptions_Title: String { return self._s[3656]! } - public var Wallet_Send_AddressText: String { return self._s[3657]! } - public var Login_TermsOfServiceAgree: String { return self._s[3658]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[3659]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3660]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3661]! } - public var EnterPasscode_EnterTitle: String { return self._s[3662]! } + public var AppWallet_TransactionInfo_FeeInfoURL: String { return self._s[3651]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3652]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3653]! } + public var Passport_Language_uz: String { return self._s[3654]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[3655]! } + public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3656]! } + public var Map_StopLiveLocation: String { return self._s[3658]! } + public var VoiceOver_MessageContextSend: String { return self._s[3660]! } + public var PasscodeSettings_Help: String { return self._s[3661]! } + public var NotificationsSound_Input: String { return self._s[3662]! } + public var Share_Title: String { return self._s[3665]! } + public var LogoutOptions_Title: String { return self._s[3666]! } + public var Wallet_Send_AddressText: String { return self._s[3667]! } + public var Login_TermsOfServiceAgree: String { return self._s[3668]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[3669]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3670]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3671]! } + public var EnterPasscode_EnterTitle: String { return self._s[3672]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3663]!, self._r[3663]!, [_0]) + return formatWithArgumentRanges(self._s[3673]!, self._r[3673]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[3664]! } - public var Conversation_AddToContacts: String { return self._s[3665]! } + public var Settings_CopyPhoneNumber: String { return self._s[3674]! } + public var Conversation_AddToContacts: String { return self._s[3675]! } public func VoiceOver_Chat_ReplyFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3666]!, self._r[3666]!, [_0]) - } - public var NotificationsSound_Keys: String { return self._s[3667]! } - public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3668]!, self._r[3668]!, [_0]) - } - public var Notification_MessageLifetime1w: String { return self._s[3669]! } - public var Message_Video: String { return self._s[3670]! } - public var AutoDownloadSettings_CellularTitle: String { return self._s[3671]! } - public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3672]!, self._r[3672]!, [_1]) - } - public var Wallet_Receive_AmountInfo: String { return self._s[3675]! } - public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3676]!, self._r[3676]!, [_0]) } + public var NotificationsSound_Keys: String { return self._s[3677]! } + public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3678]!, self._r[3678]!, [_0]) + } + public var Notification_MessageLifetime1w: String { return self._s[3679]! } + public var Message_Video: String { return self._s[3680]! } + public var AutoDownloadSettings_CellularTitle: String { return self._s[3681]! } + public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3682]!, self._r[3682]!, [_1]) + } + public var Wallet_Receive_AmountInfo: String { return self._s[3685]! } + public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3686]!, self._r[3686]!, [_0]) + } public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3677]!, self._r[3677]!, [_0]) + return formatWithArgumentRanges(self._s[3687]!, self._r[3687]!, [_0]) } - public var Passport_Language_mk: String { return self._s[3678]! } + public var Passport_Language_mk: String { return self._s[3688]! } public func Wallet_Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3679]!, self._r[3679]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3689]!, self._r[3689]!, [_1, _2, _3]) } - public var CreatePoll_CancelConfirmation: String { return self._s[3680]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3682]! } - public var PrivacyPolicy_Decline: String { return self._s[3683]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[3684]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3685]! } - public var AuthSessions_AddDeviceIntro_Action: String { return self._s[3686]! } - public var Permissions_SiriAllow_v0: String { return self._s[3688]! } - public var Wallet_Month_ShortAugust: String { return self._s[3689]! } - public var Appearance_ThemeCarouselNight: String { return self._s[3690]! } + public var CreatePoll_CancelConfirmation: String { return self._s[3690]! } + public var MessagePoll_LabelAnonymousQuiz: String { return self._s[3691]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3693]! } + public var PrivacyPolicy_Decline: String { return self._s[3694]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[3695]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3696]! } + public var AuthSessions_AddDeviceIntro_Action: String { return self._s[3697]! } + public var Permissions_SiriAllow_v0: String { return self._s[3699]! } + public var Wallet_Month_ShortAugust: String { return self._s[3700]! } + public var Appearance_ThemeCarouselNight: String { return self._s[3701]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3691]!, self._r[3691]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3702]!, self._r[3702]!, [_1, "\(_2)"]) } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3692]!, self._r[3692]!, [_0]) + return formatWithArgumentRanges(self._s[3703]!, self._r[3703]!, [_0]) } - public var Paint_Regular: String { return self._s[3693]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[3694]! } - public var SocksProxySetup_ShareLink: String { return self._s[3695]! } - public var Wallet_Qr_Title: String { return self._s[3696]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[3697]! } - public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3699]! } - public var Wallet_Settings_Configuration: String { return self._s[3700]! } - public var GroupInfo_InviteByLink: String { return self._s[3701]! } - public var MessageTimer_Custom: String { return self._s[3702]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3703]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3705]! } - public var Conversation_SendMessage_SetReminder: String { return self._s[3706]! } - public var VoiceOver_Chat_Selected: String { return self._s[3707]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3708]! } - public var Channel_Username_InvalidTaken: String { return self._s[3709]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[3710]! } - public var Wallet_WordCheck_TryAgain: String { return self._s[3711]! } - public var Wallet_Info_TransactionPendingHeader: String { return self._s[3712]! } - public var Settings_ChatBackground: String { return self._s[3713]! } - public var Channel_Subscribers_Title: String { return self._s[3714]! } - public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3715]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3716]! } - public var Watch_ConnectionDescription: String { return self._s[3717]! } - public var OldChannels_NoticeText: String { return self._s[3720]! } - public var Wallet_Configuration_ApplyErrorTitle: String { return self._s[3721]! } - public var IntentsSettings_SuggestBy: String { return self._s[3723]! } - public var Theme_ThemeChangedText: String { return self._s[3724]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[3725]! } - public var Wallpaper_ResetWallpapers: String { return self._s[3726]! } - public var Wallet_Send_TransactionInProgress: String { return self._s[3727]! } - public var EditProfile_Title: String { return self._s[3728]! } - public var NotificationsSound_Bamboo: String { return self._s[3730]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3732]! } - public var Login_SmsRequestState2: String { return self._s[3733]! } - public var Passport_Language_ar: String { return self._s[3734]! } + public var Paint_Regular: String { return self._s[3704]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[3705]! } + public var SocksProxySetup_ShareLink: String { return self._s[3706]! } + public var Wallet_Qr_Title: String { return self._s[3707]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[3708]! } + public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3710]! } + public var Wallet_Settings_Configuration: String { return self._s[3711]! } + public var GroupInfo_InviteByLink: String { return self._s[3712]! } + public var MessageTimer_Custom: String { return self._s[3713]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3714]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3716]! } + public var Conversation_SendMessage_SetReminder: String { return self._s[3717]! } + public var VoiceOver_Chat_Selected: String { return self._s[3718]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3719]! } + public var Channel_Username_InvalidTaken: String { return self._s[3720]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[3721]! } + public var Wallet_WordCheck_TryAgain: String { return self._s[3722]! } + public var Wallet_Info_TransactionPendingHeader: String { return self._s[3723]! } + public var Settings_ChatBackground: String { return self._s[3724]! } + public var Channel_Subscribers_Title: String { return self._s[3725]! } + public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3726]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3727]! } + public var Watch_ConnectionDescription: String { return self._s[3728]! } + public var OldChannels_NoticeText: String { return self._s[3731]! } + public var Wallet_Configuration_ApplyErrorTitle: String { return self._s[3732]! } + public var IntentsSettings_SuggestBy: String { return self._s[3734]! } + public var Theme_ThemeChangedText: String { return self._s[3735]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[3736]! } + public var Wallpaper_ResetWallpapers: String { return self._s[3737]! } + public var Wallet_Send_TransactionInProgress: String { return self._s[3738]! } + public var EditProfile_Title: String { return self._s[3739]! } + public var NotificationsSound_Bamboo: String { return self._s[3741]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3743]! } + public var Login_SmsRequestState2: String { return self._s[3744]! } + public var Passport_Language_ar: String { return self._s[3745]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3735]!, self._r[3735]!, [_0]) + return formatWithArgumentRanges(self._s[3746]!, self._r[3746]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3736]! } - public var Wallet_Created_Text: String { return self._s[3737]! } - public var Conversation_MessageDialogEdit: String { return self._s[3739]! } - public var Wallet_Created_Proceed: String { return self._s[3740]! } - public var Wallet_Words_Done: String { return self._s[3741]! } - public var VoiceOver_Media_PlaybackPause: String { return self._s[3742]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3747]! } + public var Wallet_Created_Text: String { return self._s[3748]! } + public var Conversation_MessageDialogEdit: String { return self._s[3750]! } + public var Wallet_Created_Proceed: String { return self._s[3751]! } + public var Wallet_Words_Done: String { return self._s[3752]! } + public var VoiceOver_Media_PlaybackPause: String { return self._s[3753]! } public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3743]!, self._r[3743]!, [_1]) + return formatWithArgumentRanges(self._s[3754]!, self._r[3754]!, [_1]) } - public var Common_Close: String { return self._s[3744]! } - public var GroupInfo_PublicLink: String { return self._s[3745]! } - public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3746]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3747]! } + public var Common_Close: String { return self._s[3755]! } + public var GroupInfo_PublicLink: String { return self._s[3756]! } + public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3757]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3758]! } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3751]!, self._r[3751]!, [_0]) + return formatWithArgumentRanges(self._s[3762]!, self._r[3762]!, [_0]) } - public var UserInfo_About_Placeholder: String { return self._s[3752]! } + public var UserInfo_About_Placeholder: String { return self._s[3763]! } public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3753]!, self._r[3753]!, [_0]) + return formatWithArgumentRanges(self._s[3764]!, self._r[3764]!, [_0]) } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[3754]! } - public var Channel_Info_Banned: String { return self._s[3756]! } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[3765]! } + public var Channel_Info_Banned: String { return self._s[3767]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3757]!, self._r[3757]!, [_0]) + return formatWithArgumentRanges(self._s[3768]!, self._r[3768]!, [_0]) } - public var Appearance_Other: String { return self._s[3758]! } - public var Passport_Language_my: String { return self._s[3759]! } - public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3760]! } + public var Appearance_Other: String { return self._s[3769]! } + public var Passport_Language_my: String { return self._s[3770]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3771]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3761]!, self._r[3761]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3772]!, self._r[3772]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3762]! } - public var IntentsSettings_SuggestedAndSpotlightChatsInfo: String { return self._s[3763]! } - public var Preview_CopyAddress: String { return self._s[3764]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3773]! } + public var IntentsSettings_SuggestedAndSpotlightChatsInfo: String { return self._s[3774]! } + public var Preview_CopyAddress: String { return self._s[3775]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3765]!, self._r[3765]!, [_0]) + return formatWithArgumentRanges(self._s[3776]!, self._r[3776]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[3766]! } - public var UserInfo_BotSettings: String { return self._s[3767]! } - public var LiveLocation_MenuStopAll: String { return self._s[3769]! } - public var Passport_PasswordCreate: String { return self._s[3770]! } - public var StickerSettings_MaskContextInfo: String { return self._s[3771]! } - public var Message_PinnedLocationMessage: String { return self._s[3772]! } - public var Map_Satellite: String { return self._s[3773]! } - public var Watch_Message_Unsupported: String { return self._s[3774]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[3775]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3776]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[3777]! } + public var UserInfo_BotSettings: String { return self._s[3778]! } + public var LiveLocation_MenuStopAll: String { return self._s[3780]! } + public var Passport_PasswordCreate: String { return self._s[3781]! } + public var StickerSettings_MaskContextInfo: String { return self._s[3782]! } + public var Message_PinnedLocationMessage: String { return self._s[3783]! } + public var Map_Satellite: String { return self._s[3784]! } + public var Watch_Message_Unsupported: String { return self._s[3785]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[3786]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3787]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3777]!, self._r[3777]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3788]!, self._r[3788]!, [_0, _1]) } public func Conversation_OpenBotLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3778]!, self._r[3778]!, [_0]) + return formatWithArgumentRanges(self._s[3789]!, self._r[3789]!, [_0]) } - public var Wallet_WordImport_Continue: String { return self._s[3779]! } + public var Wallet_WordImport_Continue: String { return self._s[3790]! } public func TwoFactorSetup_EmailVerification_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3780]!, self._r[3780]!, [_0]) + return formatWithArgumentRanges(self._s[3791]!, self._r[3791]!, [_0]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[3781]! } - public var Privacy_Calls_P2PContacts: String { return self._s[3782]! } - public var NotificationsSound_None: String { return self._s[3783]! } - public var Wallet_TransactionInfo_StorageFeeHeader: String { return self._s[3784]! } - public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3786]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[3787]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[3792]! } + public var Privacy_Calls_P2PContacts: String { return self._s[3793]! } + public var NotificationsSound_None: String { return self._s[3794]! } + public var Wallet_TransactionInfo_StorageFeeHeader: String { return self._s[3795]! } + public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3797]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[3798]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3788]!, self._r[3788]!, [_1]) + return formatWithArgumentRanges(self._s[3799]!, self._r[3799]!, [_1]) } - public var Cache_Indexing: String { return self._s[3789]! } - public var DialogList_RecentTitlePeople: String { return self._s[3791]! } - public var DialogList_EncryptionRejected: String { return self._s[3792]! } - public var GroupInfo_Administrators: String { return self._s[3793]! } - public var Passport_ScanPassportHelp: String { return self._s[3794]! } - public var Application_Name: String { return self._s[3795]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3796]! } - public var Appearance_ThemeCarouselDay: String { return self._s[3798]! } - public var Passport_Identity_TranslationHelp: String { return self._s[3799]! } + public var Cache_Indexing: String { return self._s[3800]! } + public var DialogList_RecentTitlePeople: String { return self._s[3802]! } + public var DialogList_EncryptionRejected: String { return self._s[3803]! } + public var GroupInfo_Administrators: String { return self._s[3804]! } + public var Passport_ScanPassportHelp: String { return self._s[3805]! } + public var Application_Name: String { return self._s[3806]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3807]! } + public var Appearance_ThemeCarouselDay: String { return self._s[3809]! } + public var Passport_Identity_TranslationHelp: String { return self._s[3810]! } public func VoiceOver_Chat_VideoMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3800]!, self._r[3800]!, [_0]) + return formatWithArgumentRanges(self._s[3811]!, self._r[3811]!, [_0]) } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3801]!, self._r[3801]!, [_0]) + return formatWithArgumentRanges(self._s[3812]!, self._r[3812]!, [_0]) } public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3802]!, self._r[3802]!, [_0]) + return formatWithArgumentRanges(self._s[3813]!, self._r[3813]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3803]! } - public var Privacy_ChatsTitle: String { return self._s[3804]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[3805]! } - public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3806]! } - public var Watch_Suggestion_HoldOn: String { return self._s[3807]! } - public var Group_EditAdmin_TransferOwnership: String { return self._s[3808]! } - public var WebBrowser_Title: String { return self._s[3809]! } - public var Group_LinkedChannel: String { return self._s[3810]! } - public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3811]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[3812]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3813]! } - public var Appearance_TextSize_UseSystem: String { return self._s[3814]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[3815]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[3817]! } - public var Channel_Setup_TypePublic: String { return self._s[3819]! } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3814]! } + public var Privacy_ChatsTitle: String { return self._s[3815]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[3816]! } + public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3817]! } + public var Watch_Suggestion_HoldOn: String { return self._s[3818]! } + public var Group_EditAdmin_TransferOwnership: String { return self._s[3819]! } + public var WebBrowser_Title: String { return self._s[3820]! } + public var Group_LinkedChannel: String { return self._s[3821]! } + public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3822]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[3823]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3824]! } + public var Appearance_TextSize_UseSystem: String { return self._s[3825]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[3826]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[3828]! } + public var Channel_Setup_TypePublic: String { return self._s[3830]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3820]!, self._r[3820]!, [_0]) + return formatWithArgumentRanges(self._s[3831]!, self._r[3831]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[3822]! } - public var Map_OpenInMaps: String { return self._s[3824]! } + public var Channel_TypeSetup_Title: String { return self._s[3833]! } + public var MessagePoll_ViewResults: String { return self._s[3834]! } + public var Map_OpenInMaps: String { return self._s[3836]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3825]!, self._r[3825]!, [_1]) + return formatWithArgumentRanges(self._s[3837]!, self._r[3837]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[3827]! } + public var NotificationsSound_Tremolo: String { return self._s[3839]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3828]!, self._r[3828]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3840]!, self._r[3840]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[3829]! } - public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3830]! } - public var Passport_PasswordHelp: String { return self._s[3831]! } - public var Login_CodeExpiredError: String { return self._s[3832]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3833]! } - public var Conversation_TitleUnmute: String { return self._s[3834]! } - public var Passport_Identity_ScansHelp: String { return self._s[3835]! } - public var Passport_Language_lo: String { return self._s[3836]! } - public var Camera_FlashAuto: String { return self._s[3837]! } - public var Conversation_OpenBotLinkOpen: String { return self._s[3838]! } - public var Common_Cancel: String { return self._s[3839]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[3840]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3841]! } - public var Appearance_TintAllColors: String { return self._s[3842]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[3841]! } + public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3842]! } + public var Passport_PasswordHelp: String { return self._s[3843]! } + public var Login_CodeExpiredError: String { return self._s[3844]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3845]! } + public var Conversation_TitleUnmute: String { return self._s[3846]! } + public var Passport_Identity_ScansHelp: String { return self._s[3847]! } + public var Passport_Language_lo: String { return self._s[3848]! } + public var Camera_FlashAuto: String { return self._s[3849]! } + public var Conversation_OpenBotLinkOpen: String { return self._s[3850]! } + public var Common_Cancel: String { return self._s[3851]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[3852]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3853]! } + public var Appearance_TintAllColors: String { return self._s[3854]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3843]!, self._r[3843]!, [_1]) + return formatWithArgumentRanges(self._s[3855]!, self._r[3855]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[3844]! } - public var ChatSettings_Title: String { return self._s[3846]! } - public var Passport_PasswordReset: String { return self._s[3847]! } - public var SocksProxySetup_TypeNone: String { return self._s[3848]! } - public var EditTheme_Title: String { return self._s[3850]! } - public var PhoneNumberHelp_Help: String { return self._s[3851]! } - public var Checkout_EnterPassword: String { return self._s[3852]! } - public var Share_AuthTitle: String { return self._s[3854]! } - public var Activity_UploadingDocument: String { return self._s[3855]! } - public var State_Connecting: String { return self._s[3856]! } - public var Profile_MessageLifetime1w: String { return self._s[3857]! } - public var Conversation_ContextMenuReport: String { return self._s[3858]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3859]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[3860]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[3856]! } + public var ChatSettings_Title: String { return self._s[3858]! } + public var Passport_PasswordReset: String { return self._s[3859]! } + public var SocksProxySetup_TypeNone: String { return self._s[3860]! } + public var EditTheme_Title: String { return self._s[3863]! } + public var PhoneNumberHelp_Help: String { return self._s[3864]! } + public var Checkout_EnterPassword: String { return self._s[3865]! } + public var Share_AuthTitle: String { return self._s[3867]! } + public var Activity_UploadingDocument: String { return self._s[3868]! } + public var State_Connecting: String { return self._s[3869]! } + public var Profile_MessageLifetime1w: String { return self._s[3870]! } + public var Conversation_ContextMenuReport: String { return self._s[3871]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3872]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[3873]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3861]!, self._r[3861]!, [_0]) + return formatWithArgumentRanges(self._s[3874]!, self._r[3874]!, [_0]) } - public var AuthSessions_Terminate: String { return self._s[3862]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[3863]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3865]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3866]! } - public var PhotoEditor_Set: String { return self._s[3867]! } - public var EmptyGroupInfo_Title: String { return self._s[3868]! } - public var Login_PadPhoneHelp: String { return self._s[3869]! } - public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3871]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3873]! } - public var NotificationsSound_Complete: String { return self._s[3874]! } - public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3875]! } - public var Group_Info_AdminLog: String { return self._s[3876]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3877]! } + public var AuthSessions_Terminate: String { return self._s[3875]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[3876]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3878]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3879]! } + public var PhotoEditor_Set: String { return self._s[3880]! } + public var EmptyGroupInfo_Title: String { return self._s[3881]! } + public var Login_PadPhoneHelp: String { return self._s[3882]! } + public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3884]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3886]! } + public var NotificationsSound_Complete: String { return self._s[3887]! } + public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3888]! } + public var Group_Info_AdminLog: String { return self._s[3889]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3890]! } public func Wallet_Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3878]!, self._r[3878]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3891]!, self._r[3891]!, [_1, _2, _3]) } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3879]! } - public var Group_Location_CreateInThisPlace: String { return self._s[3881]! } - public var Conversation_Admin: String { return self._s[3882]! } - public var Conversation_GifTooltip: String { return self._s[3883]! } - public var Passport_NotLoggedInMessage: String { return self._s[3884]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3892]! } + public var Group_Location_CreateInThisPlace: String { return self._s[3894]! } + public var Conversation_Admin: String { return self._s[3895]! } + public var Conversation_GifTooltip: String { return self._s[3896]! } + public var Passport_NotLoggedInMessage: String { return self._s[3897]! } public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3886]!, self._r[3886]!, [_0]) + return formatWithArgumentRanges(self._s[3899]!, self._r[3899]!, [_0]) } - public var Profile_MessageLifetimeForever: String { return self._s[3887]! } - public var SharedMedia_EmptyTitle: String { return self._s[3889]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3891]! } - public var Username_Help: String { return self._s[3892]! } - public var DialogList_LanguageTooltip: String { return self._s[3894]! } - public var Map_LoadError: String { return self._s[3895]! } - public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3896]! } - public var Channel_AdminLog_AddMembers: String { return self._s[3897]! } - public var ArchivedChats_IntroTitle2: String { return self._s[3898]! } - public var Notification_Exceptions_NewException: String { return self._s[3899]! } - public var TwoStepAuth_EmailTitle: String { return self._s[3900]! } - public var WatchRemote_AlertText: String { return self._s[3901]! } + public var Profile_MessageLifetimeForever: String { return self._s[3900]! } + public var SharedMedia_EmptyTitle: String { return self._s[3902]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3904]! } + public var Username_Help: String { return self._s[3905]! } + public var DialogList_LanguageTooltip: String { return self._s[3907]! } + public var Map_LoadError: String { return self._s[3908]! } + public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3909]! } + public var Channel_AdminLog_AddMembers: String { return self._s[3910]! } + public var ArchivedChats_IntroTitle2: String { return self._s[3911]! } + public var Notification_Exceptions_NewException: String { return self._s[3912]! } + public var TwoStepAuth_EmailTitle: String { return self._s[3913]! } + public var WatchRemote_AlertText: String { return self._s[3914]! } public func Wallet_Send_ConfirmationText(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3902]!, self._r[3902]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3915]!, self._r[3915]!, [_1, _2, _3]) } - public var ChatSettings_ConnectionType_Title: String { return self._s[3906]! } - public var WebBrowser_DefaultBrowser: String { return self._s[3907]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[3919]! } + public var WebBrowser_DefaultBrowser: String { return self._s[3920]! } public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3908]!, self._r[3908]!, [_0]) + return formatWithArgumentRanges(self._s[3921]!, self._r[3921]!, [_0]) } - public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3909]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[3910]! } + public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3922]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[3923]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3911]!, self._r[3911]!, [_0]) - } - public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3912]!, self._r[3912]!, [_1, _2, _3]) - } - public var Group_AdminLog_EmptyText: String { return self._s[3913]! } - public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3914]! } - public var Conversation_PrivateChannelTooltip: String { return self._s[3916]! } - public var Wallet_Created_ExportErrorText: String { return self._s[3917]! } - public var ChatList_UndoArchiveText1: String { return self._s[3918]! } - public var AccessDenied_VideoMicrophone: String { return self._s[3919]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3920]! } - public var Cache_ClearNone: String { return self._s[3921]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[3922]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[3923]! } - public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3924]!, self._r[3924]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[3925]! } + public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3925]!, self._r[3925]!, [_1, _2, _3]) + } + public var Group_AdminLog_EmptyText: String { return self._s[3926]! } + public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3927]! } + public var Conversation_PrivateChannelTooltip: String { return self._s[3929]! } + public var Wallet_Created_ExportErrorText: String { return self._s[3930]! } + public var ChatList_UndoArchiveText1: String { return self._s[3931]! } + public var AccessDenied_VideoMicrophone: String { return self._s[3932]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3933]! } + public var Cache_ClearNone: String { return self._s[3934]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[3935]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[3936]! } + public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3937]!, self._r[3937]!, [_0]) + } + public var Passport_Identity_Country: String { return self._s[3938]! } public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3926]!, self._r[3926]!, [_0]) + return formatWithArgumentRanges(self._s[3939]!, self._r[3939]!, [_0]) } public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3927]!, self._r[3927]!, [_0]) + return formatWithArgumentRanges(self._s[3940]!, self._r[3940]!, [_0]) } - public var Exceptions_AddToExceptions: String { return self._s[3928]! } - public var AccessDenied_Settings: String { return self._s[3929]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3930]! } - public var Month_ShortMay: String { return self._s[3931]! } - public var Compose_NewGroup: String { return self._s[3933]! } - public var Group_Setup_TypePrivate: String { return self._s[3935]! } - public var Login_PadPhoneHelpTitle: String { return self._s[3937]! } - public var Appearance_ThemeDayClassic: String { return self._s[3938]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3939]! } - public var AutoDownloadSettings_OffForAll: String { return self._s[3940]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3941]! } - public var Conversation_typing: String { return self._s[3943]! } - public var Undo_ScheduledMessagesCleared: String { return self._s[3944]! } - public var Paint_Masks: String { return self._s[3945]! } - public var Contacts_DeselectAll: String { return self._s[3946]! } + public var Exceptions_AddToExceptions: String { return self._s[3941]! } + public var AccessDenied_Settings: String { return self._s[3942]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3943]! } + public var Month_ShortMay: String { return self._s[3944]! } + public var Compose_NewGroup: String { return self._s[3946]! } + public var Group_Setup_TypePrivate: String { return self._s[3948]! } + public var Login_PadPhoneHelpTitle: String { return self._s[3950]! } + public var Appearance_ThemeDayClassic: String { return self._s[3951]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3952]! } + public var AutoDownloadSettings_OffForAll: String { return self._s[3953]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3954]! } + public var Conversation_typing: String { return self._s[3956]! } + public var Undo_ScheduledMessagesCleared: String { return self._s[3957]! } + public var Paint_Masks: String { return self._s[3958]! } + public var Contacts_DeselectAll: String { return self._s[3959]! } public func Wallet_Updated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3947]!, self._r[3947]!, [_0]) + return formatWithArgumentRanges(self._s[3960]!, self._r[3960]!, [_0]) } - public var Username_InvalidTaken: String { return self._s[3948]! } - public var Call_StatusNoAnswer: String { return self._s[3949]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[3950]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3951]! } - public var Passport_Identity_Selfie: String { return self._s[3952]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[3953]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3954]! } - public var Conversation_ClearSecretHistory: String { return self._s[3955]! } - public var PeopleNearby_Description: String { return self._s[3957]! } - public var NetworkUsageSettings_Title: String { return self._s[3958]! } - public var Your_cards_security_code_is_invalid: String { return self._s[3960]! } + public var Username_InvalidTaken: String { return self._s[3961]! } + public var Call_StatusNoAnswer: String { return self._s[3962]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[3963]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3964]! } + public var Passport_Identity_Selfie: String { return self._s[3965]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[3966]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3967]! } + public var Conversation_ClearSecretHistory: String { return self._s[3968]! } + public var PeopleNearby_Description: String { return self._s[3970]! } + public var NetworkUsageSettings_Title: String { return self._s[3971]! } + public var Your_cards_security_code_is_invalid: String { return self._s[3973]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3962]!, self._r[3962]!, [_0]) + return formatWithArgumentRanges(self._s[3975]!, self._r[3975]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3963]!, self._r[3963]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3976]!, self._r[3976]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[3965]! } - public var VoiceOver_Navigation_Search: String { return self._s[3966]! } - public var Map_LiveLocationTitle: String { return self._s[3967]! } - public var Login_InfoAvatarAdd: String { return self._s[3968]! } - public var Passport_Identity_FilesView: String { return self._s[3969]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[3970]! } - public var Privacy_Calls_NeverAllow: String { return self._s[3971]! } - public var VoiceOver_Chat_File: String { return self._s[3972]! } - public var Wallet_Settings_DeleteWalletInfo: String { return self._s[3973]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[3978]! } + public var VoiceOver_Navigation_Search: String { return self._s[3979]! } + public var Map_LiveLocationTitle: String { return self._s[3980]! } + public var Login_InfoAvatarAdd: String { return self._s[3981]! } + public var Passport_Identity_FilesView: String { return self._s[3982]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[3983]! } + public var Privacy_Calls_NeverAllow: String { return self._s[3984]! } + public var VoiceOver_Chat_File: String { return self._s[3985]! } + public var Wallet_Settings_DeleteWalletInfo: String { return self._s[3986]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3974]!, self._r[3974]!, [_0]) + return formatWithArgumentRanges(self._s[3987]!, self._r[3987]!, [_0]) } - public var ContactInfo_PhoneNumberHidden: String { return self._s[3975]! } - public var TwoStepAuth_ConfirmationText: String { return self._s[3976]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3977]! } + public var ContactInfo_PhoneNumberHidden: String { return self._s[3988]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[3989]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3990]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3978]!, self._r[3978]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3991]!, self._r[3991]!, [_1, _2, _3]) } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3979]! } - public var Wallet_Intro_CreateErrorText: String { return self._s[3980]! } - public var Tour_Title2: String { return self._s[3981]! } - public var Wallet_Sent_ViewWallet: String { return self._s[3982]! } - public var Conversation_FileOpenIn: String { return self._s[3983]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3984]! } - public var Wallet_Send_ErrorInvalidAddress: String { return self._s[3985]! } - public var Wallpaper_Set: String { return self._s[3986]! } - public var Passport_Identity_Translations: String { return self._s[3988]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3992]! } + public var Wallet_Intro_CreateErrorText: String { return self._s[3993]! } + public var Tour_Title2: String { return self._s[3994]! } + public var Wallet_Sent_ViewWallet: String { return self._s[3995]! } + public var Conversation_FileOpenIn: String { return self._s[3996]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3997]! } + public var Wallet_Send_ErrorInvalidAddress: String { return self._s[3998]! } + public var Wallpaper_Set: String { return self._s[3999]! } + public var Passport_Identity_Translations: String { return self._s[4001]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3989]!, self._r[3989]!, [_0]) + return formatWithArgumentRanges(self._s[4002]!, self._r[4002]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[3990]! } + public var Channel_LeaveChannel: String { return self._s[4003]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3991]!, self._r[3991]!, [_1]) + return formatWithArgumentRanges(self._s[4004]!, self._r[4004]!, [_1]) } - public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3993]! } - public var PhotoEditor_HighlightsTint: String { return self._s[3994]! } - public var Passport_Email_Delete: String { return self._s[3995]! } - public var Conversation_Mute: String { return self._s[3997]! } - public var Channel_AddBotAsAdmin: String { return self._s[3998]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[4000]! } - public var Wallet_Configuration_BlockchainNameChangedText: String { return self._s[4001]! } - public var ChatSettings_IntentsSettings: String { return self._s[4003]! } - public var Channel_Management_LabelOwner: String { return self._s[4004]! } + public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[4006]! } + public var PhotoEditor_HighlightsTint: String { return self._s[4007]! } + public var MessagePoll_LabelPoll: String { return self._s[4008]! } + public var Passport_Email_Delete: String { return self._s[4009]! } + public var Conversation_Mute: String { return self._s[4011]! } + public var Channel_AddBotAsAdmin: String { return self._s[4012]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[4014]! } + public var Wallet_Configuration_BlockchainNameChangedText: String { return self._s[4015]! } + public var ChatSettings_IntentsSettings: String { return self._s[4017]! } + public var Channel_Management_LabelOwner: String { return self._s[4018]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4005]!, self._r[4005]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4019]!, self._r[4019]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[4006]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[4007]! } - public var Common_No: String { return self._s[4008]! } - public var Weekday_Sunday: String { return self._s[4009]! } - public var Notification_Reply: String { return self._s[4010]! } - public var Conversation_ViewMessage: String { return self._s[4011]! } + public var Calls_CallTabDescription: String { return self._s[4020]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[4021]! } + public var Common_No: String { return self._s[4022]! } + public var Weekday_Sunday: String { return self._s[4023]! } + public var Notification_Reply: String { return self._s[4024]! } + public var Conversation_ViewMessage: String { return self._s[4025]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4012]!, self._r[4012]!, [_0]) + return formatWithArgumentRanges(self._s[4026]!, self._r[4026]!, [_0]) } public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4013]!, self._r[4013]!, [_0]) + return formatWithArgumentRanges(self._s[4027]!, self._r[4027]!, [_0]) } public func Wallet_Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4014]!, self._r[4014]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4028]!, self._r[4028]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4015]! } - public var Wallet_Send_Title: String { return self._s[4016]! } - public var Message_PinnedDocumentMessage: String { return self._s[4017]! } - public var Wallet_Info_RefreshErrorText: String { return self._s[4018]! } - public var DialogList_TabTitle: String { return self._s[4020]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[4021]! } - public var Passport_FieldEmail: String { return self._s[4022]! } - public var Conversation_UnpinMessageAlert: String { return self._s[4023]! } - public var Passport_Address_TypeBankStatement: String { return self._s[4024]! } - public var Wallet_SecureStorageReset_Title: String { return self._s[4025]! } - public var Passport_Identity_ExpiryDate: String { return self._s[4026]! } - public var Privacy_Calls_P2P: String { return self._s[4027]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4029]! } + public var Wallet_Send_Title: String { return self._s[4030]! } + public var Message_PinnedDocumentMessage: String { return self._s[4031]! } + public var Wallet_Info_RefreshErrorText: String { return self._s[4032]! } + public var DialogList_TabTitle: String { return self._s[4034]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[4035]! } + public var Passport_FieldEmail: String { return self._s[4036]! } + public var Conversation_UnpinMessageAlert: String { return self._s[4037]! } + public var Passport_Address_TypeBankStatement: String { return self._s[4038]! } + public var Wallet_SecureStorageReset_Title: String { return self._s[4039]! } + public var Passport_Identity_ExpiryDate: String { return self._s[4040]! } + public var Privacy_Calls_P2P: String { return self._s[4041]! } public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4029]!, self._r[4029]!, [_0]) + return formatWithArgumentRanges(self._s[4043]!, self._r[4043]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[4030]! } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[4044]! } public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4031]!, self._r[4031]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4045]!, self._r[4045]!, [_1, _2]) } - public var Stickers_ClearRecent: String { return self._s[4032]! } - public var EnterPasscode_ChangeTitle: String { return self._s[4033]! } - public var TwoFactorSetup_Email_Title: String { return self._s[4034]! } - public var Passport_InfoText: String { return self._s[4035]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[4036]! } + public var Stickers_ClearRecent: String { return self._s[4046]! } + public var EnterPasscode_ChangeTitle: String { return self._s[4047]! } + public var TwoFactorSetup_Email_Title: String { return self._s[4048]! } + public var Passport_InfoText: String { return self._s[4049]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[4050]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4037]!, self._r[4037]!, [_0]) + return formatWithArgumentRanges(self._s[4051]!, self._r[4051]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4038]!, self._r[4038]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4052]!, self._r[4052]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[4039]! } - public var ScheduledMessages_PollUnavailable: String { return self._s[4040]! } - public var VoiceOver_Navigation_Compose: String { return self._s[4041]! } - public var Passport_Identity_EditDriversLicense: String { return self._s[4042]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[4044]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4045]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[4053]! } + public var ScheduledMessages_PollUnavailable: String { return self._s[4054]! } + public var VoiceOver_Navigation_Compose: String { return self._s[4055]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[4056]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[4058]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4059]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4046]!, self._r[4046]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4060]!, self._r[4060]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[4048]! } - public var ChatSettings_OpenLinksIn: String { return self._s[4049]! } - public var Map_HomeAndWorkTitle: String { return self._s[4050]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[4062]! } + public var ChatSettings_OpenLinksIn: String { return self._s[4063]! } + public var Map_HomeAndWorkTitle: String { return self._s[4064]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4052]!, self._r[4052]!, [_0]) + return formatWithArgumentRanges(self._s[4066]!, self._r[4066]!, [_0]) } - public var DialogList_Unread: String { return self._s[4053]! } + public var DialogList_Unread: String { return self._s[4067]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4054]!, self._r[4054]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4068]!, self._r[4068]!, [_1, _2]) } - public var User_DeletedAccount: String { return self._s[4055]! } - public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[4056]! } + public var User_DeletedAccount: String { return self._s[4069]! } + public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[4070]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4057]!, self._r[4057]!, [_0]) + return formatWithArgumentRanges(self._s[4071]!, self._r[4071]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[4058]! } - public var SharedMedia_CategoryMedia: String { return self._s[4059]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4060]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[4061]! } - public var Watch_ChatList_Compose: String { return self._s[4062]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[4063]! } - public var AutoDownloadSettings_Delimeter: String { return self._s[4064]! } - public var Watch_Microphone_Access: String { return self._s[4065]! } - public var Group_Setup_HistoryHeader: String { return self._s[4066]! } - public var Map_SetThisLocation: String { return self._s[4067]! } - public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[4068]! } - public var Activity_UploadingPhoto: String { return self._s[4069]! } - public var Conversation_Edit: String { return self._s[4071]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[4072]! } - public var Login_TermsOfServiceDecline: String { return self._s[4073]! } - public var Message_PinnedContactMessage: String { return self._s[4074]! } + public var UserInfo_NotificationsDefault: String { return self._s[4072]! } + public var SharedMedia_CategoryMedia: String { return self._s[4073]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4074]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[4075]! } + public var Watch_ChatList_Compose: String { return self._s[4076]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[4077]! } + public var AutoDownloadSettings_Delimeter: String { return self._s[4078]! } + public var Watch_Microphone_Access: String { return self._s[4079]! } + public var Group_Setup_HistoryHeader: String { return self._s[4080]! } + public var Map_SetThisLocation: String { return self._s[4081]! } + public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[4082]! } + public var Activity_UploadingPhoto: String { return self._s[4083]! } + public var Conversation_Edit: String { return self._s[4085]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[4086]! } + public var Login_TermsOfServiceDecline: String { return self._s[4087]! } + public var Message_PinnedContactMessage: String { return self._s[4088]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4075]!, self._r[4075]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4089]!, self._r[4089]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4076]!, self._r[4076]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[4090]!, self._r[4090]!, [_1, _2, _3, _4, _5]) } - public var Appearance_LargeEmoji: String { return self._s[4077]! } - public var TwoStepAuth_AdditionalPassword: String { return self._s[4079]! } - public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[4080]! } + public var Appearance_LargeEmoji: String { return self._s[4091]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[4093]! } + public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[4094]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4081]!, self._r[4081]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4095]!, self._r[4095]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[4082]! } - public var Message_PinnedPhotoMessage: String { return self._s[4083]! } - public var Passport_FieldPhone: String { return self._s[4084]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[4085]! } - public var ChatSettings_AutoPlayGifs: String { return self._s[4086]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[4088]! } - public var Conversation_Call: String { return self._s[4089]! } - public var Common_TakePhoto: String { return self._s[4091]! } - public var Group_EditAdmin_RankTitle: String { return self._s[4092]! } - public var Wallet_Receive_CommentHeader: String { return self._s[4093]! } - public var Channel_NotificationLoading: String { return self._s[4094]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[4096]! } + public var Message_PinnedPhotoMessage: String { return self._s[4097]! } + public var Passport_FieldPhone: String { return self._s[4098]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[4099]! } + public var ChatSettings_AutoPlayGifs: String { return self._s[4100]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[4102]! } + public var Conversation_Call: String { return self._s[4103]! } + public var Common_TakePhoto: String { return self._s[4105]! } + public var Group_EditAdmin_RankTitle: String { return self._s[4106]! } + public var Wallet_Receive_CommentHeader: String { return self._s[4107]! } + public var Channel_NotificationLoading: String { return self._s[4108]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4095]!, self._r[4095]!, [_0]) + return formatWithArgumentRanges(self._s[4109]!, self._r[4109]!, [_0]) } public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4096]!, self._r[4096]!, [_0]) + return formatWithArgumentRanges(self._s[4110]!, self._r[4110]!, [_0]) } public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4097]!, self._r[4097]!, [_1]) + return formatWithArgumentRanges(self._s[4111]!, self._r[4111]!, [_1]) } - public var Permissions_SiriTitle_v0: String { return self._s[4098]! } + public var Permissions_SiriTitle_v0: String { return self._s[4112]! } public func VoiceOver_Chat_VoiceMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4099]!, self._r[4099]!, [_0]) + return formatWithArgumentRanges(self._s[4113]!, self._r[4113]!, [_0]) } public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4100]!, self._r[4100]!, [_0]) + return formatWithArgumentRanges(self._s[4114]!, self._r[4114]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[4101]! } - public var Wallet_Info_ReceiveGrams: String { return self._s[4102]! } - public var ClearCache_FreeSpace: String { return self._s[4103]! } - public var Common_edit: String { return self._s[4104]! } - public var PrivacySettings_AuthSessions: String { return self._s[4105]! } - public var Month_ShortJune: String { return self._s[4106]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[4107]! } - public var Call_ReportSend: String { return self._s[4108]! } - public var Watch_LastSeen_JustNow: String { return self._s[4109]! } - public var Notifications_MessageNotifications: String { return self._s[4110]! } - public var WallpaperSearch_ColorGreen: String { return self._s[4111]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[4113]! } - public var Group_Status: String { return self._s[4114]! } + public var Channel_MessagePhotoRemoved: String { return self._s[4115]! } + public var Wallet_Info_ReceiveGrams: String { return self._s[4116]! } + public var ClearCache_FreeSpace: String { return self._s[4117]! } + public var Common_edit: String { return self._s[4118]! } + public var PrivacySettings_AuthSessions: String { return self._s[4119]! } + public var Month_ShortJune: String { return self._s[4120]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[4121]! } + public var Call_ReportSend: String { return self._s[4122]! } + public var Watch_LastSeen_JustNow: String { return self._s[4123]! } + public var Notifications_MessageNotifications: String { return self._s[4124]! } + public var WallpaperSearch_ColorGreen: String { return self._s[4125]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[4127]! } + public var Group_Status: String { return self._s[4128]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4115]!, self._r[4115]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4129]!, self._r[4129]!, [_0, _1]) } - public var TextFormat_AddLinkTitle: String { return self._s[4116]! } - public var ShareMenu_ShareTo: String { return self._s[4117]! } - public var Conversation_Moderate_Ban: String { return self._s[4118]! } + public var TextFormat_AddLinkTitle: String { return self._s[4130]! } + public var ShareMenu_ShareTo: String { return self._s[4131]! } + public var Conversation_Moderate_Ban: String { return self._s[4132]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4119]!, self._r[4119]!, [_0]) + return formatWithArgumentRanges(self._s[4133]!, self._r[4133]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[4120]! } - public var Map_LiveLocationFor8Hours: String { return self._s[4121]! } + public var SharedMedia_ViewInChat: String { return self._s[4134]! } + public var Map_LiveLocationFor8Hours: String { return self._s[4135]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4122]!, self._r[4122]!, [_1]) + return formatWithArgumentRanges(self._s[4136]!, self._r[4136]!, [_1]) } public func PUSH_PINNED_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4123]!, self._r[4123]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4137]!, self._r[4137]!, [_1, _2]) } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4125]!, self._r[4125]!, [_0]) + return formatWithArgumentRanges(self._s[4139]!, self._r[4139]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[4126]! } - public var Appearance_ReduceMotion: String { return self._s[4127]! } + public var Map_OpenInHereMaps: String { return self._s[4140]! } + public var Appearance_ReduceMotion: String { return self._s[4141]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4128]!, self._r[4128]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4142]!, self._r[4142]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[4129]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[4130]! } - public var PhotoEditor_Skip: String { return self._s[4131]! } - public func MuteFor_Hours(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[4143]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[4144]! } + public var PhotoEditor_Skip: String { return self._s[4145]! } + public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_StickerCount(_ value: Int32) -> String { + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func OldChannels_InactiveYear(_ value: Int32) -> String { + public func Call_Seconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) - } - public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_DeletedChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Contacts_ImportersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Conversation_SelectedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) - } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ForwardedGifs(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Theme_UsersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusMembers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Contacts_InviteContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) - } public func Notifications_Exceptions(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) - } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) - } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func ForwardedVideoMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func OldChannels_InactiveWeek(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Invitation_Members(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_GroupFormat(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) - } - public func UserCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + public func ForwardedGifs(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) } - public func OldChannels_Leave(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Passport_Scans(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Notification_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveMonth(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_SelectedChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, _2, _1, _3) } public func MessageTimer_Years(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedStickers(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PollResults_ShowMore(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, _1, _2) } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) } public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { + public func Theme_UsersCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_File(_ value: Int32) -> String { + public func Passport_Scans(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeletedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedContacts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, _0, _1) + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Map_ETAMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) } public func Media_ShareItem(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_Leave(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) + } + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Video(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Conversation_StatusOnline(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveYear(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_Weeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + } + public func UserCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_SelectedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveMonth(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Link(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_ShortMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) } public func SharedMedia_Generic(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_Months(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessagePoll_VotedCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_ShortSeconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Invitation_Members(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_GroupFormat(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedLocations(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideoMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPhotos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveWeek(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Contacts_InviteContacts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) + } + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) + } + public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Days(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) } + public func MuteFor_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) + } public init(primaryComponent: PresentationStringsComponent, secondaryComponent: PresentationStringsComponent?, groupingSeparator: String) { self.primaryComponent = primaryComponent diff --git a/submodules/TelegramPresentationData/Sources/PresentationTheme.swift b/submodules/TelegramPresentationData/Sources/PresentationTheme.swift index 66a2ba6ba1..3571d6d77f 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationTheme.swift @@ -631,17 +631,23 @@ public final class PresentationThemeChatBubblePolls { public let highlight: UIColor public let separator: UIColor public let bar: UIColor + public let barIconForeground: UIColor + public let barPositive: UIColor + public let barNegative: UIColor - public init(radioButton: UIColor, radioProgress: UIColor, highlight: UIColor, separator: UIColor, bar: UIColor) { + public init(radioButton: UIColor, radioProgress: UIColor, highlight: UIColor, separator: UIColor, bar: UIColor, barIconForeground: UIColor, barPositive: UIColor, barNegative: UIColor) { self.radioButton = radioButton self.radioProgress = radioProgress self.highlight = highlight self.separator = separator self.bar = bar + self.barIconForeground = barIconForeground + self.barPositive = barPositive + self.barNegative = barNegative } - public func withUpdated(radioButton: UIColor? = nil, radioProgress: UIColor? = nil, highlight: UIColor? = nil, separator: UIColor? = nil, bar: UIColor? = nil) -> PresentationThemeChatBubblePolls { - return PresentationThemeChatBubblePolls(radioButton: radioButton ?? self.radioButton, radioProgress: radioProgress ?? self.radioProgress, highlight: highlight ?? self.highlight, separator: separator ?? self.separator, bar: bar ?? self.bar) + public func withUpdated(radioButton: UIColor? = nil, radioProgress: UIColor? = nil, highlight: UIColor? = nil, separator: UIColor? = nil, bar: UIColor? = nil, barIconForeground: UIColor? = nil, barPositive: UIColor? = nil, barNegative: UIColor? = nil) -> PresentationThemeChatBubblePolls { + return PresentationThemeChatBubblePolls(radioButton: radioButton ?? self.radioButton, radioProgress: radioProgress ?? self.radioProgress, highlight: highlight ?? self.highlight, separator: separator ?? self.separator, bar: bar ?? self.bar, barIconForeground: barIconForeground ?? self.barIconForeground, barPositive: barPositive ?? self.barPositive, barNegative: barNegative ?? self.barNegative) } } @@ -655,6 +661,7 @@ public final class PresentationThemePartedColors { public let textHighlightColor: UIColor public let accentTextColor: UIColor public let accentControlColor: UIColor + public let accentControlDisabledColor: UIColor public let mediaActiveControlColor: UIColor public let mediaInactiveControlColor: UIColor public let mediaControlInnerBackgroundColor: UIColor @@ -670,7 +677,7 @@ public final class PresentationThemePartedColors { public let textSelectionColor: UIColor public let textSelectionKnobColor: UIColor - public init(bubble: PresentationThemeBubbleColor, primaryTextColor: UIColor, secondaryTextColor: UIColor, linkTextColor: UIColor, linkHighlightColor: UIColor, scamColor: UIColor, textHighlightColor: UIColor, accentTextColor: UIColor, accentControlColor: UIColor, mediaActiveControlColor: UIColor, mediaInactiveControlColor: UIColor, mediaControlInnerBackgroundColor: UIColor, pendingActivityColor: UIColor, fileTitleColor: UIColor, fileDescriptionColor: UIColor, fileDurationColor: UIColor, mediaPlaceholderColor: UIColor, polls: PresentationThemeChatBubblePolls, actionButtonsFillColor: PresentationThemeVariableColor, actionButtonsStrokeColor: PresentationThemeVariableColor, actionButtonsTextColor: PresentationThemeVariableColor, textSelectionColor: UIColor, textSelectionKnobColor: UIColor) { + public init(bubble: PresentationThemeBubbleColor, primaryTextColor: UIColor, secondaryTextColor: UIColor, linkTextColor: UIColor, linkHighlightColor: UIColor, scamColor: UIColor, textHighlightColor: UIColor, accentTextColor: UIColor, accentControlColor: UIColor, accentControlDisabledColor: UIColor, mediaActiveControlColor: UIColor, mediaInactiveControlColor: UIColor, mediaControlInnerBackgroundColor: UIColor, pendingActivityColor: UIColor, fileTitleColor: UIColor, fileDescriptionColor: UIColor, fileDurationColor: UIColor, mediaPlaceholderColor: UIColor, polls: PresentationThemeChatBubblePolls, actionButtonsFillColor: PresentationThemeVariableColor, actionButtonsStrokeColor: PresentationThemeVariableColor, actionButtonsTextColor: PresentationThemeVariableColor, textSelectionColor: UIColor, textSelectionKnobColor: UIColor) { self.bubble = bubble self.primaryTextColor = primaryTextColor self.secondaryTextColor = secondaryTextColor @@ -680,6 +687,7 @@ public final class PresentationThemePartedColors { self.textHighlightColor = textHighlightColor self.accentTextColor = accentTextColor self.accentControlColor = accentControlColor + self.accentControlDisabledColor = accentControlDisabledColor self.mediaActiveControlColor = mediaActiveControlColor self.mediaInactiveControlColor = mediaInactiveControlColor self.mediaControlInnerBackgroundColor = mediaControlInnerBackgroundColor @@ -696,8 +704,8 @@ public final class PresentationThemePartedColors { self.textSelectionKnobColor = textSelectionKnobColor } - public func withUpdated(bubble: PresentationThemeBubbleColor? = nil, primaryTextColor: UIColor? = nil, secondaryTextColor: UIColor? = nil, linkTextColor: UIColor? = nil, linkHighlightColor: UIColor? = nil, scamColor: UIColor? = nil, textHighlightColor: UIColor? = nil, accentTextColor: UIColor? = nil, accentControlColor: UIColor? = nil, mediaActiveControlColor: UIColor? = nil, mediaInactiveControlColor: UIColor? = nil, mediaControlInnerBackgroundColor: UIColor? = nil, pendingActivityColor: UIColor? = nil, fileTitleColor: UIColor? = nil, fileDescriptionColor: UIColor? = nil, fileDurationColor: UIColor? = nil, mediaPlaceholderColor: UIColor? = nil, polls: PresentationThemeChatBubblePolls? = nil, actionButtonsFillColor: PresentationThemeVariableColor? = nil, actionButtonsStrokeColor: PresentationThemeVariableColor? = nil, actionButtonsTextColor: PresentationThemeVariableColor? = nil, textSelectionColor: UIColor? = nil, textSelectionKnobColor: UIColor? = nil) -> PresentationThemePartedColors { - return PresentationThemePartedColors(bubble: bubble ?? self.bubble, primaryTextColor: primaryTextColor ?? self.primaryTextColor, secondaryTextColor: secondaryTextColor ?? self.secondaryTextColor, linkTextColor: linkTextColor ?? self.linkTextColor, linkHighlightColor: linkHighlightColor ?? self.linkHighlightColor, scamColor: scamColor ?? self.scamColor, textHighlightColor: textHighlightColor ?? self.textHighlightColor, accentTextColor: accentTextColor ?? self.accentTextColor, accentControlColor: accentControlColor ?? self.accentControlColor, mediaActiveControlColor: mediaActiveControlColor ?? self.mediaActiveControlColor, mediaInactiveControlColor: mediaInactiveControlColor ?? self.mediaInactiveControlColor, mediaControlInnerBackgroundColor: mediaControlInnerBackgroundColor ?? self.mediaControlInnerBackgroundColor, pendingActivityColor: pendingActivityColor ?? self.pendingActivityColor, fileTitleColor: fileTitleColor ?? self.fileTitleColor, fileDescriptionColor: fileDescriptionColor ?? self.fileDescriptionColor, fileDurationColor: fileDurationColor ?? self.fileDurationColor, mediaPlaceholderColor: mediaPlaceholderColor ?? self.mediaPlaceholderColor, polls: polls ?? self.polls, actionButtonsFillColor: actionButtonsFillColor ?? self.actionButtonsFillColor, actionButtonsStrokeColor: actionButtonsStrokeColor ?? self.actionButtonsStrokeColor, actionButtonsTextColor: actionButtonsTextColor ?? self.actionButtonsTextColor, textSelectionColor: textSelectionColor ?? self.textSelectionColor, textSelectionKnobColor: textSelectionKnobColor ?? self.textSelectionKnobColor) + public func withUpdated(bubble: PresentationThemeBubbleColor? = nil, primaryTextColor: UIColor? = nil, secondaryTextColor: UIColor? = nil, linkTextColor: UIColor? = nil, linkHighlightColor: UIColor? = nil, scamColor: UIColor? = nil, textHighlightColor: UIColor? = nil, accentTextColor: UIColor? = nil, accentControlColor: UIColor? = nil, accentControlDisabledColor: UIColor? = nil, mediaActiveControlColor: UIColor? = nil, mediaInactiveControlColor: UIColor? = nil, mediaControlInnerBackgroundColor: UIColor? = nil, pendingActivityColor: UIColor? = nil, fileTitleColor: UIColor? = nil, fileDescriptionColor: UIColor? = nil, fileDurationColor: UIColor? = nil, mediaPlaceholderColor: UIColor? = nil, polls: PresentationThemeChatBubblePolls? = nil, actionButtonsFillColor: PresentationThemeVariableColor? = nil, actionButtonsStrokeColor: PresentationThemeVariableColor? = nil, actionButtonsTextColor: PresentationThemeVariableColor? = nil, textSelectionColor: UIColor? = nil, textSelectionKnobColor: UIColor? = nil) -> PresentationThemePartedColors { + return PresentationThemePartedColors(bubble: bubble ?? self.bubble, primaryTextColor: primaryTextColor ?? self.primaryTextColor, secondaryTextColor: secondaryTextColor ?? self.secondaryTextColor, linkTextColor: linkTextColor ?? self.linkTextColor, linkHighlightColor: linkHighlightColor ?? self.linkHighlightColor, scamColor: scamColor ?? self.scamColor, textHighlightColor: textHighlightColor ?? self.textHighlightColor, accentTextColor: accentTextColor ?? self.accentTextColor, accentControlColor: accentControlColor ?? self.accentControlColor, accentControlDisabledColor: accentControlDisabledColor ?? self.accentControlDisabledColor, mediaActiveControlColor: mediaActiveControlColor ?? self.mediaActiveControlColor, mediaInactiveControlColor: mediaInactiveControlColor ?? self.mediaInactiveControlColor, mediaControlInnerBackgroundColor: mediaControlInnerBackgroundColor ?? self.mediaControlInnerBackgroundColor, pendingActivityColor: pendingActivityColor ?? self.pendingActivityColor, fileTitleColor: fileTitleColor ?? self.fileTitleColor, fileDescriptionColor: fileDescriptionColor ?? self.fileDescriptionColor, fileDurationColor: fileDurationColor ?? self.fileDurationColor, mediaPlaceholderColor: mediaPlaceholderColor ?? self.mediaPlaceholderColor, polls: polls ?? self.polls, actionButtonsFillColor: actionButtonsFillColor ?? self.actionButtonsFillColor, actionButtonsStrokeColor: actionButtonsStrokeColor ?? self.actionButtonsStrokeColor, actionButtonsTextColor: actionButtonsTextColor ?? self.actionButtonsTextColor, textSelectionColor: textSelectionColor ?? self.textSelectionColor, textSelectionKnobColor: textSelectionKnobColor ?? self.textSelectionKnobColor) } } diff --git a/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift b/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift index cff496f675..d470ce403f 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift @@ -1051,15 +1051,24 @@ extension PresentationThemeChatBubblePolls: Codable { case highlight case separator case bar + case barIconForeground + case barPositive + case barNegative } public convenience init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(radioButton: try decodeColor(values, .radioButton), - radioProgress: try decodeColor(values, .radioProgress), - highlight: try decodeColor(values, .highlight), - separator: try decodeColor(values, .separator), - bar: try decodeColor(values, .bar)) + let bar = try decodeColor(values, .bar) + self.init( + radioButton: try decodeColor(values, .radioButton), + radioProgress: try decodeColor(values, .radioProgress), + highlight: try decodeColor(values, .highlight), + separator: try decodeColor(values, .separator), + bar: bar, + barIconForeground: (try? decodeColor(values, .barIconForeground)) ?? .white, + barPositive: (try? decodeColor(values, .barPositive)) ?? bar, + barNegative: (try? decodeColor(values, .barNegative)) ?? bar + ) } public func encode(to encoder: Encoder) throws { @@ -1069,6 +1078,9 @@ extension PresentationThemeChatBubblePolls: Codable { try encodeColor(&values, self.highlight, .highlight) try encodeColor(&values, self.separator, .separator) try encodeColor(&values, self.bar, .bar) + try encodeColor(&values, self.barIconForeground, .barIconForeground) + try encodeColor(&values, self.barPositive, .barPositive) + try encodeColor(&values, self.barNegative, .barNegative) } } @@ -1097,11 +1109,13 @@ extension PresentationThemePartedColors: Codable { case actionButtonsText case textSelection case textSelectionKnob + case accentControlDisabled } public convenience init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: CodingKeys.self) let codingPath = decoder.codingPath.map { $0.stringValue }.joined(separator: ".") + let accentControlColor = try decodeColor(values, .accentControl) self.init( bubble: try values.decode(PresentationThemeBubbleColor.self, forKey: .bubble), primaryTextColor: try decodeColor(values, .primaryText), @@ -1111,7 +1125,8 @@ extension PresentationThemePartedColors: Codable { scamColor: try decodeColor(values, .scam), textHighlightColor: try decodeColor(values, .textHighlight), accentTextColor: try decodeColor(values, .accentText), - accentControlColor: try decodeColor(values, .accentControl), + accentControlColor: accentControlColor, + accentControlDisabledColor: (try? decodeColor(values, .accentControlDisabled)) ?? accentControlColor.withAlphaComponent(0.5), mediaActiveControlColor: try decodeColor(values, .mediaActiveControl), mediaInactiveControlColor: try decodeColor(values, .mediaInactiveControl), mediaControlInnerBackgroundColor: try decodeColor(values, .mediaControlInnerBg, decoder: decoder, fallbackKey: codingPath + ".bubble.withWp.bg"), diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index e1bd67a179..c677325613 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -1534,7 +1534,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G strongSelf.chatDisplayNode.dismissInput() strongSelf.present(controller, in: .window(.root)) } - }, requestSelectMessagePollOption: { [weak self] id, opaqueIdentifier in + }, requestSelectMessagePollOptions: { [weak self] id, opaqueIdentifiers in guard let strongSelf = self, let controllerInteraction = strongSelf.controllerInteraction else { return } @@ -1543,7 +1543,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G return } if controllerInteraction.pollActionState.pollMessageIdsInProgress[id] == nil { - controllerInteraction.pollActionState.pollMessageIdsInProgress[id] = opaqueIdentifier + controllerInteraction.pollActionState.pollMessageIdsInProgress[id] = opaqueIdentifiers strongSelf.chatDisplayNode.historyNode.requestMessageUpdate(id) let disposables: DisposableDict if let current = strongSelf.selectMessagePollOptionDisposables { @@ -1552,7 +1552,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G disposables = DisposableDict() strongSelf.selectMessagePollOptionDisposables = disposables } - let signal = requestMessageSelectPollOption(account: strongSelf.context.account, messageId: id, opaqueIdentifier: opaqueIdentifier) + let signal = requestMessageSelectPollOption(account: strongSelf.context.account, messageId: id, opaqueIdentifiers: opaqueIdentifiers) disposables.set((signal |> deliverOnMainQueue).start(error: { _ in guard let strongSelf = self, let controllerInteraction = strongSelf.controllerInteraction else { @@ -1574,6 +1574,24 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G strongSelf.selectPollOptionFeedback?.success() }), forKey: id) } + }, requestOpenMessagePollResults: { [weak self] messageId, pollId in + guard let strongSelf = self, pollId.namespace == Namespaces.Media.CloudPoll else { + return + } + let _ = (strongSelf.context.account.postbox.transaction { transaction -> Message? in + return transaction.getMessage(messageId) + } + |> deliverOnMainQueue).start(next: { message in + guard let message = message else { + return + } + for media in message.media { + if let poll = media as? TelegramMediaPoll, poll.pollId == pollId { + strongSelf.push(pollResultsController(context: strongSelf.context, messageId: messageId, poll: poll)) + break + } + } + }) }, openAppStorePage: { [weak self] in if let strongSelf = self { strongSelf.context.sharedContext.applicationBindings.openAppStorePage() @@ -3957,7 +3975,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } let controller = OverlayStatusController(theme: strongSelf.presentationData.theme, type: .loading(cancelled: nil)) strongSelf.present(controller, in: .window(.root)) - let signal = requestMessageSelectPollOption(account: strongSelf.context.account, messageId: id, opaqueIdentifier: nil) + let signal = requestMessageSelectPollOption(account: strongSelf.context.account, messageId: id, opaqueIdentifiers: []) |> afterDisposed { [weak controller] in Queue.mainQueue().async { controller?.dismiss() diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift b/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift index 4a8b0f8122..21ee8f3dbd 100644 --- a/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift +++ b/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift @@ -45,7 +45,7 @@ public enum ChatControllerInteractionLongTapAction { } struct ChatInterfacePollActionState: Equatable { - var pollMessageIdsInProgress: [MessageId: Data] = [:] + var pollMessageIdsInProgress: [MessageId: [Data]] = [:] } public final class ChatControllerInteraction { @@ -91,7 +91,8 @@ public final class ChatControllerInteraction { let requestRedeliveryOfFailedMessages: (MessageId) -> Void let addContact: (String) -> Void let rateCall: (Message, CallId) -> Void - let requestSelectMessagePollOption: (MessageId, Data) -> Void + let requestSelectMessagePollOptions: (MessageId, [Data]) -> Void + let requestOpenMessagePollResults: (MessageId, MediaId) -> Void let openAppStorePage: () -> Void let displayMessageTooltip: (MessageId, String, ASDisplayNode?, CGRect?) -> Void let seekToTimecode: (Message, Double, Bool) -> Void @@ -117,7 +118,7 @@ public final class ChatControllerInteraction { var searchTextHighightState: (String, [MessageIndex])? var seenOneTimeAnimatedMedia = Set() - init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect, TapLongTapOrDoubleTapGestureRecognizer?) -> Void, openMessageContextActions: @escaping (Message, ASDisplayNode, CGRect, ContextGesture?) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, tapMessage: ((Message) -> Void)?, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendCurrentMessage: @escaping (Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool, ASDisplayNode, CGRect) -> Bool, sendGif: @escaping (FileMediaReference, ASDisplayNode, CGRect) -> Bool, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, requestMessageActionUrlAuth: @escaping (String, MessageId, Int32) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?, Message?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, openWallpaper: @escaping (Message) -> Void, openTheme: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, chatControllerNode: @escaping () -> ASDisplayNode?, reactionContainerNode: @escaping () -> ReactionSelectionParentNode?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction, Message?) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, openAppStorePage: @escaping () -> Void, displayMessageTooltip: @escaping (MessageId, String, ASDisplayNode?, CGRect?) -> Void, seekToTimecode: @escaping (Message, Double, Bool) -> Void, scheduleCurrentMessage: @escaping () -> Void, sendScheduledMessagesNow: @escaping ([MessageId]) -> Void, editScheduledMessagesTime: @escaping ([MessageId]) -> Void, performTextSelectionAction: @escaping (UInt32, String, TextSelectionAction) -> Void, updateMessageReaction: @escaping (MessageId, String?) -> Void, openMessageReactions: @escaping (MessageId) -> Void, displaySwipeToReplyHint: @escaping () -> Void, dismissReplyMarkupMessage: @escaping (Message) -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, pollActionState: ChatInterfacePollActionState, stickerSettings: ChatInterfaceStickerSettings) { + init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect, TapLongTapOrDoubleTapGestureRecognizer?) -> Void, openMessageContextActions: @escaping (Message, ASDisplayNode, CGRect, ContextGesture?) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, tapMessage: ((Message) -> Void)?, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendCurrentMessage: @escaping (Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool, ASDisplayNode, CGRect) -> Bool, sendGif: @escaping (FileMediaReference, ASDisplayNode, CGRect) -> Bool, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, requestMessageActionUrlAuth: @escaping (String, MessageId, Int32) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?, Message?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, openWallpaper: @escaping (Message) -> Void, openTheme: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, chatControllerNode: @escaping () -> ASDisplayNode?, reactionContainerNode: @escaping () -> ReactionSelectionParentNode?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction, Message?) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOptions: @escaping (MessageId, [Data]) -> Void, requestOpenMessagePollResults: @escaping (MessageId, MediaId) -> Void, openAppStorePage: @escaping () -> Void, displayMessageTooltip: @escaping (MessageId, String, ASDisplayNode?, CGRect?) -> Void, seekToTimecode: @escaping (Message, Double, Bool) -> Void, scheduleCurrentMessage: @escaping () -> Void, sendScheduledMessagesNow: @escaping ([MessageId]) -> Void, editScheduledMessagesTime: @escaping ([MessageId]) -> Void, performTextSelectionAction: @escaping (UInt32, String, TextSelectionAction) -> Void, updateMessageReaction: @escaping (MessageId, String?) -> Void, openMessageReactions: @escaping (MessageId) -> Void, displaySwipeToReplyHint: @escaping () -> Void, dismissReplyMarkupMessage: @escaping (Message) -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, pollActionState: ChatInterfacePollActionState, stickerSettings: ChatInterfaceStickerSettings) { self.openMessage = openMessage self.openPeer = openPeer self.openPeerMention = openPeerMention @@ -160,7 +161,8 @@ public final class ChatControllerInteraction { self.requestRedeliveryOfFailedMessages = requestRedeliveryOfFailedMessages self.addContact = addContact self.rateCall = rateCall - self.requestSelectMessagePollOption = requestSelectMessagePollOption + self.requestSelectMessagePollOptions = requestSelectMessagePollOptions + self.requestOpenMessagePollResults = requestOpenMessagePollResults self.openAppStorePage = openAppStorePage self.displayMessageTooltip = displayMessageTooltip self.seekToTimecode = seekToTimecode @@ -198,7 +200,8 @@ public final class ChatControllerInteraction { }, requestRedeliveryOfFailedMessages: { _ in }, addContact: { _ in }, rateCall: { _, _ in - }, requestSelectMessagePollOption: { _, _ in + }, requestSelectMessagePollOptions: { _, _ in + }, requestOpenMessagePollResults: { _, _ in }, openAppStorePage: { }, displayMessageTooltip: { _, _, _, _ in }, seekToTimecode: { _, _, _ in diff --git a/submodules/TelegramUI/TelegramUI/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/TelegramUI/ChatInterfaceStateContextMenus.swift index af37f08b4d..915720e34f 100644 --- a/submodules/TelegramUI/TelegramUI/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/TelegramUI/ChatInterfaceStateContextMenus.swift @@ -511,7 +511,7 @@ func contextMenuForChatPresentationIntefaceState(chatPresentationInterfaceState: hasSelected = true } } - if hasSelected { + if hasSelected, case .poll = activePoll.kind { actions.append(.action(ContextMenuActionItem(text: chatPresentationInterfaceState.strings.Conversation_UnvotePoll, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Unvote"), color: theme.actionSheet.primaryTextColor) }, action: { _, f in @@ -539,7 +539,7 @@ func contextMenuForChatPresentationIntefaceState(chatPresentationInterfaceState: } } - if let _ = activePoll, messages[0].forwardInfo == nil { + if let activePoll = activePoll, messages[0].forwardInfo == nil { var canStopPoll = false if !messages[0].flags.contains(.Incoming) { canStopPoll = true diff --git a/submodules/TelegramUI/TelegramUI/ChatMessagePollBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessagePollBubbleContentNode.swift index 4db3123a19..f16e3d9022 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessagePollBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessagePollBubbleContentNode.swift @@ -7,8 +7,12 @@ import SyncCore import Postbox import TextFormat import UrlEscaping +import CheckNode +import SwiftSignalKit +import AccountContext +import AvatarNode -struct PercentCounterItem: Comparable { +private struct PercentCounterItem: Comparable { var index: Int = 0 var percent: Int = 0 var remainder: Int = 0 @@ -24,7 +28,7 @@ struct PercentCounterItem: Comparable { } -func adjustPercentCount(_ items: [PercentCounterItem], left: Int) -> [PercentCounterItem] { +private func adjustPercentCount(_ items: [PercentCounterItem], left: Int) -> [PercentCounterItem] { var left = left var items = items.sorted(by: <) var i:Int = 0 @@ -104,16 +108,26 @@ private final class ChatMessagePollOptionRadioNode: ASDisplayNode { private(set) var isAnimating: Bool = false private var startTime: Double? + private var checkNode: CheckNode? + private var displayLink: CADisplayLink? private var shouldBeAnimating: Bool { return self.isInHierarchyValue && self.isAnimating } + var isChecked: Bool? { + return self.checkNode?.isChecked + } + + func updateIsChecked(_ value: Bool, animated: Bool) { + self.checkNode?.setIsChecked(value, animated: animated) + } + override init() { super.init() - self.isLayerBacked = true + self.isUserInteractionEnabled = false self.isOpaque = false } @@ -139,7 +153,7 @@ private final class ChatMessagePollOptionRadioNode: ASDisplayNode { } } - func update(staticColor: UIColor, animatedColor: UIColor, isAnimating: Bool) { + func update(staticColor: UIColor, animatedColor: UIColor, foregroundColor: UIColor, isSelectable: Bool, isAnimating: Bool) { var updated = false if !staticColor.isEqual(self.staticColor) { self.staticColor = staticColor @@ -157,6 +171,20 @@ private final class ChatMessagePollOptionRadioNode: ASDisplayNode { self.updateAnimating() } } + if isSelectable { + if self.checkNode == nil { + updated = true + let checkNode = CheckNode(strokeColor: staticColor, fillColor: animatedColor, foregroundColor: foregroundColor, style: .plain) + self.checkNode = checkNode + self.addSubnode(checkNode) + checkNode.isUserInteractionEnabled = false + checkNode.frame = CGRect(origin: CGPoint(x: -5.0, y: -5.0), size: CGSize(width: 32.0, height: 32.0)) + } + } else if let checkNode = self.checkNode { + updated = true + self.checkNode = nil + checkNode.removeFromSupernode() + } if updated { self.setNeedsDisplay() } @@ -197,7 +225,7 @@ private final class ChatMessagePollOptionRadioNode: ASDisplayNode { if let startTime = self.startTime { offset = CACurrentMediaTime() - startTime } - return ChatMessagePollOptionRadioNodeParameters(staticColor: staticColor, animatedColor: animatedColor, offset: offset) + return ChatMessagePollOptionRadioNodeParameters(staticColor: self.checkNode == nil ? staticColor : .clear, animatedColor: animatedColor, offset: offset) } else { return nil } @@ -311,19 +339,26 @@ private struct ChatMessagePollOptionResult: Equatable { let count: Int32 } +private struct ChatMessagePollOptionSelection: Equatable { + var isSelected: Bool + var isCorrect: Bool +} + private final class ChatMessagePollOptionNode: ASDisplayNode { private let highlightedBackgroundNode: ASDisplayNode - private var radioNode: ChatMessagePollOptionRadioNode? + private(set) var radioNode: ChatMessagePollOptionRadioNode? private let percentageNode: ASDisplayNode private var percentageImage: UIImage? private var titleNode: TextNode? private let buttonNode: HighlightTrackingButtonNode private let separatorNode: ASDisplayNode private let resultBarNode: ASImageNode - + private let resultBarIconNode: ASImageNode var option: TelegramMediaPollOption? - public private(set) var currentResult: ChatMessagePollOptionResult? + private(set) var currentResult: ChatMessagePollOptionResult? + private(set) var currentSelection: ChatMessagePollOptionSelection? var pressed: (() -> Void)? + var selectionUpdated: (() -> Void)? override init() { self.highlightedBackgroundNode = ASDisplayNode() @@ -338,6 +373,9 @@ private final class ChatMessagePollOptionNode: ASDisplayNode { self.resultBarNode.isLayerBacked = true self.resultBarNode.alpha = 0.0 + self.resultBarIconNode = ASImageNode() + self.resultBarIconNode.isLayerBacked = true + self.percentageNode = ASDisplayNode() self.percentageNode.alpha = 0.0 self.percentageNode.isLayerBacked = true @@ -347,6 +385,7 @@ private final class ChatMessagePollOptionNode: ASDisplayNode { self.addSubnode(self.highlightedBackgroundNode) self.addSubnode(self.separatorNode) self.addSubnode(self.resultBarNode) + self.addSubnode(self.resultBarIconNode) self.addSubnode(self.percentageNode) self.addSubnode(self.buttonNode) @@ -365,14 +404,20 @@ private final class ChatMessagePollOptionNode: ASDisplayNode { } @objc private func buttonPressed() { - self.pressed?() + if let radioNode = self.radioNode, let isChecked = radioNode.isChecked { + radioNode.updateIsChecked(!isChecked, animated: true) + self.selectionUpdated?() + } else { + self.pressed?() + } } - static func asyncLayout(_ maybeNode: ChatMessagePollOptionNode?) -> (_ accountPeerId: PeerId, _ presentationData: ChatPresentationData, _ message: Message, _ option: TelegramMediaPollOption, _ optionResult: ChatMessagePollOptionResult?, _ constrainedWidth: CGFloat) -> (minimumWidth: CGFloat, layout: ((CGFloat) -> (CGSize, (Bool, Bool) -> ChatMessagePollOptionNode))) { + static func asyncLayout(_ maybeNode: ChatMessagePollOptionNode?) -> (_ accountPeerId: PeerId, _ presentationData: ChatPresentationData, _ message: Message, _ poll: TelegramMediaPoll, _ option: TelegramMediaPollOption, _ optionResult: ChatMessagePollOptionResult?, _ constrainedWidth: CGFloat) -> (minimumWidth: CGFloat, layout: ((CGFloat) -> (CGSize, (Bool, Bool) -> ChatMessagePollOptionNode))) { let makeTitleLayout = TextNode.asyncLayout(maybeNode?.titleNode) let currentResult = maybeNode?.currentResult + let currentSelection = maybeNode?.currentSelection - return { accountPeerId, presentationData, message, option, optionResult, constrainedWidth in + return { accountPeerId, presentationData, message, poll, option, optionResult, constrainedWidth in let leftInset: CGFloat = 50.0 let rightInset: CGFloat = 12.0 @@ -383,12 +428,84 @@ private final class ChatMessagePollOptionNode: ASDisplayNode { let contentHeight: CGFloat = max(46.0, titleLayout.size.height + 22.0) let shouldHaveRadioNode = optionResult == nil + let isSelectable: Bool + if shouldHaveRadioNode, case .poll(multipleAnswers: true) = poll.kind { + isSelectable = true + } else { + isSelectable = false + } var updatedPercentageImage: UIImage? if currentResult != optionResult { updatedPercentageImage = generatePercentageImage(presentationData: presentationData, incoming: incoming, value: optionResult?.percent ?? 0) } + var resultIcon: UIImage? + var updatedResultIcon = false + + var selection: ChatMessagePollOptionSelection? + if optionResult != nil { + if let voters = poll.results.voters { + for voter in voters { + if voter.opaqueIdentifier == option.opaqueIdentifier { + if voter.selected || voter.isCorrect { + selection = ChatMessagePollOptionSelection(isSelected: voter.selected, isCorrect: voter.isCorrect) + } + break + } + } + } + } + if selection != currentSelection { + updatedResultIcon = true + if let selection = selection { + var isQuiz = false + if case .quiz = poll.kind { + isQuiz = true + } + resultIcon = generateImage(CGSize(width: 16.0, height: 16.0), rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + var isIncorrect = false + let fillColor: UIColor + if selection.isSelected { + if isQuiz { + if selection.isCorrect { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.barPositive : presentationData.theme.theme.chat.message.outgoing.polls.barPositive + } else { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.barNegative : presentationData.theme.theme.chat.message.outgoing.polls.barNegative + isIncorrect = true + } + } else { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.bar : presentationData.theme.theme.chat.message.outgoing.polls.bar + } + } else if isQuiz && selection.isCorrect { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.bar : presentationData.theme.theme.chat.message.outgoing.polls.bar + } else { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.bar : presentationData.theme.theme.chat.message.outgoing.polls.bar + } + context.setFillColor(fillColor.cgColor) + context.fillEllipse(in: CGRect(origin: CGPoint(), size: size)) + + let strokeColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.barIconForeground : presentationData.theme.theme.chat.message.outgoing.polls.barIconForeground + context.setStrokeColor(strokeColor.cgColor) + context.setLineWidth(1.5) + context.setLineJoin(.round) + context.setLineCap(.round) + if isIncorrect { + context.translateBy(x: 5.0, y: 5.0) + context.move(to: CGPoint(x: 0.0, y: 6.0)) + context.addLine(to: CGPoint(x: 6.0, y: 0.0)) + context.strokePath() + context.move(to: CGPoint(x: 0.0, y: 0.0)) + context.addLine(to: CGPoint(x: 6.0, y: 6.0)) + context.strokePath() + } else { + let _ = try? drawSvgPath(context, path: "M4,8.5 L6.44778395,10.9477839 C6.47662208,10.9766221 6.52452135,10.9754786 6.54754782,10.9524522 L12,5.5 S ") + } + }) + } + } + return (titleLayout.size.width + leftInset + rightInset, { width in return (CGSize(width: width, height: contentHeight), { animated, inProgress in let node: ChatMessagePollOptionNode @@ -432,7 +549,7 @@ private final class ChatMessagePollOptionNode: ASDisplayNode { } let radioSize: CGFloat = 22.0 radioNode.frame = CGRect(origin: CGPoint(x: 12.0, y: 12.0), size: CGSize(width: radioSize, height: radioSize)) - radioNode.update(staticColor: incoming ? presentationData.theme.theme.chat.message.incoming.polls.radioButton : presentationData.theme.theme.chat.message.outgoing.polls.radioButton, animatedColor: incoming ? presentationData.theme.theme.chat.message.incoming.polls.radioProgress : presentationData.theme.theme.chat.message.outgoing.polls.radioProgress, isAnimating: inProgress) + radioNode.update(staticColor: incoming ? presentationData.theme.theme.chat.message.incoming.polls.radioButton : presentationData.theme.theme.chat.message.outgoing.polls.radioButton, animatedColor: incoming ? presentationData.theme.theme.chat.message.incoming.polls.radioProgress : presentationData.theme.theme.chat.message.outgoing.polls.radioProgress, foregroundColor: presentationData.theme.theme.list.itemCheckColors.foregroundColor, isSelectable: isSelectable, isAnimating: inProgress) } else if let radioNode = node.radioNode { node.radioNode = nil if animated { @@ -469,26 +586,60 @@ private final class ChatMessagePollOptionNode: ASDisplayNode { node.separatorNode.backgroundColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.separator : presentationData.theme.theme.chat.message.outgoing.polls.separator node.separatorNode.frame = CGRect(origin: CGPoint(x: leftInset, y: contentHeight - UIScreenPixel), size: CGSize(width: width - leftInset, height: UIScreenPixel)) - if node.resultBarNode.image == nil { - node.resultBarNode.image = generateStretchableFilledCircleImage(diameter: 6.0, color: incoming ? presentationData.theme.theme.chat.message.incoming.polls.bar : presentationData.theme.theme.chat.message.outgoing.polls.bar) + if node.resultBarNode.image == nil || updatedResultIcon { + var isQuiz = false + if case .quiz = poll.kind { + isQuiz = true + } + let fillColor: UIColor + if let selection = selection { + if selection.isSelected { + if isQuiz { + if selection.isCorrect { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.barPositive : presentationData.theme.theme.chat.message.outgoing.polls.barPositive + } else { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.barNegative : presentationData.theme.theme.chat.message.outgoing.polls.barNegative + } + } else { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.bar : presentationData.theme.theme.chat.message.outgoing.polls.bar + } + } else if isQuiz && selection.isCorrect { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.bar : presentationData.theme.theme.chat.message.outgoing.polls.bar + } else { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.bar : presentationData.theme.theme.chat.message.outgoing.polls.bar + } + } else { + fillColor = incoming ? presentationData.theme.theme.chat.message.incoming.polls.bar : presentationData.theme.theme.chat.message.outgoing.polls.bar + } + + node.resultBarNode.image = generateStretchableFilledCircleImage(diameter: 6.0, color: fillColor) + } + + if updatedResultIcon { + node.resultBarIconNode.image = resultIcon } let minBarWidth: CGFloat = 6.0 let resultBarWidth = minBarWidth + floor((width - leftInset - rightInset - minBarWidth) * (optionResult?.normalized ?? 0.0)) - node.resultBarNode.frame = CGRect(origin: CGPoint(x: leftInset, y: contentHeight - 6.0 - 1.0), size: CGSize(width: resultBarWidth, height: 6.0)) + let barFrame = CGRect(origin: CGPoint(x: leftInset, y: contentHeight - 6.0 - 1.0), size: CGSize(width: resultBarWidth, height: 6.0)) + node.resultBarNode.frame = barFrame + node.resultBarIconNode.frame = CGRect(origin: CGPoint(x: barFrame.minX - 6.0 - 16.0, y: barFrame.minY + floor((barFrame.height - 16.0) / 2.0)), size: CGSize(width: 16.0, height: 16.0)) node.resultBarNode.alpha = optionResult != nil ? 1.0 : 0.0 node.percentageNode.alpha = optionResult != nil ? 1.0 : 0.0 node.separatorNode.alpha = optionResult == nil ? 1.0 : 0.0 + node.resultBarIconNode.alpha = optionResult != nil ? 1.0 : 0.0 if animated, currentResult != optionResult { if (currentResult != nil) != (optionResult != nil) { if optionResult != nil { node.resultBarNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1) node.percentageNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) node.separatorNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.08) + node.resultBarIconNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) } else { node.resultBarNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.4) node.percentageNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2) node.separatorNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) + node.resultBarIconNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2) } } @@ -513,10 +664,17 @@ private let labelsFont = Font.regular(14.0) class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { private let textNode: TextNode private let typeNode: TextNode + private let avatarsNode: MergedAvatarsNode private let votersNode: TextNode + private let buttonSubmitInactiveTextNode: TextNode + private let buttonSubmitActiveTextNode: TextNode + private let buttonViewResultsTextNode: TextNode + private let buttonNode: HighlightableButtonNode private let statusNode: ChatMessageDateAndStatusNode private var optionNodes: [ChatMessagePollOptionNode] = [] + private var poll: TelegramMediaPoll? + required init() { self.textNode = TextNode() self.textNode.isUserInteractionEnabled = false @@ -530,29 +688,100 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { self.typeNode.contentsScale = UIScreenScale self.typeNode.displaysAsynchronously = true + self.avatarsNode = MergedAvatarsNode() + self.votersNode = TextNode() self.votersNode.isUserInteractionEnabled = false self.votersNode.contentMode = .topLeft self.votersNode.contentsScale = UIScreenScale self.votersNode.displaysAsynchronously = true + self.buttonSubmitInactiveTextNode = TextNode() + self.buttonSubmitInactiveTextNode.isUserInteractionEnabled = false + self.buttonSubmitInactiveTextNode.contentMode = .topLeft + self.buttonSubmitInactiveTextNode.contentsScale = UIScreenScale + self.buttonSubmitInactiveTextNode.displaysAsynchronously = true + + self.buttonSubmitActiveTextNode = TextNode() + self.buttonSubmitActiveTextNode.isUserInteractionEnabled = false + self.buttonSubmitActiveTextNode.contentMode = .topLeft + self.buttonSubmitActiveTextNode.contentsScale = UIScreenScale + self.buttonSubmitActiveTextNode.displaysAsynchronously = true + + self.buttonViewResultsTextNode = TextNode() + self.buttonViewResultsTextNode.isUserInteractionEnabled = false + self.buttonViewResultsTextNode.contentMode = .topLeft + self.buttonViewResultsTextNode.contentsScale = UIScreenScale + self.buttonViewResultsTextNode.displaysAsynchronously = true + + self.buttonNode = HighlightableButtonNode() + self.statusNode = ChatMessageDateAndStatusNode() super.init() self.addSubnode(self.textNode) self.addSubnode(self.typeNode) + self.addSubnode(self.avatarsNode) self.addSubnode(self.votersNode) + self.addSubnode(self.buttonSubmitInactiveTextNode) + self.addSubnode(self.buttonSubmitActiveTextNode) + self.addSubnode(self.buttonViewResultsTextNode) + self.addSubnode(self.buttonNode) + + self.buttonNode.addTarget(self, action: #selector(self.buttonPressed), forControlEvents: .touchUpInside) + self.buttonNode.highligthedChanged = { [weak self] highlighted in + if let strongSelf = self { + if highlighted { + strongSelf.buttonSubmitActiveTextNode.layer.removeAnimation(forKey: "opacity") + strongSelf.buttonSubmitActiveTextNode.alpha = 0.6 + strongSelf.buttonViewResultsTextNode.layer.removeAnimation(forKey: "opacity") + strongSelf.buttonViewResultsTextNode.alpha = 0.6 + } else { + strongSelf.buttonSubmitActiveTextNode.alpha = 1.0 + strongSelf.buttonSubmitActiveTextNode.layer.animateAlpha(from: 0.6, to: 1.0, duration: 0.3) + strongSelf.buttonViewResultsTextNode.alpha = 1.0 + strongSelf.buttonViewResultsTextNode.layer.animateAlpha(from: 0.6, to: 1.0, duration: 0.3) + } + } + } } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } + @objc private func buttonPressed() { + guard let item = self.item, let poll = self.poll, let pollId = poll.id else { + return + } + + var hasSelection = false + var selectedOpaqueIdentifiers: [Data] = [] + for optionNode in self.optionNodes { + if let option = optionNode.option { + if let isChecked = optionNode.radioNode?.isChecked { + hasSelection = true + if isChecked { + selectedOpaqueIdentifiers.append(option.opaqueIdentifier) + } + } + } + } + if !hasSelection { + item.controllerInteraction.requestOpenMessagePollResults(item.message.id, pollId) + } else if !selectedOpaqueIdentifiers.isEmpty { + item.controllerInteraction.requestSelectMessagePollOptions(item.message.id, selectedOpaqueIdentifiers) + } + } + override func asyncLayoutContent() -> (_ item: ChatMessageBubbleContentItem, _ layoutConstants: ChatMessageItemLayoutConstants, _ preparePosition: ChatMessageBubblePreparePosition, _ messageSelection: Bool?, _ constrainedSize: CGSize) -> (ChatMessageBubbleContentProperties, CGSize?, CGFloat, (CGSize, ChatMessageBubbleContentPosition) -> (CGFloat, (CGFloat) -> (CGSize, (ListViewItemUpdateAnimation, Bool) -> Void))) { let makeTextLayout = TextNode.asyncLayout(self.textNode) let makeTypeLayout = TextNode.asyncLayout(self.typeNode) let makeVotersLayout = TextNode.asyncLayout(self.votersNode) + let makeSubmitInactiveTextLayout = TextNode.asyncLayout(self.buttonSubmitInactiveTextNode) + let makeSubmitActiveTextLayout = TextNode.asyncLayout(self.buttonSubmitActiveTextNode) + let makeViewResultsTextLayout = TextNode.asyncLayout(self.buttonViewResultsTextNode) let statusLayout = self.statusNode.asyncLayout() var previousPoll: TelegramMediaPoll? @@ -564,11 +793,15 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } } - var previousOptionNodeLayouts: [Data: (_ accountPeerId: PeerId, _ presentationData: ChatPresentationData, _ message: Message, _ option: TelegramMediaPollOption, _ optionResult: ChatMessagePollOptionResult?, _ constrainedWidth: CGFloat) -> (minimumWidth: CGFloat, layout: ((CGFloat) -> (CGSize, (Bool, Bool) -> ChatMessagePollOptionNode)))] = [:] + var previousOptionNodeLayouts: [Data: (_ accountPeerId: PeerId, _ presentationData: ChatPresentationData, _ message: Message, _ poll: TelegramMediaPoll, _ option: TelegramMediaPollOption, _ optionResult: ChatMessagePollOptionResult?, _ constrainedWidth: CGFloat) -> (minimumWidth: CGFloat, layout: ((CGFloat) -> (CGSize, (Bool, Bool) -> ChatMessagePollOptionNode)))] = [:] + var hasSelectedOptions = false for optionNode in self.optionNodes { if let option = optionNode.option { previousOptionNodeLayouts[option.opaqueIdentifier] = ChatMessagePollOptionNode.asyncLayout(optionNode) } + if let isChecked = optionNode.radioNode?.isChecked, isChecked { + hasSelectedOptions = true + } } return { item, layoutConstants, _, _, _ in @@ -653,8 +886,35 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { let (textLayout, textApply) = makeTextLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: nil, insets: textInsets)) let typeText: String - if let poll = poll, poll.isClosed { + + var avatarPeers: [Peer] = [] + if let poll = poll { + for peerId in poll.results.recentVoters { + if let peer = item.message.peers[peerId] { + avatarPeers.append(peer) + } + } + } + + if let poll = poll, poll.isClosed, case .poll = poll.kind { typeText = item.presentationData.strings.MessagePoll_LabelClosed + } else if let poll = poll { + switch poll.kind { + case .poll: + switch poll.publicity { + case .anonymous: + typeText = item.presentationData.strings.MessagePoll_LabelAnonymous + case .public: + typeText = item.presentationData.strings.MessagePoll_LabelPoll + } + case .quiz: + switch poll.publicity { + case .anonymous: + typeText = item.presentationData.strings.MessagePoll_LabelAnonymousQuiz + case .public: + typeText = item.presentationData.strings.MessagePoll_LabelQuiz + } + } } else { typeText = item.presentationData.strings.MessagePoll_LabelAnonymous } @@ -672,6 +932,10 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } let (votersLayout, votersApply) = makeVotersLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: votersString, font: labelsFont, textColor: messageTheme.secondaryTextColor), backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: nil, insets: textInsets)) + let (buttonSubmitInactiveTextLayout, buttonSubmitInactiveTextApply) = makeSubmitInactiveTextLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.presentationData.strings.MessagePoll_SubmitVote, font: Font.regular(17.0), textColor: messageTheme.accentControlDisabledColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: nil, insets: textInsets)) + let (buttonSubmitActiveTextLayout, buttonSubmitActiveTextApply) = makeSubmitActiveTextLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.presentationData.strings.MessagePoll_SubmitVote, font: Font.regular(17.0), textColor: messageTheme.polls.bar), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: nil, insets: textInsets)) + let (buttonViewResultsTextLayout, buttonViewResultsTextApply) = makeViewResultsTextLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.presentationData.strings.MessagePoll_ViewResults, font: Font.regular(17.0), textColor: messageTheme.polls.bar), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: nil, insets: textInsets)) + var textFrame = CGRect(origin: CGPoint(x: -textInsets.left, y: -textInsets.top), size: textLayout.size) var textFrameWithoutInsets = CGRect(origin: CGPoint(x: textFrame.origin.x + textInsets.left, y: textFrame.origin.y + textInsets.top), size: CGSize(width: textFrame.width - textInsets.left - textInsets.right, height: textFrame.height - textInsets.top - textInsets.bottom)) @@ -687,6 +951,8 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { var boundingSize: CGSize = textFrameWithoutInsets.size boundingSize.width = max(boundingSize.width, typeLayout.size.width) boundingSize.width = max(boundingSize.width, votersLayout.size.width + 4.0 + (statusSize?.width ?? 0.0)) + boundingSize.width = max(boundingSize.width, buttonSubmitInactiveTextLayout.size.width + 4.0 + (statusSize?.width ?? 0.0)) + boundingSize.width = max(boundingSize.width, buttonViewResultsTextLayout.size.width + 4.0 + (statusSize?.width ?? 0.0)) boundingSize.width += layoutConstants.text.bubbleInsets.left + layoutConstants.text.bubbleInsets.right boundingSize.height += layoutConstants.text.bubbleInsets.top + layoutConstants.text.bubbleInsets.bottom @@ -733,7 +999,7 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { for i in 0 ..< poll.options.count { let option = poll.options[i] - let makeLayout: (_ accountPeerId: PeerId, _ presentationData: ChatPresentationData, _ message: Message, _ option: TelegramMediaPollOption, _ optionResult: ChatMessagePollOptionResult?, _ constrainedWidth: CGFloat) -> (minimumWidth: CGFloat, layout: ((CGFloat) -> (CGSize, (Bool, Bool) -> ChatMessagePollOptionNode))) + let makeLayout: (_ accountPeerId: PeerId, _ presentationData: ChatPresentationData, _ message: Message, _ poll: TelegramMediaPoll, _ option: TelegramMediaPollOption, _ optionResult: ChatMessagePollOptionResult?, _ constrainedWidth: CGFloat) -> (minimumWidth: CGFloat, layout: ((CGFloat) -> (CGSize, (Bool, Bool) -> ChatMessagePollOptionNode))) if let previous = previousOptionNodeLayouts[option.opaqueIdentifier] { makeLayout = previous } else { @@ -749,7 +1015,7 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } else if poll.isClosed { optionResult = ChatMessagePollOptionResult(normalized: 0, percent: 0, count: 0) } - let result = makeLayout(item.context.account.peerId, item.presentationData, item.message, option, optionResult, constrainedSize.width - layoutConstants.bubble.borderInset * 2.0) + let result = makeLayout(item.context.account.peerId, item.presentationData, item.message, poll, option, optionResult, constrainedSize.width - layoutConstants.bubble.borderInset * 2.0) boundingSize.width = max(boundingSize.width, result.minimumWidth + layoutConstants.bubble.borderInset * 2.0) pollOptionsFinalizeLayouts.append(result.1) } @@ -792,7 +1058,8 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } let optionsVotersSpacing: CGFloat = 11.0 - let votersBottomSpacing: CGFloat = 8.0 + let optionsButtonSpacing: CGFloat = 8.0 + let votersBottomSpacing: CGFloat = 11.0 resultSize.height += optionsVotersSpacing + votersLayout.size.height + votersBottomSpacing var adjustedStatusFrame: CGRect? @@ -800,9 +1067,10 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { adjustedStatusFrame = CGRect(origin: CGPoint(x: boundingWidth - statusFrame.size.width - layoutConstants.text.bubbleInsets.right, y: resultSize.height - statusFrame.size.height - 6.0), size: statusFrame.size) } - return (resultSize, { [weak self] animation, _ in + return (resultSize, { [weak self] animation, synchronousLoad in if let strongSelf = self { strongSelf.item = item + strongSelf.poll = poll let cachedLayout = strongSelf.textNode.cachedLayout @@ -834,7 +1102,9 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { let (size, apply) = optionNodesSizesAndApply[i] var isRequesting = false if let poll = poll, i < poll.options.count { - isRequesting = item.controllerInteraction.pollActionState.pollMessageIdsInProgress[item.message.id] == poll.options[i].opaqueIdentifier + if let inProgressOpaqueIds = item.controllerInteraction.pollActionState.pollMessageIdsInProgress[item.message.id] { + isRequesting = inProgressOpaqueIds.contains(poll.options[i].opaqueIdentifier) + } } let optionNode = apply(animation.isAnimated, isRequesting) if optionNode.supernode !== strongSelf { @@ -845,7 +1115,13 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { return } - item.controllerInteraction.requestSelectMessagePollOption(item.message.id, option.opaqueIdentifier) + item.controllerInteraction.requestSelectMessagePollOptions(item.message.id, [option.opaqueIdentifier]) + } + optionNode.selectionUpdated = { + guard let strongSelf = self else { + return + } + strongSelf.updateSelection() } } optionNode.frame = CGRect(origin: CGPoint(x: layoutConstants.bubble.borderInset, y: verticalOffset), size: size) @@ -887,15 +1163,31 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } else { strongSelf.textNode.frame = textFrame } - strongSelf.typeNode.frame = CGRect(origin: CGPoint(x: textFrame.minX, y: textFrame.maxY + titleTypeSpacing), size: typeLayout.size) + let typeFrame = CGRect(origin: CGPoint(x: textFrame.minX, y: textFrame.maxY + titleTypeSpacing), size: typeLayout.size) + strongSelf.typeNode.frame = typeFrame + strongSelf.avatarsNode.frame = CGRect(origin: CGPoint(x: typeFrame.maxX + 6.0, y: typeFrame.minY + floor((typeFrame.height - mergedImageSize) / 2.0)), size: CGSize(width: mergedImageSpacing * 3.0, height: mergedImageSize)) + strongSelf.avatarsNode.update(context: item.context, peers: avatarPeers, synchronousLoad: synchronousLoad) let _ = votersApply() - strongSelf.votersNode.frame = CGRect(origin: CGPoint(x: textFrame.minX, y: verticalOffset + optionsVotersSpacing), size: votersLayout.size) + strongSelf.votersNode.frame = CGRect(origin: CGPoint(x: floor((resultSize.width - votersLayout.size.width) / 2.0), y: verticalOffset + optionsVotersSpacing), size: votersLayout.size) if animation.isAnimated, let previousPoll = previousPoll, let poll = poll { if previousPoll.results.totalVoters == nil && poll.results.totalVoters != nil { strongSelf.votersNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25) } } + + let _ = buttonSubmitInactiveTextApply() + strongSelf.buttonSubmitInactiveTextNode.frame = CGRect(origin: CGPoint(x: floor((resultSize.width - buttonSubmitInactiveTextLayout.size.width) / 2.0), y: verticalOffset + optionsButtonSpacing), size: buttonSubmitInactiveTextLayout.size) + + let _ = buttonSubmitActiveTextApply() + strongSelf.buttonSubmitActiveTextNode.frame = CGRect(origin: CGPoint(x: floor((resultSize.width - buttonSubmitActiveTextLayout.size.width) / 2.0), y: verticalOffset + optionsButtonSpacing), size: buttonSubmitActiveTextLayout.size) + + let _ = buttonViewResultsTextApply() + strongSelf.buttonViewResultsTextNode.frame = CGRect(origin: CGPoint(x: floor((resultSize.width - buttonViewResultsTextLayout.size.width) / 2.0), y: verticalOffset + optionsButtonSpacing), size: buttonViewResultsTextLayout.size) + + strongSelf.buttonNode.frame = CGRect(origin: CGPoint(x: 0.0, y: verticalOffset), size: CGSize(width: resultSize.width, height: 44.0)) + + strongSelf.updateSelection() } }) }) @@ -903,6 +1195,43 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } } + private func updateSelection() { + guard let poll = self.poll else { + return + } + + var hasSelection = false + var hasSelectedOptions = false + for optionNode in self.optionNodes { + if let isChecked = optionNode.radioNode?.isChecked { + hasSelection = true + if isChecked { + hasSelectedOptions = true + } + } + } + + if hasSelection && poll.pollId.namespace == Namespaces.Media.CloudPoll { + self.votersNode.isHidden = true + self.buttonViewResultsTextNode.isHidden = true + self.buttonSubmitInactiveTextNode.isHidden = hasSelectedOptions + self.buttonSubmitActiveTextNode.isHidden = !hasSelectedOptions + self.buttonNode.isHidden = !hasSelectedOptions + } else { + if case .public = poll.publicity { + self.votersNode.isHidden = true + self.buttonViewResultsTextNode.isHidden = false + self.buttonNode.isHidden = false + } else { + self.votersNode.isHidden = false + self.buttonViewResultsTextNode.isHidden = true + self.buttonNode.isHidden = true + } + self.buttonSubmitInactiveTextNode.isHidden = true + self.buttonSubmitActiveTextNode.isHidden = true + } + } + override func animateInsertion(_ currentTimestamp: Double, duration: Double) { self.textNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) self.statusNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) @@ -954,6 +1283,9 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } } } + if self.buttonNode.isUserInteractionEnabled, !self.buttonNode.isHidden, self.buttonNode.frame.contains(point) { + return .ignore + } return .none } } @@ -965,3 +1297,167 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { return nil } } + +private enum PeerAvatarReference: Equatable { + case letters(PeerId, [String]) + case image(PeerReference, TelegramMediaImageRepresentation) + + var peerId: PeerId { + switch self { + case let .letters(value, _): + return value + case let .image(value, _): + return value.id + } + } +} + +private extension PeerAvatarReference { + init(peer: Peer) { + if let photo = peer.smallProfileImage, let peerReference = PeerReference(peer) { + self = .image(peerReference, photo) + } else { + self = .letters(peer.id, peer.displayLetters) + } + } +} + +private final class MergedAvatarsNodeArguments: NSObject { + let peers: [PeerAvatarReference] + let images: [PeerId: UIImage] + + init(peers: [PeerAvatarReference], images: [PeerId: UIImage]) { + self.peers = peers + self.images = images + } +} + +private let mergedImageSize: CGFloat = 16.0 +private let mergedImageSpacing: CGFloat = 15.0 + +private let avatarFont = avatarPlaceholderFont(size: 8.0) + +private final class MergedAvatarsNode: ASDisplayNode { + private var peers: [PeerAvatarReference] = [] + private var images: [PeerId: UIImage] = [:] + private var disposables: [PeerId: Disposable] = [:] + + override init() { + super.init() + + self.isOpaque = false + self.displaysAsynchronously = true + } + + deinit { + for (_, disposable) in self.disposables { + disposable.dispose() + } + } + + func update(context: AccountContext, peers: [Peer], synchronousLoad: Bool) { + var filteredPeers = peers.map(PeerAvatarReference.init) + if filteredPeers.count > 3 { + filteredPeers.dropLast(filteredPeers.count - 3) + } + if filteredPeers != self.peers { + self.peers = filteredPeers + + var validImageIds: [PeerId] = [] + for peer in filteredPeers { + if case .image = peer { + validImageIds.append(peer.peerId) + } + } + + var removedImageIds: [PeerId] = [] + for (id, _) in self.images { + if !validImageIds.contains(id) { + removedImageIds.append(id) + } + } + var removedDisposableIds: [PeerId] = [] + for (id, disposable) in self.disposables { + if !validImageIds.contains(id) { + disposable.dispose() + removedDisposableIds.append(id) + } + } + for id in removedImageIds { + self.images.removeValue(forKey: id) + } + for id in removedDisposableIds { + self.disposables.removeValue(forKey: id) + } + for peer in filteredPeers { + switch peer { + case let .image(peerReference, representation): + if self.disposables[peer.peerId] == nil { + if let signal = peerAvatarImage(account: context.account, peerReference: peerReference, authorOfMessage: nil, representation: representation, displayDimensions: CGSize(width: mergedImageSize, height: mergedImageSize), synchronousLoad: synchronousLoad) { + let disposable = (signal + |> deliverOnMainQueue).start(next: { [weak self] image in + guard let strongSelf = self else { + return + } + if let image = image { + strongSelf.images[peer.peerId] = image + strongSelf.setNeedsDisplay() + } + }) + self.disposables[peer.peerId] = disposable + } + } + case .letters: + break + } + } + self.setNeedsDisplay() + } + } + + override func drawParameters(forAsyncLayer layer: _ASDisplayLayer) -> NSObjectProtocol { + return MergedAvatarsNodeArguments(peers: self.peers, images: self.images) + } + + @objc override class func draw(_ bounds: CGRect, withParameters parameters: Any?, isCancelled: () -> Bool, isRasterizing: Bool) { + assertNotOnMainThread() + + let context = UIGraphicsGetCurrentContext()! + + if !isRasterizing { + context.setBlendMode(.copy) + context.setFillColor(UIColor.clear.cgColor) + context.fill(bounds) + } + + guard let parameters = parameters as? MergedAvatarsNodeArguments else { + return + } + + let imageOverlaySpacing: CGFloat = 1.0 + context.setBlendMode(.copy) + + var currentX = mergedImageSize + mergedImageSpacing * CGFloat(parameters.peers.count - 1) - mergedImageSize + for i in (0 ..< parameters.peers.count).reversed() { + let imageRect = CGRect(origin: CGPoint(x: currentX, y: 0.0), size: CGSize(width: mergedImageSize, height: mergedImageSize)) + context.setFillColor(UIColor.clear.cgColor) + context.fillEllipse(in: imageRect.insetBy(dx: -1.0, dy: -1.0)) + + switch parameters.peers[i] { + case let .letters(peerId, letters): + context.saveGState() + context.translateBy(x: currentX, y: 0.0) + drawPeerAvatarLetters(context: context, size: CGSize(width: mergedImageSize, height: mergedImageSize), font: avatarFont, letters: letters, peerId: peerId) + context.restoreGState() + case let .image(reference): + if let image = parameters.images[parameters.peers[i].peerId] { + context.draw(image.cgImage!, in: imageRect) + } else { + context.setFillColor(UIColor.gray.cgColor) + context.fillEllipse(in: imageRect) + } + } + currentX -= mergedImageSpacing + } + } +} diff --git a/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift index 0935b94b95..754752aaf1 100644 --- a/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift @@ -403,7 +403,8 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { }, requestRedeliveryOfFailedMessages: { _ in }, addContact: { _ in }, rateCall: { _, _ in - }, requestSelectMessagePollOption: { _, _ in + }, requestSelectMessagePollOptions: { _, _ in + }, requestOpenMessagePollResults: { _, _ in }, openAppStorePage: { [weak self] in if let strongSelf = self { strongSelf.context.sharedContext.applicationBindings.openAppStorePage() diff --git a/submodules/TelegramUI/TelegramUI/OverlayPlayerControllerNode.swift b/submodules/TelegramUI/TelegramUI/OverlayPlayerControllerNode.swift index e208056b5e..5bcac43c65 100644 --- a/submodules/TelegramUI/TelegramUI/OverlayPlayerControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/OverlayPlayerControllerNode.swift @@ -107,7 +107,8 @@ final class OverlayAudioPlayerControllerNode: ViewControllerTracingNode, UIGestu }, requestRedeliveryOfFailedMessages: { _ in }, addContact: { _ in }, rateCall: { _, _ in - }, requestSelectMessagePollOption: { _, _ in + }, requestSelectMessagePollOptions: { _, _ in + }, requestOpenMessagePollResults: { _, _ in }, openAppStorePage: { }, displayMessageTooltip: { _, _, _, _ in }, seekToTimecode: { _, _, _ in diff --git a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift index 790f9394e1..062c136117 100644 --- a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift +++ b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift @@ -412,7 +412,8 @@ public class PeerMediaCollectionController: TelegramBaseController { }, requestRedeliveryOfFailedMessages: { _ in }, addContact: { _ in }, rateCall: { _, _ in - }, requestSelectMessagePollOption: { _, _ in + }, requestSelectMessagePollOptions: { _, _ in + }, requestOpenMessagePollResults: { _, _ in }, openAppStorePage: { }, displayMessageTooltip: { _, _, _, _ in }, seekToTimecode: { _, _, _ in diff --git a/submodules/TelegramUI/TelegramUI/PollResultsController.swift b/submodules/TelegramUI/TelegramUI/PollResultsController.swift new file mode 100644 index 0000000000..ec86253a00 --- /dev/null +++ b/submodules/TelegramUI/TelegramUI/PollResultsController.swift @@ -0,0 +1,313 @@ +import Foundation +import Postbox +import SyncCore +import TelegramCore +import SwiftSignalKit +import TelegramPresentationData +import AccountContext +import ItemListUI +import Display +import ItemListPeerItem +import ItemListPeerActionItem + +private let collapsedResultCount: Int = 10 + +private final class PollResultsControllerArguments { + let context: AccountContext + let collapseOption: (Data) -> Void + let expandOption: (Data) -> Void + let openPeer: (RenderedPeer) -> Void + + init(context: AccountContext, collapseOption: @escaping (Data) -> Void, expandOption: @escaping (Data) -> Void, openPeer: @escaping (RenderedPeer) -> Void) { + self.context = context + self.collapseOption = collapseOption + self.expandOption = expandOption + self.openPeer = openPeer + } +} + +private enum PollResultsSection { + case text + case option(Int) + + var rawValue: Int32 { + switch self { + case .text: + return 0 + case let .option(index): + return 1 + Int32(index) + } + } +} + +private enum PollResultsEntryId: Hashable { + case text + case optionPeer(Int, Int) + case optionExpand(Int) +} + +private enum PollResultsEntry: ItemListNodeEntry { + case text(String) + case optionPeer(optionId: Int, index: Int, peer: RenderedPeer, optionText: String, optionPercentage: Int, optionExpanded: Bool, opaqueIdentifier: Data) + case optionExpand(optionId: Int, opaqueIdentifier: Data, text: String) + + var section: ItemListSectionId { + switch self { + case .text: + return PollResultsSection.text.rawValue + case let .optionPeer(optionPeer): + return PollResultsSection.option(optionPeer.optionId).rawValue + case let .optionExpand(optionExpand): + return PollResultsSection.option(optionExpand.optionId).rawValue + } + } + + var stableId: PollResultsEntryId { + switch self { + case .text: + return .text + case let .optionPeer(optionPeer): + return .optionPeer(optionPeer.optionId, optionPeer.index) + case let .optionExpand(optionExpand): + return .optionExpand(optionExpand.optionId) + } + } + + static func <(lhs: PollResultsEntry, rhs: PollResultsEntry) -> Bool { + switch lhs { + case .text: + switch rhs { + case .text: + return false + default: + return true + } + case let .optionPeer(lhsOptionPeer): + switch rhs { + case .text: + return false + case let .optionPeer(rhsOptionPeer): + if lhsOptionPeer.optionId == rhsOptionPeer.optionId { + return lhsOptionPeer.index < rhsOptionPeer.index + } else { + return lhsOptionPeer.optionId < rhsOptionPeer.optionId + } + case let .optionExpand(rhsOptionExpand): + if lhsOptionPeer.optionId == rhsOptionExpand.optionId { + return true + } else { + return lhsOptionPeer.optionId < rhsOptionExpand.optionId + } + } + case let .optionExpand(lhsOptionExpand): + switch rhs { + case .text: + return false + case let .optionPeer(rhsOptionPeer): + if lhsOptionExpand.optionId == rhsOptionPeer.optionId { + return false + } else { + return lhsOptionExpand.optionId < rhsOptionPeer.optionId + } + case let .optionExpand(rhsOptionExpand): + if lhsOptionExpand.optionId == rhsOptionExpand.optionId { + return false + } else { + return lhsOptionExpand.optionId < rhsOptionExpand.optionId + } + } + } + } + + func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem { + let arguments = arguments as! PollResultsControllerArguments + switch self { + case let .text(text): + return ItemListTextItem(presentationData: presentationData, text: .large(text), sectionId: self.section) + case let .optionPeer(optionId, _, peer, optionText, optionPercentage, optionExpanded, opaqueIdentifier): + let header = ItemListPeerItemHeader(theme: presentationData.theme, strings: presentationData.strings, text: optionText, actionTitle: optionExpanded ? presentationData.strings.PollResults_Collapse : "\(optionPercentage)%", id: Int64(optionId), action: optionExpanded ? { + arguments.collapseOption(opaqueIdentifier) + } : nil) + return ItemListPeerItem(presentationData: presentationData, dateTimeFormat: PresentationDateTimeFormat(timeFormat: .regular, dateFormat: .dayFirst, dateSeparator: ".", decimalSeparator: ".", groupingSeparator: ""), nameDisplayOrder: .firstLast, context: arguments.context, peer: peer.peers[peer.peerId]!, presence: nil, text: .none, label: .none, editing: ItemListPeerItemEditing(editable: false, editing: false, revealed: false), switchValue: nil, enabled: true, selectable: true, sectionId: self.section, action: { + arguments.openPeer(peer) + }, setPeerIdWithRevealedOptions: { _, _ in + }, removePeer: { _ in + }, noInsets: true, header: header) + case let .optionExpand(_, opaqueIdentifier, text): + return ItemListPeerActionItem(presentationData: presentationData, icon: PresentationResourcesItemList.downArrowImage(presentationData.theme), title: text, sectionId: self.section, editing: false, action: { + arguments.expandOption(opaqueIdentifier) + }) + } + } +} + +private struct PollResultsControllerState: Equatable { + var expandedOptions = Set() +} + +private func pollResultsControllerEntries(presentationData: PresentationData, poll: TelegramMediaPoll, state: PollResultsControllerState, resultsState: PollResultsState) -> [PollResultsEntry] { + var entries: [PollResultsEntry] = [] + + var isEmpty = false + for (_, optionState) in resultsState.options { + if !optionState.hasLoadedOnce { + isEmpty = true + break + } + } + + entries.append(.text(poll.text)) + + if isEmpty { + return entries + } + + var optionVoterCount: [Int: Int32] = [:] + let totalVoterCount = poll.results.totalVoters ?? 0 + var optionPercentage: [Int] = [] + + if totalVoterCount != 0 { + if let voters = poll.results.voters, let totalVoters = poll.results.totalVoters { + for i in 0 ..< poll.options.count { + inner: for optionVoters in voters { + if optionVoters.opaqueIdentifier == poll.options[i].opaqueIdentifier { + optionVoterCount[i] = optionVoters.count + break inner + } + } + } + } + + optionPercentage = countNicePercent(votes: (0 ..< poll.options.count).map({ Int(optionVoterCount[$0] ?? 0) }), total: Int(totalVoterCount)) + } + + for i in 0 ..< poll.options.count { + let option = poll.options[i] + if let optionState = resultsState.options[option.opaqueIdentifier], !optionState.peers.isEmpty { + let percentage = optionPercentage.count > i ? optionPercentage[i] : 0 + var peerIndex = 0 + var hasMore = false + let optionExpanded = state.expandedOptions.contains(option.opaqueIdentifier) + + var peers = optionState.peers + var count = optionState.count + /*#if DEBUG + for _ in 0 ..< 10 { + peers += peers + } + count = max(count, peers.count) + #endif*/ + + inner: for peer in peers { + if !optionExpanded && peerIndex >= collapsedResultCount { + hasMore = true + break inner + } + entries.append(.optionPeer(optionId: i, index: peerIndex, peer: peer, optionText: option.text, optionPercentage: percentage, optionExpanded: optionExpanded, opaqueIdentifier: option.opaqueIdentifier)) + peerIndex += 1 + } + + if hasMore { + let remainingCount = count - peerIndex + entries.append(.optionExpand(optionId: i, opaqueIdentifier: option.opaqueIdentifier, text: presentationData.strings.PollResults_ShowMore(Int32(remainingCount)))) + } + } + } + + return entries +} + +public func pollResultsController(context: AccountContext, messageId: MessageId, poll: TelegramMediaPoll) -> ViewController { + let statePromise = ValuePromise(PollResultsControllerState(), ignoreRepeated: true) + let stateValue = Atomic(value: PollResultsControllerState()) + let updateState: ((PollResultsControllerState) -> PollResultsControllerState) -> Void = { f in + statePromise.set(stateValue.modify { f($0) }) + } + + var pushControllerImpl: ((ViewController) -> Void)? + var dismissImpl: (() -> Void)? + + let actionsDisposable = DisposableSet() + + let resultsContext = PollResultsContext(account: context.account, messageId: messageId, poll: poll) + + let arguments = PollResultsControllerArguments(context: context, + collapseOption: { optionId in + updateState { state in + var state = state + state.expandedOptions.remove(optionId) + return state + } + }, expandOption: { optionId in + updateState { state in + var state = state + state.expandedOptions.insert(optionId) + return state + } + let _ = (resultsContext.state + |> take(1) + |> deliverOnMainQueue).start(next: { [weak resultsContext] state in + if let optionState = state.options[optionId] { + if optionState.canLoadMore && optionState.peers.count <= collapsedResultCount { + resultsContext?.loadMore(optionOpaqueIdentifier: optionId) + } + } + }) + }, openPeer: { peer in + if let peer = peer.peers[peer.peerId] { + if let controller = context.sharedContext.makePeerInfoController(context: context, peer: peer, mode: .generic) { + pushControllerImpl?(controller) + } + } + }) + + let previousWasEmpty = Atomic(value: nil) + + let signal = combineLatest(queue: .mainQueue(), + context.sharedContext.presentationData, + statePromise.get(), + resultsContext.state + ) + |> map { presentationData, state, resultsState -> (ItemListControllerState, (ItemListNodeState, Any)) in + let leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Close), style: .regular, enabled: true, action: { + dismissImpl?() + }) + + var isEmpty = false + for (_, optionState) in resultsState.options { + if !optionState.hasLoadedOnce { + isEmpty = true + break + } + } + + var emptyStateItem: ItemListControllerEmptyStateItem? + if isEmpty { + emptyStateItem = ItemListLoadingIndicatorEmptyStateItem(theme: presentationData.theme) + } + + let previousWasEmptyValue = previousWasEmpty.swap(isEmpty) + + let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text(presentationData.strings.PollResults_Title), leftNavigationButton: leftNavigationButton, rightNavigationButton: nil, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: false) + let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: pollResultsControllerEntries(presentationData: presentationData, poll: poll, state: state, resultsState: resultsState), style: .blocks, focusItemTag: nil, ensureVisibleItemTag: nil, emptyStateItem: emptyStateItem, crossfadeState: previousWasEmptyValue != nil && previousWasEmptyValue == true && isEmpty == false, animateChanges: false) + + return (controllerState, (listState, arguments)) + } + |> afterDisposed { + actionsDisposable.dispose() + } + + let controller = ItemListController(context: context, state: signal) + controller.navigationPresentation = .modal + pushControllerImpl = { [weak controller] c in + controller?.push(c) + } + dismissImpl = { [weak controller] in + controller?.dismiss() + } + controller.isOpaqueWhenInOverlay = true + controller.blocksBackgroundWhenInOverlay = true + + return controller +} + diff --git a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping index c997aa4de02b6996545b266eea7747bef03ed857..50908ecc674c59dd50dc4fc22f6d4b0e7e646ebc 100644 GIT binary patch delta 40415 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 delta 40453 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­y^h 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 diff --git a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift index 926fab00f0..91734a2350 100644 --- a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift +++ b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift @@ -1116,7 +1116,8 @@ public final class SharedAccountContextImpl: SharedAccountContext { }, requestRedeliveryOfFailedMessages: { _ in }, addContact: { _ in }, rateCall: { _, _ in - }, requestSelectMessagePollOption: { _, _ in + }, requestSelectMessagePollOptions: { _, _ in + }, requestOpenMessagePollResults: { _, _ in }, openAppStorePage: { }, displayMessageTooltip: { _, _, _, _ in }, seekToTimecode: { _, _, _ in diff --git a/submodules/WalletUI/Resources/WalletStrings.mapping b/submodules/WalletUI/Resources/WalletStrings.mapping index 589c6fe85e4fa03a50b6adefffe67915bd39bf1c..9f7c34892095545bdfb3f1e1871a24394137ff12 100644 GIT binary patch delta 17 YcmX@$c))Q(i^Al^3bKrhlN%M}070t;9smFU delta 40 vcmX@$c))Q(i-L?e0|P^NVopwKiC$ String { + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/WatchBridge/Sources/WatchRequestHandlers.swift b/submodules/WatchBridge/Sources/WatchRequestHandlers.swift index 95f32f18e2..0609691bde 100644 --- a/submodules/WatchBridge/Sources/WatchRequestHandlers.swift +++ b/submodules/WatchBridge/Sources/WatchRequestHandlers.swift @@ -400,7 +400,7 @@ final class WatchMediaHandler: WatchRequestHandler { } } |> mapToSignal({ peer -> Signal in if let peer = peer, let representation = peer.smallProfileImage { - let imageData = peerAvatarImageData(account: context.account, peer: peer, authorOfMessage: nil, representation: representation, synchronousLoad: false) + let imageData = peerAvatarImageData(account: context.account, peerReference: PeerReference(peer), authorOfMessage: nil, representation: representation, synchronousLoad: false) if let imageData = imageData { return imageData |> map { data -> UIImage? in