diff --git a/Images.xcassets/Chat/Info/GroupAdminsIcon.imageset/Admin.pdf b/Images.xcassets/Chat/Info/GroupAdminsIcon.imageset/Admin.pdf index 0642012e7a..8f80608cb5 100644 Binary files a/Images.xcassets/Chat/Info/GroupAdminsIcon.imageset/Admin.pdf and b/Images.xcassets/Chat/Info/GroupAdminsIcon.imageset/Admin.pdf differ diff --git a/Images.xcassets/Chat/Info/GroupBannedIcon.imageset/Banned.pdf b/Images.xcassets/Chat/Info/GroupBannedIcon.imageset/Banned.pdf index 1ddf5e4bb0..0c1a5a5aa6 100644 Binary files a/Images.xcassets/Chat/Info/GroupBannedIcon.imageset/Banned.pdf and b/Images.xcassets/Chat/Info/GroupBannedIcon.imageset/Banned.pdf differ diff --git a/Images.xcassets/Chat/Info/GroupMembersIcon.imageset/Members.pdf b/Images.xcassets/Chat/Info/GroupMembersIcon.imageset/Members.pdf index 9acdeec97f..328e939221 100644 Binary files a/Images.xcassets/Chat/Info/GroupMembersIcon.imageset/Members.pdf and b/Images.xcassets/Chat/Info/GroupMembersIcon.imageset/Members.pdf differ diff --git a/Images.xcassets/Chat/Info/GroupPermissionsIcon.imageset/Permissions.pdf b/Images.xcassets/Chat/Info/GroupPermissionsIcon.imageset/Permissions.pdf index ef2a10c8a6..7b949dade0 100644 Binary files a/Images.xcassets/Chat/Info/GroupPermissionsIcon.imageset/Permissions.pdf and b/Images.xcassets/Chat/Info/GroupPermissionsIcon.imageset/Permissions.pdf differ diff --git a/TelegramUI.xcodeproj/project.pbxproj b/TelegramUI.xcodeproj/project.pbxproj index 22c75e9a86..1b51b98889 100644 --- a/TelegramUI.xcodeproj/project.pbxproj +++ b/TelegramUI.xcodeproj/project.pbxproj @@ -1013,7 +1013,6 @@ D0EC6E521EB9F58900EBF1C3 /* ChannelInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FC71E5F8AB100202CDB /* ChannelInfoController.swift */; }; D0EC6E531EB9F58900EBF1C3 /* ChannelMembersController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FCC1E60482300202CDB /* ChannelMembersController.swift */; }; D0EC6E541EB9F58900EBF1C3 /* ConvertToSupergroupController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FD41E6064D200202CDB /* ConvertToSupergroupController.swift */; }; - D0EC6E551EB9F58900EBF1C3 /* GroupAdminsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033FEAA1E61BFC100644997 /* GroupAdminsController.swift */; }; D0EC6E561EB9F58900EBF1C3 /* UserInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E621E65BECA00E2FEF5 /* UserInfoController.swift */; }; D0EC6E571EB9F58900EBF1C3 /* GroupsInCommonController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099261E1E69791E00D95539 /* GroupsInCommonController.swift */; }; D0EC6E581EB9F58900EBF1C3 /* PeerSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF731DCA207200761F81 /* PeerSelectionController.swift */; }; @@ -1401,7 +1400,6 @@ D02F4AE81FCF370B004DFBAE /* ChatMessageInteractiveMediaBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageInteractiveMediaBadge.swift; sourceTree = ""; }; D02F4AEF1FD4C46D004DFBAE /* SystemVideoContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemVideoContent.swift; sourceTree = ""; }; D03120F51DA534C1006A2A60 /* ItemListActionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemListActionItem.swift; sourceTree = ""; }; - D033FEAA1E61BFC100644997 /* GroupAdminsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupAdminsController.swift; sourceTree = ""; }; D0380DA8204E9C81000414AB /* SecretMediaPreviewFooterContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretMediaPreviewFooterContentNode.swift; sourceTree = ""; }; D0380DAA204EA72F000414AB /* RadialStatusSecretTimeoutContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadialStatusSecretTimeoutContentNode.swift; sourceTree = ""; }; D0380DAC204ED434000414AB /* LegacyLiveUploadInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyLiveUploadInterface.swift; sourceTree = ""; }; @@ -4104,7 +4102,6 @@ D0613FCC1E60482300202CDB /* ChannelMembersController.swift */, D0613FD41E6064D200202CDB /* ConvertToSupergroupController.swift */, D08984ED2114964700918162 /* GroupPreHistorySetupController.swift */, - D033FEAA1E61BFC100644997 /* GroupAdminsController.swift */, D0528E621E65BECA00E2FEF5 /* UserInfoController.swift */, D099261E1E69791E00D95539 /* GroupsInCommonController.swift */, D0F67FEF1EE6B8A8000E5906 /* ChannelMembersSearchController.swift */, @@ -5891,7 +5888,6 @@ D093D7E72063E57F00BC3599 /* BotPaymentActionItemNode.swift in Sources */, D01C06BA1FBBB076001561AB /* ItemListSelectableControlNode.swift in Sources */, D0EC6E541EB9F58900EBF1C3 /* ConvertToSupergroupController.swift in Sources */, - D0EC6E551EB9F58900EBF1C3 /* GroupAdminsController.swift in Sources */, D0EC6E561EB9F58900EBF1C3 /* UserInfoController.swift in Sources */, D0EC6E571EB9F58900EBF1C3 /* GroupsInCommonController.swift in Sources */, D0AB262F21C3D3DE008F6685 /* CreatePollController.swift in Sources */, diff --git a/TelegramUI/ChannelAdminController.swift b/TelegramUI/ChannelAdminController.swift index 963ab63594..c11fdacd0b 100644 --- a/TelegramUI/ChannelAdminController.swift +++ b/TelegramUI/ChannelAdminController.swift @@ -678,52 +678,37 @@ public func channelAdminController(account: Account, peerId: PeerId, adminId: Pe } if let updateFlags = updateFlags, updateFlags != defaultFlags { - let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } - let controller = ActionSheetController(presentationTheme: presentationData.theme) - let dismissAction: () -> Void = { [weak controller] in - controller?.dismissAnimated() + let signal = convertGroupToSupergroup(account: account, peerId: peerId) + |> map(Optional.init) + |> `catch` { _ -> Signal in + return .single(nil) } - controller.setItemGroups([ - ActionSheetItemGroup(items: [ - ActionSheetTextItem(title: presentationData.strings.Group_AdvanceUpgradeText), - ActionSheetButtonItem(title: presentationData.strings.Group_AdvanceUpgradeApply, color: .destructive, action: { - dismissAction() - let signal = convertGroupToSupergroup(account: account, peerId: peerId) - |> map(Optional.init) - |> `catch` { _ -> Signal in - return .single(nil) - } - |> mapToSignal { upgradedPeerId -> Signal in - guard let upgradedPeerId = upgradedPeerId else { - return .single(nil) - } - return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: account, peerId: upgradedPeerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags)) - |> mapToSignal { _ -> Signal in - return .complete() - } - |> then(.single(upgradedPeerId)) - } - |> deliverOnMainQueue - - updateState { current in - return current.withUpdatedUpdating(true) - } - updateRightsDisposable.set(signal.start(next: { upgradedPeerId in - if let upgradedPeerId = upgradedPeerId { - upgradedToSupergroup(upgradedPeerId, { - dismissImpl?() - }) - } - }, error: { _ in - updateState { current in - return current.withUpdatedUpdating(false) - } - })) + |> mapToSignal { upgradedPeerId -> Signal in + guard let upgradedPeerId = upgradedPeerId else { + return .single(nil) + } + return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: account, peerId: upgradedPeerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags)) + |> mapToSignal { _ -> Signal in + return .complete() + } + |> then(.single(upgradedPeerId)) + } + |> deliverOnMainQueue + + updateState { current in + return current.withUpdatedUpdating(true) + } + updateRightsDisposable.set(signal.start(next: { upgradedPeerId in + if let upgradedPeerId = upgradedPeerId { + upgradedToSupergroup(upgradedPeerId, { + dismissImpl?() }) - ]), - ActionSheetItemGroup(items: [ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, action: { dismissAction() })]) - ]) - presentControllerImpl?(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) + } + }, error: { _ in + updateState { current in + return current.withUpdatedUpdating(false) + } + })) } else { dismissImpl?() } diff --git a/TelegramUI/ChannelAdminsController.swift b/TelegramUI/ChannelAdminsController.swift index 527e6982d4..dc88298e53 100644 --- a/TelegramUI/ChannelAdminsController.swift +++ b/TelegramUI/ChannelAdminsController.swift @@ -387,7 +387,7 @@ private func channelAdminsControllerEntries(presentationData: PresentationData, } } else if let peer = view.peers[view.peerId] as? TelegramGroup { let isGroup = true - entries.append(.recentActions(presentationData.theme, presentationData.strings.Group_Info_AdminLog)) + //entries.append(.recentActions(presentationData.theme, presentationData.strings.Group_Info_AdminLog)) if let participants = participants { entries.append(.adminsHeader(presentationData.theme, presentationData.strings.ChannelMembers_GroupAdminsTitle)) @@ -486,37 +486,6 @@ public func channelAdminsController(account: Account, peerId: PeerId, loadComple var upgradedToSupergroupImpl: ((PeerId, @escaping () -> Void) -> Void)? - let presentUpgradeOption: () -> Void = { - let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } - let controller = ActionSheetController(presentationTheme: presentationData.theme) - let dismissAction: () -> Void = { [weak controller] in - controller?.dismissAnimated() - } - controller.setItemGroups([ - ActionSheetItemGroup(items: [ - ActionSheetTextItem(title: presentationData.strings.Group_AdvanceUpgradeText), - ActionSheetButtonItem(title: presentationData.strings.Group_AdvanceUpgradeApply, color: .destructive, action: { - dismissAction() - let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } - let progress = OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .loading(cancelled: nil)) - presentControllerImpl?(progress, nil) - - upgradeDisposable.set((convertGroupToSupergroup(account: account, peerId: peerId) - |> afterDisposed { [weak progress] in - Queue.mainQueue().async { - progress?.dismiss() - } - } - |> deliverOnMainQueue).start(next: { upgradedPeerId in - upgradedToSupergroupImpl?(upgradedPeerId, {}) - })) - }) - ]), - ActionSheetItemGroup(items: [ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, action: { dismissAction() })]) - ]) - presentControllerImpl?(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) - } - let upgradedToSupergroup: (PeerId, @escaping () -> Void) -> Void = { upgradedPeerId, f in upgradedToSupergroupImpl?(upgradedPeerId, f) } @@ -525,7 +494,6 @@ public func channelAdminsController(account: Account, peerId: PeerId, loadComple let _ = (account.postbox.loadedPeerWithId(peerId) |> deliverOnMainQueue).start(next: { peer in if peer is TelegramGroup { - presentUpgradeOption() } else { pushControllerImpl?(ChatRecentActionsController(account: account, peer: peer)) } diff --git a/TelegramUI/ChannelBannedMemberController.swift b/TelegramUI/ChannelBannedMemberController.swift index 95635c3362..7ccd38fe29 100644 --- a/TelegramUI/ChannelBannedMemberController.swift +++ b/TelegramUI/ChannelBannedMemberController.swift @@ -264,7 +264,7 @@ private func completeRights(_ flags: TelegramChatBannedRightsFlags) -> TelegramC private func channelBannedMemberControllerEntries(presentationData: PresentationData, state: ChannelBannedMemberControllerState, accountPeerId: PeerId, channelView: PeerView, memberView: PeerView, initialParticipant: ChannelParticipant?, initialBannedBy: Peer?) -> [ChannelBannedMemberEntry] { var entries: [ChannelBannedMemberEntry] = [] - if let _ = channelView.peers[channelView.peerId] as? TelegramChannel, let cachedData = channelView.cachedData as? CachedChannelData, let defaultBannedRights = cachedData.defaultBannedRights, let member = memberView.peers[memberView.peerId] { + if let channel = channelView.peers[channelView.peerId] as? TelegramChannel, let _ = channelView.cachedData as? CachedChannelData, let defaultBannedRights = channel.defaultBannedRights, let member = memberView.peers[memberView.peerId] { entries.append(.info(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, member, memberView.peerPresences[member.id] as? TelegramUserPresence)) let currentRightsFlags: TelegramChatBannedRightsFlags @@ -304,6 +304,50 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation entries.append(.timeout(presentationData.theme, presentationData.strings.GroupPermission_Duration, currentTimeoutString)) + if let initialParticipant = initialParticipant, case let .member(member) = initialParticipant, let banInfo = member.banInfo, let initialBannedBy = initialBannedBy { + entries.append(.exceptionInfo(presentationData.theme, presentationData.strings.GroupPermission_AddedInfo(initialBannedBy.displayTitle, stringForRelativeSymbolicTimestamp(strings: presentationData.strings, relativeTimestamp: banInfo.timestamp, relativeTo: state.referenceTimestamp, dateTimeFormat: presentationData.dateTimeFormat)).0)) + entries.append(.delete(presentationData.theme, presentationData.strings.GroupPermission_Delete)) + } + } else if let group = channelView.peers[channelView.peerId] as? TelegramGroup, let defaultBannedRights = group.defaultBannedRights, let member = memberView.peers[memberView.peerId] { + entries.append(.info(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, member, memberView.peerPresences[member.id] as? TelegramUserPresence)) + + let currentRightsFlags: TelegramChatBannedRightsFlags + if let updatedFlags = state.updatedFlags { + currentRightsFlags = updatedFlags + } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { + currentRightsFlags = banInfo.rights.flags + } else { + currentRightsFlags = defaultBannedRights.flags + } + + let currentTimeout: Int32 + if let updatedTimeout = state.updatedTimeout { + currentTimeout = updatedTimeout + } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { + currentTimeout = banInfo.rights.untilDate + } else { + currentTimeout = Int32.max + } + + let currentTimeoutString: String + if currentTimeout == 0 || currentTimeout == Int32.max { + currentTimeoutString = presentationData.strings.MessageTimer_Forever + } else { + let remainingTimeout = currentTimeout - state.referenceTimestamp + currentTimeoutString = timeIntervalString(strings: presentationData.strings, value: remainingTimeout) + } + + entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle)) + + var index = 0 + for right in allGroupPermissionList { + let defaultEnabled = !defaultBannedRights.flags.contains(right) + entries.append(.rightItem(presentationData.theme, index, stringForGroupPermission(strings: presentationData.strings, right: right), right, defaultEnabled && !currentRightsFlags.contains(right), defaultEnabled && !state.updating)) + index += 1 + } + + entries.append(.timeout(presentationData.theme, presentationData.strings.GroupPermission_Duration, currentTimeoutString)) + if let initialParticipant = initialParticipant, case let .member(member) = initialParticipant, let banInfo = member.banInfo, let initialBannedBy = initialBannedBy { entries.append(.exceptionInfo(presentationData.theme, presentationData.strings.GroupPermission_AddedInfo(initialBannedBy.displayTitle, stringForRelativeSymbolicTimestamp(strings: presentationData.strings, relativeTimestamp: banInfo.timestamp, relativeTo: state.referenceTimestamp, dateTimeFormat: presentationData.dateTimeFormat)).0)) entries.append(.delete(presentationData.theme, presentationData.strings.GroupPermission_Delete)) @@ -313,7 +357,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation return entries } -public func channelBannedMemberController(account: Account, peerId: PeerId, memberId: PeerId, initialParticipant: ChannelParticipant?, updated: @escaping (TelegramChatBannedRights?) -> Void) -> ViewController { +public func channelBannedMemberController(account: Account, peerId: PeerId, memberId: PeerId, initialParticipant: ChannelParticipant?, updated: @escaping (TelegramChatBannedRights?) -> Void, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void) -> ViewController { let initialState = ChannelBannedMemberControllerState(referenceTimestamp: Int32(Date().timeIntervalSince1970), updatedFlags: nil, updatedTimeout: nil, updating: false) let statePromise = ValuePromise(initialState, ignoreRepeated: true) let stateValue = Atomic(value: initialState) @@ -336,33 +380,42 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb let _ = (peerView.get() |> take(1) |> deliverOnMainQueue).start(next: { view in - if let cachedData = view.cachedData as? CachedChannelData { - updateState { state in - var state = state - var effectiveRightsFlags: TelegramChatBannedRightsFlags - if let updatedFlags = state.updatedFlags { - effectiveRightsFlags = updatedFlags - } else if let initialParticipant = initialParticipant, case let .member(member) = initialParticipant, let banInfo = member.banInfo { - effectiveRightsFlags = banInfo.rights.flags - } else if let defaultBannedRightsFlags = cachedData.defaultBannedRights?.flags { - effectiveRightsFlags = defaultBannedRightsFlags - } else { - effectiveRightsFlags = TelegramChatBannedRightsFlags() - } - if value { - effectiveRightsFlags.remove(rights) - effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) - } else { - effectiveRightsFlags.insert(rights) - for right in allGroupPermissionList { - if groupPermissionDependencies(right).contains(rights) { - effectiveRightsFlags.insert(right) - } + var defaultBannedRightsFlagsValue: TelegramChatBannedRightsFlags? + guard let peer = view.peers[peerId] else { + return + } + if let channel = peer as? TelegramChannel, let initialRightFlags = channel.defaultBannedRights?.flags { + defaultBannedRightsFlagsValue = initialRightFlags + } else if let group = peer as? TelegramGroup, let initialRightFlags = group.defaultBannedRights?.flags { + defaultBannedRightsFlagsValue = initialRightFlags + } + guard let defaultBannedRightsFlags = defaultBannedRightsFlagsValue else { + return + } + + updateState { state in + var state = state + var effectiveRightsFlags: TelegramChatBannedRightsFlags + if let updatedFlags = state.updatedFlags { + effectiveRightsFlags = updatedFlags + } else if let initialParticipant = initialParticipant, case let .member(member) = initialParticipant, let banInfo = member.banInfo { + effectiveRightsFlags = banInfo.rights.flags + } else { + effectiveRightsFlags = defaultBannedRightsFlags + } + if value { + effectiveRightsFlags.remove(rights) + effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) + } else { + effectiveRightsFlags.insert(rights) + for right in allGroupPermissionList { + if groupPermissionDependencies(right).contains(rights) { + effectiveRightsFlags.insert(right) } } - state.updatedFlags = effectiveRightsFlags - return state } + state.updatedFlags = effectiveRightsFlags + return state } }) }, openTimeout: { @@ -461,9 +514,20 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb let _ = (peerView.get() |> take(1) |> deliverOnMainQueue).start(next: { view in - guard let channel = view.peers[peerId] as? TelegramChannel, let cachedData = view.cachedData as? CachedChannelData, let initialRightFlags = cachedData.defaultBannedRights?.flags else { + var defaultBannedRightsFlagsValue: TelegramChatBannedRightsFlags? + guard let peer = view.peers[peerId] else { return } + if let channel = peer as? TelegramChannel, let initialRightFlags = channel.defaultBannedRights?.flags { + defaultBannedRightsFlagsValue = initialRightFlags + } else if let group = peer as? TelegramGroup, let initialRightFlags = group.defaultBannedRights?.flags { + defaultBannedRightsFlagsValue = initialRightFlags + } + guard let defaultBannedRightsFlags = defaultBannedRightsFlagsValue else { + return + } + + var resolvedRights: TelegramChatBannedRights? if let initialParticipant = initialParticipant { var updateFlags: TelegramChatBannedRightsFlags? @@ -477,7 +541,7 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb if updateFlags == nil && updateTimeout == nil { if case let .member(_, _, _, maybeBanInfo) = initialParticipant { if maybeBanInfo == nil { - updateFlags = initialRightFlags + updateFlags = defaultBannedRightsFlags updateTimeout = Int32.max } } @@ -490,7 +554,7 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb } else if case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { currentRightsFlags = banInfo.rights.flags } else { - currentRightsFlags = initialRightFlags + currentRightsFlags = defaultBannedRightsFlags } let currentTimeout: Int32 @@ -502,7 +566,7 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb currentTimeout = Int32.max } - resolvedRights = TelegramChatBannedRights(flags: completeRights(currentRightsFlags), personal: false, untilDate: currentTimeout) + resolvedRights = TelegramChatBannedRights(flags: completeRights(currentRightsFlags), untilDate: currentTimeout) } } else if canEdit, let _ = channelView.peers[channelView.peerId] as? TelegramChannel { var updateFlags: TelegramChatBannedRightsFlags? @@ -516,14 +580,14 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb } if updateFlags == nil { - updateFlags = initialRightFlags + updateFlags = defaultBannedRightsFlags } if updateTimeout == nil { updateTimeout = Int32.max } if let updateFlags = updateFlags, let updateTimeout = updateTimeout { - resolvedRights = TelegramChatBannedRights(flags: completeRights(updateFlags), personal: false, untilDate: updateTimeout) + resolvedRights = TelegramChatBannedRights(flags: completeRights(updateFlags), untilDate: updateTimeout) } } @@ -533,8 +597,8 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb } if let resolvedRights = resolvedRights, previousRights != resolvedRights { - let cleanResolvedRightsFlags = resolvedRights.flags.union(initialRightFlags) - let cleanResolvedRights = TelegramChatBannedRights(flags: cleanResolvedRightsFlags, personal: false, untilDate: resolvedRights.untilDate) + let cleanResolvedRightsFlags = resolvedRights.flags.union(defaultBannedRightsFlags) + let cleanResolvedRights = TelegramChatBannedRights(flags: cleanResolvedRightsFlags, untilDate: resolvedRights.untilDate) if cleanResolvedRights.flags.isEmpty && previousRights == nil { dismissImpl?() @@ -545,36 +609,72 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb state.updating = true return state } - updateRightsDisposable.set((account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: memberId, bannedRights: cleanResolvedRights) - |> deliverOnMainQueue).start(error: { _ in - - }, completed: { - if previousRights == nil { - let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } - presentControllerImpl?(OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .genericSuccess(presentationData.strings.GroupPermission_AddSuccess)), nil) + + if peerId.namespace == Namespaces.Peer.CloudGroup { + let signal = convertGroupToSupergroup(account: account, peerId: peerId) + |> map(Optional.init) + |> `catch` { _ -> Signal in + return .single(nil) + } + |> mapToSignal { upgradedPeerId -> Signal in + guard let upgradedPeerId = upgradedPeerId else { + return .single(nil) + } + return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: upgradedPeerId, memberId: memberId, bannedRights: cleanResolvedRights) + |> mapToSignal { _ -> Signal in + return .complete() + } + |> then(.single(upgradedPeerId)) + } + |> deliverOnMainQueue + + updateState { current in + var current = current + current.updating = true + return current + } + updateRightsDisposable.set(signal.start(next: { upgradedPeerId in + if let upgradedPeerId = upgradedPeerId { + upgradedToSupergroup(upgradedPeerId, { + dismissImpl?() + }) + } + }, error: { _ in + updateState { current in + var current = current + current.updating = false + return current } - updated(cleanResolvedRights.flags.isEmpty ? nil : cleanResolvedRights) - dismissImpl?() })) + } else { + updateRightsDisposable.set((account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: memberId, bannedRights: cleanResolvedRights) + |> deliverOnMainQueue).start(error: { _ in + + }, completed: { + if previousRights == nil { + let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } + presentControllerImpl?(OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .genericSuccess(presentationData.strings.GroupPermission_AddSuccess)), nil) + } + updated(cleanResolvedRights.flags.isEmpty ? nil : cleanResolvedRights) + dismissImpl?() + })) + } } - if false && previousRights == nil { + + let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } + let actionSheet = ActionSheetController(presentationTheme: presentationData.theme) + var items: [ActionSheetItem] = [] + items.append(ActionSheetTextItem(title: presentationData.strings.GroupPermission_ApplyAlertText(peer.displayTitle).0)) + items.append(ActionSheetButtonItem(title: presentationData.strings.GroupPermission_ApplyAlertAction, color: .accent, font: .default, enabled: true, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() applyRights() - } else { - let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } - let actionSheet = ActionSheetController(presentationTheme: presentationData.theme) - var items: [ActionSheetItem] = [] - items.append(ActionSheetTextItem(title: presentationData.strings.GroupPermission_ApplyAlertText(channel.displayTitle).0)) - items.append(ActionSheetButtonItem(title: presentationData.strings.GroupPermission_ApplyAlertAction, color: .accent, font: .default, enabled: true, action: { [weak actionSheet] in + })) + actionSheet.setItemGroups([ActionSheetItemGroup(items: items), ActionSheetItemGroup(items: [ + ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() - applyRights() - })) - actionSheet.setItemGroups([ActionSheetItemGroup(items: items), ActionSheetItemGroup(items: [ - ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() - }) - ])]) - presentControllerImpl?(actionSheet, nil) - } + }) + ])]) + presentControllerImpl?(actionSheet, nil) } } else { dismissImpl?() diff --git a/TelegramUI/ChannelBlacklistController.swift b/TelegramUI/ChannelBlacklistController.swift index 468913c2b7..28176e7cf4 100644 --- a/TelegramUI/ChannelBlacklistController.swift +++ b/TelegramUI/ChannelBlacklistController.swift @@ -310,7 +310,7 @@ public func channelBlacklistController(account: Account, peerId: PeerId) -> View let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } let progress = OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .loading(cancelled: nil)) presentControllerImpl?(progress, nil) - removePeerDisposable.set((account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: peer.id, bannedRights: TelegramChatBannedRights(flags: [.banReadMessages], personal: false, untilDate: Int32.max)) + removePeerDisposable.set((account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: peer.id, bannedRights: TelegramChatBannedRights(flags: [.banReadMessages], untilDate: Int32.max)) |> deliverOnMainQueue).start(error: { [weak progress] _ in progress?.dismiss() dismissController?() diff --git a/TelegramUI/ChannelInfoController.swift b/TelegramUI/ChannelInfoController.swift index 28255eadd3..3630226c1b 100644 --- a/TelegramUI/ChannelInfoController.swift +++ b/TelegramUI/ChannelInfoController.swift @@ -686,7 +686,7 @@ public func channelInfoController(account: Account, peerId: PeerId) -> ViewContr return state } }, openChannelTypeSetup: { - presentControllerImpl?(channelVisibilityController(account: account, peerId: peerId, mode: .generic), ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) + presentControllerImpl?(channelVisibilityController(account: account, peerId: peerId, mode: .generic, upgradedToSupergroup: { _, f in f() }), ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) }, changeNotificationMuteSettings: { let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 } let _ = (account.postbox.transaction { transaction -> (TelegramPeerNotificationSettings, GlobalNotificationSettings) in diff --git a/TelegramUI/ChannelMembersController.swift b/TelegramUI/ChannelMembersController.swift index eb6b305887..69bdc99e1a 100644 --- a/TelegramUI/ChannelMembersController.swift +++ b/TelegramUI/ChannelMembersController.swift @@ -387,7 +387,7 @@ public func channelMembersController(account: Account, peerId: PeerId) -> ViewCo return $0.withUpdatedRemovingPeerId(memberId) } - removePeerDisposable.set((account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: memberId, bannedRights: TelegramChatBannedRights(flags: [.banReadMessages], personal: false, untilDate: Int32.max)) + removePeerDisposable.set((account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: memberId, bannedRights: TelegramChatBannedRights(flags: [.banReadMessages], untilDate: Int32.max)) |> deliverOnMainQueue).start(completed: { updateState { return $0.withUpdatedRemovingPeerId(nil) @@ -398,7 +398,7 @@ public func channelMembersController(account: Account, peerId: PeerId) -> ViewCo pushControllerImpl?(controller) } }, inviteViaLink: { - presentControllerImpl?(channelVisibilityController(account: account, peerId: peerId, mode: .privateLink), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) + presentControllerImpl?(channelVisibilityController(account: account, peerId: peerId, mode: .privateLink, upgradedToSupergroup: { _, f in f() }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }) let peerView = account.viewTracker.peerView(peerId) diff --git a/TelegramUI/ChannelMembersSearchContainerNode.swift b/TelegramUI/ChannelMembersSearchContainerNode.swift index 57583509de..de0da68883 100644 --- a/TelegramUI/ChannelMembersSearchContainerNode.swift +++ b/TelegramUI/ChannelMembersSearchContainerNode.swift @@ -242,7 +242,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod }, upgradedToSupergroup: { _, f in f() }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }, restrictPeer: { participant in present(channelBannedMemberController(account: account, peerId: peerId, memberId: participant.peer.id, initialParticipant: participant.participant, updated: { _ in - }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) + }, upgradedToSupergroup: { _, f in f() }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }, removePeer: { memberId in let signal = account.postbox.loadedPeerWithId(memberId) |> deliverOnMainQueue @@ -260,7 +260,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod } if peerId.namespace == Namespaces.Peer.CloudChannel { - return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: memberId, bannedRights: TelegramChatBannedRights(flags: [.banReadMessages], personal: false, untilDate: Int32.max)) + return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: memberId, bannedRights: TelegramChatBannedRights(flags: [.banReadMessages], untilDate: Int32.max)) |> afterDisposed { Queue.mainQueue().async { updateState { state in diff --git a/TelegramUI/ChannelPermissionsController.swift b/TelegramUI/ChannelPermissionsController.swift index 93e421e1fa..38585b72ac 100644 --- a/TelegramUI/ChannelPermissionsController.swift +++ b/TelegramUI/ChannelPermissionsController.swift @@ -325,7 +325,7 @@ private func completeRights(_ flags: TelegramChatBannedRightsFlags) -> TelegramC private func channelPermissionsControllerEntries(presentationData: PresentationData, view: PeerView, state: ChannelPermissionsControllerState, participants: [RenderedChannelParticipant]?) -> [ChannelPermissionsEntry] { var entries: [ChannelPermissionsEntry] = [] - if let _ = view.peers[view.peerId] as? TelegramChannel, let participants = participants, let cachedData = view.cachedData as? CachedChannelData, let defaultBannedRights = cachedData.defaultBannedRights { + if let channel = view.peers[view.peerId] as? TelegramChannel, let participants = participants, let cachedData = view.cachedData as? CachedChannelData, let defaultBannedRights = channel.defaultBannedRights { let effectiveRightsFlags: TelegramChatBannedRightsFlags if let modifiedRightsFlags = state.modifiedRightsFlags { effectiveRightsFlags = modifiedRightsFlags @@ -349,7 +349,7 @@ private func channelPermissionsControllerEntries(presentationData: PresentationD entries.append(.peerItem(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, index, participant, ItemListPeerItemEditing(editable: true, editing: false, revealed: participant.peer.id == state.peerIdWithRevealedOptions), state.removingPeerId != participant.peer.id, true, effectiveRightsFlags)) index += 1 } - } else if let _ = view.peers[view.peerId] as? TelegramGroup, let cachedData = view.cachedData as? CachedGroupData, let defaultBannedRights = cachedData.defaultBannedRights { + } else if let group = view.peers[view.peerId] as? TelegramGroup, let cachedData = view.cachedData as? CachedGroupData, let defaultBannedRights = group.defaultBannedRights { let effectiveRightsFlags: TelegramChatBannedRightsFlags if let modifiedRightsFlags = state.modifiedRightsFlags { effectiveRightsFlags = modifiedRightsFlags @@ -363,12 +363,15 @@ private func channelPermissionsControllerEntries(presentationData: PresentationD entries.append(.permission(presentationData.theme, rightIndex, stringForGroupPermission(strings: presentationData.strings, right: rights), !effectiveRightsFlags.contains(rights), rights)) rightIndex += 1 } + + entries.append(.exceptionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_Exceptions)) + entries.append(.add(presentationData.theme, presentationData.strings.GroupInfo_Permissions_AddException)) } return entries } -public func channelPermissionsController(account: Account, peerId: PeerId) -> ViewController { +public func channelPermissionsController(account: Account, peerId: PeerId, loadCompleted: @escaping () -> Void = {}) -> ViewController { let statePromise = ValuePromise(ChannelPermissionsControllerState(), ignoreRepeated: true) let stateValue = Atomic(value: ChannelPermissionsControllerState()) let updateState: ((ChannelPermissionsControllerState) -> ChannelPermissionsControllerState) -> Void = { f in @@ -389,11 +392,21 @@ public func channelPermissionsController(account: Account, peerId: PeerId) -> Vi let peersPromise = Promise<[RenderedChannelParticipant]?>(nil) let disposableAndLoadMoreControl: (Disposable, PeerChannelMemberCategoryControl?) if peerId.namespace == Namespaces.Peer.CloudGroup { + loadCompleted() disposableAndLoadMoreControl = (EmptyDisposable, nil) peersPromise.set(.single(nil)) } else { + var loadCompletedCalled = false disposableAndLoadMoreControl = account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.restricted(postbox: account.postbox, network: account.network, accountPeerId: account.peerId, peerId: peerId, updated: { state in - peersPromise.set(.single(state.list)) + if case .loading(true) = state.loadingState { + peersPromise.set(.single(nil)) + } else { + if !loadCompletedCalled { + loadCompletedCalled = true + loadCompleted() + } + peersPromise.set(.single(state.list)) + } }) } actionsDisposable.add(disposableAndLoadMoreControl.0) @@ -404,17 +417,23 @@ public func channelPermissionsController(account: Account, peerId: PeerId) -> Vi let peerView = Promise() peerView.set(account.viewTracker.peerView(peerId)) + var upgradedToSupergroupImpl: ((PeerId, @escaping () -> Void) -> Void)? + + let upgradedToSupergroup: (PeerId, @escaping () -> Void) -> Void = { upgradedPeerId, f in + upgradedToSupergroupImpl?(upgradedPeerId, f) + } + let arguments = ChannelPermissionsControllerArguments(account: account, updatePermission: { rights, value in let _ = (peerView.get() |> take(1) |> deliverOnMainQueue).start(next: { view in - if let cachedData = view.cachedData as? CachedChannelData { + if let channel = view.peers[peerId] as? TelegramChannel, let cachedData = view.cachedData as? CachedChannelData { updateState { state in var state = state var effectiveRightsFlags: TelegramChatBannedRightsFlags if let modifiedRightsFlags = state.modifiedRightsFlags { effectiveRightsFlags = modifiedRightsFlags - } else if let defaultBannedRightsFlags = cachedData.defaultBannedRights?.flags { + } else if let defaultBannedRightsFlags = channel.defaultBannedRights?.flags { effectiveRightsFlags = defaultBannedRightsFlags } else { effectiveRightsFlags = TelegramChatBannedRightsFlags() @@ -435,16 +454,16 @@ public func channelPermissionsController(account: Account, peerId: PeerId) -> Vi } let state = stateValue.with { $0 } if let modifiedRightsFlags = state.modifiedRightsFlags { - updateDefaultRightsDisposable.set((updateDefaultChannelMemberBannedRights(account: account, peerId: peerId, rights: TelegramChatBannedRights(flags: completeRights(modifiedRightsFlags), personal: false, untilDate: Int32.max)) + updateDefaultRightsDisposable.set((updateDefaultChannelMemberBannedRights(account: account, peerId: peerId, rights: TelegramChatBannedRights(flags: completeRights(modifiedRightsFlags), untilDate: Int32.max)) |> deliverOnMainQueue).start()) } - } else if let cachedData = view.cachedData as? CachedGroupData { + } else if let group = view.peers[peerId] as? TelegramGroup, let cachedData = view.cachedData as? CachedGroupData { updateState { state in var state = state var effectiveRightsFlags: TelegramChatBannedRightsFlags if let modifiedRightsFlags = state.modifiedRightsFlags { effectiveRightsFlags = modifiedRightsFlags - } else if let defaultBannedRightsFlags = cachedData.defaultBannedRights?.flags { + } else if let defaultBannedRightsFlags = group.defaultBannedRights?.flags { effectiveRightsFlags = defaultBannedRightsFlags } else { effectiveRightsFlags = TelegramChatBannedRightsFlags() @@ -465,7 +484,7 @@ public func channelPermissionsController(account: Account, peerId: PeerId) -> Vi } let state = stateValue.with { $0 } if let modifiedRightsFlags = state.modifiedRightsFlags { - updateDefaultRightsDisposable.set((updateDefaultChannelMemberBannedRights(account: account, peerId: peerId, rights: TelegramChatBannedRights(flags: completeRights(modifiedRightsFlags), personal: false, untilDate: Int32.max)) + updateDefaultRightsDisposable.set((updateDefaultChannelMemberBannedRights(account: account, peerId: peerId, rights: TelegramChatBannedRights(flags: completeRights(modifiedRightsFlags), untilDate: Int32.max)) |> deliverOnMainQueue).start()) } } @@ -496,10 +515,9 @@ public func channelPermissionsController(account: Account, peerId: PeerId) -> Vi let _ = (account.postbox.loadedPeerWithId(peerId) |> deliverOnMainQueue).start(next: { channel in dismissController?() - guard let _ = channel as? TelegramChannel else { - return - } presentControllerImpl?(channelBannedMemberController(account: account, peerId: peerId, memberId: peer.id, initialParticipant: participant?.participant, updated: { _ in + }, upgradedToSupergroup: { upgradedPeerId, f in + upgradedToSupergroupImpl?(upgradedPeerId, f) }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }) }) @@ -530,6 +548,8 @@ public func channelPermissionsController(account: Account, peerId: PeerId) -> Vi })) }, openPeer: { participant in presentControllerImpl?(channelBannedMemberController(account: account, peerId: peerId, memberId: participant.peerId, initialParticipant: participant, updated: { _ in + }, upgradedToSupergroup: { upgradedPeerId, f in + upgradedToSupergroupImpl?(upgradedPeerId, f) }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }, openPeerInfo: { peer in if let controller = peerInfoController(account: account, peer: peer) { @@ -578,6 +598,8 @@ public func channelPermissionsController(account: Account, peerId: PeerId) -> Vi return state } presentControllerImpl?(channelBannedMemberController(account: account, peerId: peerId, memberId: participant.peerId, initialParticipant: participant, updated: { _ in + }, upgradedToSupergroup: { upgradedPeerId, f in + upgradedToSupergroupImpl?(upgradedPeerId, f) }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) } }, present: { c, a in @@ -607,6 +629,16 @@ public func channelPermissionsController(account: Account, peerId: PeerId) -> Vi (controller.navigationController as? NavigationController)?.pushViewController(c) } } + upgradedToSupergroupImpl = { [weak controller] upgradedPeerId, f in + guard let controller = controller, let navigationController = controller.navigationController as? NavigationController else { + return + } + navigateToChatController(navigationController: navigationController, account: account, chatLocation: .peer(upgradedPeerId), keepStack: .never, animated: false, completion: { + navigationController.pushViewController(channelPermissionsController(account: account, peerId: upgradedPeerId, loadCompleted: { + f() + }), animated: false) + }) + } if peerId.namespace == Namespaces.Peer.CloudChannel { controller.visibleBottomContentOffsetChanged = { offset in if case let .known(value) = offset, value < 40.0 { diff --git a/TelegramUI/ChannelVisibilityController.swift b/TelegramUI/ChannelVisibilityController.swift index 132cc70d0e..cf960ed214 100644 --- a/TelegramUI/ChannelVisibilityController.swift +++ b/TelegramUI/ChannelVisibilityController.swift @@ -571,22 +571,127 @@ private func channelVisibilityControllerEntries(presentationData: PresentationDa } } } else if let _ = view.peers[view.peerId] as? TelegramGroup { - let link = (view.cachedData as? CachedGroupData)?.exportedInvitation?.link - let text: String - if let link = link { - text = link - } else { - text = presentationData.strings.Channel_NotificationLoading - } - entries.append(.privateLink(presentationData.theme, text, link)) - entries.append(.privateLinkInfo(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_Help)) switch mode { - case .initialSetup: - break - case .generic, .privateLink: - entries.append(.privateLinkCopy(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_CopyLink)) - entries.append(.privateLinkRevoke(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_RevokeLink)) - entries.append(.privateLinkShare(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_ShareLink)) + case .privateLink: + let link = (view.cachedData as? CachedGroupData)?.exportedInvitation?.link + let text: String + if let link = link { + text = link + } else { + text = presentationData.strings.Channel_NotificationLoading + } + entries.append(.privateLink(presentationData.theme, text, link)) + entries.append(.privateLinkInfo(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_Help)) + switch mode { + case .initialSetup: + break + case .generic, .privateLink: + entries.append(.privateLinkCopy(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_CopyLink)) + entries.append(.privateLinkRevoke(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_RevokeLink)) + entries.append(.privateLinkShare(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_ShareLink)) + } + case .generic, .initialSetup: + let isGroup = true + + let selectedType: CurrentChannelType + if let current = state.selectedType { + selectedType = current + } else { + selectedType = .privateChannel + } + + let currentAddressName: String + if let current = state.editingPublicLinkText { + currentAddressName = current + } else { + currentAddressName = "" + } + + entries.append(.typeHeader(presentationData.theme, presentationData.strings.Group_Setup_TypeHeader)) + entries.append(.typePublic(presentationData.theme, presentationData.strings.Channel_Setup_TypePublic, selectedType == .publicChannel)) + entries.append(.typePrivate(presentationData.theme, presentationData.strings.Channel_Setup_TypePrivate, selectedType == .privateChannel)) + + entries.append(.typeInfo(presentationData.theme, presentationData.strings.Group_Setup_TypePublicHelp)) + + switch selectedType { + case .publicChannel: + let displayAvailability = publicChannelsToRevoke == nil || !(publicChannelsToRevoke!.isEmpty) + + if displayAvailability { + if let publicChannelsToRevoke = publicChannelsToRevoke { + entries.append(.publicLinkAvailability(presentationData.theme, presentationData.strings.Group_Username_RemoveExistingUsernamesInfo, false)) + var index: Int32 = 0 + for peer in publicChannelsToRevoke.sorted(by: { lhs, rhs in + var lhsDate: Int32 = 0 + var rhsDate: Int32 = 0 + if let lhs = lhs as? TelegramChannel { + lhsDate = lhs.creationDate + } + if let rhs = rhs as? TelegramChannel { + rhsDate = rhs.creationDate + } + return lhsDate > rhsDate + }) { + entries.append(.existingLinkPeerItem(index, presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, peer, ItemListPeerItemEditing(editable: true, editing: true, revealed: state.revealedRevokePeerId == peer.id), state.revokingPeerId == nil)) + index += 1 + } + } else { + entries.append(.publicLinkAvailability(presentationData.theme, presentationData.strings.Group_Username_CreatePublicLinkHelp, true)) + } + } else { + entries.append(.editablePublicLink(presentationData.theme, currentAddressName)) + if let status = state.addressNameValidationStatus { + let text: String + switch status { + case let .invalidFormat(error): + switch error { + case .startsWithDigit: + text = presentationData.strings.Group_Username_InvalidStartsWithNumber + case .startsWithUnderscore: + text = presentationData.strings.Channel_Username_InvalidCharacters + case .endsWithUnderscore: + text = presentationData.strings.Channel_Username_InvalidCharacters + case .tooShort: + text = presentationData.strings.Group_Username_InvalidTooShort + case .invalidCharacters: + text = presentationData.strings.Channel_Username_InvalidCharacters + } + case let .availability(availability): + switch availability { + case .available: + text = presentationData.strings.Channel_Username_UsernameIsAvailable(currentAddressName).0 + case .invalid: + text = presentationData.strings.Channel_Username_InvalidCharacters + case .taken: + text = presentationData.strings.Channel_Username_InvalidTaken + } + case .checking: + text = presentationData.strings.Channel_Username_CheckingUsername + } + + entries.append(.publicLinkStatus(presentationData.theme, text, status)) + } + entries.append(.publicLinkInfo(presentationData.theme, presentationData.strings.Group_Username_CreatePublicLinkHelp)) + } + case .privateChannel: + let link = (view.cachedData as? CachedGroupData)?.exportedInvitation?.link + let text: String + if let link = link { + text = link + } else { + text = presentationData.strings.Channel_NotificationLoading + } + entries.append(.privateLink(presentationData.theme, text, link)) + entries.append(.privateLinkInfo(presentationData.theme, presentationData.strings.Group_Username_CreatePrivateLinkHelp)) + switch mode { + case .initialSetup: + break + case .generic, .privateLink: + entries.append(.privateLinkCopy(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_CopyLink)) + entries.append(.privateLinkRevoke(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_RevokeLink)) + entries.append(.privateLinkShare(presentationData.theme, presentationData.strings.GroupInfo_InviteLink_ShareLink)) + } + } } } @@ -606,34 +711,45 @@ private func effectiveChannelType(state: ChannelVisibilityControllerState, peer: return selectedType } -private func updatedAddressName(state: ChannelVisibilityControllerState, peer: TelegramChannel) -> String? { - let selectedType = effectiveChannelType(state: state, peer: peer) - - let currentAddressName: String - - switch selectedType { - case .privateChannel: - currentAddressName = "" - case .publicChannel: - if let current = state.editingPublicLinkText { - currentAddressName = current - } else { - if let addressName = peer.addressName { - currentAddressName = addressName +private func updatedAddressName(state: ChannelVisibilityControllerState, peer: Peer) -> String? { + if let peer = peer as? TelegramChannel { + let selectedType = effectiveChannelType(state: state, peer: peer) + + let currentAddressName: String + + switch selectedType { + case .privateChannel: + currentAddressName = "" + case .publicChannel: + if let current = state.editingPublicLinkText { + currentAddressName = current } else { - currentAddressName = "" + if let addressName = peer.addressName { + currentAddressName = addressName + } else { + currentAddressName = "" + } } + } + + if !currentAddressName.isEmpty { + if currentAddressName != peer.addressName { + return currentAddressName + } else { + return nil } - } - - if !currentAddressName.isEmpty { - if currentAddressName != peer.addressName { + } else if peer.addressName != nil { + return "" + } else { + return nil + } + } else if let _ = peer as? TelegramGroup { + let currentAddressName = state.editingPublicLinkText ?? "" + if !currentAddressName.isEmpty { return currentAddressName } else { return nil } - } else if peer.addressName != nil { - return "" } else { return nil } @@ -645,7 +761,7 @@ public enum ChannelVisibilityControllerMode { case privateLink } -public func channelVisibilityController(account: Account, peerId: PeerId, mode: ChannelVisibilityControllerMode) -> ViewController { +public func channelVisibilityController(account: Account, peerId: PeerId, mode: ChannelVisibilityControllerMode, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void) -> ViewController { let statePromise = ValuePromise(ChannelVisibilityControllerState(), ignoreRepeated: true) let stateValue = Atomic(value: ChannelVisibilityControllerState()) let updateState: ((ChannelVisibilityControllerState) -> ChannelVisibilityControllerState) -> Void = { f in @@ -684,7 +800,7 @@ public func channelVisibilityController(account: Account, peerId: PeerId, mode: actionsDisposable.add( (account.viewTracker.peerView(peerId) |> filter { $0.cachedData != nil } |> take(1) |> mapToSignal { view -> Signal in return ensuredExistingPeerExportedInvitation(account: account, peerId: peerId) - } ).start()) + }).start()) let arguments = ChannelVisibilityControllerArguments(account: account, updateCurrentType: { type in updateState { state in @@ -816,145 +932,237 @@ public func channelVisibilityController(account: Account, peerId: PeerId, mode: let previousHadNamesToRevoke = Atomic(value: nil) let signal = combineLatest((account.applicationContext as! TelegramApplicationContext).presentationData, statePromise.get() |> deliverOnMainQueue, peerView, peersDisablingAddressNameAssignment.get() |> deliverOnMainQueue) - |> deliverOnMainQueue - |> map { presentationData, state, view, publicChannelsToRevoke -> (ItemListControllerState, (ItemListNodeState, ChannelVisibilityEntry.ItemGenerationArguments)) in - let peer = peerViewMainPeer(view) - - var rightNavigationButton: ItemListNavigationButton? - if let peer = peer as? TelegramChannel { - var doneEnabled = true - if let selectedType = state.selectedType { - switch selectedType { - case .privateChannel: - break - case .publicChannel: - if let addressNameValidationStatus = state.addressNameValidationStatus { - switch addressNameValidationStatus { - case .availability(.available): - break - default: - doneEnabled = false - } - } else { - doneEnabled = !(peer.addressName?.isEmpty ?? true) + |> deliverOnMainQueue + |> map { presentationData, state, view, publicChannelsToRevoke -> (ItemListControllerState, (ItemListNodeState, ChannelVisibilityEntry.ItemGenerationArguments)) in + let peer = peerViewMainPeer(view) + + var rightNavigationButton: ItemListNavigationButton? + if let peer = peer as? TelegramChannel { + var doneEnabled = true + if let selectedType = state.selectedType { + switch selectedType { + case .privateChannel: + break + case .publicChannel: + if let addressNameValidationStatus = state.addressNameValidationStatus { + switch addressNameValidationStatus { + case .availability(.available): + break + default: + doneEnabled = false } - } + } else { + doneEnabled = !(peer.addressName?.isEmpty ?? true) + } + } + } + + rightNavigationButton = ItemListNavigationButton(content: .text(mode == .initialSetup ? presentationData.strings.Common_Next : presentationData.strings.Common_Done), style: state.updatingAddressName ? .activity : .bold, enabled: doneEnabled, action: { + var updatedAddressNameValue: String? + updateState { state in + updatedAddressNameValue = updatedAddressName(state: state, peer: peer) + return state } - rightNavigationButton = ItemListNavigationButton(content: .text(mode == .initialSetup ? presentationData.strings.Common_Next : presentationData.strings.Common_Done), style: state.updatingAddressName ? .activity : .bold, enabled: doneEnabled, action: { - var updatedAddressNameValue: String? - updateState { state in - updatedAddressNameValue = updatedAddressName(state: state, peer: peer) - return state + if let updatedAddressNameValue = updatedAddressNameValue { + let invokeAction: () -> Void = { + updateState { state in + return state.withUpdatedUpdatingAddressName(true) + } + _ = ApplicationSpecificNotice.markAsSeenSetPublicChannelLink(postbox: account.postbox).start() + + updateAddressNameDisposable.set((updateAddressName(account: account, domain: .peer(peerId), name: updatedAddressNameValue.isEmpty ? nil : updatedAddressNameValue) |> timeout(10, queue: Queue.mainQueue(), alternate: .fail(.generic)) + |> deliverOnMainQueue).start(error: { _ in + updateState { state in + return state.withUpdatedUpdatingAddressName(false) + } + presentControllerImpl?(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: presentationData.theme), title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) + + }, completed: { + updateState { state in + return state.withUpdatedUpdatingAddressName(false) + } + + switch mode { + case .initialSetup: + nextImpl?() + case .generic, .privateLink: + dismissImpl?() + } + })) + } - if let updatedAddressNameValue = updatedAddressNameValue { - let invokeAction: ()->Void = { - updateState { state in - return state.withUpdatedUpdatingAddressName(true) - } - _ = ApplicationSpecificNotice.markAsSeenSetPublicChannelLink(postbox: account.postbox).start() - - updateAddressNameDisposable.set((updateAddressName(account: account, domain: .peer(peerId), name: updatedAddressNameValue.isEmpty ? nil : updatedAddressNameValue) |> timeout(10, queue: Queue.mainQueue(), alternate: .fail(.generic)) - |> deliverOnMainQueue).start(error: { _ in - updateState { state in - return state.withUpdatedUpdatingAddressName(false) - } - presentControllerImpl?(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: presentationData.theme), title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) - - }, completed: { - updateState { state in - return state.withUpdatedUpdatingAddressName(false) - } - - switch mode { - case .initialSetup: - nextImpl?() - case .generic, .privateLink: - dismissImpl?() - } - })) + _ = (ApplicationSpecificNotice.getSetPublicChannelLink(postbox: account.postbox) |> deliverOnMainQueue).start(next: { showAlert in + if showAlert { + let confirm = standardTextAlertController(theme: AlertControllerTheme(presentationTheme: presentationData.theme), title: nil, text: presentationData.strings.Channel_Edit_PrivatePublicLinkAlert, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: invokeAction)]) + presentControllerImpl?(confirm, nil) + } else { + invokeAction() } - - _ = (ApplicationSpecificNotice.getSetPublicChannelLink(postbox: account.postbox) |> deliverOnMainQueue).start(next: { showAlert in - if showAlert { - let confirm = standardTextAlertController(theme: AlertControllerTheme(presentationTheme: presentationData.theme), title: nil, text: presentationData.strings.Channel_Edit_PrivatePublicLinkAlert, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: invokeAction)]) - - presentControllerImpl?(confirm, nil) - } else { - invokeAction() - } - }) - } else { - switch mode { - case .initialSetup: - nextImpl?() - case .generic, .privateLink: - dismissImpl?() - } + }) + } else { + switch mode { + case .initialSetup: + nextImpl?() + case .generic, .privateLink: + dismissImpl?() } - }) - } - - if state.revokingPeerId != nil { - rightNavigationButton = ItemListNavigationButton(content: .none, style: .activity, enabled: true, action: {}) - } - - var isGroup = false - if let peer = peer as? TelegramChannel { - if case .group = peer.info { - isGroup = true + } + }) + } else if let peer = peer as? TelegramGroup { + var doneEnabled = true + if let selectedType = state.selectedType { + switch selectedType { + case .privateChannel: + break + case .publicChannel: + if let addressNameValidationStatus = state.addressNameValidationStatus { + switch addressNameValidationStatus { + case .availability(.available): + break + default: + doneEnabled = false + } + } else { + doneEnabled = !(peer.addressName?.isEmpty ?? true) + } } } - let leftNavigationButton: ItemListNavigationButton? - switch mode { - case .initialSetup: - leftNavigationButton = nil - case .generic, .privateLink: - leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: { - dismissImpl?() - }) - } - - var crossfade: Bool = false - let hasNamesToRevoke = publicChannelsToRevoke != nil && !publicChannelsToRevoke!.isEmpty - let hadNamesToRevoke = previousHadNamesToRevoke.swap(hasNamesToRevoke) - if let peer = view.peers[view.peerId] as? TelegramChannel { - let selectedType: CurrentChannelType - if case .privateLink = mode { - selectedType = .privateChannel - } else { - if let current = state.selectedType { - selectedType = current - } else { - if let addressName = peer.addressName, !addressName.isEmpty { - selectedType = .publicChannel - } else { - selectedType = .privateChannel - } - } + rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Done), style: state.updatingAddressName ? .activity : .bold, enabled: doneEnabled, action: { + var updatedAddressNameValue: String? + updateState { state in + updatedAddressNameValue = updatedAddressName(state: state, peer: peer) + return state } - if selectedType == .publicChannel, let hadNamesToRevoke = hadNamesToRevoke { - crossfade = hadNamesToRevoke != hasNamesToRevoke + if let updatedAddressNameValue = updatedAddressNameValue { + let invokeAction: () -> Void = { + updateState { state in + return state.withUpdatedUpdatingAddressName(true) + } + _ = ApplicationSpecificNotice.markAsSeenSetPublicChannelLink(postbox: account.postbox).start() + + let signal = convertGroupToSupergroup(account: account, peerId: peerId) + |> map(Optional.init) + |> `catch` { _ -> Signal in + return .single(nil) + } + |> mapToSignal { upgradedPeerId -> Signal in + guard let upgradedPeerId = upgradedPeerId else { + return .single(nil) + } + return updateAddressName(account: account, domain: .peer(upgradedPeerId), name: updatedAddressNameValue.isEmpty ? nil : updatedAddressNameValue) + |> `catch` { _ -> Signal in + return .complete() + } + |> mapToSignal { _ -> Signal in + return .complete() + } + |> then(.single(upgradedPeerId)) + } + |> deliverOnMainQueue + + updateAddressNameDisposable.set((signal + |> deliverOnMainQueue).start(next: { updatedPeerId in + if let updatedPeerId = updatedPeerId { + upgradedToSupergroup(updatedPeerId, { + dismissImpl?() + }) + } else { + dismissImpl?() + } + }, error: { _ in + updateState { state in + return state.withUpdatedUpdatingAddressName(false) + } + presentControllerImpl?(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: presentationData.theme), title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) + + })) + } + + _ = (ApplicationSpecificNotice.getSetPublicChannelLink(postbox: account.postbox) |> deliverOnMainQueue).start(next: { showAlert in + if showAlert { + let confirm = standardTextAlertController(theme: AlertControllerTheme(presentationTheme: presentationData.theme), title: nil, text: presentationData.strings.Channel_Edit_PrivatePublicLinkAlert, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: invokeAction)]) + + presentControllerImpl?(confirm, nil) + } else { + invokeAction() + } + }) + } else { + switch mode { + case .initialSetup: + nextImpl?() + case .generic, .privateLink: + dismissImpl?() + } + } + }) + } + + if state.revokingPeerId != nil { + rightNavigationButton = ItemListNavigationButton(content: .none, style: .activity, enabled: true, action: {}) + } + + var isGroup = false + if let peer = peer as? TelegramChannel { + if case .group = peer.info { + isGroup = true + } + } else if let _ = peer as? TelegramGroup { + isGroup = true + } + + let leftNavigationButton: ItemListNavigationButton? + switch mode { + case .initialSetup: + leftNavigationButton = nil + case .generic, .privateLink: + leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: { + dismissImpl?() + }) + } + + var crossfade: Bool = false + let hasNamesToRevoke = publicChannelsToRevoke != nil && !publicChannelsToRevoke!.isEmpty + let hadNamesToRevoke = previousHadNamesToRevoke.swap(hasNamesToRevoke) + if let peer = view.peers[view.peerId] as? TelegramChannel { + let selectedType: CurrentChannelType + if case .privateLink = mode { + selectedType = .privateChannel + } else { + if let current = state.selectedType { + selectedType = current + } else { + if let addressName = peer.addressName, !addressName.isEmpty { + selectedType = .publicChannel + } else { + selectedType = .privateChannel + } } } - let title: String - if case .privateLink = mode { - title = presentationData.strings.GroupInfo_InviteLink_Title - } else { - title = isGroup ? presentationData.strings.GroupInfo_GroupType : presentationData.strings.Channel_TypeSetup_Title + if selectedType == .publicChannel, let hadNamesToRevoke = hadNamesToRevoke { + crossfade = hadNamesToRevoke != hasNamesToRevoke } - let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(title), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: false) - let listState = ItemListNodeState(entries: channelVisibilityControllerEntries(presentationData: presentationData, mode: mode, view: view, publicChannelsToRevoke: publicChannelsToRevoke, state: state), style: .blocks, crossfadeState: crossfade, animateChanges: false) - - return (controllerState, (listState, arguments)) - } |> afterDisposed { - actionsDisposable.dispose() } + + let title: String + if case .privateLink = mode { + title = presentationData.strings.GroupInfo_InviteLink_Title + } else { + title = isGroup ? presentationData.strings.GroupInfo_GroupType : presentationData.strings.Channel_TypeSetup_Title + } + let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(title), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: false) + let listState = ItemListNodeState(entries: channelVisibilityControllerEntries(presentationData: presentationData, mode: mode, view: view, publicChannelsToRevoke: publicChannelsToRevoke, state: state), style: .blocks, crossfadeState: crossfade, animateChanges: false) + + return (controllerState, (listState, arguments)) + } |> afterDisposed { + actionsDisposable.dispose() + } let controller = ItemListController(account: account, state: signal) dismissImpl = { [weak controller] in diff --git a/TelegramUI/ChatController.swift b/TelegramUI/ChatController.swift index 99e8fc0d06..9b1bbe7526 100644 --- a/TelegramUI/ChatController.swift +++ b/TelegramUI/ChatController.swift @@ -2550,19 +2550,43 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal }, sendRecordedMedia: { [weak self] in self?.sendMediaRecording() }, displayRestrictedInfo: { [weak self] subject in - if let strongSelf = self, let peer = strongSelf.presentationInterfaceState.renderedPeer?.peer, let bannedRights = (peer as? TelegramChannel)?.bannedRights { + guard let strongSelf = self else { + return + } + let subjectFlags: TelegramChatBannedRightsFlags + switch subject { + case .stickers: + subjectFlags = .banSendStickers + case .mediaRecording: + subjectFlags = .banSendMedia + } + + let bannedPermission: (Int32, Bool)? + if let channel = strongSelf.presentationInterfaceState.renderedPeer?.peer as? TelegramChannel { + bannedPermission = channel.hasBannedPermission(subjectFlags) + } else if let group = strongSelf.presentationInterfaceState.renderedPeer?.peer as? TelegramGroup { + if group.hasBannedPermission(subjectFlags) { + bannedPermission = (Int32.max, false) + } else { + bannedPermission = nil + } + } else { + bannedPermission = nil + } + + if let (untilDate, personal) = bannedPermission { let banDescription: String switch subject { case .stickers: - if bannedRights.personal { + if personal { banDescription = strongSelf.presentationInterfaceState.strings.Group_ErrorSendRestrictedStickers } else { banDescription = strongSelf.presentationInterfaceState.strings.Conversation_DefaultRestrictedStickers } case .mediaRecording: - if bannedRights.untilDate != 0 && bannedRights.untilDate != Int32.max { - banDescription = strongSelf.presentationInterfaceState.strings.Conversation_RestrictedMediaTimed(stringForFullDate(timestamp: bannedRights.untilDate, strings: strongSelf.presentationInterfaceState.strings, dateTimeFormat: strongSelf.presentationInterfaceState.dateTimeFormat)).0 - } else if bannedRights.personal { + if untilDate != 0 && untilDate != Int32.max { + banDescription = strongSelf.presentationInterfaceState.strings.Conversation_RestrictedMediaTimed(stringForFullDate(timestamp: untilDate, strings: strongSelf.presentationInterfaceState.strings, dateTimeFormat: strongSelf.presentationInterfaceState.dateTimeFormat)).0 + } else if personal { banDescription = strongSelf.presentationInterfaceState.strings.Conversation_RestrictedMedia } else { banDescription = strongSelf.presentationInterfaceState.strings.Conversation_DefaultRestrictedMedia @@ -2672,15 +2696,15 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal if let channel = peer as? TelegramChannel { canManagePin = channel.hasPermission(.pinMessages) } else if let group = peer as? TelegramGroup { - if group.flags.contains(.adminsEnabled) { - switch group.role { - case .creator, .admin: + switch group.role { + case .creator, .admin: + canManagePin = true + default: + if let defaultBannedRights = group.defaultBannedRights { + canManagePin = !defaultBannedRights.flags.contains(.banPinMessages) + } else { canManagePin = true - default: - canManagePin = false - } - } else { - canManagePin = true + } } } else if let _ = peer as? TelegramUser, strongSelf.presentationInterfaceState.explicitelyCanPinMessages { canManagePin = true @@ -2732,15 +2756,15 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal if let channel = peer as? TelegramChannel { canManagePin = channel.hasPermission(.pinMessages) } else if let group = peer as? TelegramGroup { - if group.flags.contains(.adminsEnabled) { - switch group.role { - case .creator, .admin: + switch group.role { + case .creator, .admin: + canManagePin = true + default: + if let defaultBannedRights = group.defaultBannedRights { + canManagePin = !defaultBannedRights.flags.contains(.banPinMessages) + } else { canManagePin = true - default: - canManagePin = false - } - } else { - canManagePin = true + } } } else if let _ = peer as? TelegramUser, strongSelf.presentationInterfaceState.explicitelyCanPinMessages { canManagePin = true @@ -3436,7 +3460,13 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal } }) } else { - if let bannedRights = (self.presentationInterfaceState.renderedPeer?.peer as? TelegramChannel)?.bannedRights, bannedRights.flags.contains(.banEmbedLinks) { + var bannedEmbedLinks = false + if let channel = self.presentationInterfaceState.renderedPeer?.peer as? TelegramChannel, channel.hasBannedPermission(.banEmbedLinks) != nil { + bannedEmbedLinks = true + } else if let group = self.presentationInterfaceState.renderedPeer?.peer as? TelegramGroup, group.hasBannedPermission(.banEmbedLinks) { + bannedEmbedLinks = true + } + if bannedEmbedLinks { linkPreviews = .single(false) } else { linkPreviews = .single(true) @@ -3707,12 +3737,19 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal return } strongSelf.chatDisplayNode.dismissInput() + + var bannedSendMedia: (Int32, Bool)? + if let channel = peer as? TelegramChannel, let value = channel.hasBannedPermission(.banSendMedia) { + bannedSendMedia = value + } else if let group = peer as? TelegramGroup, group.hasBannedPermission(.banSendMedia) { + bannedSendMedia = (Int32.max, false) + } - if editMediaOptions == nil, let bannedRights = (peer as? TelegramChannel)?.bannedRights, bannedRights.flags.contains(.banSendMedia) { + if editMediaOptions == nil, let (untilDate, personal) = bannedSendMedia { let banDescription: String - if bannedRights.untilDate != 0 && bannedRights.untilDate != Int32.max { - banDescription = strongSelf.presentationInterfaceState.strings.Conversation_RestrictedMediaTimed(stringForFullDate(timestamp: bannedRights.untilDate, strings: strongSelf.presentationInterfaceState.strings, dateTimeFormat: strongSelf.presentationInterfaceState.dateTimeFormat)).0 - } else if bannedRights.personal { + if untilDate != 0 && untilDate != Int32.max { + banDescription = strongSelf.presentationInterfaceState.strings.Conversation_RestrictedMediaTimed(stringForFullDate(timestamp: untilDate, strings: strongSelf.presentationInterfaceState.strings, dateTimeFormat: strongSelf.presentationInterfaceState.dateTimeFormat)).0 + } else if personal { banDescription = strongSelf.presentationInterfaceState.strings.Conversation_RestrictedMedia } else { banDescription = strongSelf.presentationInterfaceState.strings.Conversation_DefaultRestrictedMedia diff --git a/TelegramUI/ChatInterfaceInputContextPanels.swift b/TelegramUI/ChatInterfaceInputContextPanels.swift index 53d2acaad8..a2e2ae2c99 100644 --- a/TelegramUI/ChatInterfaceInputContextPanels.swift +++ b/TelegramUI/ChatInterfaceInputContextPanels.swift @@ -52,7 +52,14 @@ func inputContextPanelForChatPresentationIntefaceState(_ chatPresentationInterfa return nil } - if let bannedRights = (chatPresentationInterfaceState.renderedPeer?.peer as? TelegramChannel)?.bannedRights, bannedRights.flags.contains(.banSendInline) { + var hasBannedInlineContent = false + if let channel = chatPresentationInterfaceState.renderedPeer?.peer as? TelegramChannel, channel.hasBannedPermission(.banSendInline) != nil { + hasBannedInlineContent = true + } else if let group = chatPresentationInterfaceState.renderedPeer?.peer as? TelegramGroup, group.hasBannedPermission(.banSendInline) { + hasBannedInlineContent = true + } + + if hasBannedInlineContent { switch inputQueryResult { case .stickers, .contextRequestResult: if let currentPanel = currentPanel as? DisabledContextResultsChatInputContextPanelNode { diff --git a/TelegramUI/ChatInterfaceInputContexts.swift b/TelegramUI/ChatInterfaceInputContexts.swift index 5936f9d218..db832b7402 100644 --- a/TelegramUI/ChatInterfaceInputContexts.swift +++ b/TelegramUI/ChatInterfaceInputContexts.swift @@ -264,7 +264,11 @@ func inputTextPanelStateForChatPresentationInterfaceState(_ chatPresentationInte if case .broadcast = peer.info, canSendMessagesToPeer(peer) { accessoryItems.append(.silentPost(chatPresentationInterfaceState.interfaceState.silentPosting)) } - if let bannedRights = peer.bannedRights, bannedRights.flags.contains(.banSendStickers) { + if peer.hasBannedPermission(.banSendStickers) != nil { + stickersEnabled = false + } + } else if let peer = chatPresentationInterfaceState.renderedPeer?.peer as? TelegramGroup { + if peer.hasBannedPermission(.banSendStickers) { stickersEnabled = false } } diff --git a/TelegramUI/ChatInterfaceStateContextMenus.swift b/TelegramUI/ChatInterfaceStateContextMenus.swift index c4cb838d26..e9aa9e4c8d 100644 --- a/TelegramUI/ChatInterfaceStateContextMenus.swift +++ b/TelegramUI/ChatInterfaceStateContextMenus.swift @@ -207,15 +207,15 @@ func contextMenuForChatPresentationIntefaceState(chatPresentationInterfaceState: } } else if let group = messages[0].peers[messages[0].id.peerId] as? TelegramGroup { if !isAction { - if group.flags.contains(.adminsEnabled) { - switch group.role { - case .creator, .admin: + switch group.role { + case .creator, .admin: + canPin = true + default: + if let defaultBannedRights = group.defaultBannedRights { + canPin = !defaultBannedRights.flags.contains(.banPinMessages) + } else { canPin = true - default: - canPin = false - } - } else { - canPin = true + } } } } else if let _ = messages[0].peers[messages[0].id.peerId] as? TelegramUser, chatPresentationInterfaceState.explicitelyCanPinMessages { diff --git a/TelegramUI/ChatInterfaceStateInputPanels.swift b/TelegramUI/ChatInterfaceStateInputPanels.swift index faa92f897e..95b8e2d628 100644 --- a/TelegramUI/ChatInterfaceStateInputPanels.swift +++ b/TelegramUI/ChatInterfaceStateInputPanels.swift @@ -99,7 +99,7 @@ func inputPanelForChatPresentationIntefaceState(_ chatPresentationInterfaceState break } } else if let channel = peer as? TelegramChannel { - if let bannedRights = channel.bannedRights, bannedRights.flags.contains(.banSendMessages) { + if channel.hasBannedPermission(.banSendMessages) != nil { if let currentPanel = currentPanel as? ChatRestrictedInputPanelNode { return currentPanel } else { @@ -164,6 +164,17 @@ func inputPanelForChatPresentationIntefaceState(_ chatPresentationInterfaceState case .Member: break } + + if group.hasBannedPermission(.banSendMessages) { + if let currentPanel = currentPanel as? ChatRestrictedInputPanelNode { + return currentPanel + } else { + let panel = ChatRestrictedInputPanelNode() + panel.account = account + panel.interfaceInteraction = interfaceInteraction + return panel + } + } } var displayBotStartPanel = false diff --git a/TelegramUI/ChatListNode.swift b/TelegramUI/ChatListNode.swift index a6dc823dc1..e7143d47bb 100644 --- a/TelegramUI/ChatListNode.swift +++ b/TelegramUI/ChatListNode.swift @@ -172,7 +172,17 @@ private func mappedInsertEntries(account: Account, nodeInteraction: ChatListNode } if filter.contains(.onlyManageable) { if let peer = peer.peers[peer.peerId] { - if let peer = peer as? TelegramGroup, peer.role == .creator || peer.role == .admin { + var canManage = false + if let peer = peer as? TelegramGroup { + switch peer.role { + case .creator, .admin: + canManage = true + default: + break + } + } + + if canManage { } else if let peer = peer as? TelegramChannel, case .group = peer.info, peer.hasPermission(.inviteMembers) { } else { enabled = false diff --git a/TelegramUI/ChatRecentActionsControllerNode.swift b/TelegramUI/ChatRecentActionsControllerNode.swift index 39e9f12404..b287e63977 100644 --- a/TelegramUI/ChatRecentActionsControllerNode.swift +++ b/TelegramUI/ChatRecentActionsControllerNode.swift @@ -684,7 +684,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { strongSelf.banDisposables.set((fetchChannelParticipant(account: strongSelf.account, peerId: strongSelf.peer.id, participantId: author.id) |> deliverOnMainQueue).start(next: { participant in if let strongSelf = self { - strongSelf.presentController(channelBannedMemberController(account: strongSelf.account, peerId: strongSelf.peer.id, memberId: author.id, initialParticipant: participant, updated: { _ in }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) + strongSelf.presentController(channelBannedMemberController(account: strongSelf.account, peerId: strongSelf.peer.id, memberId: author.id, initialParticipant: participant, updated: { _ in }, upgradedToSupergroup: { _, f in f() }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) } }), forKey: author.id) } diff --git a/TelegramUI/ChatRecentActionsHistoryTransition.swift b/TelegramUI/ChatRecentActionsHistoryTransition.swift index 926dae22ab..bb8c2e373e 100644 --- a/TelegramUI/ChatRecentActionsHistoryTransition.swift +++ b/TelegramUI/ChatRecentActionsHistoryTransition.swift @@ -66,7 +66,7 @@ private func filterOriginalMessageFlags(_ message: Message) -> Message { private func filterMessageChannelPeer(_ peer: Peer) -> Peer { if let peer = peer as? TelegramChannel { - return TelegramChannel(id: peer.id, accessHash: peer.accessHash, title: peer.title, username: peer.username, photo: peer.photo, creationDate: peer.creationDate, version: peer.version, participationStatus: peer.participationStatus, info: .group(TelegramChannelGroupInfo(flags: [])), flags: peer.flags, restrictionInfo: peer.restrictionInfo, adminRights: peer.adminRights, bannedRights: peer.bannedRights, peerGroupId: peer.peerGroupId) + return TelegramChannel(id: peer.id, accessHash: peer.accessHash, title: peer.title, username: peer.username, photo: peer.photo, creationDate: peer.creationDate, version: peer.version, participationStatus: peer.participationStatus, info: .group(TelegramChannelGroupInfo(flags: [])), flags: peer.flags, restrictionInfo: peer.restrictionInfo, adminRights: peer.adminRights, bannedRights: peer.bannedRights, defaultBannedRights: peer.defaultBannedRights, peerGroupId: peer.peerGroupId) } return peer } diff --git a/TelegramUI/ChatRestrictedInputPanelNode.swift b/TelegramUI/ChatRestrictedInputPanelNode.swift index 438c01450a..2372fb00e6 100644 --- a/TelegramUI/ChatRestrictedInputPanelNode.swift +++ b/TelegramUI/ChatRestrictedInputPanelNode.swift @@ -25,10 +25,23 @@ final class ChatRestrictedInputPanelNode: ChatInputPanelNode { self.presentationInterfaceState = interfaceState } - if let renderedPeer = interfaceState.renderedPeer, let channel = renderedPeer.peer as? TelegramChannel, let bannedRights = channel.bannedRights { - if bannedRights.untilDate != 0 && bannedRights.untilDate != Int32.max { - self.textNode.attributedText = NSAttributedString(string: interfaceState.strings.Conversation_RestrictedTextTimed(stringForFullDate(timestamp: bannedRights.untilDate, strings: interfaceState.strings, dateTimeFormat: interfaceState.dateTimeFormat)).0, font: Font.regular(13.0), textColor: interfaceState.theme.chat.inputPanel.secondaryTextColor) - } else if bannedRights.personal { + let bannedPermission: (Int32, Bool)? + if let channel = interfaceState.renderedPeer?.peer as? TelegramChannel { + bannedPermission = channel.hasBannedPermission(.banSendMessages) + } else if let group = interfaceState.renderedPeer?.peer as? TelegramGroup { + if group.hasBannedPermission(.banSendMessages) { + bannedPermission = (Int32.max, false) + } else { + bannedPermission = nil + } + } else { + bannedPermission = nil + } + + if let (untilDate, personal) = bannedPermission { + if personal && untilDate != 0 && untilDate != Int32.max { + self.textNode.attributedText = NSAttributedString(string: interfaceState.strings.Conversation_RestrictedTextTimed(stringForFullDate(timestamp: untilDate, strings: interfaceState.strings, dateTimeFormat: interfaceState.dateTimeFormat)).0, font: Font.regular(13.0), textColor: interfaceState.theme.chat.inputPanel.secondaryTextColor) + } else if personal { self.textNode.attributedText = NSAttributedString(string: interfaceState.strings.Conversation_RestrictedText, font: Font.regular(13.0), textColor: interfaceState.theme.chat.inputPanel.secondaryTextColor) } else { self.textNode.attributedText = NSAttributedString(string: interfaceState.strings.Conversation_DefaultRestrictedText, font: Font.regular(13.0), textColor: interfaceState.theme.chat.inputPanel.secondaryTextColor) diff --git a/TelegramUI/ChatTextInputPanelNode.swift b/TelegramUI/ChatTextInputPanelNode.swift index 5583cc67b8..4727cf8561 100644 --- a/TelegramUI/ChatTextInputPanelNode.swift +++ b/TelegramUI/ChatTextInputPanelNode.swift @@ -1022,7 +1022,9 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { } let mediaInputDisabled: Bool - if let bannedRights = (interfaceState.renderedPeer?.peer as? TelegramChannel)?.bannedRights, bannedRights.flags.contains(.banSendMedia) { + if let channel = interfaceState.renderedPeer?.peer as? TelegramChannel, channel.hasBannedPermission(.banSendMedia) != nil { + mediaInputDisabled = true + } else if let group = interfaceState.renderedPeer?.peer as? TelegramGroup, group.hasBannedPermission(.banSendMedia) { mediaInputDisabled = true } else { mediaInputDisabled = false diff --git a/TelegramUI/CreateChannelController.swift b/TelegramUI/CreateChannelController.swift index 230fb95010..1751fb6fed 100644 --- a/TelegramUI/CreateChannelController.swift +++ b/TelegramUI/CreateChannelController.swift @@ -174,7 +174,7 @@ private func CreateChannelEntries(presentationData: PresentationData, state: Cre let groupInfoState = ItemListAvatarAndNameInfoItemState(editingName: state.editingName, updatingName: nil) - let peer = TelegramGroup(id: PeerId(namespace: -1, id: 0), title: state.editingName.composedTitle, photo: [], participantCount: 0, role: .creator, membership: .Member, flags: [], migrationReference: nil, creationDate: 0, version: 0) + let peer = TelegramGroup(id: PeerId(namespace: -1, id: 0), title: state.editingName.composedTitle, photo: [], participantCount: 0, role: .creator, membership: .Member, flags: [], defaultBannedRights: nil, migrationReference: nil, creationDate: 0, version: 0) entries.append(.channelInfo(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, peer, groupInfoState, state.avatar)) entries.append(.setProfilePhoto(presentationData.theme, presentationData.strings.Channel_UpdatePhotoItem)) @@ -250,7 +250,7 @@ public func createChannelController(account: Account) -> ViewController { let _ = updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: uploadedAvatar.get()).start() } - let controller = channelVisibilityController(account: account, peerId: peerId, mode: .initialSetup) + let controller = channelVisibilityController(account: account, peerId: peerId, mode: .initialSetup, upgradedToSupergroup: { _, f in f() }) replaceControllerImpl?(controller) } }, error: { _ in diff --git a/TelegramUI/CreateGroupController.swift b/TelegramUI/CreateGroupController.swift index 3609458cd6..82638fe92c 100644 --- a/TelegramUI/CreateGroupController.swift +++ b/TelegramUI/CreateGroupController.swift @@ -180,7 +180,7 @@ private func createGroupEntries(presentationData: PresentationData, state: Creat let groupInfoState = ItemListAvatarAndNameInfoItemState(editingName: state.editingName, updatingName: nil) - let peer = TelegramGroup(id: PeerId(namespace: -1, id: 0), title: state.editingName.composedTitle, photo: [], participantCount: 0, role: .creator, membership: .Member, flags: [], migrationReference: nil, creationDate: 0, version: 0) + let peer = TelegramGroup(id: PeerId(namespace: -1, id: 0), title: state.editingName.composedTitle, photo: [], participantCount: 0, role: .creator, membership: .Member, flags: [], defaultBannedRights: nil, migrationReference: nil, creationDate: 0, version: 0) entries.append(.groupInfo(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, peer, groupInfoState, state.avatar)) entries.append(.setProfilePhoto(presentationData.theme, presentationData.strings.GroupInfo_SetGroupPhoto)) diff --git a/TelegramUI/DisabledContextResultsChatInputContextPanelNode.swift b/TelegramUI/DisabledContextResultsChatInputContextPanelNode.swift index f18e767edb..86cf342397 100644 --- a/TelegramUI/DisabledContextResultsChatInputContextPanelNode.swift +++ b/TelegramUI/DisabledContextResultsChatInputContextPanelNode.swift @@ -35,13 +35,13 @@ final class DisabledContextResultsChatInputContextPanelNode: ChatInputContextPan self.containerNode.backgroundColor = interfaceState.theme.list.plainBackgroundColor self.separatorNode.backgroundColor = interfaceState.theme.list.itemPlainSeparatorColor - guard let bannedRights = (interfaceState.renderedPeer?.peer as? TelegramChannel)?.bannedRights else { + guard let (untilDate, personal) = (interfaceState.renderedPeer?.peer as? TelegramChannel)?.hasBannedPermission(.banSendInline) else { return } let banDescription: String - if bannedRights.untilDate != 0 && bannedRights.untilDate != Int32.max { - banDescription = interfaceState.strings.Conversation_RestrictedInlineTimed(stringForFullDate(timestamp: bannedRights.untilDate, strings: interfaceState.strings, dateTimeFormat: interfaceState.dateTimeFormat)).0 - } else if bannedRights.personal { + if untilDate != 0 && untilDate != Int32.max { + banDescription = interfaceState.strings.Conversation_RestrictedInlineTimed(stringForFullDate(timestamp: untilDate, strings: interfaceState.strings, dateTimeFormat: interfaceState.dateTimeFormat)).0 + } else if personal { banDescription = interfaceState.strings.Conversation_RestrictedInline } else { banDescription = interfaceState.strings.Conversation_DefaultRestrictedInline diff --git a/TelegramUI/GroupAdminsController.swift b/TelegramUI/GroupAdminsController.swift deleted file mode 100644 index 2311b4453f..0000000000 --- a/TelegramUI/GroupAdminsController.swift +++ /dev/null @@ -1,384 +0,0 @@ -import Foundation -import Display -import SwiftSignalKit -import Postbox -import TelegramCore - -private final class GroupAdminsControllerArguments { - let account: Account - - let updateAllAreAdmins: (Bool) -> Void - let updatePeerIsAdmin: (PeerId, Bool) -> Void - - init(account: Account, updateAllAreAdmins: @escaping (Bool) -> Void, updatePeerIsAdmin: @escaping (PeerId, Bool) -> Void) { - self.account = account - self.updateAllAreAdmins = updateAllAreAdmins - self.updatePeerIsAdmin = updatePeerIsAdmin - } -} - -private enum GroupAdminsSection: Int32 { - case allAdmins - case peers -} - -private enum GroupAdminsEntryStableId: Hashable { - case index(Int32) - case peer(PeerId) - - var hashValue: Int { - switch self { - case let .index(index): - return index.hashValue - case let .peer(peerId): - return peerId.hashValue - } - } - - static func ==(lhs: GroupAdminsEntryStableId, rhs: GroupAdminsEntryStableId) -> Bool { - switch lhs { - case let .index(index): - if case .index(index) = rhs { - return true - } else { - return false - } - case let .peer(peerId): - if case .peer(peerId) = rhs { - return true - } else { - return false - } - } - } -} - -private enum GroupAdminsEntry: ItemListNodeEntry { - case allAdmins(PresentationTheme, String, Bool) - case allAdminsInfo(PresentationTheme, String) - case peerItem(Int32, PresentationTheme, PresentationStrings, PresentationDateTimeFormat, PresentationPersonNameOrder, Peer, String, Bool, Bool) - - var section: ItemListSectionId { - switch self { - case .allAdmins, .allAdminsInfo: - return GroupAdminsSection.allAdmins.rawValue - case .peerItem: - return GroupAdminsSection.peers.rawValue - } - } - - var stableId: GroupAdminsEntryStableId { - switch self { - case .allAdmins: - return .index(0) - case .allAdminsInfo: - return .index(1) - case let .peerItem(_, _, _, _, _, peer, _, _, _): - return .peer(peer.id) - } - } - - static func ==(lhs: GroupAdminsEntry, rhs: GroupAdminsEntry) -> Bool { - switch lhs { - case let .allAdmins(lhsTheme, lhsText, lhsValue): - if case let .allAdmins(rhsTheme, rhsText, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsValue == rhsValue { - return true - } else { - return false - } - case let .allAdminsInfo(lhsTheme, lhsText): - if case let .allAdminsInfo(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { - return true - } else { - return false - } - case let .peerItem(lhsIndex, lhsTheme, lhsStrings, lhsDateTimeFormat, lhsNameOrder, lhsPeer, lhsLabel, lhsToggled, lhsEnabled): - if case let .peerItem(rhsIndex, rhsTheme, rhsStrings, rhsDateTimeFormat, rhsNameOrder, rhsPeer, rhsLabel, rhsToggled, rhsEnabled) = rhs { - if lhsIndex != rhsIndex { - return false - } - if lhsTheme !== rhsTheme { - return false - } - if lhsStrings !== rhsStrings { - return false - } - if lhsDateTimeFormat != rhsDateTimeFormat { - return false - } - if lhsNameOrder != rhsNameOrder { - return false - } - if !lhsPeer.isEqual(rhsPeer) { - return false - } - if lhsLabel != rhsLabel { - return false - } - if lhsToggled != rhsToggled { - return false - } - if lhsEnabled != rhsEnabled { - return false - } - return true - } else { - return false - } - } - } - - static func <(lhs: GroupAdminsEntry, rhs: GroupAdminsEntry) -> Bool { - switch lhs { - case .allAdmins: - return true - case .allAdminsInfo: - switch rhs { - case .allAdmins: - return false - default: - return true - } - case let .peerItem(index, _, _, _, _, _, _, _, _): - switch rhs { - case let .peerItem(rhsIndex, _, _, _, _, _, _, _, _): - return index < rhsIndex - case .allAdmins, .allAdminsInfo: - return false - } - } - } - - func item(_ arguments: GroupAdminsControllerArguments) -> ListViewItem { - switch self { - case let .allAdmins(theme, text, value): - return ItemListSwitchItem(theme: theme, title: text, value: value, sectionId: self.section, style: .blocks, updated: { updatedValue in - arguments.updateAllAreAdmins(updatedValue) - }) - case let .allAdminsInfo(theme, text): - return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section) - case let .peerItem(_, theme, strings, dateTimeFormat, nameDisplayOrder, peer, label, toggled, enabled): - return ItemListPeerItem(theme: theme, strings: strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: nameDisplayOrder, account: arguments.account, peer: peer, presence: nil, text: .none, label: .none, editing: ItemListPeerItemEditing(editable: false, editing: false, revealed: false), switchValue: ItemListPeerItemSwitch(value: toggled, style: .standard), enabled: enabled, sectionId: self.section, action: nil, setPeerIdWithRevealedOptions: { _, _ in }, removePeer: { _ in }, toggleUpdated: { value in - arguments.updatePeerIsAdmin(peer.id, value) - }) - } - } -} - -private struct GroupAdminsControllerState: Equatable { - let updatingAllAdminsValue: Bool? - let updatedAllAdminsValue: Bool? - - let updatingAdminValue: [PeerId: Bool] - - init() { - self.updatingAllAdminsValue = nil - self.updatedAllAdminsValue = nil - self.updatingAdminValue = [:] - } - - init(updatingAllAdminsValue: Bool?, updatedAllAdminsValue: Bool?, updatingAdminValue: [PeerId: Bool]) { - self.updatingAllAdminsValue = updatingAllAdminsValue - self.updatedAllAdminsValue = updatedAllAdminsValue - self.updatingAdminValue = updatingAdminValue - } - - static func ==(lhs: GroupAdminsControllerState, rhs: GroupAdminsControllerState) -> Bool { - if lhs.updatingAllAdminsValue != rhs.updatingAllAdminsValue { - return false - } - if lhs.updatedAllAdminsValue != rhs.updatedAllAdminsValue { - return false - } - if lhs.updatingAdminValue != rhs.updatingAdminValue { - return false - } - - return true - } - - func withUpdatedUpdatingAllAdminsValue(_ updatingAllAdminsValue: Bool?) -> GroupAdminsControllerState { - return GroupAdminsControllerState(updatingAllAdminsValue: updatingAllAdminsValue, updatedAllAdminsValue: self.updatedAllAdminsValue, updatingAdminValue: self.updatingAdminValue) - } - - func withUpdatedUpdatedAllAdminsValue(_ updatedAllAdminsValue: Bool?) -> GroupAdminsControllerState { - return GroupAdminsControllerState(updatingAllAdminsValue: self.updatingAllAdminsValue, updatedAllAdminsValue: updatedAllAdminsValue, updatingAdminValue: self.updatingAdminValue) - } - - func withUpdatedUpdatingAdminValue(_ updatingAdminValue: [PeerId: Bool]) -> GroupAdminsControllerState { - return GroupAdminsControllerState(updatingAllAdminsValue: self.updatingAllAdminsValue, updatedAllAdminsValue: self.updatedAllAdminsValue, updatingAdminValue: updatingAdminValue) - } -} - -private func groupAdminsControllerEntries(account: Account, presentationData: PresentationData, view: PeerView, state: GroupAdminsControllerState) -> [GroupAdminsEntry] { - var entries: [GroupAdminsEntry] = [] - - if let peer = view.peers[view.peerId] as? TelegramGroup, let cachedData = view.cachedData as? CachedGroupData, let participants = cachedData.participants { - let effectiveAdminsEnabled: Bool - if let updatingAllAdminsValue = state.updatingAllAdminsValue { - effectiveAdminsEnabled = updatingAllAdminsValue - } else { - effectiveAdminsEnabled = peer.flags.contains(.adminsEnabled) - } - - entries.append(.allAdmins(presentationData.theme, presentationData.strings.ChatAdmins_AllMembersAreAdmins, !effectiveAdminsEnabled)) - if effectiveAdminsEnabled { - entries.append(.allAdminsInfo(presentationData.theme, presentationData.strings.ChatAdmins_AllMembersAreAdminsOnHelp)) - } else { - entries.append(.allAdminsInfo(presentationData.theme, presentationData.strings.ChatAdmins_AllMembersAreAdminsOffHelp)) - } - - let sortedParticipants = participants.participants.sorted(by: { lhs, rhs in - let lhsInvitedAt: Int32 - switch lhs { - case let .admin(_, _, invitedAt): - lhsInvitedAt = invitedAt - case .creator(_): - lhsInvitedAt = Int32.max - case let .member(_, _, invitedAt): - lhsInvitedAt = invitedAt - } - - let rhsInvitedAt: Int32 - switch rhs { - case let .admin(_, _, invitedAt): - rhsInvitedAt = invitedAt - case .creator(_): - rhsInvitedAt = Int32.max - case let .member(_, _, invitedAt): - rhsInvitedAt = invitedAt - } - return lhsInvitedAt > rhsInvitedAt - }) - - var index: Int32 = 0 - for participant in sortedParticipants { - if let peer = view.peers[participant.peerId] { - var isAdmin = false - var isEnabled = true - let label = "" - if !effectiveAdminsEnabled { - isAdmin = true - isEnabled = false - } else { - switch participant { - case .creator: - isAdmin = true - isEnabled = false - case .admin: - if let value = state.updatingAdminValue[peer.id] { - isAdmin = value - } else { - isAdmin = true - } - case .member: - if let value = state.updatingAdminValue[peer.id] { - isAdmin = value - } else { - isAdmin = false - } - } - } - entries.append(.peerItem(index, presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, peer, label, isAdmin, isEnabled)) - index += 1 - } - } - } - - return entries -} - -public func groupAdminsController(account: Account, peerId: PeerId) -> ViewController { - let statePromise = ValuePromise(GroupAdminsControllerState(), ignoreRepeated: true) - let stateValue = Atomic(value: GroupAdminsControllerState()) - let updateState: ((GroupAdminsControllerState) -> GroupAdminsControllerState) -> Void = { f in - statePromise.set(stateValue.modify { f($0) }) - } - - let actionsDisposable = DisposableSet() - - let toggleAllAdminsDisposable = MetaDisposable() - actionsDisposable.add(toggleAllAdminsDisposable) - - let toggleAdminsDisposables = DisposableDict() - actionsDisposable.add(toggleAdminsDisposables) - - let arguments = GroupAdminsControllerArguments(account: account, updateAllAreAdmins: { value in - updateState { state in - return state.withUpdatedUpdatingAllAdminsValue(value) - } - toggleAllAdminsDisposable.set((updateGroupManagementType(account: account, peerId: peerId, type: value ? .unrestricted : .restrictedToAdmins) - |> deliverOnMainQueue).start(error: { _ in - updateState { state in - return state.withUpdatedUpdatingAllAdminsValue(nil) - } - }, completed: { - updateState { state in - return state.withUpdatedUpdatingAllAdminsValue(nil).withUpdatedUpdatedAllAdminsValue(value) - } - })) - }, updatePeerIsAdmin: { memberId, value in - updateState { state in - var updatingAdminValue = state.updatingAdminValue - updatingAdminValue[memberId] = value - return state.withUpdatedUpdatingAdminValue(updatingAdminValue) - } - - if value { - toggleAdminsDisposables.set((addGroupAdmin(account: account, peerId: peerId, adminId: memberId) |> deliverOnMainQueue).start(error: { _ in - updateState { state in - var updatingAdminValue = state.updatingAdminValue - updatingAdminValue.removeValue(forKey: memberId) - return state.withUpdatedUpdatingAdminValue(updatingAdminValue) - } - }, completed: { - updateState { state in - var updatingAdminValue = state.updatingAdminValue - updatingAdminValue.removeValue(forKey: memberId) - return state.withUpdatedUpdatingAdminValue(updatingAdminValue) - } - }), forKey: memberId) - } else { - toggleAdminsDisposables.set((removeGroupAdmin(account: account, peerId: peerId, adminId: memberId) |> deliverOnMainQueue).start(error: { _ in - updateState { state in - var updatingAdminValue = state.updatingAdminValue - updatingAdminValue.removeValue(forKey: memberId) - return state.withUpdatedUpdatingAdminValue(updatingAdminValue) - } - }, completed: { - updateState { state in - var updatingAdminValue = state.updatingAdminValue - updatingAdminValue.removeValue(forKey: memberId) - return state.withUpdatedUpdatingAdminValue(updatingAdminValue) - } - }), forKey: memberId) - } - }) - - let peerView = account.viewTracker.peerView(peerId) - - let signal = combineLatest((account.applicationContext as! TelegramApplicationContext).presentationData, statePromise.get() |> deliverOnMainQueue, peerView |> deliverOnMainQueue) - |> deliverOnMainQueue - |> map { presentationData, state, view -> (ItemListControllerState, (ItemListNodeState, GroupAdminsEntry.ItemGenerationArguments)) in - - var emptyStateItem: ItemListControllerEmptyStateItem? - if view.cachedData == nil { - emptyStateItem = ItemListLoadingIndicatorEmptyStateItem(theme: presentationData.theme) - } - - var rightNavigationButton: ItemListNavigationButton? - if !state.updatingAdminValue.isEmpty || state.updatingAllAdminsValue != nil { - rightNavigationButton = ItemListNavigationButton(content: .none, style: .activity, enabled: true, action: {}) - } - - let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.ChatAdmins_Title), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) - let listState = ItemListNodeState(entries: groupAdminsControllerEntries(account: account, presentationData: presentationData, view: view, state: state), style: .blocks, emptyStateItem: emptyStateItem, animateChanges: true) - - return (controllerState, (listState, arguments)) - } |> afterDisposed { - actionsDisposable.dispose() - } - - let controller = ItemListController(account: account, state: signal) - return controller -} diff --git a/TelegramUI/GroupInfoController.swift b/TelegramUI/GroupInfoController.swift index 9356bf356a..be8591305d 100644 --- a/TelegramUI/GroupInfoController.swift +++ b/TelegramUI/GroupInfoController.swift @@ -35,8 +35,9 @@ private final class GroupInfoArguments { let displayAboutContextMenu: (String) -> Void let aboutLinkAction: (TextLinkItemActionType, TextLinkItem) -> Void let openStickerPackSetup: () -> Void + let openGroupTypeSetup: () -> Void - init(account: Account, peerId: PeerId, avatarAndNameInfoContext: ItemListAvatarAndNameInfoItemContext, tapAvatarAction: @escaping () -> Void, changeProfilePhoto: @escaping () -> Void, pushController: @escaping (ViewController) -> Void, presentController: @escaping (ViewController, ViewControllerPresentationArguments) -> Void, changeNotificationMuteSettings: @escaping () -> Void, openPreHistory: @escaping () -> Void, openSharedMedia: @escaping () -> Void, openAdministrators: @escaping () -> Void, openPermissions: @escaping () -> Void, updateEditingName: @escaping (ItemListAvatarAndNameInfoItemName) -> Void, updateEditingDescriptionText: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, addMember: @escaping () -> Void, promotePeer: @escaping (RenderedChannelParticipant) -> Void, restrictPeer: @escaping (RenderedChannelParticipant) -> Void, removePeer: @escaping (PeerId) -> Void, convertToSupergroup: @escaping () -> Void, leave: @escaping () -> Void, displayUsernameShareMenu: @escaping (String) -> Void, displayUsernameContextMenu: @escaping (String) -> Void, displayAboutContextMenu: @escaping (String) -> Void, aboutLinkAction: @escaping (TextLinkItemActionType, TextLinkItem) -> Void, openStickerPackSetup: @escaping () -> Void) { + init(account: Account, peerId: PeerId, avatarAndNameInfoContext: ItemListAvatarAndNameInfoItemContext, tapAvatarAction: @escaping () -> Void, changeProfilePhoto: @escaping () -> Void, pushController: @escaping (ViewController) -> Void, presentController: @escaping (ViewController, ViewControllerPresentationArguments) -> Void, changeNotificationMuteSettings: @escaping () -> Void, openPreHistory: @escaping () -> Void, openSharedMedia: @escaping () -> Void, openAdministrators: @escaping () -> Void, openPermissions: @escaping () -> Void, updateEditingName: @escaping (ItemListAvatarAndNameInfoItemName) -> Void, updateEditingDescriptionText: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, addMember: @escaping () -> Void, promotePeer: @escaping (RenderedChannelParticipant) -> Void, restrictPeer: @escaping (RenderedChannelParticipant) -> Void, removePeer: @escaping (PeerId) -> Void, convertToSupergroup: @escaping () -> Void, leave: @escaping () -> Void, displayUsernameShareMenu: @escaping (String) -> Void, displayUsernameContextMenu: @escaping (String) -> Void, displayAboutContextMenu: @escaping (String) -> Void, aboutLinkAction: @escaping (TextLinkItemActionType, TextLinkItem) -> Void, openStickerPackSetup: @escaping () -> Void, openGroupTypeSetup: @escaping () -> Void) { self.account = account self.peerId = peerId self.avatarAndNameInfoContext = avatarAndNameInfoContext @@ -63,6 +64,7 @@ private final class GroupInfoArguments { self.displayAboutContextMenu = displayAboutContextMenu self.aboutLinkAction = aboutLinkAction self.openStickerPackSetup = openStickerPackSetup + self.openGroupTypeSetup = openGroupTypeSetup } } @@ -71,7 +73,6 @@ private enum GroupInfoSection: ItemListSectionId { case about case infoManagement case sharedMediaAndNotifications - case stickerPack case memberManagement case members case leave @@ -155,12 +156,10 @@ private enum GroupInfoEntry: ItemListNodeEntry { return GroupInfoSection.info.rawValue case .aboutHeader, .about, .link: return GroupInfoSection.about.rawValue - case .groupTypeSetup, .preHistory: + case .groupTypeSetup, .preHistory, .stickerPack: return GroupInfoSection.infoManagement.rawValue case .sharedMedia, .notifications: return GroupInfoSection.sharedMediaAndNotifications.rawValue - case .stickerPack: - return GroupInfoSection.stickerPack.rawValue case .permissions, .administrators: return GroupInfoSection.memberManagement.rawValue case .addMember, .member: @@ -394,10 +393,10 @@ private enum GroupInfoEntry: ItemListNodeEntry { return 8 case .preHistory: return 9 - case .notifications: - return 10 case .stickerPack: - return 12 + return 10 + case .notifications: + return 11 case .sharedMedia: return 13 case .permissions: @@ -467,7 +466,7 @@ private enum GroupInfoEntry: ItemListNodeEntry { }) case let .groupTypeSetup(theme, title, text): return ItemListDisclosureItem(theme: theme, title: title, label: text, sectionId: self.section, style: .blocks, action: { - arguments.presentController(channelVisibilityController(account: arguments.account, peerId: arguments.peerId, mode: .generic), ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) + arguments.openGroupTypeSetup() }) case let .groupDescriptionSetup(theme, placeholder, text): return ItemListMultilineInputItem(theme: theme, text: text, placeholder: placeholder, maxLength: ItemListMultilineInputItemTextLimit(value: 255, display: true), sectionId: self.section, style: .blocks, textUpdated: { updatedText in @@ -705,25 +704,14 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa if case .creator = group.role { isCreator = true } - if group.flags.contains(.adminsEnabled) { - highlightAdmins = true - switch group.role { - case .admin, .creator: - canEditGroupInfo = true - canEditMembers = true - canAddMembers = true - case .member: - break - } - } else { - canEditGroupInfo = true - canAddMembers = true - switch group.role { - case .admin, .creator: - canEditMembers = true - case .member: - break - } + highlightAdmins = true + switch group.role { + case .admin, .creator: + canEditGroupInfo = true + canEditMembers = true + canAddMembers = true + case .member: + break } } else if let channel = view.peers[view.peerId] as? TelegramChannel { if case .group = channel.info { @@ -770,8 +758,12 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa if let group = view.peers[view.peerId] as? TelegramGroup, let cachedGroupData = view.cachedData as? CachedGroupData { if case .creator = group.role { + if cachedGroupData.flags.contains(.canChangeUsername) { + entries.append(GroupInfoEntry.groupTypeSetup(presentationData.theme, presentationData.strings.GroupInfo_GroupType, presentationData.strings.Channel_Setup_TypePrivate)) + } + var activePermissionCount: Int? - if let defaultBannedRights = cachedGroupData.defaultBannedRights { + if let defaultBannedRights = group.defaultBannedRights { var count = 0 for right in allGroupPermissionList { if !defaultBannedRights.flags.contains(right) { @@ -783,11 +775,13 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa entries.append(GroupInfoEntry.permissions(presentationData.theme, presentationData.strings.GroupInfo_Permissions, activePermissionCount.flatMap({ "\($0)/\(allGroupPermissionList.count)" }) ?? "")) entries.append(.administrators(presentationData.theme, presentationData.strings.GroupInfo_Administrators, "")) } - } else if let cachedChannelData = view.cachedData as? CachedChannelData { + } else if let channel = view.peers[view.peerId] as? TelegramChannel, let cachedChannelData = view.cachedData as? CachedChannelData { if isCreator { - entries.append(GroupInfoEntry.groupTypeSetup(presentationData.theme, presentationData.strings.GroupInfo_GroupType, isPublic ? presentationData.strings.Channel_Setup_TypePublic : presentationData.strings.Channel_Setup_TypePrivate)) - if !isPublic, let cachedData = view.cachedData as? CachedChannelData { - entries.append(GroupInfoEntry.preHistory(presentationData.theme, presentationData.strings.GroupInfo_GroupHistory, cachedData.flags.contains(.preHistoryEnabled) ? presentationData.strings.GroupInfo_GroupHistoryVisible : presentationData.strings.GroupInfo_GroupHistoryHidden)) + if cachedChannelData.flags.contains(.canChangeUsername) { + entries.append(GroupInfoEntry.groupTypeSetup(presentationData.theme, presentationData.strings.GroupInfo_GroupType, isPublic ? presentationData.strings.Channel_Setup_TypePublic : presentationData.strings.Channel_Setup_TypePrivate)) + } + if !isPublic { + entries.append(GroupInfoEntry.preHistory(presentationData.theme, presentationData.strings.GroupInfo_GroupHistory, cachedChannelData.flags.contains(.preHistoryEnabled) ? presentationData.strings.GroupInfo_GroupHistoryVisible : presentationData.strings.GroupInfo_GroupHistoryHidden)) } } @@ -806,7 +800,7 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa if canViewAdminsAndBanned { var activePermissionCount: Int? - if let defaultBannedRights = cachedChannelData.defaultBannedRights { + if let defaultBannedRights = channel.defaultBannedRights { var count = 0 for right in allGroupPermissionList { if !defaultBannedRights.flags.contains(right) { @@ -1171,6 +1165,9 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl let navigateDisposable = MetaDisposable() actionsDisposable.add(navigateDisposable) + let upgradeDisposable = MetaDisposable() + actionsDisposable.add(upgradeDisposable) + var avatarGalleryTransitionArguments: ((AvatarGalleryEntry) -> GalleryTransitionArguments?)? let avatarAndNameInfoContext = ItemListAvatarAndNameInfoItemContext() var updateHiddenAvatarImpl: (() -> Void)? @@ -1178,6 +1175,8 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl var displayCopyContextMenuImpl: ((String, GroupInfoEntryTag) -> Void)? var aboutLinkActionImpl: ((TextLinkItemActionType, TextLinkItem) -> Void)? + var upgradedToSupergroupImpl: ((PeerId, @escaping () -> Void) -> Void)? + let arguments = GroupInfoArguments(account: account, peerId: peerId, avatarAndNameInfoContext: avatarAndNameInfoContext, tapAvatarAction: { let _ = (account.postbox.loadedPeerWithId(peerId) |> take(1) |> deliverOnMainQueue).start(next: { peer in if peer.profileImageRepresentations.isEmpty { @@ -1526,7 +1525,9 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl inviteByLinkImpl = { [weak contactsController] in contactsController?.dismiss() - presentControllerImpl?(channelVisibilityController(account: account, peerId: peerId, mode: .privateLink), ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) + presentControllerImpl?(channelVisibilityController(account: account, peerId: peerId, mode: .privateLink, upgradedToSupergroup: { updatedPeerId, f in + upgradedToSupergroupImpl?(updatedPeerId, f) + }), ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) } presentControllerImpl?(contactsController, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) @@ -1583,6 +1584,8 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl }, upgradedToSupergroup: { _, f in f() }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }, restrictPeer: { participant in presentControllerImpl?(channelBannedMemberController(account: account, peerId: peerId, memberId: participant.peer.id, initialParticipant: participant.participant, updated: { _ in + }, upgradedToSupergroup: { upgradedPeerId, f in + upgradedToSupergroupImpl?(upgradedPeerId, f) }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }, removePeer: { memberId in let signal = account.postbox.loadedPeerWithId(memberId) @@ -1612,7 +1615,7 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl } if peerId.namespace == Namespaces.Peer.CloudChannel { - return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: memberId, bannedRights: TelegramChatBannedRights(flags: [.banReadMessages], personal: false, untilDate: Int32.max)) + return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.updateMemberBannedRights(account: account, peerId: peerId, memberId: memberId, bannedRights: TelegramChatBannedRights(flags: [.banReadMessages], untilDate: Int32.max)) |> afterDisposed { Queue.mainQueue().async { updateState { state in @@ -1681,6 +1684,10 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl |> deliverOnMainQueue).start(next: { stickerPack in presentControllerImpl?(groupStickerPackSetupController(account: account, peerId: peerId, currentPackInfo: stickerPack), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }) + }, openGroupTypeSetup: { + presentControllerImpl?(channelVisibilityController(account: account, peerId: peerId, mode: .generic, upgradedToSupergroup: { updatedPeerId, f in + upgradedToSupergroupImpl?(updatedPeerId, f) + }), ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) }) var loadMoreControl: PeerChannelMemberCategoryControl? @@ -1854,6 +1861,23 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl controller?.view.endEditing(true) controller?.present(value, in: .window(.root), with: presentationArguments) } + upgradedToSupergroupImpl = { [weak controller] upgradedPeerId, f in + let _ = (account.postbox.transaction { transaction -> Peer? in + return transaction.getPeer(upgradedPeerId) + } + |> deliverOnMainQueue).start(next: { peer in + guard let peer = peer, let infoController = peerInfoController(account: account, peer: peer) else { + return + } + guard let controller = controller, let navigationController = controller.navigationController as? NavigationController else { + return + } + navigateToChatController(navigationController: navigationController, account: account, chatLocation: .peer(upgradedPeerId), keepStack: .never, animated: false, completion: { + f() + navigationController.pushViewController(infoController, animated: false) + }) + }) + } popToRootImpl = { [weak controller] in (controller?.navigationController as? NavigationController)?.popToRoot(animated: true) } diff --git a/TelegramUI/JoinLinkPreviewPeerContentNode.swift b/TelegramUI/JoinLinkPreviewPeerContentNode.swift index 8edb692dee..6682ccdf80 100644 --- a/TelegramUI/JoinLinkPreviewPeerContentNode.swift +++ b/TelegramUI/JoinLinkPreviewPeerContentNode.swift @@ -56,7 +56,7 @@ final class JoinLinkPreviewPeerContentNode: ASDisplayNode, ShareContentContainer super.init() - let peer = TelegramGroup(id: PeerId(namespace: 0, id: 0), title: title, photo: image.flatMap { [$0] } ?? [], participantCount: Int(memberCount), role: .member, membership: .Left, flags: [], migrationReference: nil, creationDate: 0, version: 0) + let peer = TelegramGroup(id: PeerId(namespace: 0, id: 0), title: title, photo: image.flatMap { [$0] } ?? [], participantCount: Int(memberCount), role: .member, membership: .Left, flags: [], defaultBannedRights: nil, migrationReference: nil, creationDate: 0, version: 0) self.addSubnode(self.avatarNode) self.avatarNode.setPeer(account: account, peer: peer, emptyColor: theme.list.mediaPlaceholderColor) diff --git a/TelegramUI/PresentationStrings.swift b/TelegramUI/PresentationStrings.swift index 3ccbd82d08..94ff8c746c 100644 --- a/TelegramUI/PresentationStrings.swift +++ b/TelegramUI/PresentationStrings.swift @@ -1727,1921 +1727,1919 @@ public final class PresentationStrings { public func CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1397]!, self._r[1397]!, [_1, _2, _3]) } - public var Group_AdvanceUpgradeApply: String { return self._s[1398]! } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1399]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[1401]! } - public var ReportPeer_ReasonOther: String { return self._s[1402]! } - public var KeyCommand_ScrollDown: String { return self._s[1404]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1398]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[1400]! } + public var ReportPeer_ReasonOther: String { return self._s[1401]! } + public var KeyCommand_ScrollDown: String { return self._s[1403]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1405]!, self._r[1405]!, [_0]) + return formatWithArgumentRanges(self._s[1404]!, self._r[1404]!, [_0]) } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1406]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1407]! } - public var AuthSessions_LogOut: String { return self._s[1408]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1405]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1406]! } + public var AuthSessions_LogOut: String { return self._s[1407]! } public func CHAT_PHOTO_EDITED_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1409]!, self._r[1409]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1408]!, self._r[1408]!, [_1, _2]) } - public var Passport_Identity_TypeInternalPassport: String { return self._s[1410]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1411]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[1409]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1410]! } public func CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1412]!, self._r[1412]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1411]!, self._r[1411]!, [_1, _2]) } - public var Passport_Phone_Title: String { return self._s[1413]! } - public var Settings_PhoneNumber: String { return self._s[1414]! } - public var NotificationsSound_Alert: String { return self._s[1415]! } - public var PhotoEditor_CurvesTool: String { return self._s[1417]! } - public var Checkout_PaymentMethod: String { return self._s[1419]! } - public var Contacts_AccessDeniedError: String { return self._s[1420]! } - public var Camera_PhotoMode: String { return self._s[1423]! } - public var Passport_Address_AddUtilityBill: String { return self._s[1424]! } - public var CallSettings_OnMobile: String { return self._s[1425]! } - public var Tour_Text2: String { return self._s[1426]! } + public var Passport_Phone_Title: String { return self._s[1412]! } + public var Settings_PhoneNumber: String { return self._s[1413]! } + public var NotificationsSound_Alert: String { return self._s[1414]! } + public var PhotoEditor_CurvesTool: String { return self._s[1416]! } + public var Checkout_PaymentMethod: String { return self._s[1418]! } + public var Contacts_AccessDeniedError: String { return self._s[1419]! } + public var Camera_PhotoMode: String { return self._s[1422]! } + public var Passport_Address_AddUtilityBill: String { return self._s[1423]! } + public var CallSettings_OnMobile: String { return self._s[1424]! } + public var Tour_Text2: String { return self._s[1425]! } public func MESSAGE_STICKER_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1428]!, self._r[1428]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1427]!, self._r[1427]!, [_1, _2]) } - public var DialogList_EncryptionProcessing: String { return self._s[1429]! } - public var Permissions_Skip: String { return self._s[1430]! } - public var SecretImage_Title: String { return self._s[1431]! } - public var Watch_MessageView_Title: String { return self._s[1432]! } - public var AttachmentMenu_Poll: String { return self._s[1433]! } + public var DialogList_EncryptionProcessing: String { return self._s[1428]! } + public var Permissions_Skip: String { return self._s[1429]! } + public var SecretImage_Title: String { return self._s[1430]! } + public var Watch_MessageView_Title: String { return self._s[1431]! } + public var AttachmentMenu_Poll: String { return self._s[1432]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1434]!, self._r[1434]!, [_0]) + return formatWithArgumentRanges(self._s[1433]!, self._r[1433]!, [_0]) } - public var Notification_CallCanceled: String { return self._s[1435]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1436]! } + public var Notification_CallCanceled: String { return self._s[1434]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1435]! } public func MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1437]!, self._r[1437]!, [_1]) + return formatWithArgumentRanges(self._s[1436]!, self._r[1436]!, [_1]) } public func CHAT_JOINED_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1438]!, self._r[1438]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1437]!, self._r[1437]!, [_1, _2]) } - public var Settings_ProxyConnecting: String { return self._s[1439]! } - public var Profile_MessageLifetime5s: String { return self._s[1441]! } - public var Username_InvalidCharacters: String { return self._s[1442]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[1443]! } + public var Settings_ProxyConnecting: String { return self._s[1438]! } + public var Profile_MessageLifetime5s: String { return self._s[1440]! } + public var Username_InvalidCharacters: String { return self._s[1441]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[1442]! } public func CHAT_MESSAGE_GAME_SEPARATED(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1444]!, self._r[1444]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1443]!, self._r[1443]!, [_1, _2, _3]) } - public var Notification_CreatedChannel: String { return self._s[1446]! } - public var Passcode_AppLockedAlert: String { return self._s[1448]! } - public var Contacts_TopSection: String { return self._s[1449]! } + public var Notification_CreatedChannel: String { return self._s[1445]! } + public var Passcode_AppLockedAlert: String { return self._s[1447]! } + public var Contacts_TopSection: String { return self._s[1448]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1450]!, self._r[1450]!, [_0]) + return formatWithArgumentRanges(self._s[1449]!, self._r[1449]!, [_0]) } public func CHAT_MESSAGE_DOC_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1451]!, self._r[1451]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1450]!, self._r[1450]!, [_1, _2]) } - public var ReportPeer_ReasonSpam: String { return self._s[1452]! } - public var UserInfo_TapToCall: String { return self._s[1453]! } - public var Common_Search: String { return self._s[1455]! } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1456]! } - public var Message_InvoiceLabel: String { return self._s[1457]! } - public var Conversation_InputTextPlaceholder: String { return self._s[1458]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1459]! } + public var ReportPeer_ReasonSpam: String { return self._s[1451]! } + public var UserInfo_TapToCall: String { return self._s[1452]! } + public var Common_Search: String { return self._s[1454]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1455]! } + public var Message_InvoiceLabel: String { return self._s[1456]! } + public var Conversation_InputTextPlaceholder: String { return self._s[1457]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1458]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1460]!, self._r[1460]!, [_0]) + return formatWithArgumentRanges(self._s[1459]!, self._r[1459]!, [_0]) } public func MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1461]!, self._r[1461]!, [_1]) + return formatWithArgumentRanges(self._s[1460]!, self._r[1460]!, [_1]) } - public var Conversation_Info: String { return self._s[1462]! } - public var Login_InfoDeletePhoto: String { return self._s[1463]! } - public var Passport_Language_vi: String { return self._s[1465]! } - public var Conversation_Search: String { return self._s[1466]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1467]! } + public var Conversation_Info: String { return self._s[1461]! } + public var Login_InfoDeletePhoto: String { return self._s[1462]! } + public var Passport_Language_vi: String { return self._s[1464]! } + public var Conversation_Search: String { return self._s[1465]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1466]! } public func MESSAGE_AUDIO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1468]!, self._r[1468]!, [_1]) + return formatWithArgumentRanges(self._s[1467]!, self._r[1467]!, [_1]) } - public var ReportPeer_ReasonPornography: String { return self._s[1469]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[1470]! } + public var ReportPeer_ReasonPornography: String { return self._s[1468]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[1469]! } public func CHAT_MESSAGE_PHOTO_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1471]!, self._r[1471]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1470]!, self._r[1470]!, [_1, _2]) } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1472]! } - public var Map_LiveLocationGroupDescription: String { return self._s[1473]! } - public var Channel_Setup_TypeHeader: String { return self._s[1474]! } - public var AuthSessions_LoggedIn: String { return self._s[1475]! } - public var Login_SmsRequestState3: String { return self._s[1476]! } - public var Passport_Address_EditUtilityBill: String { return self._s[1477]! } - public var Appearance_ReduceMotionInfo: String { return self._s[1478]! } - public var Channel_Edit_LinkItem: String { return self._s[1479]! } - public var Privacy_Calls_P2PNever: String { return self._s[1480]! } - public var Conversation_AddToReadingList: String { return self._s[1482]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1471]! } + public var Map_LiveLocationGroupDescription: String { return self._s[1472]! } + public var Channel_Setup_TypeHeader: String { return self._s[1473]! } + public var AuthSessions_LoggedIn: String { return self._s[1474]! } + public var Login_SmsRequestState3: String { return self._s[1475]! } + public var Passport_Address_EditUtilityBill: String { return self._s[1476]! } + public var Appearance_ReduceMotionInfo: String { return self._s[1477]! } + public var Channel_Edit_LinkItem: String { return self._s[1478]! } + public var Privacy_Calls_P2PNever: String { return self._s[1479]! } + public var Conversation_AddToReadingList: String { return self._s[1481]! } public func MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1483]!, self._r[1483]!, [_1]) + return formatWithArgumentRanges(self._s[1482]!, self._r[1482]!, [_1]) } - public var Message_Animation: String { return self._s[1484]! } - public var Conversation_DefaultRestrictedMedia: String { return self._s[1485]! } - public var Map_Unknown: String { return self._s[1486]! } - public var Call_StatusRequesting: String { return self._s[1487]! } + public var Message_Animation: String { return self._s[1483]! } + public var Conversation_DefaultRestrictedMedia: String { return self._s[1484]! } + public var Map_Unknown: String { return self._s[1485]! } + public var Call_StatusRequesting: String { return self._s[1486]! } public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1488]!, self._r[1488]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1487]!, self._r[1487]!, [_1, _2]) } - public var Conversation_SecretChatContextBotAlert: String { return self._s[1489]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1490]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[1488]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1489]! } public func MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1491]!, self._r[1491]!, [_1]) + return formatWithArgumentRanges(self._s[1490]!, self._r[1490]!, [_1]) } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1492]!, self._r[1492]!, [_0]) + return formatWithArgumentRanges(self._s[1491]!, self._r[1491]!, [_0]) } - public var Update_Skip: String { return self._s[1493]! } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1494]! } - public var Message_PinnedPollMessage: String { return self._s[1495]! } - public var BlockedUsers_Title: String { return self._s[1496]! } - public var Weekday_Monday: String { return self._s[1497]! } - public var Username_CheckingUsername: String { return self._s[1498]! } - public var NotificationsSound_Bell: String { return self._s[1499]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[1500]! } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1501]! } - public var ChatSettings_Groups: String { return self._s[1502]! } - public var Your_card_was_declined: String { return self._s[1503]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1505]! } - public var ChatList_Unmute: String { return self._s[1506]! } + public var Update_Skip: String { return self._s[1492]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1493]! } + public var Message_PinnedPollMessage: String { return self._s[1494]! } + public var BlockedUsers_Title: String { return self._s[1495]! } + public var Weekday_Monday: String { return self._s[1496]! } + public var Username_CheckingUsername: String { return self._s[1497]! } + public var NotificationsSound_Bell: String { return self._s[1498]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[1499]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1500]! } + public var ChatSettings_Groups: String { return self._s[1501]! } + public var Your_card_was_declined: String { return self._s[1502]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1504]! } + public var ChatList_Unmute: String { return self._s[1505]! } public func PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1507]!, self._r[1507]!, [_1]) + return formatWithArgumentRanges(self._s[1506]!, self._r[1506]!, [_1]) } - public var PhotoEditor_CurvesAll: String { return self._s[1508]! } - public var Weekday_ShortTuesday: String { return self._s[1509]! } - public var DialogList_Read: String { return self._s[1510]! } + public var PhotoEditor_CurvesAll: String { return self._s[1507]! } + public var Weekday_ShortTuesday: String { return self._s[1508]! } + public var DialogList_Read: String { return self._s[1509]! } public func PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1511]!, self._r[1511]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1510]!, self._r[1510]!, [_1, _2]) } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1512]! } - public var Passport_Identity_Gender: String { return self._s[1513]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1511]! } + public var Passport_Identity_Gender: String { return self._s[1512]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1514]!, self._r[1514]!, [_0]) + return formatWithArgumentRanges(self._s[1513]!, self._r[1513]!, [_0]) } - public var Target_SelectGroup: String { return self._s[1515]! } + public var Target_SelectGroup: String { return self._s[1514]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1517]!, self._r[1517]!, [_0]) + return formatWithArgumentRanges(self._s[1516]!, self._r[1516]!, [_0]) } - public var Passport_Language_en: String { return self._s[1518]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1519]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[1520]! } + public var Passport_Language_en: String { return self._s[1517]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1518]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[1519]! } public func AUTH_REGION(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1521]!, self._r[1521]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1520]!, self._r[1520]!, [_1, _2]) } - public var Checkout_NewCard_PaymentCard: String { return self._s[1523]! } - public var Login_InfoHelp: String { return self._s[1524]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1525]! } - public var SocksProxySetup_AddProxy: String { return self._s[1528]! } - public var CreatePoll_Title: String { return self._s[1529]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1530]! } - public var UserInfo_GroupsInCommon: String { return self._s[1531]! } - public var Call_AudioRouteHide: String { return self._s[1532]! } - public var ContactInfo_PhoneLabelMobile: String { return self._s[1534]! } - public var TextFormat_Bold: String { return self._s[1535]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[1536]! } - public var Notifications_Title: String { return self._s[1537]! } - public var Group_Username_InvalidTooShort: String { return self._s[1538]! } - public var Channel_ErrorAddTooMuch: String { return self._s[1539]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[1522]! } + public var Login_InfoHelp: String { return self._s[1523]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1524]! } + public var SocksProxySetup_AddProxy: String { return self._s[1527]! } + public var CreatePoll_Title: String { return self._s[1528]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1529]! } + public var UserInfo_GroupsInCommon: String { return self._s[1530]! } + public var Call_AudioRouteHide: String { return self._s[1531]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[1533]! } + public var TextFormat_Bold: String { return self._s[1534]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[1535]! } + public var Notifications_Title: String { return self._s[1536]! } + public var Group_Username_InvalidTooShort: String { return self._s[1537]! } + public var Channel_ErrorAddTooMuch: String { return self._s[1538]! } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1540]!, self._r[1540]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1539]!, self._r[1539]!, ["\(_0)"]) } - public var Stickers_SuggestAdded: String { return self._s[1542]! } - public var Login_CountryCode: String { return self._s[1543]! } - public var Map_GetDirections: String { return self._s[1544]! } - public var Login_PhoneFloodError: String { return self._s[1545]! } + public var Stickers_SuggestAdded: String { return self._s[1541]! } + public var Login_CountryCode: String { return self._s[1542]! } + public var Map_GetDirections: String { return self._s[1543]! } + public var Login_PhoneFloodError: String { return self._s[1544]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1546]!, self._r[1546]!, [_0]) + return formatWithArgumentRanges(self._s[1545]!, self._r[1545]!, [_0]) } - public var Settings_SetUsername: String { return self._s[1548]! } + public var Settings_SetUsername: String { return self._s[1547]! } public func CHAT_MESSAGE_NOTEXT_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1549]!, self._r[1549]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1548]!, self._r[1548]!, [_1, _2]) } - public var Notification_GroupInviterSelf: String { return self._s[1550]! } - public var InstantPage_TapToOpenLink: String { return self._s[1551]! } + public var Notification_GroupInviterSelf: String { return self._s[1549]! } + public var InstantPage_TapToOpenLink: String { return self._s[1550]! } public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1552]!, self._r[1552]!, [_0]) + return formatWithArgumentRanges(self._s[1551]!, self._r[1551]!, [_0]) } - public var Watch_Suggestion_TalkLater: String { return self._s[1553]! } - public var SecretChat_Title: String { return self._s[1554]! } - public var Group_UpgradeNoticeText1: String { return self._s[1555]! } - public var AuthSessions_Title: String { return self._s[1556]! } - public var PhotoEditor_CropAuto: String { return self._s[1557]! } - public var Channel_About_Title: String { return self._s[1558]! } - public var FastTwoStepSetup_EmailHelp: String { return self._s[1559]! } + public var Watch_Suggestion_TalkLater: String { return self._s[1552]! } + public var SecretChat_Title: String { return self._s[1553]! } + public var Group_UpgradeNoticeText1: String { return self._s[1554]! } + public var AuthSessions_Title: String { return self._s[1555]! } + public var PhotoEditor_CropAuto: String { return self._s[1556]! } + public var Channel_About_Title: String { return self._s[1557]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[1558]! } public func CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1560]!, self._r[1560]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1559]!, self._r[1559]!, [_1, _2]) } public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1561]!, self._r[1561]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1560]!, self._r[1560]!, ["\(_0)"]) } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1564]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[1565]! } + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1563]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[1564]! } public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1567]!, self._r[1567]!, [_0]) + return formatWithArgumentRanges(self._s[1566]!, self._r[1566]!, [_0]) } public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1568]!, self._r[1568]!, [_0]) + return formatWithArgumentRanges(self._s[1567]!, self._r[1567]!, [_0]) } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[1569]! } - public var Presence_online: String { return self._s[1571]! } - public var PasscodeSettings_Title: String { return self._s[1572]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1573]! } - public var Web_OpenExternal: String { return self._s[1574]! } + public var Privacy_PaymentsClearInfoHelp: String { return self._s[1568]! } + public var Presence_online: String { return self._s[1570]! } + public var PasscodeSettings_Title: String { return self._s[1571]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1572]! } + public var Web_OpenExternal: String { return self._s[1573]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1576]!, self._r[1576]!, [_0]) + return formatWithArgumentRanges(self._s[1575]!, self._r[1575]!, [_0]) } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1577]! } - public var Map_YouAreHere: String { return self._s[1578]! } + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1576]! } + public var Map_YouAreHere: String { return self._s[1577]! } public func MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1579]!, self._r[1579]!, [_1]) + return formatWithArgumentRanges(self._s[1578]!, self._r[1578]!, [_1]) } public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1580]!, self._r[1580]!, [_0]) + return formatWithArgumentRanges(self._s[1579]!, self._r[1579]!, [_0]) } - public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1581]! } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1582]! } + public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1580]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1581]! } public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1583]!, self._r[1583]!, [_0]) + return formatWithArgumentRanges(self._s[1582]!, self._r[1582]!, [_0]) } public func CHANNEL_MESSAGE_GEO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1584]!, self._r[1584]!, [_1]) + return formatWithArgumentRanges(self._s[1583]!, self._r[1583]!, [_1]) } - public var SocksProxySetup_Username: String { return self._s[1585]! } + public var SocksProxySetup_Username: String { return self._s[1584]! } public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1586]!, self._r[1586]!, [_0]) + return formatWithArgumentRanges(self._s[1585]!, self._r[1585]!, [_0]) } - public var Bot_Start: String { return self._s[1587]! } + public var Bot_Start: String { return self._s[1586]! } public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1588]!, self._r[1588]!, [_0]) + return formatWithArgumentRanges(self._s[1587]!, self._r[1587]!, [_0]) } public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1589]!, self._r[1589]!, [_0]) + return formatWithArgumentRanges(self._s[1588]!, self._r[1588]!, [_0]) } - public var Contacts_SortByPresence: String { return self._s[1590]! } + public var Contacts_SortByPresence: String { return self._s[1589]! } public func PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1592]!, self._r[1592]!, [_1]) + return formatWithArgumentRanges(self._s[1591]!, self._r[1591]!, [_1]) } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1593]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1592]! } public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1594]!, self._r[1594]!, [_0]) + return formatWithArgumentRanges(self._s[1593]!, self._r[1593]!, [_0]) } public func MESSAGE_DOC_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1595]!, self._r[1595]!, [_1]) + return formatWithArgumentRanges(self._s[1594]!, self._r[1594]!, [_1]) } - public var Passport_Email_EnterOtherEmail: String { return self._s[1596]! } - public var Login_InfoAvatarPhoto: String { return self._s[1597]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1598]! } - public var Tour_Title4: String { return self._s[1599]! } - public var Passport_Identity_Translation: String { return self._s[1600]! } - public var Login_TermsOfServiceLabel: String { return self._s[1602]! } - public var Passport_Language_it: String { return self._s[1603]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1604]! } - public var Passport_Identity_SelfieHelp: String { return self._s[1605]! } - public var Conversation_ClearAll: String { return self._s[1607]! } + public var Passport_Email_EnterOtherEmail: String { return self._s[1595]! } + public var Login_InfoAvatarPhoto: String { return self._s[1596]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1597]! } + public var Tour_Title4: String { return self._s[1598]! } + public var Passport_Identity_Translation: String { return self._s[1599]! } + public var Login_TermsOfServiceLabel: String { return self._s[1601]! } + public var Passport_Language_it: String { return self._s[1602]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1603]! } + public var Passport_Identity_SelfieHelp: String { return self._s[1604]! } + public var Conversation_ClearAll: String { return self._s[1606]! } public func MESSAGE_PHOTOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1609]!, self._r[1609]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1608]!, self._r[1608]!, [_1, _2]) } - public var TwoStepAuth_FloodError: String { return self._s[1610]! } - public var Paint_Delete: String { return self._s[1611]! } + public var TwoStepAuth_FloodError: String { return self._s[1609]! } + public var Paint_Delete: String { return self._s[1610]! } public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1612]!, self._r[1612]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1611]!, self._r[1611]!, [_1, _2]) } - public var Message_PinnedAudioMessage: String { return self._s[1613]! } + public var Message_PinnedAudioMessage: String { return self._s[1612]! } public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1614]!, self._r[1614]!, [_0]) + return formatWithArgumentRanges(self._s[1613]!, self._r[1613]!, [_0]) } - public var Notification_Mute1hMin: String { return self._s[1615]! } - public var Notifications_GroupNotificationsSound: String { return self._s[1616]! } - public var SocksProxySetup_ShareProxyList: String { return self._s[1617]! } - public var Conversation_MessageEditedLabel: String { return self._s[1618]! } - public var Notification_Exceptions_AlwaysOff: String { return self._s[1619]! } + public var Notification_Mute1hMin: String { return self._s[1614]! } + public var Notifications_GroupNotificationsSound: String { return self._s[1615]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[1616]! } + public var Conversation_MessageEditedLabel: String { return self._s[1617]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[1618]! } public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1620]!, self._r[1620]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1619]!, self._r[1619]!, [_0, _1, _2]) } - public var NetworkUsageSettings_ResetStats: String { return self._s[1621]! } - public var AccessDenied_LocationTracking: String { return self._s[1622]! } - public var Month_GenOctober: String { return self._s[1623]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[1624]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[1620]! } + public var AccessDenied_LocationTracking: String { return self._s[1621]! } + public var Month_GenOctober: String { return self._s[1622]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[1623]! } public func CHAT_MESSAGE_INVOICE_SEPARATED(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1625]!, self._r[1625]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1624]!, self._r[1624]!, [_1, _2, _3]) } - public var EnterPasscode_EnterPasscode: String { return self._s[1627]! } - public var MediaPicker_TimerTooltip: String { return self._s[1628]! } - public var SharedMedia_TitleAll: String { return self._s[1629]! } - public var Conversation_RestrictedMedia: String { return self._s[1631]! } - public var AccessDenied_PhotosRestricted: String { return self._s[1632]! } - public var ChangePhoneNumberCode_Called: String { return self._s[1634]! } + public var EnterPasscode_EnterPasscode: String { return self._s[1626]! } + public var MediaPicker_TimerTooltip: String { return self._s[1627]! } + public var SharedMedia_TitleAll: String { return self._s[1628]! } + public var Conversation_RestrictedMedia: String { return self._s[1630]! } + public var AccessDenied_PhotosRestricted: String { return self._s[1631]! } + public var ChangePhoneNumberCode_Called: String { return self._s[1633]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1635]!, self._r[1635]!, [_0]) + return formatWithArgumentRanges(self._s[1634]!, self._r[1634]!, [_0]) } - public var Conversation_SavedMessages: String { return self._s[1638]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[1640]! } - public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[1641]! } + public var Conversation_SavedMessages: String { return self._s[1637]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[1639]! } + public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[1640]! } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1643]!, self._r[1643]!, [_0]) + return formatWithArgumentRanges(self._s[1642]!, self._r[1642]!, [_0]) } - public var ReportPeer_AlertSuccess: String { return self._s[1644]! } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[1645]! } + public var ReportPeer_AlertSuccess: String { return self._s[1643]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[1644]! } public func MESSAGE_PHOTO_SECRET_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1646]!, self._r[1646]!, [_1]) + return formatWithArgumentRanges(self._s[1645]!, self._r[1645]!, [_1]) } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1647]!, self._r[1647]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1646]!, self._r[1646]!, [_1, _2]) } - public var Checkout_PasswordEntry_Title: String { return self._s[1648]! } - public var PhotoEditor_FadeTool: String { return self._s[1649]! } - public var Privacy_ContactsReset: String { return self._s[1650]! } + public var Checkout_PasswordEntry_Title: String { return self._s[1647]! } + public var PhotoEditor_FadeTool: String { return self._s[1648]! } + public var Privacy_ContactsReset: String { return self._s[1649]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1652]!, self._r[1652]!, [_0]) + return formatWithArgumentRanges(self._s[1651]!, self._r[1651]!, [_0]) } - public var Message_PinnedVideoMessage: String { return self._s[1653]! } - public var ChatList_Mute: String { return self._s[1654]! } - public var Permissions_CellularDataText_v0: String { return self._s[1655]! } - public var ShareMenu_SelectChats: String { return self._s[1657]! } - public var MusicPlayer_VoiceNote: String { return self._s[1658]! } - public var Conversation_RestrictedText: String { return self._s[1659]! } - public var TwoStepAuth_DisableSuccess: String { return self._s[1660]! } - public var Cache_Videos: String { return self._s[1661]! } - public var FeatureDisabled_Oops: String { return self._s[1663]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[1664]! } + public var Message_PinnedVideoMessage: String { return self._s[1652]! } + public var ChatList_Mute: String { return self._s[1653]! } + public var Permissions_CellularDataText_v0: String { return self._s[1654]! } + public var ShareMenu_SelectChats: String { return self._s[1656]! } + public var MusicPlayer_VoiceNote: String { return self._s[1657]! } + public var Conversation_RestrictedText: String { return self._s[1658]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[1659]! } + public var Cache_Videos: String { return self._s[1660]! } + public var FeatureDisabled_Oops: String { return self._s[1662]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[1663]! } public func CHAT_MESSAGE_VIDEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1665]!, self._r[1665]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1664]!, self._r[1664]!, [_1, _2]) } - public var Stickers_GroupStickersHelp: String { return self._s[1666]! } - public var GroupPermission_NoSendPolls: String { return self._s[1667]! } - public var Message_VideoExpired: String { return self._s[1669]! } - public var GroupInfo_GroupHistoryVisible: String { return self._s[1670]! } - public var Notifications_Badge: String { return self._s[1671]! } - public var CreatePoll_OptionPlaceholder: String { return self._s[1672]! } - public var Username_InvalidTooShort: String { return self._s[1673]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[1674]! } + public var Stickers_GroupStickersHelp: String { return self._s[1665]! } + public var GroupPermission_NoSendPolls: String { return self._s[1666]! } + public var Message_VideoExpired: String { return self._s[1668]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[1669]! } + public var Notifications_Badge: String { return self._s[1670]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[1671]! } + public var Username_InvalidTooShort: String { return self._s[1672]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[1673]! } public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1675]!, self._r[1675]!, [_1]) + return formatWithArgumentRanges(self._s[1674]!, self._r[1674]!, [_1]) } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[1676]! } - public var Conversation_DefaultRestrictedText: String { return self._s[1677]! } - public var SharedMedia_CategoryDocs: String { return self._s[1680]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[1675]! } + public var Conversation_DefaultRestrictedText: String { return self._s[1676]! } + public var SharedMedia_CategoryDocs: String { return self._s[1679]! } public func CHAT_MESSAGE_STICKER_SEPARATED(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1681]!, self._r[1681]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1680]!, self._r[1680]!, [_1, _2, _3]) } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1683]!, self._r[1683]!, [_1]) + return formatWithArgumentRanges(self._s[1682]!, self._r[1682]!, [_1]) } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1684]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1683]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1685]!, self._r[1685]!, [_0]) + return formatWithArgumentRanges(self._s[1684]!, self._r[1684]!, [_0]) } - public var ChatSettings_PrivateChats: String { return self._s[1686]! } - public var Channel_UpdatePhotoItem: String { return self._s[1687]! } - public var GroupInfo_LeftStatus: String { return self._s[1688]! } - public var Watch_MessageView_Forward: String { return self._s[1690]! } - public var ReportPeer_ReasonChildAbuse: String { return self._s[1691]! } - public var Cache_ClearEmpty: String { return self._s[1693]! } + public var ChatSettings_PrivateChats: String { return self._s[1685]! } + public var Channel_UpdatePhotoItem: String { return self._s[1686]! } + public var GroupInfo_LeftStatus: String { return self._s[1687]! } + public var Watch_MessageView_Forward: String { return self._s[1689]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[1690]! } + public var Cache_ClearEmpty: String { return self._s[1692]! } public func MESSAGE_VIDEO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1694]!, self._r[1694]!, [_1]) + return formatWithArgumentRanges(self._s[1693]!, self._r[1693]!, [_1]) } - public var Localization_LanguageName: String { return self._s[1695]! } - public var WebSearch_GIFs: String { return self._s[1696]! } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1697]! } - public var Username_InvalidStartsWithNumber: String { return self._s[1698]! } - public var Common_Back: String { return self._s[1699]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[1700]! } - public var Group_AdvanceUpgradeText: String { return self._s[1701]! } + public var Localization_LanguageName: String { return self._s[1694]! } + public var WebSearch_GIFs: String { return self._s[1695]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1696]! } + public var Username_InvalidStartsWithNumber: String { return self._s[1697]! } + public var Common_Back: String { return self._s[1698]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[1699]! } public func CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1702]!, self._r[1702]!, [_1]) + return formatWithArgumentRanges(self._s[1700]!, self._r[1700]!, [_1]) } public func CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1703]!, self._r[1703]!, [_1]) + return formatWithArgumentRanges(self._s[1701]!, self._r[1701]!, [_1]) } - public var Passport_Email_Help: String { return self._s[1704]! } - public var Watch_Conversation_Reply: String { return self._s[1705]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[1707]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[1708]! } - public var Channel_BanUser_Unban: String { return self._s[1710]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[1711]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[1712]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[1714]! } - public var Passport_Identity_Name: String { return self._s[1715]! } - public var GroupRemoved_ViewUserInfo: String { return self._s[1716]! } - public var Conversation_BlockUser: String { return self._s[1717]! } - public var Month_GenJanuary: String { return self._s[1718]! } - public var ChatSettings_TextSize: String { return self._s[1719]! } - public var Notification_PassportValuePhone: String { return self._s[1720]! } - public var Passport_Language_ne: String { return self._s[1721]! } - public var Notification_CallBack: String { return self._s[1722]! } - public var TwoStepAuth_EmailHelp: String { return self._s[1723]! } + public var Passport_Email_Help: String { return self._s[1702]! } + public var Watch_Conversation_Reply: String { return self._s[1703]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[1705]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[1706]! } + public var Channel_BanUser_Unban: String { return self._s[1708]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[1709]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[1710]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[1712]! } + public var Passport_Identity_Name: String { return self._s[1713]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[1714]! } + public var Conversation_BlockUser: String { return self._s[1715]! } + public var Month_GenJanuary: String { return self._s[1716]! } + public var ChatSettings_TextSize: String { return self._s[1717]! } + public var Notification_PassportValuePhone: String { return self._s[1718]! } + public var Passport_Language_ne: String { return self._s[1719]! } + public var Notification_CallBack: String { return self._s[1720]! } + public var TwoStepAuth_EmailHelp: String { return self._s[1721]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1724]!, self._r[1724]!, [_0]) + return formatWithArgumentRanges(self._s[1722]!, self._r[1722]!, [_0]) } - public var Channel_Info_Management: String { return self._s[1725]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[1726]! } - public var Stickers_FrequentlyUsed: String { return self._s[1727]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[1728]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[1730]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[1731]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[1732]! } - public var CreatePoll_TextHeader: String { return self._s[1733]! } + public var Channel_Info_Management: String { return self._s[1723]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[1724]! } + public var Stickers_FrequentlyUsed: String { return self._s[1725]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[1726]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[1728]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[1729]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[1730]! } + public var CreatePoll_TextHeader: String { return self._s[1731]! } public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1734]!, self._r[1734]!, [_0]) + return formatWithArgumentRanges(self._s[1732]!, self._r[1732]!, [_0]) } - public var PhotoEditor_QualityMedium: String { return self._s[1735]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[1736]! } + public var PhotoEditor_QualityMedium: String { return self._s[1733]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[1734]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1737]!, self._r[1737]!, [_0]) + return formatWithArgumentRanges(self._s[1735]!, self._r[1735]!, [_0]) } - public var Conversation_StatusKickedFromChannel: String { return self._s[1738]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[1739]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[1740]! } - public var Conversation_LinkDialogOpen: String { return self._s[1742]! } - public var Settings_Username: String { return self._s[1743]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[1736]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[1737]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[1738]! } + public var Conversation_LinkDialogOpen: String { return self._s[1740]! } + public var Settings_Username: String { return self._s[1741]! } public func PINNED_GEOLIVE_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1745]!, self._r[1745]!, [_1]) + return formatWithArgumentRanges(self._s[1743]!, self._r[1743]!, [_1]) } - public var Wallpaper_Wallpaper: String { return self._s[1746]! } + public var Wallpaper_Wallpaper: String { return self._s[1744]! } public func PINNED_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1748]!, self._r[1748]!, [_1]) + return formatWithArgumentRanges(self._s[1746]!, self._r[1746]!, [_1]) } - public var SocksProxySetup_UseProxy: String { return self._s[1749]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[1750]! } - public var MessageTimer_Forever: String { return self._s[1751]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[1752]! } - public var PhotoEditor_DiscardChanges: String { return self._s[1753]! } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1754]! } - public var Passport_Language_da: String { return self._s[1755]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[1756]! } + public var SocksProxySetup_UseProxy: String { return self._s[1747]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[1748]! } + public var MessageTimer_Forever: String { return self._s[1749]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[1750]! } + public var PhotoEditor_DiscardChanges: String { return self._s[1751]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1752]! } + public var Passport_Language_da: String { return self._s[1753]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[1754]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1757]!, self._r[1757]!, [_0]) + return formatWithArgumentRanges(self._s[1755]!, self._r[1755]!, [_0]) } - public var Passport_Address_EditPassportRegistration: String { return self._s[1758]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[1756]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1760]!, self._r[1760]!, [_0]) + return formatWithArgumentRanges(self._s[1758]!, self._r[1758]!, [_0]) } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[1762]! } - public var Conversation_SearchByName_Prefix: String { return self._s[1763]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[1760]! } + public var Conversation_SearchByName_Prefix: String { return self._s[1761]! } public func PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1764]!, self._r[1764]!, [_1]) + return formatWithArgumentRanges(self._s[1762]!, self._r[1762]!, [_1]) } - public var Conversation_PinnedPoll: String { return self._s[1765]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[1766]! } - public var Cache_ByPeerHeader: String { return self._s[1767]! } + public var Conversation_PinnedPoll: String { return self._s[1763]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[1764]! } + public var Cache_ByPeerHeader: String { return self._s[1765]! } public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1768]!, self._r[1768]!, [_0]) + return formatWithArgumentRanges(self._s[1766]!, self._r[1766]!, [_0]) } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[1769]! } - public var Notification_PinnedMessage: String { return self._s[1772]! } - public var Contacts_SortBy: String { return self._s[1774]! } - public var Call_EncryptionKey_Title: String { return self._s[1776]! } - public var Watch_UserInfo_Service: String { return self._s[1777]! } - public var Conversation_Unpin: String { return self._s[1780]! } - public var CancelResetAccount_Title: String { return self._s[1781]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[1782]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[1767]! } + public var Notification_PinnedMessage: String { return self._s[1770]! } + public var Contacts_SortBy: String { return self._s[1772]! } + public var Call_EncryptionKey_Title: String { return self._s[1774]! } + public var Watch_UserInfo_Service: String { return self._s[1775]! } + public var Conversation_Unpin: String { return self._s[1778]! } + public var CancelResetAccount_Title: String { return self._s[1779]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[1780]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1784]!, self._r[1784]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1782]!, self._r[1782]!, [_1, _2, _3]) } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[1785]! } - public var CallSettings_Title: String { return self._s[1786]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[1788]! } - public var AutoDownloadSettings_Contacts: String { return self._s[1789]! } - public var Passport_Identity_DocumentDetails: String { return self._s[1790]! } - public var LoginPassword_PasswordHelp: String { return self._s[1791]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[1792]! } - public var Checkout_TotalPaidAmount: String { return self._s[1793]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[1783]! } + public var CallSettings_Title: String { return self._s[1784]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[1786]! } + public var AutoDownloadSettings_Contacts: String { return self._s[1787]! } + public var Passport_Identity_DocumentDetails: String { return self._s[1788]! } + public var LoginPassword_PasswordHelp: String { return self._s[1789]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[1790]! } + public var Checkout_TotalPaidAmount: String { return self._s[1791]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1794]!, self._r[1794]!, [_0]) + return formatWithArgumentRanges(self._s[1792]!, self._r[1792]!, [_0]) } - public var PasscodeSettings_ChangePasscode: String { return self._s[1795]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[1797]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[1798]! } - public var Contacts_InviteFriends: String { return self._s[1800]! } - public var Map_ChooseLocationTitle: String { return self._s[1801]! } - public var Conversation_StopPoll: String { return self._s[1803]! } - public var Calls_RatingFeedback: String { return self._s[1804]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[1805]! } - public var NotificationsSound_Pulse: String { return self._s[1806]! } - public var Watch_LastSeen_Lately: String { return self._s[1807]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[1793]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[1795]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[1796]! } + public var Contacts_InviteFriends: String { return self._s[1798]! } + public var Map_ChooseLocationTitle: String { return self._s[1799]! } + public var Conversation_StopPoll: String { return self._s[1801]! } + public var Calls_RatingFeedback: String { return self._s[1802]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[1803]! } + public var NotificationsSound_Pulse: String { return self._s[1804]! } + public var Watch_LastSeen_Lately: String { return self._s[1805]! } public func CHAT_MESSAGE_VIDEO_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1810]!, self._r[1810]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1808]!, self._r[1808]!, [_1, _2]) } - public var Widget_NoUsers: String { return self._s[1811]! } - public var Conversation_UnvotePoll: String { return self._s[1812]! } - public var NotificationsSound_Circles: String { return self._s[1814]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[1816]! } + public var Widget_NoUsers: String { return self._s[1809]! } + public var Conversation_UnvotePoll: String { return self._s[1810]! } + public var NotificationsSound_Circles: String { return self._s[1812]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[1814]! } public func CHANNEL_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1817]!, self._r[1817]!, [_1]) + return formatWithArgumentRanges(self._s[1815]!, self._r[1815]!, [_1]) } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[1818]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[1816]! } public func CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1819]!, self._r[1819]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1817]!, self._r[1817]!, [_1, _2]) } - public var Passport_Identity_CountryPlaceholder: String { return self._s[1821]! } - public var Conversation_FileDropbox: String { return self._s[1823]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[1824]! } - public var Tour_Text3: String { return self._s[1826]! } - public var Login_ResetAccountProtected_Title: String { return self._s[1828]! } - public var GroupPermission_NoSendMessages: String { return self._s[1829]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[1830]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[1819]! } + public var Conversation_FileDropbox: String { return self._s[1821]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[1822]! } + public var Tour_Text3: String { return self._s[1824]! } + public var Login_ResetAccountProtected_Title: String { return self._s[1826]! } + public var GroupPermission_NoSendMessages: String { return self._s[1827]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[1828]! } public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1832]!, self._r[1832]!, [_0]) + return formatWithArgumentRanges(self._s[1830]!, self._r[1830]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[1833]! } - public var Checkout_ShippingOption_Title: String { return self._s[1834]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[1835]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[1831]! } + public var Checkout_ShippingOption_Title: String { return self._s[1832]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[1833]! } public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1836]!, self._r[1836]!, [_0]) + return formatWithArgumentRanges(self._s[1834]!, self._r[1834]!, [_0]) } public func CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1837]!, self._r[1837]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1835]!, self._r[1835]!, [_1, _2]) } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[1838]! } - public var Appearance_PreviewIncomingText: String { return self._s[1840]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[1841]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[1842]! } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[1843]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[1844]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[1845]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[1846]! } - public var Notification_SecretChatScreenshot: String { return self._s[1847]! } - public var Passport_Address_City: String { return self._s[1849]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[1850]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[1851]! } - public var AccessDenied_LocationDisabled: String { return self._s[1852]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[1854]! } - public var GroupInfo_Sound: String { return self._s[1855]! } - public var Stickers_RemoveFromFavorites: String { return self._s[1856]! } - public var Contacts_Title: String { return self._s[1857]! } - public var Passport_Language_fr: String { return self._s[1858]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[1836]! } + public var Appearance_PreviewIncomingText: String { return self._s[1838]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[1839]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[1840]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[1841]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[1842]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[1843]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[1844]! } + public var Notification_SecretChatScreenshot: String { return self._s[1845]! } + public var Passport_Address_City: String { return self._s[1847]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[1848]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[1849]! } + public var AccessDenied_LocationDisabled: String { return self._s[1850]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[1852]! } + public var GroupInfo_Sound: String { return self._s[1853]! } + public var Stickers_RemoveFromFavorites: String { return self._s[1854]! } + public var Contacts_Title: String { return self._s[1855]! } + public var Passport_Language_fr: String { return self._s[1856]! } public func CHAT_TITLE_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1859]!, self._r[1859]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1857]!, self._r[1857]!, [_1, _2]) } - public var Notifications_ResetAllNotifications: String { return self._s[1860]! } - public var PrivacySettings_SecurityTitle: String { return self._s[1863]! } - public var Checkout_NewCard_Title: String { return self._s[1864]! } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[1865]! } - public var Conversation_ForwardChats: String { return self._s[1866]! } - public var Settings_FAQ: String { return self._s[1869]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[1870]! } - public var Conversation_ContextMenuForward: String { return self._s[1871]! } - public var PrivacyPolicy_Title: String { return self._s[1876]! } - public var Notifications_TextTone: String { return self._s[1877]! } - public var Profile_CreateNewContact: String { return self._s[1878]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[1880]! } - public var Channel_Username_InvalidCharacters: String { return self._s[1882]! } + public var Notifications_ResetAllNotifications: String { return self._s[1858]! } + public var PrivacySettings_SecurityTitle: String { return self._s[1861]! } + public var Checkout_NewCard_Title: String { return self._s[1862]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[1863]! } + public var Conversation_ForwardChats: String { return self._s[1864]! } + public var Settings_FAQ: String { return self._s[1867]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[1868]! } + public var Conversation_ContextMenuForward: String { return self._s[1869]! } + public var PrivacyPolicy_Title: String { return self._s[1874]! } + public var Notifications_TextTone: String { return self._s[1875]! } + public var Profile_CreateNewContact: String { return self._s[1876]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[1878]! } + public var Channel_Username_InvalidCharacters: String { return self._s[1880]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1883]!, self._r[1883]!, [_0]) + return formatWithArgumentRanges(self._s[1881]!, self._r[1881]!, [_0]) } - public var PrivacySettings_LastSeenTitle: String { return self._s[1884]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[1885]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[1886]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[1887]! } - public var Bot_Unblock: String { return self._s[1888]! } - public var TextFormat_Italic: String { return self._s[1889]! } - public var Settings_About_Help: String { return self._s[1890]! } - public var SearchImages_Title: String { return self._s[1891]! } - public var Weekday_Wednesday: String { return self._s[1892]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[1893]! } - public var ExplicitContent_AlertTitle: String { return self._s[1894]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[1882]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[1883]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[1884]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[1885]! } + public var Bot_Unblock: String { return self._s[1886]! } + public var TextFormat_Italic: String { return self._s[1887]! } + public var Settings_About_Help: String { return self._s[1888]! } + public var SearchImages_Title: String { return self._s[1889]! } + public var Weekday_Wednesday: String { return self._s[1890]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[1891]! } + public var ExplicitContent_AlertTitle: String { return self._s[1892]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1895]!, self._r[1895]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1893]!, self._r[1893]!, [_1, _2, _3]) } - public var Weekday_Thursday: String { return self._s[1896]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[1897]! } - public var Channel_Members_AddMembersHelp: String { return self._s[1898]! } + public var Weekday_Thursday: String { return self._s[1894]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[1895]! } + public var Channel_Members_AddMembersHelp: String { return self._s[1896]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1899]!, self._r[1899]!, [_0]) + return formatWithArgumentRanges(self._s[1897]!, self._r[1897]!, [_0]) } - public var Passport_RequestedInformation: String { return self._s[1900]! } - public var Login_PhoneAndCountryHelp: String { return self._s[1901]! } + public var Passport_RequestedInformation: String { return self._s[1898]! } + public var Login_PhoneAndCountryHelp: String { return self._s[1899]! } public func CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1902]!, self._r[1902]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1900]!, self._r[1900]!, [_1, _2]) } - public var Conversation_EncryptionProcessing: String { return self._s[1903]! } - public var PhotoEditor_EnhanceTool: String { return self._s[1906]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[1907]! } - public var Channel_Setup_Title: String { return self._s[1908]! } + public var Conversation_EncryptionProcessing: String { return self._s[1901]! } + public var PhotoEditor_EnhanceTool: String { return self._s[1904]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[1905]! } + public var Channel_Setup_Title: String { return self._s[1906]! } public func PINNED_GIF_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1909]!, self._r[1909]!, [_1]) + return formatWithArgumentRanges(self._s[1907]!, self._r[1907]!, [_1]) } - public var Conversation_SearchPlaceholder: String { return self._s[1910]! } - public var AccessDenied_LocationAlwaysDenied: String { return self._s[1911]! } - public var Checkout_ErrorGeneric: String { return self._s[1912]! } - public var Passport_Language_hu: String { return self._s[1913]! } + public var Conversation_SearchPlaceholder: String { return self._s[1908]! } + public var AccessDenied_LocationAlwaysDenied: String { return self._s[1909]! } + public var Checkout_ErrorGeneric: String { return self._s[1910]! } + public var Passport_Language_hu: String { return self._s[1911]! } public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1915]!, self._r[1915]!, [_0]) + return formatWithArgumentRanges(self._s[1913]!, self._r[1913]!, [_0]) } - public var Conversation_CloudStorageInfo_Title: String { return self._s[1918]! } - public var PhotoEditor_CropAspectRatioSquare: String { return self._s[1919]! } + public var Conversation_CloudStorageInfo_Title: String { return self._s[1916]! } + public var PhotoEditor_CropAspectRatioSquare: String { return self._s[1917]! } public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1920]!, self._r[1920]!, [_0]) + return formatWithArgumentRanges(self._s[1918]!, self._r[1918]!, [_0]) } - public var Conversation_ClearPrivateHistory: String { return self._s[1921]! } - public var ContactInfo_PhoneLabelHome: String { return self._s[1922]! } - public var PrivacySettings_LastSeenContacts: String { return self._s[1923]! } + public var Conversation_ClearPrivateHistory: String { return self._s[1919]! } + public var ContactInfo_PhoneLabelHome: String { return self._s[1920]! } + public var PrivacySettings_LastSeenContacts: String { return self._s[1921]! } public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1924]!, self._r[1924]!, [_0]) + return formatWithArgumentRanges(self._s[1922]!, self._r[1922]!, [_0]) } - public var Passport_Language_cs: String { return self._s[1925]! } - public var Message_PinnedAnimationMessage: String { return self._s[1926]! } - public var Passport_Identity_ReverseSideHelp: String { return self._s[1928]! } - public var Embed_PlayingInPIP: String { return self._s[1930]! } - public var AutoNightTheme_ScheduleSection: String { return self._s[1931]! } + public var Passport_Language_cs: String { return self._s[1923]! } + public var Message_PinnedAnimationMessage: String { return self._s[1924]! } + public var Passport_Identity_ReverseSideHelp: String { return self._s[1926]! } + public var Embed_PlayingInPIP: String { return self._s[1928]! } + public var AutoNightTheme_ScheduleSection: String { return self._s[1929]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1932]!, self._r[1932]!, [_0]) + return formatWithArgumentRanges(self._s[1930]!, self._r[1930]!, [_0]) } - public var MediaPicker_LivePhotoDescription: String { return self._s[1933]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[1931]! } public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1934]!, self._r[1934]!, [_1]) + return formatWithArgumentRanges(self._s[1932]!, self._r[1932]!, [_1]) } - public var Notification_PaymentSent: String { return self._s[1935]! } - public var PhotoEditor_CurvesGreen: String { return self._s[1936]! } - public var SaveIncomingPhotosSettings_Title: String { return self._s[1937]! } + public var Notification_PaymentSent: String { return self._s[1933]! } + public var PhotoEditor_CurvesGreen: String { return self._s[1934]! } + public var SaveIncomingPhotosSettings_Title: String { return self._s[1935]! } public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1938]!, self._r[1938]!, [_1]) + return formatWithArgumentRanges(self._s[1936]!, self._r[1936]!, [_1]) } public func CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1939]!, self._r[1939]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1937]!, self._r[1937]!, [_1, _2]) } - public var NetworkUsageSettings_CallDataSection: String { return self._s[1940]! } - public var PasscodeSettings_HelpTop: String { return self._s[1941]! } - public var Passport_Address_TypeRentalAgreement: String { return self._s[1943]! } - public var ReportPeer_ReasonOther_Placeholder: String { return self._s[1944]! } - public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[1945]! } - public var Call_Accept: String { return self._s[1947]! } - public var GroupRemoved_RemoveInfo: String { return self._s[1948]! } - public var Month_GenMarch: String { return self._s[1949]! } - public var PhotoEditor_ShadowsTool: String { return self._s[1950]! } - public var LoginPassword_Title: String { return self._s[1951]! } - public var Watch_Conversation_GroupInfo: String { return self._s[1952]! } - public var CallSettings_Always: String { return self._s[1953]! } - public var TwoStepAuth_SetupHint: String { return self._s[1954]! } - public var ConversationProfile_UsersTooMuchError: String { return self._s[1955]! } + public var NetworkUsageSettings_CallDataSection: String { return self._s[1938]! } + public var PasscodeSettings_HelpTop: String { return self._s[1939]! } + public var Passport_Address_TypeRentalAgreement: String { return self._s[1941]! } + public var ReportPeer_ReasonOther_Placeholder: String { return self._s[1942]! } + public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[1943]! } + public var Call_Accept: String { return self._s[1945]! } + public var GroupRemoved_RemoveInfo: String { return self._s[1946]! } + public var Month_GenMarch: String { return self._s[1947]! } + public var PhotoEditor_ShadowsTool: String { return self._s[1948]! } + public var LoginPassword_Title: String { return self._s[1949]! } + public var Watch_Conversation_GroupInfo: String { return self._s[1950]! } + public var CallSettings_Always: String { return self._s[1951]! } + public var TwoStepAuth_SetupHint: String { return self._s[1952]! } + public var ConversationProfile_UsersTooMuchError: String { return self._s[1953]! } public func MESSAGE_GEOLIVE_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1956]!, self._r[1956]!, [_1]) + return formatWithArgumentRanges(self._s[1954]!, self._r[1954]!, [_1]) } - public var Login_PhoneTitle: String { return self._s[1957]! } - public var Passport_FieldPhoneHelp: String { return self._s[1958]! } - public var Weekday_ShortSunday: String { return self._s[1959]! } - public var Passport_InfoFAQ_URL: String { return self._s[1960]! } - public var ContactInfo_Job: String { return self._s[1962]! } - public var UserInfo_InviteBotToGroup: String { return self._s[1963]! } - public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[1964]! } - public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[1966]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[1968]! } - public var MediaPicker_AddCaption: String { return self._s[1969]! } - public var CallSettings_TabIconDescription: String { return self._s[1970]! } - public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[1971]! } - public var Passport_Identity_TypePersonalDetails: String { return self._s[1972]! } - public var DialogList_SearchSectionRecent: String { return self._s[1973]! } - public var PrivacyPolicy_DeclineMessage: String { return self._s[1974]! } - public var LastSeen_WithinAWeek: String { return self._s[1977]! } - public var ChannelMembers_GroupAdminsTitle: String { return self._s[1978]! } - public var Conversation_CloudStorage_ChatStatus: String { return self._s[1980]! } - public var Passport_Address_TypeResidentialAddress: String { return self._s[1981]! } - public var Conversation_StatusLeftGroup: String { return self._s[1982]! } - public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[1983]! } + public var Login_PhoneTitle: String { return self._s[1955]! } + public var Passport_FieldPhoneHelp: String { return self._s[1956]! } + public var Weekday_ShortSunday: String { return self._s[1957]! } + public var Passport_InfoFAQ_URL: String { return self._s[1958]! } + public var ContactInfo_Job: String { return self._s[1960]! } + public var UserInfo_InviteBotToGroup: String { return self._s[1961]! } + public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[1962]! } + public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[1964]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[1966]! } + public var MediaPicker_AddCaption: String { return self._s[1967]! } + public var CallSettings_TabIconDescription: String { return self._s[1968]! } + public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[1969]! } + public var Passport_Identity_TypePersonalDetails: String { return self._s[1970]! } + public var DialogList_SearchSectionRecent: String { return self._s[1971]! } + public var PrivacyPolicy_DeclineMessage: String { return self._s[1972]! } + public var LastSeen_WithinAWeek: String { return self._s[1975]! } + public var ChannelMembers_GroupAdminsTitle: String { return self._s[1976]! } + public var Conversation_CloudStorage_ChatStatus: String { return self._s[1978]! } + public var Passport_Address_TypeResidentialAddress: String { return self._s[1979]! } + public var Conversation_StatusLeftGroup: String { return self._s[1980]! } + public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[1981]! } public func CHANNEL_MESSAGE_AUDIO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1985]!, self._r[1985]!, [_1]) + return formatWithArgumentRanges(self._s[1983]!, self._r[1983]!, [_1]) } - public var GroupPermission_AddSuccess: String { return self._s[1986]! } - public var PhotoEditor_BlurToolRadial: String { return self._s[1988]! } - public var Conversation_ContextMenuCopy: String { return self._s[1989]! } - public var AccessDenied_CallMicrophone: String { return self._s[1990]! } + public var GroupPermission_AddSuccess: String { return self._s[1984]! } + public var PhotoEditor_BlurToolRadial: String { return self._s[1986]! } + public var Conversation_ContextMenuCopy: String { return self._s[1987]! } + public var AccessDenied_CallMicrophone: String { return self._s[1988]! } public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1991]!, self._r[1991]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1989]!, self._r[1989]!, [_1, _2, _3]) } - public var Login_InvalidFirstNameError: String { return self._s[1992]! } - public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[1993]! } - public var Checkout_PaymentMethod_New: String { return self._s[1994]! } - public var ShareMenu_CopyShareLinkGame: String { return self._s[1995]! } - public var PhotoEditor_QualityTool: String { return self._s[1996]! } - public var Login_SendCodeViaSms: String { return self._s[1997]! } + public var Login_InvalidFirstNameError: String { return self._s[1990]! } + public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[1991]! } + public var Checkout_PaymentMethod_New: String { return self._s[1992]! } + public var ShareMenu_CopyShareLinkGame: String { return self._s[1993]! } + public var PhotoEditor_QualityTool: String { return self._s[1994]! } + public var Login_SendCodeViaSms: String { return self._s[1995]! } public func CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1998]!, self._r[1998]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1996]!, self._r[1996]!, [_1, _2]) } - public var Login_EmailNotConfiguredError: String { return self._s[1999]! } - public var PrivacyPolicy_Accept: String { return self._s[2000]! } - public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2001]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2002]! } - public var AutoNightTheme_Automatic: String { return self._s[2003]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2004]! } - public var Privacy_ContactsSyncHelp: String { return self._s[2005]! } - public var Cache_Help: String { return self._s[2006]! } - public var Passport_Language_fa: String { return self._s[2007]! } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2008]! } - public var PrivacySettings_LastSeen: String { return self._s[2009]! } + public var Login_EmailNotConfiguredError: String { return self._s[1997]! } + public var PrivacyPolicy_Accept: String { return self._s[1998]! } + public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[1999]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2000]! } + public var AutoNightTheme_Automatic: String { return self._s[2001]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2002]! } + public var Privacy_ContactsSyncHelp: String { return self._s[2003]! } + public var Cache_Help: String { return self._s[2004]! } + public var Passport_Language_fa: String { return self._s[2005]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2006]! } + public var PrivacySettings_LastSeen: String { return self._s[2007]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2010]!, self._r[2010]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2008]!, self._r[2008]!, [_0, _1]) } - public var Channel_EditAdmin_PermissionInviteUsers: String { return self._s[2012]! } - public var Preview_SaveGif: String { return self._s[2014]! } - public var Profile_About: String { return self._s[2015]! } - public var Channel_About_Placeholder: String { return self._s[2016]! } - public var Login_InfoTitle: String { return self._s[2017]! } + public var Channel_EditAdmin_PermissionInviteUsers: String { return self._s[2010]! } + public var Preview_SaveGif: String { return self._s[2012]! } + public var Profile_About: String { return self._s[2013]! } + public var Channel_About_Placeholder: String { return self._s[2014]! } + public var Login_InfoTitle: String { return self._s[2015]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2018]!, self._r[2018]!, [_0]) + return formatWithArgumentRanges(self._s[2016]!, self._r[2016]!, [_0]) } - public var Watch_Suggestion_CantTalk: String { return self._s[2020]! } - public var ContactInfo_Title: String { return self._s[2021]! } - public var Media_ShareThisVideo: String { return self._s[2022]! } - public var Weekday_ShortFriday: String { return self._s[2023]! } - public var AccessDenied_Contacts: String { return self._s[2024]! } - public var Notification_CallIncomingShort: String { return self._s[2025]! } - public var Group_Setup_TypePublic: String { return self._s[2026]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[2027]! } - public var Notifications_Badge_IncludeChannels: String { return self._s[2028]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[2031]! } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2032]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[2033]! } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2034]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2035]! } - public var DialogList_Typing: String { return self._s[2036]! } - public var Checkout_Phone: String { return self._s[2039]! } - public var Login_InfoFirstNamePlaceholder: String { return self._s[2042]! } + public var Watch_Suggestion_CantTalk: String { return self._s[2018]! } + public var ContactInfo_Title: String { return self._s[2019]! } + public var Media_ShareThisVideo: String { return self._s[2020]! } + public var Weekday_ShortFriday: String { return self._s[2021]! } + public var AccessDenied_Contacts: String { return self._s[2022]! } + public var Notification_CallIncomingShort: String { return self._s[2023]! } + public var Group_Setup_TypePublic: String { return self._s[2024]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[2025]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[2026]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[2029]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2030]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[2031]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2032]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2033]! } + public var DialogList_Typing: String { return self._s[2034]! } + public var Checkout_Phone: String { return self._s[2037]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[2040]! } public func PINNED_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2043]!, self._r[2043]!, [_1]) + return formatWithArgumentRanges(self._s[2041]!, self._r[2041]!, [_1]) } - public var Privacy_Calls_Integration: String { return self._s[2044]! } - public var Notifications_PermissionsAllow: String { return self._s[2046]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[2049]! } - public var Settings_ChatSettings: String { return self._s[2050]! } + public var Privacy_Calls_Integration: String { return self._s[2042]! } + public var Notifications_PermissionsAllow: String { return self._s[2044]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[2047]! } + public var Settings_ChatSettings: String { return self._s[2048]! } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2051]!, self._r[2051]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2049]!, self._r[2049]!, [_1, _2]) } - public var GroupRemoved_DeleteUser: String { return self._s[2053]! } - public var Login_ContinueWithLocalization: String { return self._s[2054]! } - public var Watch_Message_ForwardedFrom: String { return self._s[2055]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[2057]! } - public var Conversation_Unblock: String { return self._s[2058]! } - public var PrivacySettings_DataSettings: String { return self._s[2059]! } - public var Notifications_InAppNotificationsVibrate: String { return self._s[2060]! } + public var GroupRemoved_DeleteUser: String { return self._s[2051]! } + public var Login_ContinueWithLocalization: String { return self._s[2052]! } + public var Watch_Message_ForwardedFrom: String { return self._s[2053]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[2055]! } + public var Conversation_Unblock: String { return self._s[2056]! } + public var PrivacySettings_DataSettings: String { return self._s[2057]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[2058]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2061]!, self._r[2061]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_0, _1]) } - public var PrivacySettings_Passcode: String { return self._s[2064]! } + public var PrivacySettings_Passcode: String { return self._s[2062]! } public func ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2065]!, self._r[2065]!, [_1]) + return formatWithArgumentRanges(self._s[2063]!, self._r[2063]!, [_1]) } - public var Passport_Language_dz: String { return self._s[2066]! } - public var Passport_Language_tk: String { return self._s[2067]! } + public var Passport_Language_dz: String { return self._s[2064]! } + public var Passport_Language_tk: String { return self._s[2065]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2068]!, self._r[2068]!, [_0]) + return formatWithArgumentRanges(self._s[2066]!, self._r[2066]!, [_0]) } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2069]! } - public var Conversation_ContextMenuReply: String { return self._s[2070]! } - public var Tour_Title1: String { return self._s[2071]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2067]! } + public var Conversation_ContextMenuReply: String { return self._s[2068]! } + public var Tour_Title1: String { return self._s[2069]! } public func MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2072]!, self._r[2072]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2070]!, self._r[2070]!, [_1, _2]) } - public var Conversation_ClearGroupHistory: String { return self._s[2074]! } + public var Conversation_ClearGroupHistory: String { return self._s[2072]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2075]!, self._r[2075]!, [_0]) + return formatWithArgumentRanges(self._s[2073]!, self._r[2073]!, [_0]) } - public var Call_RateCall: String { return self._s[2076]! } - public var Passport_PasswordCompleteSetup: String { return self._s[2077]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2078]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[2080]! } + public var Call_RateCall: String { return self._s[2074]! } + public var Passport_PasswordCompleteSetup: String { return self._s[2075]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2076]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[2078]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2082]!, self._r[2082]!, [_0]) + return formatWithArgumentRanges(self._s[2080]!, self._r[2080]!, [_0]) } - public var Compose_Create: String { return self._s[2083]! } - public var Contacts_InviteToTelegram: String { return self._s[2084]! } - public var GroupInfo_Notifications: String { return self._s[2085]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[2087]! } - public var Month_GenApril: String { return self._s[2088]! } - public var Appearance_AutoNightTheme: String { return self._s[2089]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[2091]! } - public var Login_CodeSentSms: String { return self._s[2093]! } + public var Compose_Create: String { return self._s[2081]! } + public var Contacts_InviteToTelegram: String { return self._s[2082]! } + public var GroupInfo_Notifications: String { return self._s[2083]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[2085]! } + public var Month_GenApril: String { return self._s[2086]! } + public var Appearance_AutoNightTheme: String { return self._s[2087]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[2089]! } + public var Login_CodeSentSms: String { return self._s[2091]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2094]!, self._r[2094]!, [_0]) + return formatWithArgumentRanges(self._s[2092]!, self._r[2092]!, [_0]) } - public var EmptyGroupInfo_Line3: String { return self._s[2095]! } - public var Passport_Language_hr: String { return self._s[2096]! } + public var EmptyGroupInfo_Line3: String { return self._s[2093]! } + public var Passport_Language_hr: String { return self._s[2094]! } public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2097]!, self._r[2097]!, [_0]) + return formatWithArgumentRanges(self._s[2095]!, self._r[2095]!, [_0]) } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[2098]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2099]! } - public var Privacy_SecretChatsTitle: String { return self._s[2100]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2102]! } - public var GroupInfo_AddUserLeftError: String { return self._s[2103]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[2096]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2097]! } + public var Privacy_SecretChatsTitle: String { return self._s[2098]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2100]! } + public var GroupInfo_AddUserLeftError: String { return self._s[2101]! } public func CHANNEL_MESSAGE_VIDEO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2104]!, self._r[2104]!, [_1]) + return formatWithArgumentRanges(self._s[2102]!, self._r[2102]!, [_1]) } - public var Preview_DeleteGif: String { return self._s[2105]! } - public var GroupInfo_Permissions_Exceptions: String { return self._s[2106]! } - public var Group_ErrorNotMutualContact: String { return self._s[2107]! } - public var Notification_MessageLifetime5s: String { return self._s[2108]! } + public var Preview_DeleteGif: String { return self._s[2103]! } + public var GroupInfo_Permissions_Exceptions: String { return self._s[2104]! } + public var Group_ErrorNotMutualContact: String { return self._s[2105]! } + public var Notification_MessageLifetime5s: String { return self._s[2106]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2109]!, self._r[2109]!, [_0]) + return formatWithArgumentRanges(self._s[2107]!, self._r[2107]!, [_0]) } - public var Passport_Address_AddBankStatement: String { return self._s[2111]! } - public var Notification_CallIncoming: String { return self._s[2112]! } - public var Compose_NewGroupTitle: String { return self._s[2113]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2115]! } - public var Passport_Address_Postcode: String { return self._s[2117]! } + public var Passport_Address_AddBankStatement: String { return self._s[2109]! } + public var Notification_CallIncoming: String { return self._s[2110]! } + public var Compose_NewGroupTitle: String { return self._s[2111]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2113]! } + public var Passport_Address_Postcode: String { return self._s[2115]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2118]!, self._r[2118]!, [_0]) + return formatWithArgumentRanges(self._s[2116]!, self._r[2116]!, [_0]) } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2119]! } - public var GroupPermission_Duration: String { return self._s[2120]! } + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2117]! } + public var GroupPermission_Duration: String { return self._s[2118]! } public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2121]!, self._r[2121]!, [_0]) + return formatWithArgumentRanges(self._s[2119]!, self._r[2119]!, [_0]) } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2122]! } - public var Username_Placeholder: String { return self._s[2123]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2124]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2125]! } + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2120]! } + public var Username_Placeholder: String { return self._s[2121]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2122]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2123]! } public func CHAT_ADD_MEMBER_SEPARATED(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2126]!, self._r[2126]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2124]!, self._r[2124]!, [_1, _2, _3]) } - public var Passport_PasswordDescription: String { return self._s[2128]! } - public var Channel_MessagePhotoUpdated: String { return self._s[2129]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[2130]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[2131]! } - public var Conversation_ContextMenuMore: String { return self._s[2132]! } - public var Privacy_PaymentsClearInfo: String { return self._s[2133]! } - public var CallSettings_TabIcon: String { return self._s[2134]! } - public var KeyCommand_Find: String { return self._s[2135]! } - public var Message_PinnedGame: String { return self._s[2136]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2137]! } - public var Login_CallRequestState2: String { return self._s[2139]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2141]! } + public var Passport_PasswordDescription: String { return self._s[2126]! } + public var Channel_MessagePhotoUpdated: String { return self._s[2127]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[2128]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[2129]! } + public var Conversation_ContextMenuMore: String { return self._s[2130]! } + public var Privacy_PaymentsClearInfo: String { return self._s[2131]! } + public var CallSettings_TabIcon: String { return self._s[2132]! } + public var KeyCommand_Find: String { return self._s[2133]! } + public var Message_PinnedGame: String { return self._s[2134]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2135]! } + public var Login_CallRequestState2: String { return self._s[2137]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2139]! } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2141]!, self._r[2141]!, [_0]) + } + public var Conversation_InstantPagePreview: String { return self._s[2142]! } + public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2143]!, self._r[2143]!, [_0]) } - public var Conversation_InstantPagePreview: String { return self._s[2144]! } - public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2145]!, self._r[2145]!, [_0]) - } - public var SecretTimer_VideoDescription: String { return self._s[2148]! } - public var GroupPermission_NoPinMessages: String { return self._s[2149]! } - public var Passport_Language_es: String { return self._s[2150]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2152]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2153]! } - public var WebPreview_GettingLinkInfo: String { return self._s[2154]! } - public var Watch_UserInfo_Unmute: String { return self._s[2155]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2156]! } - public var AccessDenied_CameraRestricted: String { return self._s[2158]! } + public var SecretTimer_VideoDescription: String { return self._s[2146]! } + public var GroupPermission_NoPinMessages: String { return self._s[2147]! } + public var Passport_Language_es: String { return self._s[2148]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2150]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2151]! } + public var WebPreview_GettingLinkInfo: String { return self._s[2152]! } + public var Watch_UserInfo_Unmute: String { return self._s[2153]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2154]! } + public var AccessDenied_CameraRestricted: String { return self._s[2156]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2159]!, self._r[2159]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2157]!, self._r[2157]!, ["\(_0)"]) } - public var ChatList_ReadAll: String { return self._s[2161]! } - public var Settings_CopyUsername: String { return self._s[2162]! } - public var Contacts_SearchLabel: String { return self._s[2163]! } + public var ChatList_ReadAll: String { return self._s[2159]! } + public var Settings_CopyUsername: String { return self._s[2160]! } + public var Contacts_SearchLabel: String { return self._s[2161]! } public func MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2165]!, self._r[2165]!, [_1]) + return formatWithArgumentRanges(self._s[2163]!, self._r[2163]!, [_1]) } - public var Map_OpenInYandexNavigator: String { return self._s[2166]! } - public var PasscodeSettings_EncryptData: String { return self._s[2167]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[2169]! } - public var DialogList_AdNoticeAlert: String { return self._s[2170]! } + public var Map_OpenInYandexNavigator: String { return self._s[2164]! } + public var PasscodeSettings_EncryptData: String { return self._s[2165]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[2167]! } + public var DialogList_AdNoticeAlert: String { return self._s[2168]! } public func CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2172]!, self._r[2172]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2170]!, self._r[2170]!, [_1, _2, _3]) } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2173]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2174]! } - public var Localization_LanguageCustom: String { return self._s[2175]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2176]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2171]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2172]! } + public var Localization_LanguageCustom: String { return self._s[2173]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2174]! } public func CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2178]!, self._r[2178]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2176]!, self._r[2176]!, [_1, _2]) } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2180]! } - public var Conversation_InfoGroup: String { return self._s[2181]! } - public var Compose_NewMessage: String { return self._s[2182]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2184]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2185]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2178]! } + public var Conversation_InfoGroup: String { return self._s[2179]! } + public var Compose_NewMessage: String { return self._s[2180]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2182]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2183]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2186]!, self._r[2186]!, [_0]) + return formatWithArgumentRanges(self._s[2184]!, self._r[2184]!, [_0]) } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2187]! } - public var Login_CancelSignUpConfirmation: String { return self._s[2188]! } - public var ChangePhoneNumberCode_Help: String { return self._s[2189]! } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2190]! } - public var Channel_BlackList_Title: String { return self._s[2191]! } - public var UserInfo_PhoneCall: String { return self._s[2192]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2194]! } - public var State_connecting: String { return self._s[2195]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2185]! } + public var Login_CancelSignUpConfirmation: String { return self._s[2186]! } + public var ChangePhoneNumberCode_Help: String { return self._s[2187]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2188]! } + public var Channel_BlackList_Title: String { return self._s[2189]! } + public var UserInfo_PhoneCall: String { return self._s[2190]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2192]! } + public var State_connecting: String { return self._s[2193]! } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2196]!, self._r[2196]!, [_0]) + return formatWithArgumentRanges(self._s[2194]!, self._r[2194]!, [_0]) } - public var Notifications_GroupNotifications: String { return self._s[2197]! } - public var Passport_Identity_EditPassport: String { return self._s[2198]! } - public var EnterPasscode_RepeatNewPasscode: String { return self._s[2200]! } - public var Localization_EnglishLanguageName: String { return self._s[2201]! } - public var Share_AuthDescription: String { return self._s[2202]! } - public var Passport_Identity_Surname: String { return self._s[2203]! } - public var Compose_TokenListPlaceholder: String { return self._s[2204]! } - public var Passport_Identity_OneOfTypePassport: String { return self._s[2205]! } - public var Settings_AboutEmpty: String { return self._s[2206]! } - public var Conversation_Unmute: String { return self._s[2207]! } - public var Login_CodeSentCall: String { return self._s[2210]! } - public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2211]! } - public var ChatSettings_Appearance: String { return self._s[2212]! } - public var Appearance_PickAccentColor: String { return self._s[2213]! } - public var Notification_CallMissed: String { return self._s[2214]! } - public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2215]! } - public var ChatAdmins_AdminLabel: String { return self._s[2217]! } - public var KeyCommand_JumpToNextChat: String { return self._s[2218]! } - public var Conversation_StopPollConfirmationTitle: String { return self._s[2220]! } - public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2221]! } - public var Month_GenJune: String { return self._s[2222]! } - public var Watch_Location_Current: String { return self._s[2223]! } - public var Conversation_TitleMute: String { return self._s[2224]! } + public var Notifications_GroupNotifications: String { return self._s[2195]! } + public var Passport_Identity_EditPassport: String { return self._s[2196]! } + public var EnterPasscode_RepeatNewPasscode: String { return self._s[2198]! } + public var Localization_EnglishLanguageName: String { return self._s[2199]! } + public var Share_AuthDescription: String { return self._s[2200]! } + public var Passport_Identity_Surname: String { return self._s[2201]! } + public var Compose_TokenListPlaceholder: String { return self._s[2202]! } + public var Passport_Identity_OneOfTypePassport: String { return self._s[2203]! } + public var Settings_AboutEmpty: String { return self._s[2204]! } + public var Conversation_Unmute: String { return self._s[2205]! } + public var Login_CodeSentCall: String { return self._s[2208]! } + public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2209]! } + public var ChatSettings_Appearance: String { return self._s[2210]! } + public var Appearance_PickAccentColor: String { return self._s[2211]! } + public var Notification_CallMissed: String { return self._s[2212]! } + public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2213]! } + public var ChatAdmins_AdminLabel: String { return self._s[2215]! } + public var KeyCommand_JumpToNextChat: String { return self._s[2216]! } + public var Conversation_StopPollConfirmationTitle: String { return self._s[2218]! } + public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2219]! } + public var Month_GenJune: String { return self._s[2220]! } + public var Watch_Location_Current: String { return self._s[2221]! } + public var Conversation_TitleMute: String { return self._s[2222]! } public func PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2225]!, self._r[2225]!, [_1]) + return formatWithArgumentRanges(self._s[2223]!, self._r[2223]!, [_1]) } - public var GroupInfo_DeleteAndExit: String { return self._s[2226]! } + public var GroupInfo_DeleteAndExit: String { return self._s[2224]! } public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2227]!, self._r[2227]!, [_0]) + return formatWithArgumentRanges(self._s[2225]!, self._r[2225]!, [_0]) } - public var Call_ReportPlaceholder: String { return self._s[2228]! } - public var MaskStickerSettings_Info: String { return self._s[2229]! } + public var Call_ReportPlaceholder: String { return self._s[2226]! } + public var MaskStickerSettings_Info: String { return self._s[2227]! } public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2230]!, self._r[2230]!, [_0]) + return formatWithArgumentRanges(self._s[2228]!, self._r[2228]!, [_0]) } - public var Checkout_NewCard_PostcodeTitle: String { return self._s[2231]! } - public var Passport_Address_RegionPlaceholder: String { return self._s[2233]! } - public var Contacts_ShareTelegram: String { return self._s[2234]! } + public var Checkout_NewCard_PostcodeTitle: String { return self._s[2229]! } + public var Passport_Address_RegionPlaceholder: String { return self._s[2231]! } + public var Contacts_ShareTelegram: String { return self._s[2232]! } public func CHAT_MESSAGE_GIF_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2235]!, self._r[2235]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2233]!, self._r[2233]!, [_1, _2]) } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2236]! } - public var Channel_ErrorAccessDenied: String { return self._s[2237]! } - public var Stickers_GroupChooseStickerPack: String { return self._s[2239]! } - public var Call_ConnectionErrorTitle: String { return self._s[2240]! } - public var UserInfo_NotificationsEnable: String { return self._s[2241]! } - public var Tour_Text4: String { return self._s[2244]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2234]! } + public var Channel_ErrorAccessDenied: String { return self._s[2235]! } + public var Stickers_GroupChooseStickerPack: String { return self._s[2237]! } + public var Call_ConnectionErrorTitle: String { return self._s[2238]! } + public var UserInfo_NotificationsEnable: String { return self._s[2239]! } + public var Tour_Text4: String { return self._s[2242]! } public func CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2246]!, self._r[2246]!, [_1]) + return formatWithArgumentRanges(self._s[2244]!, self._r[2244]!, [_1]) } - public var Profile_MessageLifetime2s: String { return self._s[2247]! } - public var Notification_MessageLifetime2s: String { return self._s[2248]! } + public var Profile_MessageLifetime2s: String { return self._s[2245]! } + public var Notification_MessageLifetime2s: String { return self._s[2246]! } public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2249]!, self._r[2249]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2247]!, self._r[2247]!, [_1, _2, _3]) } - public var Cache_ClearCache: String { return self._s[2250]! } - public var AutoNightTheme_UpdateLocation: String { return self._s[2251]! } - public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2252]! } + public var Cache_ClearCache: String { return self._s[2248]! } + public var AutoNightTheme_UpdateLocation: String { return self._s[2249]! } + public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2250]! } public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2254]!, self._r[2254]!, [_0]) + return formatWithArgumentRanges(self._s[2252]!, self._r[2252]!, [_0]) } - public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2256]! } - public var SocksProxySetup_TypeSocks: String { return self._s[2257]! } - public var AutoNightTheme_Title: String { return self._s[2258]! } - public var InstantPage_FeedbackButton: String { return self._s[2259]! } - public var Passport_FieldAddress: String { return self._s[2260]! } - public var Month_ShortMarch: String { return self._s[2261]! } - public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2262]! } - public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2263]! } - public var Passport_FloodError: String { return self._s[2264]! } - public var SecretGif_Title: String { return self._s[2265]! } - public var Passport_Language_th: String { return self._s[2267]! } - public var Passport_Address_Address: String { return self._s[2268]! } - public var Login_InvalidLastNameError: String { return self._s[2269]! } - public var Notifications_InAppNotificationsPreview: String { return self._s[2270]! } - public var Notifications_PermissionsUnreachableTitle: String { return self._s[2271]! } - public var ShareMenu_Send: String { return self._s[2272]! } - public var Month_GenNovember: String { return self._s[2275]! } - public var Checkout_Email: String { return self._s[2277]! } - public var NotificationsSound_Tritone: String { return self._s[2278]! } - public var StickerPacksSettings_ManagingHelp: String { return self._s[2280]! } - public var ChangePhoneNumberNumber_Help: String { return self._s[2283]! } + public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2254]! } + public var SocksProxySetup_TypeSocks: String { return self._s[2255]! } + public var AutoNightTheme_Title: String { return self._s[2256]! } + public var InstantPage_FeedbackButton: String { return self._s[2257]! } + public var Passport_FieldAddress: String { return self._s[2258]! } + public var Month_ShortMarch: String { return self._s[2259]! } + public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2260]! } + public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2261]! } + public var Passport_FloodError: String { return self._s[2262]! } + public var SecretGif_Title: String { return self._s[2263]! } + public var Passport_Language_th: String { return self._s[2265]! } + public var Passport_Address_Address: String { return self._s[2266]! } + public var Login_InvalidLastNameError: String { return self._s[2267]! } + public var Notifications_InAppNotificationsPreview: String { return self._s[2268]! } + public var Notifications_PermissionsUnreachableTitle: String { return self._s[2269]! } + public var ShareMenu_Send: String { return self._s[2270]! } + public var Month_GenNovember: String { return self._s[2273]! } + public var Checkout_Email: String { return self._s[2275]! } + public var NotificationsSound_Tritone: String { return self._s[2276]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[2278]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[2281]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2284]!, self._r[2284]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[2282]!, self._r[2282]!, [_1, _1, _1, _2]) } - public var DialogList_You: String { return self._s[2285]! } - public var MediaPicker_Send: String { return self._s[2288]! } - public var Call_AudioRouteSpeaker: String { return self._s[2289]! } - public var Watch_UserInfo_Title: String { return self._s[2290]! } - public var Appearance_AccentColor: String { return self._s[2291]! } + public var DialogList_You: String { return self._s[2283]! } + public var MediaPicker_Send: String { return self._s[2286]! } + public var Call_AudioRouteSpeaker: String { return self._s[2287]! } + public var Watch_UserInfo_Title: String { return self._s[2288]! } + public var Appearance_AccentColor: String { return self._s[2289]! } public func PINNED_STICKER_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2292]!, self._r[2292]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2290]!, self._r[2290]!, [_1, _2]) } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2293]!, self._r[2293]!, [_0]) + return formatWithArgumentRanges(self._s[2291]!, self._r[2291]!, [_0]) } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2294]! } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[2295]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[2296]! } - public var Notification_CallOutgoing: String { return self._s[2297]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2298]! } - public var Call_RecordingDisabledMessage: String { return self._s[2299]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2300]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2301]! } - public var Date_DialogDateFormat: String { return self._s[2302]! } - public var Notifications_InAppNotifications: String { return self._s[2303]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2292]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[2293]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[2294]! } + public var Notification_CallOutgoing: String { return self._s[2295]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2296]! } + public var Call_RecordingDisabledMessage: String { return self._s[2297]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2298]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2299]! } + public var Date_DialogDateFormat: String { return self._s[2300]! } + public var Notifications_InAppNotifications: String { return self._s[2301]! } public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2304]!, self._r[2304]!, [_0]) + return formatWithArgumentRanges(self._s[2302]!, self._r[2302]!, [_0]) } public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2305]!, self._r[2305]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2303]!, self._r[2303]!, [_1, _2]) } - public var NewContact_Title: String { return self._s[2306]! } - public var Conversation_ViewContactDetails: String { return self._s[2307]! } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2309]! } - public var Passport_Identity_ExpiryDateNone: String { return self._s[2310]! } - public var PrivacySettings_Title: String { return self._s[2311]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2314]! } + public var NewContact_Title: String { return self._s[2304]! } + public var Conversation_ViewContactDetails: String { return self._s[2305]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2307]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[2308]! } + public var PrivacySettings_Title: String { return self._s[2309]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2312]! } public func CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2315]!, self._r[2315]!, [_1]) + return formatWithArgumentRanges(self._s[2313]!, self._r[2313]!, [_1]) } - public var GroupRemoved_UsersSectionTitle: String { return self._s[2316]! } - public var Contacts_PhoneNumber: String { return self._s[2317]! } + public var GroupRemoved_UsersSectionTitle: String { return self._s[2314]! } + public var Contacts_PhoneNumber: String { return self._s[2315]! } public func CHANNEL_MESSAGE_CONTACT_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2319]!, self._r[2319]!, [_1]) + return formatWithArgumentRanges(self._s[2317]!, self._r[2317]!, [_1]) } - public var Map_ShowPlaces: String { return self._s[2320]! } - public var ChatAdmins_Title: String { return self._s[2321]! } - public var InstantPage_Reference: String { return self._s[2323]! } - public var Camera_FlashOff: String { return self._s[2324]! } - public var Watch_UserInfo_Block: String { return self._s[2325]! } - public var ChatSettings_Stickers: String { return self._s[2326]! } - public var ChatSettings_DownloadInBackground: String { return self._s[2327]! } + public var Map_ShowPlaces: String { return self._s[2318]! } + public var ChatAdmins_Title: String { return self._s[2319]! } + public var InstantPage_Reference: String { return self._s[2321]! } + public var Camera_FlashOff: String { return self._s[2322]! } + public var Watch_UserInfo_Block: String { return self._s[2323]! } + public var ChatSettings_Stickers: String { return self._s[2324]! } + public var ChatSettings_DownloadInBackground: String { return self._s[2325]! } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2328]!, self._r[2328]!, [_0]) + return formatWithArgumentRanges(self._s[2326]!, self._r[2326]!, [_0]) } - public var Settings_ViewPhoto: String { return self._s[2329]! } - public var Login_CheckOtherSessionMessages: String { return self._s[2330]! } - public var AutoDownloadSettings_Cellular: String { return self._s[2331]! } + public var Settings_ViewPhoto: String { return self._s[2327]! } + public var Login_CheckOtherSessionMessages: String { return self._s[2328]! } + public var AutoDownloadSettings_Cellular: String { return self._s[2329]! } public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2331]!, self._r[2331]!, [_0]) + } + public var Privacy_DeleteDrafts: String { return self._s[2332]! } + public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2333]!, self._r[2333]!, [_0]) } - public var Privacy_DeleteDrafts: String { return self._s[2334]! } - public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2335]!, self._r[2335]!, [_0]) - } - public var DialogList_SavedMessagesHelp: String { return self._s[2336]! } - public var DialogList_SavedMessages: String { return self._s[2337]! } - public var GroupInfo_UpgradeButton: String { return self._s[2338]! } + public var DialogList_SavedMessagesHelp: String { return self._s[2334]! } + public var DialogList_SavedMessages: String { return self._s[2335]! } + public var GroupInfo_UpgradeButton: String { return self._s[2336]! } public func CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2339]!, self._r[2339]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2337]!, self._r[2337]!, [_1, _2, _3]) } - public var DialogList_Pin: String { return self._s[2340]! } + public var DialogList_Pin: String { return self._s[2338]! } public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2341]!, self._r[2341]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2339]!, self._r[2339]!, [_0, _1]) } public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2342]!, self._r[2342]!, [_0]) + return formatWithArgumentRanges(self._s[2340]!, self._r[2340]!, [_0]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[2343]! } - public var UserInfo_NotificationsDisable: String { return self._s[2344]! } - public var Paint_Outlined: String { return self._s[2345]! } - public var Activity_PlayingGame: String { return self._s[2346]! } - public var SearchImages_NoImagesFound: String { return self._s[2347]! } - public var SocksProxySetup_ProxyType: String { return self._s[2348]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[2350]! } - public var Settings_AppLanguage: String { return self._s[2351]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[2352]! } - public var Common_ChoosePhoto: String { return self._s[2353]! } - public var Privacy_Calls_AlwaysAllow: String { return self._s[2354]! } - public var Activity_UploadingVideo: String { return self._s[2355]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2356]! } - public var NetworkUsageSettings_Wifi: String { return self._s[2357]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[2358]! } - public var Checkout_PayWithTouchId: String { return self._s[2359]! } - public var Notifications_ExceptionsNone: String { return self._s[2361]! } + public var Notification_Exceptions_AlwaysOn: String { return self._s[2341]! } + public var UserInfo_NotificationsDisable: String { return self._s[2342]! } + public var Paint_Outlined: String { return self._s[2343]! } + public var Activity_PlayingGame: String { return self._s[2344]! } + public var SearchImages_NoImagesFound: String { return self._s[2345]! } + public var SocksProxySetup_ProxyType: String { return self._s[2346]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[2348]! } + public var Settings_AppLanguage: String { return self._s[2349]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[2350]! } + public var Common_ChoosePhoto: String { return self._s[2351]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[2352]! } + public var Activity_UploadingVideo: String { return self._s[2353]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2354]! } + public var NetworkUsageSettings_Wifi: String { return self._s[2355]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[2356]! } + public var Checkout_PayWithTouchId: String { return self._s[2357]! } + public var Notifications_ExceptionsNone: String { return self._s[2359]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2362]!, self._r[2362]!, [_0]) + return formatWithArgumentRanges(self._s[2360]!, self._r[2360]!, [_0]) } - public var AuthSessions_IncompleteAttempts: String { return self._s[2364]! } - public var Passport_Address_Region: String { return self._s[2367]! } - public var PhotoEditor_TiltShift: String { return self._s[2368]! } - public var Settings_FAQ_URL: String { return self._s[2369]! } - public var SharedMedia_TitleLink: String { return self._s[2371]! } - public var Settings_PrivacySettings: String { return self._s[2372]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[2373]! } - public var Passport_Language_sl: String { return self._s[2374]! } - public var Settings_SetProfilePhoto: String { return self._s[2375]! } - public var Channel_About_Help: String { return self._s[2376]! } - public var Contacts_PermissionsEnable: String { return self._s[2377]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[2378]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[2380]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[2381]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[2383]! } - public var Map_OpenInYandexMaps: String { return self._s[2385]! } - public var PhotoEditor_SaturationTool: String { return self._s[2386]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[2387]! } - public var Appearance_TextSize: String { return self._s[2389]! } - public var Channel_Username_InvalidTooShort: String { return self._s[2391]! } - public var Passport_PassportInformation: String { return self._s[2394]! } - public var WatchRemote_AlertTitle: String { return self._s[2395]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[2396]! } - public var ConvertToSupergroup_HelpText: String { return self._s[2398]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[2362]! } + public var Passport_Address_Region: String { return self._s[2365]! } + public var PhotoEditor_TiltShift: String { return self._s[2366]! } + public var Settings_FAQ_URL: String { return self._s[2367]! } + public var SharedMedia_TitleLink: String { return self._s[2369]! } + public var Settings_PrivacySettings: String { return self._s[2370]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[2371]! } + public var Passport_Language_sl: String { return self._s[2372]! } + public var Settings_SetProfilePhoto: String { return self._s[2373]! } + public var Channel_About_Help: String { return self._s[2374]! } + public var Contacts_PermissionsEnable: String { return self._s[2375]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[2376]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[2378]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[2379]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[2381]! } + public var Map_OpenInYandexMaps: String { return self._s[2383]! } + public var PhotoEditor_SaturationTool: String { return self._s[2384]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[2385]! } + public var Appearance_TextSize: String { return self._s[2387]! } + public var Channel_Username_InvalidTooShort: String { return self._s[2389]! } + public var Passport_PassportInformation: String { return self._s[2392]! } + public var WatchRemote_AlertTitle: String { return self._s[2393]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[2394]! } + public var ConvertToSupergroup_HelpText: String { return self._s[2396]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2399]!, self._r[2399]!, [_0]) + return formatWithArgumentRanges(self._s[2397]!, self._r[2397]!, [_0]) } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2400]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[2402]! } - public var AccessDenied_CameraDisabled: String { return self._s[2403]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2398]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[2400]! } + public var AccessDenied_CameraDisabled: String { return self._s[2401]! } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2404]!, self._r[2404]!, [_0]) + return formatWithArgumentRanges(self._s[2402]!, self._r[2402]!, [_0]) } - public var PhotoEditor_ContrastTool: String { return self._s[2407]! } - public var DialogList_Draft: String { return self._s[2408]! } - public var Privacy_TopPeersDelete: String { return self._s[2410]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[2411]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[2412]! } - public var WebSearch_RecentSectionClear: String { return self._s[2413]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[2415]! } - public var Common_Done: String { return self._s[2416]! } - public var AuthSessions_EmptyText: String { return self._s[2417]! } - public var Conversation_ShareBotContactConfirmation: String { return self._s[2418]! } - public var Tour_Title5: String { return self._s[2419]! } + public var PhotoEditor_ContrastTool: String { return self._s[2405]! } + public var DialogList_Draft: String { return self._s[2406]! } + public var Privacy_TopPeersDelete: String { return self._s[2408]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[2409]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[2410]! } + public var WebSearch_RecentSectionClear: String { return self._s[2411]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[2413]! } + public var Common_Done: String { return self._s[2414]! } + public var AuthSessions_EmptyText: String { return self._s[2415]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[2416]! } + public var Tour_Title5: String { return self._s[2417]! } public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2420]!, self._r[2420]!, [_0]) + return formatWithArgumentRanges(self._s[2418]!, self._r[2418]!, [_0]) } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[2421]! } - public var Conversation_LinkDialogSave: String { return self._s[2422]! } - public var GroupInfo_ActionRestrict: String { return self._s[2423]! } - public var Checkout_Title: String { return self._s[2424]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[2427]! } - public var Notification_RenamedGroup: String { return self._s[2428]! } - public var Checkout_PayWithFaceId: String { return self._s[2429]! } - public var Channel_BanList_BlockedTitle: String { return self._s[2430]! } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[2419]! } + public var Conversation_LinkDialogSave: String { return self._s[2420]! } + public var GroupInfo_ActionRestrict: String { return self._s[2421]! } + public var Checkout_Title: String { return self._s[2422]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[2425]! } + public var Notification_RenamedGroup: String { return self._s[2426]! } + public var Checkout_PayWithFaceId: String { return self._s[2427]! } + public var Channel_BanList_BlockedTitle: String { return self._s[2428]! } public func PINNED_TEXT_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2432]!, self._r[2432]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2430]!, self._r[2430]!, [_1, _2]) } - public var Checkout_WebConfirmation_Title: String { return self._s[2433]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[2434]! } - public var Profile_AddToExisting: String { return self._s[2436]! } + public var Checkout_WebConfirmation_Title: String { return self._s[2431]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[2432]! } + public var Profile_AddToExisting: String { return self._s[2434]! } public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2437]!, self._r[2437]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2435]!, self._r[2435]!, [_0, _1]) } - public var Cache_Files: String { return self._s[2440]! } - public var Permissions_PrivacyPolicy: String { return self._s[2441]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[2442]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[2443]! } + public var Cache_Files: String { return self._s[2438]! } + public var Permissions_PrivacyPolicy: String { return self._s[2439]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[2440]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[2441]! } public func MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2445]!, self._r[2445]!, [_1]) + return formatWithArgumentRanges(self._s[2443]!, self._r[2443]!, [_1]) } - public var Calls_NoCallsPlaceholder: String { return self._s[2447]! } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2448]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[2450]! } - public var Passport_FieldAddressHelp: String { return self._s[2451]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2452]! } + public var Calls_NoCallsPlaceholder: String { return self._s[2445]! } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2446]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[2448]! } + public var Passport_FieldAddressHelp: String { return self._s[2449]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2450]! } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2453]!, self._r[2453]!, [_0]) + return formatWithArgumentRanges(self._s[2451]!, self._r[2451]!, [_0]) } - public var Channel_AdminLog_EmptyTitle: String { return self._s[2454]! } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[2456]! } - public var Login_UnknownError: String { return self._s[2457]! } - public var Group_UpgradeNoticeText2: String { return self._s[2459]! } - public var Watch_Compose_AddContact: String { return self._s[2460]! } - public var Web_Error: String { return self._s[2461]! } - public var Profile_MessageLifetime1h: String { return self._s[2462]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[2463]! } - public var Channel_Username_CheckingUsername: String { return self._s[2464]! } + public var Channel_AdminLog_EmptyTitle: String { return self._s[2452]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[2454]! } + public var Login_UnknownError: String { return self._s[2455]! } + public var Group_UpgradeNoticeText2: String { return self._s[2457]! } + public var Watch_Compose_AddContact: String { return self._s[2458]! } + public var Web_Error: String { return self._s[2459]! } + public var Profile_MessageLifetime1h: String { return self._s[2460]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[2461]! } + public var Channel_Username_CheckingUsername: String { return self._s[2462]! } public func PINNED_GAME(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2465]!, self._r[2465]!, [_1]) + return formatWithArgumentRanges(self._s[2463]!, self._r[2463]!, [_1]) } - public var Channel_AboutItem: String { return self._s[2466]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[2468]! } - public var GroupInfo_SharedMedia: String { return self._s[2469]! } + public var Channel_AboutItem: String { return self._s[2464]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[2466]! } + public var GroupInfo_SharedMedia: String { return self._s[2467]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2470]!, self._r[2470]!, [_1]) + return formatWithArgumentRanges(self._s[2468]!, self._r[2468]!, [_1]) } - public var Call_PhoneCallInProgressMessage: String { return self._s[2471]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2472]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[2473]! } - public var CreatePoll_AddOption: String { return self._s[2474]! } - public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[2475]! } - public var Group_UpgradeNoticeHeader: String { return self._s[2476]! } - public var Channel_Management_AddModerator: String { return self._s[2477]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[2478]! } - public var NotificationsSound_Hello: String { return self._s[2479]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[2469]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2470]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[2471]! } + public var CreatePoll_AddOption: String { return self._s[2472]! } + public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[2473]! } + public var Group_UpgradeNoticeHeader: String { return self._s[2474]! } + public var Channel_Management_AddModerator: String { return self._s[2475]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[2476]! } + public var NotificationsSound_Hello: String { return self._s[2477]! } public func CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2480]!, self._r[2480]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2478]!, self._r[2478]!, [_1, _2]) } - public var SocksProxySetup_SavedProxies: String { return self._s[2481]! } - public var Channel_Stickers_Placeholder: String { return self._s[2483]! } + public var SocksProxySetup_SavedProxies: String { return self._s[2479]! } + public var Channel_Stickers_Placeholder: String { return self._s[2481]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2484]!, self._r[2484]!, [_0]) + return formatWithArgumentRanges(self._s[2482]!, self._r[2482]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2485]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[2486]! } - public var ContactInfo_BirthdayLabel: String { return self._s[2487]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[2488]! } - public var AutoDownloadSettings_Channels: String { return self._s[2489]! } - public var Passport_Language_mn: String { return self._s[2490]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[2493]! } - public var Passport_Language_ja: String { return self._s[2495]! } - public var Settings_About_Title: String { return self._s[2496]! } - public var Settings_NotificationsAndSounds: String { return self._s[2497]! } - public var ChannelInfo_DeleteGroup: String { return self._s[2498]! } - public var Settings_BlockedUsers: String { return self._s[2499]! } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2483]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[2484]! } + public var ContactInfo_BirthdayLabel: String { return self._s[2485]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[2486]! } + public var AutoDownloadSettings_Channels: String { return self._s[2487]! } + public var Passport_Language_mn: String { return self._s[2488]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[2491]! } + public var Passport_Language_ja: String { return self._s[2493]! } + public var Settings_About_Title: String { return self._s[2494]! } + public var Settings_NotificationsAndSounds: String { return self._s[2495]! } + public var ChannelInfo_DeleteGroup: String { return self._s[2496]! } + public var Settings_BlockedUsers: String { return self._s[2497]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2500]!, self._r[2500]!, [_0]) + return formatWithArgumentRanges(self._s[2498]!, self._r[2498]!, [_0]) } - public var Passport_Address_AddResidentialAddress: String { return self._s[2501]! } - public var Channel_Username_Title: String { return self._s[2502]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[2499]! } + public var Channel_Username_Title: String { return self._s[2500]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2503]!, self._r[2503]!, [_0]) + return formatWithArgumentRanges(self._s[2501]!, self._r[2501]!, [_0]) } - public var AttachmentMenu_File: String { return self._s[2505]! } - public var AppleWatch_Title: String { return self._s[2506]! } - public var Activity_RecordingVideoMessage: String { return self._s[2507]! } - public var Weekday_Saturday: String { return self._s[2508]! } - public var Profile_CreateEncryptedChatError: String { return self._s[2509]! } - public var Common_Next: String { return self._s[2511]! } - public var Channel_Stickers_YourStickers: String { return self._s[2513]! } - public var Call_AudioRouteHeadphones: String { return self._s[2514]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[2516]! } - public var Watch_Contacts_NoResults: String { return self._s[2518]! } - public var PhotoEditor_TintTool: String { return self._s[2520]! } - public var LoginPassword_ResetAccount: String { return self._s[2522]! } - public var Settings_SavedMessages: String { return self._s[2523]! } + public var AttachmentMenu_File: String { return self._s[2503]! } + public var AppleWatch_Title: String { return self._s[2504]! } + public var Activity_RecordingVideoMessage: String { return self._s[2505]! } + public var Weekday_Saturday: String { return self._s[2506]! } + public var Profile_CreateEncryptedChatError: String { return self._s[2507]! } + public var Common_Next: String { return self._s[2509]! } + public var Channel_Stickers_YourStickers: String { return self._s[2511]! } + public var Call_AudioRouteHeadphones: String { return self._s[2512]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[2514]! } + public var Watch_Contacts_NoResults: String { return self._s[2516]! } + public var PhotoEditor_TintTool: String { return self._s[2518]! } + public var LoginPassword_ResetAccount: String { return self._s[2520]! } + public var Settings_SavedMessages: String { return self._s[2521]! } public func MESSAGE_GIF_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2524]!, self._r[2524]!, [_1]) + return formatWithArgumentRanges(self._s[2522]!, self._r[2522]!, [_1]) } - public var StickerPack_Add: String { return self._s[2525]! } - public var Your_cards_number_is_invalid: String { return self._s[2526]! } - public var Checkout_TotalAmount: String { return self._s[2527]! } + public var StickerPack_Add: String { return self._s[2523]! } + public var Your_cards_number_is_invalid: String { return self._s[2524]! } + public var Checkout_TotalAmount: String { return self._s[2525]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2528]!, self._r[2528]!, [_0]) + return formatWithArgumentRanges(self._s[2526]!, self._r[2526]!, [_0]) } public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2529]!, self._r[2529]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2527]!, self._r[2527]!, [_1, _2]) } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[2530]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[2528]! } public func CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2532]!, self._r[2532]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2530]!, self._r[2530]!, [_1, _2]) } public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2533]!, self._r[2533]!, [_0]) + return formatWithArgumentRanges(self._s[2531]!, self._r[2531]!, [_0]) } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[2534]! } - public var StickerPack_Share: String { return self._s[2535]! } - public var Passport_DeleteAddress: String { return self._s[2536]! } - public var Settings_Passport: String { return self._s[2537]! } - public var SharedMedia_EmptyFilesText: String { return self._s[2538]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[2539]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[2540]! } - public var Contacts_PermissionsText: String { return self._s[2541]! } - public var Group_Setup_HistoryVisible: String { return self._s[2542]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[2544]! } - public var SocksProxySetup_Title: String { return self._s[2545]! } - public var Notification_Mute1h: String { return self._s[2546]! } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[2532]! } + public var StickerPack_Share: String { return self._s[2533]! } + public var Passport_DeleteAddress: String { return self._s[2534]! } + public var Settings_Passport: String { return self._s[2535]! } + public var SharedMedia_EmptyFilesText: String { return self._s[2536]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[2537]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[2538]! } + public var Contacts_PermissionsText: String { return self._s[2539]! } + public var Group_Setup_HistoryVisible: String { return self._s[2540]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[2542]! } + public var SocksProxySetup_Title: String { return self._s[2543]! } + public var Notification_Mute1h: String { return self._s[2544]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2547]!, self._r[2547]!, [_0]) + return formatWithArgumentRanges(self._s[2545]!, self._r[2545]!, [_0]) } public func PINNED_CONTACT_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2548]!, self._r[2548]!, [_1]) + return formatWithArgumentRanges(self._s[2546]!, self._r[2546]!, [_1]) } - public var FastTwoStepSetup_PasswordSection: String { return self._s[2549]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2552]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[2554]! } - public var DialogList_NoMessagesText: String { return self._s[2555]! } - public var Privacy_ContactsResetConfirmation: String { return self._s[2556]! } - public var Privacy_Calls_P2PHelp: String { return self._s[2557]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[2559]! } - public var Common_TakePhotoOrVideo: String { return self._s[2560]! } - public var Call_StatusBusy: String { return self._s[2561]! } - public var Conversation_PinnedMessage: String { return self._s[2562]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[2563]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[2564]! } - public var AppleWatch_ReplyPresets: String { return self._s[2565]! } - public var Passport_DiscardMessageDescription: String { return self._s[2567]! } - public var Login_NetworkError: String { return self._s[2568]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[2547]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2550]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[2552]! } + public var DialogList_NoMessagesText: String { return self._s[2553]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[2554]! } + public var Privacy_Calls_P2PHelp: String { return self._s[2555]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[2557]! } + public var Common_TakePhotoOrVideo: String { return self._s[2558]! } + public var Call_StatusBusy: String { return self._s[2559]! } + public var Conversation_PinnedMessage: String { return self._s[2560]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[2561]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[2562]! } + public var AppleWatch_ReplyPresets: String { return self._s[2563]! } + public var Passport_DiscardMessageDescription: String { return self._s[2565]! } + public var Login_NetworkError: String { return self._s[2566]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2569]!, self._r[2569]!, [_0]) + return formatWithArgumentRanges(self._s[2567]!, self._r[2567]!, [_0]) } public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2570]!, self._r[2570]!, [_0]) + return formatWithArgumentRanges(self._s[2568]!, self._r[2568]!, [_0]) } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[2571]! } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[2569]! } public func CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2573]!, self._r[2573]!, [_1]) + return formatWithArgumentRanges(self._s[2571]!, self._r[2571]!, [_1]) } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[2574]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[2572]! } public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2576]!, self._r[2576]!, [_0]) + return formatWithArgumentRanges(self._s[2574]!, self._r[2574]!, [_0]) } - public var Call_ConnectionErrorMessage: String { return self._s[2577]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[2579]! } - public var ConversationMedia_Title: String { return self._s[2580]! } - public var EncryptionKey_Title: String { return self._s[2582]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[2583]! } - public var Notification_Exceptions_AddException: String { return self._s[2584]! } - public var Profile_MessageLifetime1m: String { return self._s[2585]! } + public var Call_ConnectionErrorMessage: String { return self._s[2575]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[2577]! } + public var ConversationMedia_Title: String { return self._s[2578]! } + public var EncryptionKey_Title: String { return self._s[2580]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[2581]! } + public var Notification_Exceptions_AddException: String { return self._s[2582]! } + public var Profile_MessageLifetime1m: String { return self._s[2583]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2586]!, self._r[2586]!, [_1]) + return formatWithArgumentRanges(self._s[2584]!, self._r[2584]!, [_1]) } - public var Month_GenMay: String { return self._s[2587]! } + public var Month_GenMay: String { return self._s[2585]! } public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2588]!, self._r[2588]!, [_0]) + return formatWithArgumentRanges(self._s[2586]!, self._r[2586]!, [_0]) } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2589]! } - public var Conversation_EmptyPlaceholder: String { return self._s[2591]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[2592]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[2593]! } - public var Camera_TapAndHoldForVideo: String { return self._s[2594]! } - public var Channel_JoinChannel: String { return self._s[2596]! } - public var Appearance_Animations: String { return self._s[2599]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2587]! } + public var Conversation_EmptyPlaceholder: String { return self._s[2589]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[2590]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[2591]! } + public var Camera_TapAndHoldForVideo: String { return self._s[2592]! } + public var Channel_JoinChannel: String { return self._s[2594]! } + public var Appearance_Animations: String { return self._s[2597]! } public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2600]!, self._r[2600]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2598]!, self._r[2598]!, [_1, _2]) } - public var Stickers_GroupStickers: String { return self._s[2602]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[2604]! } - public var Passport_Address_Street: String { return self._s[2605]! } - public var Conversation_AddContact: String { return self._s[2606]! } - public var Login_PhonePlaceholder: String { return self._s[2607]! } - public var Channel_Members_InviteLink: String { return self._s[2609]! } - public var Bot_Stop: String { return self._s[2610]! } - public var Notification_PassportValueAddress: String { return self._s[2612]! } - public var Month_ShortJuly: String { return self._s[2613]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[2614]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[2615]! } - public var Passport_Identity_ReverseSide: String { return self._s[2616]! } - public var Watch_Stickers_Recents: String { return self._s[2619]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[2621]! } - public var Map_SendThisLocation: String { return self._s[2622]! } + public var Stickers_GroupStickers: String { return self._s[2600]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[2602]! } + public var Passport_Address_Street: String { return self._s[2603]! } + public var Conversation_AddContact: String { return self._s[2604]! } + public var Login_PhonePlaceholder: String { return self._s[2605]! } + public var Channel_Members_InviteLink: String { return self._s[2607]! } + public var Bot_Stop: String { return self._s[2608]! } + public var Notification_PassportValueAddress: String { return self._s[2610]! } + public var Month_ShortJuly: String { return self._s[2611]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[2612]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[2613]! } + public var Passport_Identity_ReverseSide: String { return self._s[2614]! } + public var Watch_Stickers_Recents: String { return self._s[2617]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[2619]! } + public var Map_SendThisLocation: String { return self._s[2620]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2623]!, self._r[2623]!, [_0]) + return formatWithArgumentRanges(self._s[2621]!, self._r[2621]!, [_0]) } public func CHANNEL_MESSAGE_STICKER_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2624]!, self._r[2624]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2622]!, self._r[2622]!, [_1, _2]) } public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2623]!, self._r[2623]!, [_0]) + } + public var ConvertToSupergroup_Note: String { return self._s[2624]! } + public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2625]!, self._r[2625]!, [_0]) } - public var ConvertToSupergroup_Note: String { return self._s[2626]! } - public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2627]!, self._r[2627]!, [_0]) - } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[2628]! } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[2626]! } public func PINNED_POLL_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2629]!, self._r[2629]!, [_1]) + return formatWithArgumentRanges(self._s[2627]!, self._r[2627]!, [_1]) } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2630]!, self._r[2630]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2628]!, self._r[2628]!, [_0, _1]) } - public var Login_CallRequestState3: String { return self._s[2631]! } + public var Login_CallRequestState3: String { return self._s[2629]! } public func CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2634]!, self._r[2634]!, [_1]) + return formatWithArgumentRanges(self._s[2632]!, self._r[2632]!, [_1]) } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[2635]! } - public var Channel_AdminLogFilter_Title: String { return self._s[2636]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[2640]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[2633]! } + public var Channel_AdminLogFilter_Title: String { return self._s[2634]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[2638]! } public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2639]!, self._r[2639]!, [_0]) + } + public var Passport_CorrectErrors: String { return self._s[2640]! } + public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2641]!, self._r[2641]!, [_0]) } - public var Passport_CorrectErrors: String { return self._s[2642]! } - public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2643]!, self._r[2643]!, [_0]) - } - public var Map_SendMyCurrentLocation: String { return self._s[2644]! } - public var SharedMedia_SearchNoResults: String { return self._s[2645]! } - public var Permissions_NotificationsText_v0: String { return self._s[2646]! } - public var LoginPassword_FloodError: String { return self._s[2647]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[2649]! } + public var Map_SendMyCurrentLocation: String { return self._s[2642]! } + public var SharedMedia_SearchNoResults: String { return self._s[2643]! } + public var Permissions_NotificationsText_v0: String { return self._s[2644]! } + public var LoginPassword_FloodError: String { return self._s[2645]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[2647]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2648]!, self._r[2648]!, [_0]) + } + public var Passport_Language_bn: String { return self._s[2649]! } + public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2650]!, self._r[2650]!, [_0]) } - public var Passport_Language_bn: String { return self._s[2651]! } - public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2652]!, self._r[2652]!, [_0]) - } public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2653]!, self._r[2653]!, [_0]) + return formatWithArgumentRanges(self._s[2651]!, self._r[2651]!, [_0]) } public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2654]!, self._r[2654]!, [_0]) + return formatWithArgumentRanges(self._s[2652]!, self._r[2652]!, [_0]) } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[2657]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[2659]! } - public var Contacts_PermissionsAllow: String { return self._s[2660]! } - public var ReportPeer_ReasonCopyright: String { return self._s[2661]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[2662]! } - public var Paint_Duplicate: String { return self._s[2663]! } - public var Notification_ChannelMigratedFrom: String { return self._s[2664]! } - public var Passport_Address_Country: String { return self._s[2665]! } - public var Notification_RenamedChannel: String { return self._s[2667]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[2668]! } - public var Group_MessagePhotoUpdated: String { return self._s[2669]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[2670]! } - public var Conversation_ContextMenuBan: String { return self._s[2671]! } - public var TwoStepAuth_EmailSent: String { return self._s[2672]! } - public var MessagePoll_NoVotes: String { return self._s[2673]! } - public var Passport_Language_is: String { return self._s[2674]! } - public var Tour_Text5: String { return self._s[2676]! } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[2655]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[2657]! } + public var Contacts_PermissionsAllow: String { return self._s[2658]! } + public var ReportPeer_ReasonCopyright: String { return self._s[2659]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[2660]! } + public var Paint_Duplicate: String { return self._s[2661]! } + public var Notification_ChannelMigratedFrom: String { return self._s[2662]! } + public var Passport_Address_Country: String { return self._s[2663]! } + public var Notification_RenamedChannel: String { return self._s[2665]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[2666]! } + public var Group_MessagePhotoUpdated: String { return self._s[2667]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[2668]! } + public var Conversation_ContextMenuBan: String { return self._s[2669]! } + public var TwoStepAuth_EmailSent: String { return self._s[2670]! } + public var MessagePoll_NoVotes: String { return self._s[2671]! } + public var Passport_Language_is: String { return self._s[2672]! } + public var Tour_Text5: String { return self._s[2674]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2678]!, self._r[2678]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2676]!, self._r[2676]!, [_1, _2]) } - public var Paint_Edit: String { return self._s[2680]! } - public var LoginPassword_ForgotPassword: String { return self._s[2683]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[2684]! } + public var Paint_Edit: String { return self._s[2678]! } + public var LoginPassword_ForgotPassword: String { return self._s[2681]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[2682]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2685]!, self._r[2685]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2683]!, self._r[2683]!, [_0, _1]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[2686]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[2687]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[2688]! } - public var Passport_Language_uz: String { return self._s[2689]! } - public var Map_StopLiveLocation: String { return self._s[2691]! } - public var PasscodeSettings_Help: String { return self._s[2693]! } - public var NotificationsSound_Input: String { return self._s[2694]! } - public var Share_Title: String { return self._s[2696]! } - public var Login_TermsOfServiceAgree: String { return self._s[2697]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[2698]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[2699]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[2700]! } - public var EnterPasscode_EnterTitle: String { return self._s[2701]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[2684]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[2685]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[2686]! } + public var Passport_Language_uz: String { return self._s[2687]! } + public var Map_StopLiveLocation: String { return self._s[2689]! } + public var PasscodeSettings_Help: String { return self._s[2691]! } + public var NotificationsSound_Input: String { return self._s[2692]! } + public var Share_Title: String { return self._s[2694]! } + public var Login_TermsOfServiceAgree: String { return self._s[2695]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[2696]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[2697]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[2698]! } + public var EnterPasscode_EnterTitle: String { return self._s[2699]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2702]!, self._r[2702]!, [_0]) + return formatWithArgumentRanges(self._s[2700]!, self._r[2700]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[2703]! } - public var NotificationsSound_Keys: String { return self._s[2704]! } + public var Settings_CopyPhoneNumber: String { return self._s[2701]! } + public var NotificationsSound_Keys: String { return self._s[2702]! } public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2705]!, self._r[2705]!, [_0]) + return formatWithArgumentRanges(self._s[2703]!, self._r[2703]!, [_0]) } - public var Notification_MessageLifetime1w: String { return self._s[2706]! } - public var Message_Video: String { return self._s[2707]! } + public var Notification_MessageLifetime1w: String { return self._s[2704]! } + public var Message_Video: String { return self._s[2705]! } public func MESSAGE_GEO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2710]!, self._r[2710]!, [_1]) + return formatWithArgumentRanges(self._s[2708]!, self._r[2708]!, [_1]) } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2711]!, self._r[2711]!, [_0]) + return formatWithArgumentRanges(self._s[2709]!, self._r[2709]!, [_0]) } public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2712]!, self._r[2712]!, [_0]) + return formatWithArgumentRanges(self._s[2710]!, self._r[2710]!, [_0]) } - public var Passport_Language_mk: String { return self._s[2713]! } - public var CreatePoll_CancelConfirmation: String { return self._s[2714]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[2716]! } - public var PrivacyPolicy_Decline: String { return self._s[2717]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[2718]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[2719]! } - public var Permissions_SiriAllow_v0: String { return self._s[2720]! } + public var Passport_Language_mk: String { return self._s[2711]! } + public var CreatePoll_CancelConfirmation: String { return self._s[2712]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[2714]! } + public var PrivacyPolicy_Decline: String { return self._s[2715]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[2716]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[2717]! } + public var Permissions_SiriAllow_v0: String { return self._s[2718]! } public func CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2721]!, self._r[2721]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2719]!, self._r[2719]!, [_1, _2, _3]) } public func CHANNEL_MESSAGES(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2722]!, self._r[2722]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2720]!, self._r[2720]!, [_1, _2]) } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2723]!, self._r[2723]!, [_0]) + return formatWithArgumentRanges(self._s[2721]!, self._r[2721]!, [_0]) } - public var Paint_Regular: String { return self._s[2724]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[2725]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[2726]! } - public var GroupInfo_InviteByLink: String { return self._s[2728]! } - public var MessageTimer_Custom: String { return self._s[2729]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2730]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[2732]! } - public var Channel_Username_InvalidTaken: String { return self._s[2733]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[2734]! } + public var Paint_Regular: String { return self._s[2722]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[2723]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[2724]! } + public var GroupInfo_InviteByLink: String { return self._s[2726]! } + public var MessageTimer_Custom: String { return self._s[2727]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2728]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[2730]! } + public var Channel_Username_InvalidTaken: String { return self._s[2731]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[2732]! } public func CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2735]!, self._r[2735]!, [_1]) + return formatWithArgumentRanges(self._s[2733]!, self._r[2733]!, [_1]) } - public var Settings_ChatBackground: String { return self._s[2736]! } - public var Channel_Subscribers_Title: String { return self._s[2737]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[2738]! } - public var Watch_ConnectionDescription: String { return self._s[2739]! } + public var Settings_ChatBackground: String { return self._s[2734]! } + public var Channel_Subscribers_Title: String { return self._s[2735]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[2736]! } + public var Watch_ConnectionDescription: String { return self._s[2737]! } public func PINNED_VIDEO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2743]!, self._r[2743]!, [_1]) + return formatWithArgumentRanges(self._s[2741]!, self._r[2741]!, [_1]) } - public var EditProfile_Title: String { return self._s[2744]! } - public var NotificationsSound_Bamboo: String { return self._s[2746]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[2748]! } - public var Login_SmsRequestState2: String { return self._s[2749]! } - public var Passport_Language_ar: String { return self._s[2750]! } - public var Conversation_MessageDialogEdit: String { return self._s[2751]! } - public var Common_Close: String { return self._s[2752]! } + public var EditProfile_Title: String { return self._s[2742]! } + public var NotificationsSound_Bamboo: String { return self._s[2744]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[2746]! } + public var Login_SmsRequestState2: String { return self._s[2747]! } + public var Passport_Language_ar: String { return self._s[2748]! } + public var Conversation_MessageDialogEdit: String { return self._s[2749]! } + public var Common_Close: String { return self._s[2750]! } public func CHAT_MESSAGE_TEXT_SEPARATED(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2756]!, self._r[2756]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2754]!, self._r[2754]!, [_1, _2, _3]) } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2755]!, self._r[2755]!, [_0]) + } + public var UserInfo_About_Placeholder: String { return self._s[2756]! } + public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2757]!, self._r[2757]!, [_0]) } - public var UserInfo_About_Placeholder: String { return self._s[2758]! } - public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2759]!, self._r[2759]!, [_0]) - } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[2760]! } - public var Channel_Info_Banned: String { return self._s[2762]! } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[2758]! } + public var Channel_Info_Banned: String { return self._s[2760]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2763]!, self._r[2763]!, [_0]) + return formatWithArgumentRanges(self._s[2761]!, self._r[2761]!, [_0]) } - public var Passport_Language_my: String { return self._s[2764]! } + public var Passport_Language_my: String { return self._s[2762]! } public func CHAT_MESSAGE_GEO_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2765]!, self._r[2765]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2763]!, self._r[2763]!, [_1, _2]) } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2766]!, self._r[2766]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2764]!, self._r[2764]!, [_1, _2, _3]) } - public var Preview_CopyAddress: String { return self._s[2767]! } + public var Preview_CopyAddress: String { return self._s[2765]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2768]!, self._r[2768]!, [_0]) + return formatWithArgumentRanges(self._s[2766]!, self._r[2766]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[2769]! } - public var UserInfo_BotSettings: String { return self._s[2770]! } - public var LiveLocation_MenuStopAll: String { return self._s[2772]! } - public var Passport_PasswordCreate: String { return self._s[2773]! } - public var StickerSettings_MaskContextInfo: String { return self._s[2774]! } - public var Message_PinnedLocationMessage: String { return self._s[2775]! } - public var Map_Satellite: String { return self._s[2776]! } - public var Watch_Message_Unsupported: String { return self._s[2777]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[2778]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2779]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[2767]! } + public var UserInfo_BotSettings: String { return self._s[2768]! } + public var LiveLocation_MenuStopAll: String { return self._s[2770]! } + public var Passport_PasswordCreate: String { return self._s[2771]! } + public var StickerSettings_MaskContextInfo: String { return self._s[2772]! } + public var Message_PinnedLocationMessage: String { return self._s[2773]! } + public var Map_Satellite: String { return self._s[2774]! } + public var Watch_Message_Unsupported: String { return self._s[2775]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[2776]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2777]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2780]!, self._r[2780]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2778]!, self._r[2778]!, [_0, _1]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[2781]! } - public var Privacy_Calls_P2PContacts: String { return self._s[2782]! } - public var NotificationsSound_None: String { return self._s[2783]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[2785]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[2779]! } + public var Privacy_Calls_P2PContacts: String { return self._s[2780]! } + public var NotificationsSound_None: String { return self._s[2781]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[2783]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2786]!, self._r[2786]!, [_1]) + return formatWithArgumentRanges(self._s[2784]!, self._r[2784]!, [_1]) } - public var Cache_Indexing: String { return self._s[2787]! } - public var DialogList_RecentTitlePeople: String { return self._s[2789]! } - public var DialogList_EncryptionRejected: String { return self._s[2790]! } - public var GroupInfo_Administrators: String { return self._s[2791]! } - public var Passport_ScanPassportHelp: String { return self._s[2792]! } - public var Application_Name: String { return self._s[2793]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2794]! } - public var Passport_Identity_TranslationHelp: String { return self._s[2796]! } + public var Cache_Indexing: String { return self._s[2785]! } + public var DialogList_RecentTitlePeople: String { return self._s[2787]! } + public var DialogList_EncryptionRejected: String { return self._s[2788]! } + public var GroupInfo_Administrators: String { return self._s[2789]! } + public var Passport_ScanPassportHelp: String { return self._s[2790]! } + public var Application_Name: String { return self._s[2791]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2792]! } + public var Passport_Identity_TranslationHelp: String { return self._s[2794]! } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2797]!, self._r[2797]!, [_0]) + return formatWithArgumentRanges(self._s[2795]!, self._r[2795]!, [_0]) } public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2798]!, self._r[2798]!, [_0]) + return formatWithArgumentRanges(self._s[2796]!, self._r[2796]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2799]! } - public var Privacy_ChatsTitle: String { return self._s[2800]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[2801]! } - public var Watch_Suggestion_HoldOn: String { return self._s[2802]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[2803]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2804]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[2805]! } - public var Channel_Setup_TypePublic: String { return self._s[2808]! } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2797]! } + public var Privacy_ChatsTitle: String { return self._s[2798]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[2799]! } + public var Watch_Suggestion_HoldOn: String { return self._s[2800]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[2801]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2802]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[2803]! } + public var Channel_Setup_TypePublic: String { return self._s[2806]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2809]!, self._r[2809]!, [_0]) + return formatWithArgumentRanges(self._s[2807]!, self._r[2807]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[2811]! } - public var Map_OpenInMaps: String { return self._s[2813]! } - public var NotificationsSound_Tremolo: String { return self._s[2815]! } + public var Channel_TypeSetup_Title: String { return self._s[2809]! } + public var Map_OpenInMaps: String { return self._s[2811]! } + public var NotificationsSound_Tremolo: String { return self._s[2813]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2817]!, self._r[2817]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2815]!, self._r[2815]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[2818]! } - public var Passport_PasswordHelp: String { return self._s[2819]! } - public var Login_CodeExpiredError: String { return self._s[2820]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2821]! } - public var Conversation_TitleUnmute: String { return self._s[2822]! } - public var Passport_Identity_ScansHelp: String { return self._s[2823]! } - public var Passport_Language_lo: String { return self._s[2824]! } - public var Camera_FlashAuto: String { return self._s[2825]! } - public var Common_Cancel: String { return self._s[2826]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[2827]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2828]! } - public var Conversation_ReportSpamConfirmation: String { return self._s[2829]! } - public var ChatSettings_Title: String { return self._s[2831]! } - public var Passport_PasswordReset: String { return self._s[2832]! } - public var SocksProxySetup_TypeNone: String { return self._s[2833]! } - public var PhoneNumberHelp_Help: String { return self._s[2835]! } - public var Checkout_EnterPassword: String { return self._s[2836]! } - public var Activity_UploadingDocument: String { return self._s[2838]! } - public var Share_AuthTitle: String { return self._s[2839]! } - public var State_Connecting: String { return self._s[2840]! } - public var Profile_MessageLifetime1w: String { return self._s[2841]! } - public var Conversation_ContextMenuReport: String { return self._s[2842]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2843]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[2844]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[2816]! } + public var Passport_PasswordHelp: String { return self._s[2817]! } + public var Login_CodeExpiredError: String { return self._s[2818]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2819]! } + public var Conversation_TitleUnmute: String { return self._s[2820]! } + public var Passport_Identity_ScansHelp: String { return self._s[2821]! } + public var Passport_Language_lo: String { return self._s[2822]! } + public var Camera_FlashAuto: String { return self._s[2823]! } + public var Common_Cancel: String { return self._s[2824]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[2825]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2826]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[2827]! } + public var ChatSettings_Title: String { return self._s[2829]! } + public var Passport_PasswordReset: String { return self._s[2830]! } + public var SocksProxySetup_TypeNone: String { return self._s[2831]! } + public var PhoneNumberHelp_Help: String { return self._s[2833]! } + public var Checkout_EnterPassword: String { return self._s[2834]! } + public var Activity_UploadingDocument: String { return self._s[2836]! } + public var Share_AuthTitle: String { return self._s[2837]! } + public var State_Connecting: String { return self._s[2838]! } + public var Profile_MessageLifetime1w: String { return self._s[2839]! } + public var Conversation_ContextMenuReport: String { return self._s[2840]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2841]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[2842]! } public func CHAT_DELETE_MEMBER_SEPARATED(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2845]!, self._r[2845]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2843]!, self._r[2843]!, [_1, _2, _3]) } - public var AuthSessions_Terminate: String { return self._s[2846]! } + public var AuthSessions_Terminate: String { return self._s[2844]! } public func MESSAGE_TEXT_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2847]!, self._r[2847]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2845]!, self._r[2845]!, [_1, _2]) } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2848]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2849]! } - public var PhotoEditor_Set: String { return self._s[2850]! } - public var EmptyGroupInfo_Title: String { return self._s[2851]! } - public var Login_PadPhoneHelp: String { return self._s[2852]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2855]! } - public var NotificationsSound_Complete: String { return self._s[2856]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2846]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2847]! } + public var PhotoEditor_Set: String { return self._s[2848]! } + public var EmptyGroupInfo_Title: String { return self._s[2849]! } + public var Login_PadPhoneHelp: String { return self._s[2850]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2853]! } + public var NotificationsSound_Complete: String { return self._s[2854]! } public func CHAT_MESSAGE_CONTACT_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2857]!, self._r[2857]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2855]!, self._r[2855]!, [_1, _2]) } - public var Group_Info_AdminLog: String { return self._s[2858]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2859]! } - public var Conversation_Admin: String { return self._s[2861]! } - public var Conversation_GifTooltip: String { return self._s[2862]! } - public var Passport_NotLoggedInMessage: String { return self._s[2863]! } - public var Profile_MessageLifetimeForever: String { return self._s[2864]! } + public var Group_Info_AdminLog: String { return self._s[2856]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2857]! } + public var Conversation_Admin: String { return self._s[2859]! } + public var Conversation_GifTooltip: String { return self._s[2860]! } + public var Passport_NotLoggedInMessage: String { return self._s[2861]! } + public var Profile_MessageLifetimeForever: String { return self._s[2862]! } public func MESSAGE_POLL_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2866]!, self._r[2866]!, [_1]) + return formatWithArgumentRanges(self._s[2864]!, self._r[2864]!, [_1]) } - public var SharedMedia_EmptyTitle: String { return self._s[2867]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2868]! } - public var Username_Help: String { return self._s[2869]! } - public var DialogList_LanguageTooltip: String { return self._s[2871]! } - public var Map_LoadError: String { return self._s[2872]! } - public var Notification_Exceptions_NewException: String { return self._s[2873]! } - public var TwoStepAuth_EmailTitle: String { return self._s[2874]! } - public var WatchRemote_AlertText: String { return self._s[2875]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[2877]! } + public var SharedMedia_EmptyTitle: String { return self._s[2865]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2866]! } + public var Username_Help: String { return self._s[2867]! } + public var DialogList_LanguageTooltip: String { return self._s[2869]! } + public var Map_LoadError: String { return self._s[2870]! } + public var Notification_Exceptions_NewException: String { return self._s[2871]! } + public var TwoStepAuth_EmailTitle: String { return self._s[2872]! } + public var WatchRemote_AlertText: String { return self._s[2873]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[2875]! } public func CHANNEL_MESSAGE_GEOLIVE_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2878]!, self._r[2878]!, [_1]) + return formatWithArgumentRanges(self._s[2876]!, self._r[2876]!, [_1]) } public func LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2879]!, self._r[2879]!, [_1]) + return formatWithArgumentRanges(self._s[2877]!, self._r[2877]!, [_1]) } - public var Passport_Address_CountryPlaceholder: String { return self._s[2880]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[2878]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2881]!, self._r[2881]!, [_0]) + return formatWithArgumentRanges(self._s[2879]!, self._r[2879]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2882]!, self._r[2882]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2880]!, self._r[2880]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[2883]! } - public var AccessDenied_VideoMicrophone: String { return self._s[2885]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2886]! } - public var Cache_ClearNone: String { return self._s[2887]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[2888]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[2889]! } + public var Group_AdminLog_EmptyText: String { return self._s[2881]! } + public var AccessDenied_VideoMicrophone: String { return self._s[2883]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2884]! } + public var Cache_ClearNone: String { return self._s[2885]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[2886]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[2887]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2888]!, self._r[2888]!, [_0]) + } + public var Passport_Identity_Country: String { return self._s[2889]! } + public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2890]!, self._r[2890]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[2891]! } - public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2892]!, self._r[2892]!, [_0]) - } - public var AccessDenied_Settings: String { return self._s[2893]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2894]! } - public var Month_ShortMay: String { return self._s[2895]! } - public var Compose_NewGroup: String { return self._s[2896]! } - public var Group_Setup_TypePrivate: String { return self._s[2898]! } - public var Login_PadPhoneHelpTitle: String { return self._s[2899]! } - public var Appearance_ThemeDayClassic: String { return self._s[2900]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2901]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2902]! } - public var Conversation_typing: String { return self._s[2904]! } - public var Paint_Masks: String { return self._s[2905]! } + public var AccessDenied_Settings: String { return self._s[2891]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2892]! } + public var Month_ShortMay: String { return self._s[2893]! } + public var Compose_NewGroup: String { return self._s[2894]! } + public var Group_Setup_TypePrivate: String { return self._s[2896]! } + public var Login_PadPhoneHelpTitle: String { return self._s[2897]! } + public var Appearance_ThemeDayClassic: String { return self._s[2898]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2899]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2900]! } + public var Conversation_typing: String { return self._s[2902]! } + public var Paint_Masks: String { return self._s[2903]! } public func PINNED_DOC_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2906]!, self._r[2906]!, [_1]) + return formatWithArgumentRanges(self._s[2904]!, self._r[2904]!, [_1]) } - public var Username_InvalidTaken: String { return self._s[2907]! } + public var Username_InvalidTaken: String { return self._s[2905]! } public func CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2908]!, self._r[2908]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2906]!, self._r[2906]!, [_1, _2]) } - public var Call_StatusNoAnswer: String { return self._s[2909]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[2910]! } - public var Passport_Identity_Selfie: String { return self._s[2911]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[2912]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2913]! } - public var Conversation_ClearSecretHistory: String { return self._s[2914]! } - public var NetworkUsageSettings_Title: String { return self._s[2916]! } - public var Your_cards_security_code_is_invalid: String { return self._s[2918]! } + public var Call_StatusNoAnswer: String { return self._s[2907]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[2908]! } + public var Passport_Identity_Selfie: String { return self._s[2909]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[2910]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2911]! } + public var Conversation_ClearSecretHistory: String { return self._s[2912]! } + public var NetworkUsageSettings_Title: String { return self._s[2914]! } + public var Your_cards_security_code_is_invalid: String { return self._s[2916]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2920]!, self._r[2920]!, [_0]) + return formatWithArgumentRanges(self._s[2918]!, self._r[2918]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2921]!, self._r[2921]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2919]!, self._r[2919]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[2923]! } - public var Map_LiveLocationTitle: String { return self._s[2924]! } - public var Login_InfoAvatarAdd: String { return self._s[2925]! } - public var Passport_Identity_FilesView: String { return self._s[2926]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[2927]! } - public var Privacy_Calls_NeverAllow: String { return self._s[2928]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[2921]! } + public var Map_LiveLocationTitle: String { return self._s[2922]! } + public var Login_InfoAvatarAdd: String { return self._s[2923]! } + public var Passport_Identity_FilesView: String { return self._s[2924]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[2925]! } + public var Privacy_Calls_NeverAllow: String { return self._s[2926]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2929]!, self._r[2929]!, [_0]) + return formatWithArgumentRanges(self._s[2927]!, self._r[2927]!, [_0]) } - public var TwoStepAuth_ConfirmationText: String { return self._s[2930]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2931]! } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2932]! } - public var Tour_Title2: String { return self._s[2933]! } - public var Conversation_FileOpenIn: String { return self._s[2934]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2935]! } - public var Wallpaper_Set: String { return self._s[2936]! } - public var Passport_Identity_Translations: String { return self._s[2938]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[2928]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2929]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2930]! } + public var Tour_Title2: String { return self._s[2931]! } + public var Conversation_FileOpenIn: String { return self._s[2932]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2933]! } + public var Wallpaper_Set: String { return self._s[2934]! } + public var Passport_Identity_Translations: String { return self._s[2936]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2939]!, self._r[2939]!, [_0]) + return formatWithArgumentRanges(self._s[2937]!, self._r[2937]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[2940]! } + public var Channel_LeaveChannel: String { return self._s[2938]! } public func MESSAGE_NOTEXT_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2941]!, self._r[2941]!, [_1]) + return formatWithArgumentRanges(self._s[2939]!, self._r[2939]!, [_1]) } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2942]!, self._r[2942]!, [_1]) + return formatWithArgumentRanges(self._s[2940]!, self._r[2940]!, [_1]) } - public var PhotoEditor_HighlightsTint: String { return self._s[2943]! } - public var Passport_Email_Delete: String { return self._s[2944]! } - public var Conversation_Mute: String { return self._s[2946]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[2948]! } + public var PhotoEditor_HighlightsTint: String { return self._s[2941]! } + public var Passport_Email_Delete: String { return self._s[2942]! } + public var Conversation_Mute: String { return self._s[2944]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[2946]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2947]!, self._r[2947]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[2950]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[2951]! } - public var Common_No: String { return self._s[2952]! } - public var Weekday_Sunday: String { return self._s[2953]! } - public var Notification_Reply: String { return self._s[2954]! } - public var Conversation_ViewMessage: String { return self._s[2955]! } + public var Calls_CallTabDescription: String { return self._s[2948]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[2949]! } + public var Common_No: String { return self._s[2950]! } + public var Weekday_Sunday: String { return self._s[2951]! } + public var Notification_Reply: String { return self._s[2952]! } + public var Conversation_ViewMessage: String { return self._s[2953]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2956]!, self._r[2956]!, [_0]) + return formatWithArgumentRanges(self._s[2954]!, self._r[2954]!, [_0]) } public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2957]!, self._r[2957]!, [_0]) + return formatWithArgumentRanges(self._s[2955]!, self._r[2955]!, [_0]) } - public var Message_PinnedDocumentMessage: String { return self._s[2958]! } - public var DialogList_TabTitle: String { return self._s[2960]! } - public var Passport_FieldEmail: String { return self._s[2961]! } - public var Conversation_UnpinMessageAlert: String { return self._s[2962]! } - public var Passport_Address_TypeBankStatement: String { return self._s[2963]! } - public var Passport_Identity_ExpiryDate: String { return self._s[2964]! } - public var Privacy_Calls_P2P: String { return self._s[2965]! } + public var Message_PinnedDocumentMessage: String { return self._s[2956]! } + public var DialogList_TabTitle: String { return self._s[2958]! } + public var Passport_FieldEmail: String { return self._s[2959]! } + public var Conversation_UnpinMessageAlert: String { return self._s[2960]! } + public var Passport_Address_TypeBankStatement: String { return self._s[2961]! } + public var Passport_Identity_ExpiryDate: String { return self._s[2962]! } + public var Privacy_Calls_P2P: String { return self._s[2963]! } public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2967]!, self._r[2967]!, [_0]) + return formatWithArgumentRanges(self._s[2965]!, self._r[2965]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[2968]! } - public var EnterPasscode_ChangeTitle: String { return self._s[2969]! } - public var Passport_InfoText: String { return self._s[2970]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2971]! } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[2966]! } + public var EnterPasscode_ChangeTitle: String { return self._s[2967]! } + public var Passport_InfoText: String { return self._s[2968]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2969]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2972]!, self._r[2972]!, [_0]) + return formatWithArgumentRanges(self._s[2970]!, self._r[2970]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2973]!, self._r[2973]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2971]!, self._r[2971]!, [_1, _2, _3]) } - public var Passport_Identity_EditDriversLicense: String { return self._s[2974]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[2976]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[2972]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[2974]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2977]!, self._r[2977]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2975]!, self._r[2975]!, [_1, _2]) } public func MESSAGE_ROUND_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2978]!, self._r[2978]!, [_1]) + return formatWithArgumentRanges(self._s[2976]!, self._r[2976]!, [_1]) } public func PHONE_CALL_MISSED_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2980]!, self._r[2980]!, [_1]) + return formatWithArgumentRanges(self._s[2978]!, self._r[2978]!, [_1]) } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2982]!, self._r[2982]!, [_0]) + return formatWithArgumentRanges(self._s[2980]!, self._r[2980]!, [_0]) } - public var DialogList_Unread: String { return self._s[2983]! } - public var User_DeletedAccount: String { return self._s[2984]! } + public var DialogList_Unread: String { return self._s[2981]! } + public var User_DeletedAccount: String { return self._s[2982]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2985]!, self._r[2985]!, [_0]) + return formatWithArgumentRanges(self._s[2983]!, self._r[2983]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[2986]! } - public var SharedMedia_CategoryMedia: String { return self._s[2987]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2988]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2989]! } - public var Watch_ChatList_Compose: String { return self._s[2990]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2991]! } - public var Watch_Microphone_Access: String { return self._s[2992]! } - public var Group_Setup_HistoryHeader: String { return self._s[2993]! } - public var Activity_UploadingPhoto: String { return self._s[2994]! } + public var UserInfo_NotificationsDefault: String { return self._s[2984]! } + public var SharedMedia_CategoryMedia: String { return self._s[2985]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2986]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2987]! } + public var Watch_ChatList_Compose: String { return self._s[2988]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2989]! } + public var Watch_Microphone_Access: String { return self._s[2990]! } + public var Group_Setup_HistoryHeader: String { return self._s[2991]! } + public var Activity_UploadingPhoto: String { return self._s[2992]! } public func MESSAGE_VIDEO_SECRET_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2996]!, self._r[2996]!, [_1]) + return formatWithArgumentRanges(self._s[2994]!, self._r[2994]!, [_1]) } - public var Conversation_Edit: String { return self._s[2997]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[2998]! } - public var Login_TermsOfServiceDecline: String { return self._s[2999]! } - public var Message_PinnedContactMessage: String { return self._s[3000]! } + public var Conversation_Edit: String { return self._s[2995]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[2996]! } + public var Login_TermsOfServiceDecline: String { return self._s[2997]! } + public var Message_PinnedContactMessage: String { return self._s[2998]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3001]!, self._r[3001]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2999]!, self._r[2999]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3002]!, self._r[3002]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3000]!, self._r[3000]!, [_1, _2, _3, _4, _5]) } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3004]! } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3005]! } - public var Message_PinnedPhotoMessage: String { return self._s[3006]! } - public var Passport_FieldPhone: String { return self._s[3007]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3008]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[3010]! } - public var Conversation_Call: String { return self._s[3011]! } - public var Common_TakePhoto: String { return self._s[3013]! } - public var Channel_NotificationLoading: String { return self._s[3014]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3002]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3003]! } + public var Message_PinnedPhotoMessage: String { return self._s[3004]! } + public var Passport_FieldPhone: String { return self._s[3005]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3006]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[3008]! } + public var Conversation_Call: String { return self._s[3009]! } + public var Common_TakePhoto: String { return self._s[3011]! } + public var Channel_NotificationLoading: String { return self._s[3012]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3013]!, self._r[3013]!, [_0]) + } + public var Permissions_SiriTitle_v0: String { return self._s[3014]! } + public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3015]!, self._r[3015]!, [_0]) } - public var Permissions_SiriTitle_v0: String { return self._s[3016]! } - public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3017]!, self._r[3017]!, [_0]) - } - public var Channel_MessagePhotoRemoved: String { return self._s[3018]! } - public var Common_edit: String { return self._s[3019]! } - public var PrivacySettings_AuthSessions: String { return self._s[3020]! } - public var Month_ShortJune: String { return self._s[3021]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3022]! } - public var Call_ReportSend: String { return self._s[3023]! } - public var Watch_LastSeen_JustNow: String { return self._s[3024]! } - public var Notifications_MessageNotifications: String { return self._s[3025]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3027]! } - public var Group_Status: String { return self._s[3028]! } + public var Channel_MessagePhotoRemoved: String { return self._s[3016]! } + public var Common_edit: String { return self._s[3017]! } + public var PrivacySettings_AuthSessions: String { return self._s[3018]! } + public var Month_ShortJune: String { return self._s[3019]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3020]! } + public var Call_ReportSend: String { return self._s[3021]! } + public var Watch_LastSeen_JustNow: String { return self._s[3022]! } + public var Notifications_MessageNotifications: String { return self._s[3023]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3025]! } + public var Group_Status: String { return self._s[3026]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3029]!, self._r[3029]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3027]!, self._r[3027]!, [_0, _1]) } - public var ShareMenu_ShareTo: String { return self._s[3030]! } - public var Conversation_Moderate_Ban: String { return self._s[3031]! } + public var ShareMenu_ShareTo: String { return self._s[3028]! } + public var Conversation_Moderate_Ban: String { return self._s[3029]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3032]!, self._r[3032]!, [_0]) + return formatWithArgumentRanges(self._s[3030]!, self._r[3030]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3033]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3034]! } + public var SharedMedia_ViewInChat: String { return self._s[3031]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3032]! } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3036]!, self._r[3036]!, [_0]) + return formatWithArgumentRanges(self._s[3034]!, self._r[3034]!, [_0]) } - public var Appearance_ReduceMotion: String { return self._s[3037]! } - public var Map_OpenInHereMaps: String { return self._s[3038]! } - public var Channel_Setup_TypePublicHelp: String { return self._s[3039]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3040]! } - public var PhotoEditor_Skip: String { return self._s[3041]! } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public var Appearance_ReduceMotion: String { return self._s[3035]! } + public var Map_OpenInHereMaps: String { return self._s[3036]! } + public var Channel_Setup_TypePublicHelp: String { return self._s[3037]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3038]! } + public var PhotoEditor_Skip: String { return self._s[3039]! } + public func ForwardedAudios(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Days(_ value: Int32) -> String { + public func ForwardedAuthorsOthers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Weeks(_ value: Int32) -> String { + public func AttachmentMenu_SendItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedFiles(_ value: Int32) -> String { + public func CHANNEL_MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Link(_ value: Int32) -> String { + public func SharedMedia_Generic(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Months(_ value: Int32) -> String { + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + public func Media_SharePhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusOnline(_ value: Int32) -> String { + public func LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + public func Passport_Scans(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func UserCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteFor_Days(_ value: Int32) -> String { + public func QuickSend_Photos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + public func MuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func Conversation_StatusSubscribers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") } - public func QuickSend_Photos(_ value: Int32) -> String { + public func MuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Video(_ value: Int32) -> String { + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHANNEL_MESSAGES_SEPARATED(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Photo(_ value: Int32) -> String { + public func StickerPack_StickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func CHAT_MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSimple(_ value: Int32) -> String { + public func MessageTimer_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func SharedMedia_Photo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") } - public func UserCount(_ value: Int32) -> String { + public func MuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Seconds(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + public func ForwardedGifs(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { + public func MuteFor_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)") } @@ -3649,295 +3647,295 @@ public final class PresentationStrings { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + public func MessageTimer_ShortDays(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPolls(_ value: Int32) -> String { + public func MessageTimer_Years(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedStickers(_ value: Int32) -> String { + public func CHAT_MESSAGES_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MESSAGES_SEPARATED(_ value: Int32) -> String { + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHANNEL_MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + public func CHANNEL_MESSAGES_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func Contacts_ImportersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + public func MessageTimer_ShortHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_StickerCount(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_Exceptions(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { + public func ForwardedVideoMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_ShortMinutes(_ value: Int32) -> String { + public func Call_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + public func CHAT_MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_File(_ value: Int32) -> String { + public func MessageTimer_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareItem(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortHours(_ value: Int32) -> String { + public func MESSAGES_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedAuthorsOthers(_ value: Int32) -> String { + public func Map_ETAHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LastSeen_HoursAgo(_ value: Int32) -> String { + public func ForwardedPhotos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Contacts_ImportersCount(_ value: Int32) -> String { + public func SharedMedia_File(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Map_ETAHours(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessagePoll_VotedCount(_ value: Int32) -> String { + public func StickerPack_AddMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + public func ForwardedPolls(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedContacts(_ value: Int32) -> String { + public func MessageTimer_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_Minutes(_ value: Int32) -> String { + public func ForwardedStickers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Days(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHAT_MESSAGES_SEPARATED(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_Seconds(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHANNEL_MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { + public func InviteText_ContactsCountText(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + public func Notification_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + public func ForwardedVideos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Years(_ value: Int32) -> String { + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + public func Notification_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPhotos(_ value: Int32) -> String { + public func MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Map_ETAMinutes(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + public func Watch_UserInfo_Mute(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteFor_Hours(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusMembers(_ value: Int32) -> String { + public func SharedMedia_Link(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHAT_MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { + public func Call_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareVideo(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideos(_ value: Int32) -> String { + public func Conversation_StatusMembers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Hours(_ value: Int32) -> String { + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Invitation_Members(_ value: Int32) -> String { + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHAT_MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { + public func Notifications_Exceptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_ShortSeconds(_ value: Int32) -> String { + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)") } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Passport_Scans(_ value: Int32) -> String { + public func Media_ShareItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)") } - public func InviteText_ContactsCountText(_ value: Int32) -> String { + public func CHANNEL_MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedGifs(_ value: Int32) -> String { + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedLocations(_ value: Int32) -> String { + public func ForwardedFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func Invitation_Members(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortDays(_ value: Int32) -> String { + public func MessageTimer_Months(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideoMessages(_ value: Int32) -> String { + public func ForwardedContacts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedAudios(_ value: Int32) -> String { + public func LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Minutes(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_SharePhoto(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Minutes(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + public func StickerPack_AddStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Hours(_ value: Int32) -> String { + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)") } diff --git a/TelegramUI/Resources/PresentationStrings.mapping b/TelegramUI/Resources/PresentationStrings.mapping index 58f39a6cf0..19b16649a3 100644 Binary files a/TelegramUI/Resources/PresentationStrings.mapping and b/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/TelegramUI/ThemeGridControllerNode.swift b/TelegramUI/ThemeGridControllerNode.swift index 1da58f3c4b..8a86aaa493 100644 --- a/TelegramUI/ThemeGridControllerNode.swift +++ b/TelegramUI/ThemeGridControllerNode.swift @@ -145,12 +145,12 @@ final class ThemeGridControllerNode: ASDisplayNode { let entries = previousEntries.with { $0 } if let entries = entries, !entries.isEmpty { let wallpapers = entries.map { $0.wallpaper } - let controller = WallpaperListPreviewController(account: account, source: .list(wallpapers: wallpapers, central: wallpaper)) - strongSelf.present(controller, nil) - /*let controller = ThemeGalleryController(account: account, wallpapers: wallpapers, at: wallpaper) + /*let controller = WallpaperListPreviewController(account: account, source: .list(wallpapers: wallpapers, central: wallpaper)) + strongSelf.present(controller, nil)*/ + let controller = ThemeGalleryController(account: account, wallpapers: wallpapers, at: wallpaper) strongSelf.present(controller, ThemePreviewControllerPresentationArguments(transitionArguments: { entry -> GalleryTransitionArguments? in return nil - }))*/ + })) } } }) diff --git a/TelegramUI/ValidateAddressNameInteractive.swift b/TelegramUI/ValidateAddressNameInteractive.swift index ed3acb349b..04ea82a825 100644 --- a/TelegramUI/ValidateAddressNameInteractive.swift +++ b/TelegramUI/ValidateAddressNameInteractive.swift @@ -37,7 +37,7 @@ func validateAddressNameInteractive(account: Account, domain: AddressNameDomain, return .single(.invalidFormat(error)) } else { return .single(.checking) |> then(addressNameAvailability(account: account, domain: domain, name: name) - |> delay(0.3, queue: Queue.concurrentDefaultQueue()) - |> map { result -> AddressNameValidationStatus in .availability(result) }) + |> delay(0.3, queue: Queue.concurrentDefaultQueue()) + |> map { result -> AddressNameValidationStatus in .availability(result) }) } }