// swiftlint:disable all
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen

// swiftlint:disable sorted_imports
import Foundation
import UIKit

// swiftlint:disable superfluous_disable_command
// swiftlint:disable file_length implicit_return

// MARK: - Storyboard Scenes

// swiftlint:disable explicit_type_interface identifier_name line_length prefer_self_in_static_references
// swiftlint:disable type_body_length type_name
internal enum StoryboardScene {
  internal enum CallTransferMainViewController: StoryboardType {
    internal static let storyboardName = "CallTransferMainViewController"

    internal static let initialScene = InitialSceneType<Element.CallTransferMainViewController>(storyboard: CallTransferMainViewController.self)
  }
  internal enum CallTransferSelectContactViewController: StoryboardType {
    internal static let storyboardName = "CallTransferSelectContactViewController"

    internal static let initialScene = InitialSceneType<Element.CallTransferSelectContactViewController>(storyboard: CallTransferSelectContactViewController.self)
  }
  internal enum DeviceVerificationIncomingViewController: StoryboardType {
    internal static let storyboardName = "DeviceVerificationIncomingViewController"

    internal static let initialScene = InitialSceneType<Element.DeviceVerificationIncomingViewController>(storyboard: DeviceVerificationIncomingViewController.self)
  }
  internal enum DeviceVerificationStartViewController: StoryboardType {
    internal static let storyboardName = "DeviceVerificationStartViewController"

    internal static let initialScene = InitialSceneType<Element.DeviceVerificationStartViewController>(storyboard: DeviceVerificationStartViewController.self)
  }
  internal enum DialpadViewController: StoryboardType {
    internal static let storyboardName = "DialpadViewController"

    internal static let initialScene = InitialSceneType<Element.DialpadViewController>(storyboard: DialpadViewController.self)
  }
  internal enum EditHistoryViewController: StoryboardType {
    internal static let storyboardName = "EditHistoryViewController"

    internal static let initialScene = InitialSceneType<Element.EditHistoryViewController>(storyboard: EditHistoryViewController.self)
  }
  internal enum EmojiPickerViewController: StoryboardType {
    internal static let storyboardName = "EmojiPickerViewController"

    internal static let initialScene = InitialSceneType<Element.EmojiPickerViewController>(storyboard: EmojiPickerViewController.self)
  }
  internal enum EnterNewRoomDetailsViewController: StoryboardType {
    internal static let storyboardName = "EnterNewRoomDetailsViewController"

    internal static let initialScene = InitialSceneType<Element.EnterNewRoomDetailsViewController>(storyboard: EnterNewRoomDetailsViewController.self)
  }
  internal enum EnterPinCodeViewController: StoryboardType {
    internal static let storyboardName = "EnterPinCodeViewController"

    internal static let initialScene = InitialSceneType<Element.EnterPinCodeViewController>(storyboard: EnterPinCodeViewController.self)
  }
  internal enum KeyBackupRecoverFromPassphraseViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupRecoverFromPassphraseViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupRecoverFromPassphraseViewController>(storyboard: KeyBackupRecoverFromPassphraseViewController.self)
  }
  internal enum KeyBackupRecoverFromPrivateKeyViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupRecoverFromPrivateKeyViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupRecoverFromPrivateKeyViewController>(storyboard: KeyBackupRecoverFromPrivateKeyViewController.self)
  }
  internal enum KeyBackupRecoverFromRecoveryKeyViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupRecoverFromRecoveryKeyViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupRecoverFromRecoveryKeyViewController>(storyboard: KeyBackupRecoverFromRecoveryKeyViewController.self)
  }
  internal enum KeyBackupRecoverSuccessViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupRecoverSuccessViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupRecoverSuccessViewController>(storyboard: KeyBackupRecoverSuccessViewController.self)
  }
  internal enum KeyBackupSetupIntroViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupSetupIntroViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupSetupIntroViewController>(storyboard: KeyBackupSetupIntroViewController.self)
  }
  internal enum KeyBackupSetupPassphraseViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupSetupPassphraseViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupSetupPassphraseViewController>(storyboard: KeyBackupSetupPassphraseViewController.self)
  }
  internal enum KeyBackupSetupSuccessFromPassphraseViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupSetupSuccessFromPassphraseViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupSetupSuccessFromPassphraseViewController>(storyboard: KeyBackupSetupSuccessFromPassphraseViewController.self)
  }
  internal enum KeyBackupSetupSuccessFromRecoveryKeyViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupSetupSuccessFromRecoveryKeyViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupSetupSuccessFromRecoveryKeyViewController>(storyboard: KeyBackupSetupSuccessFromRecoveryKeyViewController.self)
  }
  internal enum KeyBackupSetupSuccessFromSecureBackupViewController: StoryboardType {
    internal static let storyboardName = "KeyBackupSetupSuccessFromSecureBackupViewController"

    internal static let initialScene = InitialSceneType<Element.KeyBackupSetupSuccessFromSecureBackupViewController>(storyboard: KeyBackupSetupSuccessFromSecureBackupViewController.self)
  }
  internal enum KeyVerificationDataLoadingViewController: StoryboardType {
    internal static let storyboardName = "KeyVerificationDataLoadingViewController"

    internal static let initialScene = InitialSceneType<Element.KeyVerificationDataLoadingViewController>(storyboard: KeyVerificationDataLoadingViewController.self)
  }
  internal enum KeyVerificationManuallyVerifyViewController: StoryboardType {
    internal static let storyboardName = "KeyVerificationManuallyVerifyViewController"

    internal static let initialScene = InitialSceneType<Element.KeyVerificationManuallyVerifyViewController>(storyboard: KeyVerificationManuallyVerifyViewController.self)
  }
  internal enum KeyVerificationScanConfirmationViewController: StoryboardType {
    internal static let storyboardName = "KeyVerificationScanConfirmationViewController"

    internal static let initialScene = InitialSceneType<Element.KeyVerificationScanConfirmationViewController>(storyboard: KeyVerificationScanConfirmationViewController.self)
  }
  internal enum KeyVerificationSelfVerifyStartViewController: StoryboardType {
    internal static let storyboardName = "KeyVerificationSelfVerifyStartViewController"

    internal static let initialScene = InitialSceneType<Element.KeyVerificationSelfVerifyStartViewController>(storyboard: KeyVerificationSelfVerifyStartViewController.self)
  }
  internal enum KeyVerificationSelfVerifyWaitViewController: StoryboardType {
    internal static let storyboardName = "KeyVerificationSelfVerifyWaitViewController"

    internal static let initialScene = InitialSceneType<Element.KeyVerificationSelfVerifyWaitViewController>(storyboard: KeyVerificationSelfVerifyWaitViewController.self)
  }
  internal enum KeyVerificationVerifiedViewController: StoryboardType {
    internal static let storyboardName = "KeyVerificationVerifiedViewController"

    internal static let initialScene = InitialSceneType<Element.KeyVerificationVerifiedViewController>(storyboard: KeyVerificationVerifiedViewController.self)
  }
  internal enum KeyVerificationVerifyBySASViewController: StoryboardType {
    internal static let storyboardName = "KeyVerificationVerifyBySASViewController"

    internal static let initialScene = InitialSceneType<Element.KeyVerificationVerifyBySASViewController>(storyboard: KeyVerificationVerifyBySASViewController.self)
  }
  internal enum KeyVerificationVerifyByScanningViewController: StoryboardType {
    internal static let storyboardName = "KeyVerificationVerifyByScanningViewController"

    internal static let initialScene = InitialSceneType<Element.KeyVerificationVerifyByScanningViewController>(storyboard: KeyVerificationVerifyByScanningViewController.self)
  }
  internal enum MajorUpdateViewController: StoryboardType {
    internal static let storyboardName = "MajorUpdateViewController"

    internal static let initialScene = InitialSceneType<Element.MajorUpdateViewController>(storyboard: MajorUpdateViewController.self)
  }
  internal enum OptionListViewController: StoryboardType {
    internal static let storyboardName = "OptionListViewController"

    internal static let initialScene = InitialSceneType<Element.OptionListViewController>(storyboard: OptionListViewController.self)
  }
  internal enum QRCodeReaderViewController: StoryboardType {
    internal static let storyboardName = "QRCodeReaderViewController"

    internal static let initialScene = InitialSceneType<Element.QRCodeReaderViewController>(storyboard: QRCodeReaderViewController.self)
  }
  internal enum ReactionHistoryViewController: StoryboardType {
    internal static let storyboardName = "ReactionHistoryViewController"

    internal static let initialScene = InitialSceneType<Element.ReactionHistoryViewController>(storyboard: ReactionHistoryViewController.self)
  }
  internal enum RoomContextPreviewViewController: StoryboardType {
    internal static let storyboardName = "RoomContextPreviewViewController"

    internal static let initialScene = InitialSceneType<Element.RoomContextPreviewViewController>(storyboard: RoomContextPreviewViewController.self)
  }
  internal enum RoomContextualMenuViewController: StoryboardType {
    internal static let storyboardName = "RoomContextualMenuViewController"

    internal static let initialScene = InitialSceneType<Element.RoomContextualMenuViewController>(storyboard: RoomContextualMenuViewController.self)
  }
  internal enum RoomCreationEventsModalViewController: StoryboardType {
    internal static let storyboardName = "RoomCreationEventsModalViewController"

    internal static let initialScene = InitialSceneType<Element.RoomCreationEventsModalViewController>(storyboard: RoomCreationEventsModalViewController.self)
  }
  internal enum RoomInfoListViewController: StoryboardType {
    internal static let storyboardName = "RoomInfoListViewController"

    internal static let initialScene = InitialSceneType<Element.RoomInfoListViewController>(storyboard: RoomInfoListViewController.self)
  }
  internal enum RoomNotificationSettingsViewController: StoryboardType {
    internal static let storyboardName = "RoomNotificationSettingsViewController"

    internal static let initialScene = InitialSceneType<Element.RoomNotificationSettingsViewController>(storyboard: RoomNotificationSettingsViewController.self)
  }
  internal enum SecretsRecoveryWithKeyViewController: StoryboardType {
    internal static let storyboardName = "SecretsRecoveryWithKeyViewController"

    internal static let initialScene = InitialSceneType<Element.SecretsRecoveryWithKeyViewController>(storyboard: SecretsRecoveryWithKeyViewController.self)
  }
  internal enum SecretsRecoveryWithPassphraseViewController: StoryboardType {
    internal static let storyboardName = "SecretsRecoveryWithPassphraseViewController"

    internal static let initialScene = InitialSceneType<Element.SecretsRecoveryWithPassphraseViewController>(storyboard: SecretsRecoveryWithPassphraseViewController.self)
  }
  internal enum SecretsResetViewController: StoryboardType {
    internal static let storyboardName = "SecretsResetViewController"

    internal static let initialScene = InitialSceneType<Element.SecretsResetViewController>(storyboard: SecretsResetViewController.self)
  }
  internal enum SecretsSetupRecoveryKeyViewController: StoryboardType {
    internal static let storyboardName = "SecretsSetupRecoveryKeyViewController"

    internal static let initialScene = InitialSceneType<Element.SecretsSetupRecoveryKeyViewController>(storyboard: SecretsSetupRecoveryKeyViewController.self)
  }
  internal enum SecretsSetupRecoveryPassphraseViewController: StoryboardType {
    internal static let storyboardName = "SecretsSetupRecoveryPassphraseViewController"

    internal static let initialScene = InitialSceneType<Element.SecretsSetupRecoveryPassphraseViewController>(storyboard: SecretsSetupRecoveryPassphraseViewController.self)
  }
  internal enum SecureBackupSetupIntroViewController: StoryboardType {
    internal static let storyboardName = "SecureBackupSetupIntroViewController"

    internal static let initialScene = InitialSceneType<Element.SecureBackupSetupIntroViewController>(storyboard: SecureBackupSetupIntroViewController.self)
  }
  internal enum ServiceTermsModalScreenViewController: StoryboardType {
    internal static let storyboardName = "ServiceTermsModalScreenViewController"

    internal static let initialScene = InitialSceneType<Element.ServiceTermsModalScreenViewController>(storyboard: ServiceTermsModalScreenViewController.self)
  }
  internal enum SettingsDiscoveryThreePidDetailsViewController: StoryboardType {
    internal static let storyboardName = "SettingsDiscoveryThreePidDetailsViewController"

    internal static let initialScene = InitialSceneType<Element.SettingsDiscoveryThreePidDetailsViewController>(storyboard: SettingsDiscoveryThreePidDetailsViewController.self)
  }
  internal enum SettingsIdentityServerViewController: StoryboardType {
    internal static let storyboardName = "SettingsIdentityServerViewController"

    internal static let initialScene = InitialSceneType<Element.SettingsIdentityServerViewController>(storyboard: SettingsIdentityServerViewController.self)
  }
  internal enum SetupBiometricsViewController: StoryboardType {
    internal static let storyboardName = "SetupBiometricsViewController"

    internal static let initialScene = InitialSceneType<Element.SetupBiometricsViewController>(storyboard: SetupBiometricsViewController.self)
  }
  internal enum ShowDirectoryViewController: StoryboardType {
    internal static let storyboardName = "ShowDirectoryViewController"

    internal static let initialScene = InitialSceneType<Element.ShowDirectoryViewController>(storyboard: ShowDirectoryViewController.self)

    internal static let searchableDirectoryViewController = SceneType<Element.ShowDirectoryViewController>(storyboard: ShowDirectoryViewController.self, identifier: "SearchableDirectoryViewController")
  }
  internal enum SideMenuViewController: StoryboardType {
    internal static let storyboardName = "SideMenuViewController"

    internal static let initialScene = InitialSceneType<Element.SideMenuViewController>(storyboard: SideMenuViewController.self)
  }
  internal enum SimpleScreenTemplateViewController: StoryboardType {
    internal static let storyboardName = "SimpleScreenTemplateViewController"

    internal static let initialScene = InitialSceneType<Element.SimpleScreenTemplateViewController>(storyboard: SimpleScreenTemplateViewController.self)
  }
  internal enum SpaceChildRoomDetailViewController: StoryboardType {
    internal static let storyboardName = "SpaceChildRoomDetailViewController"

    internal static let initialScene = InitialSceneType<Element.SpaceChildRoomDetailViewController>(storyboard: SpaceChildRoomDetailViewController.self)
  }
  internal enum SpaceDetailViewController: StoryboardType {
    internal static let storyboardName = "SpaceDetailViewController"

    internal static let initialScene = InitialSceneType<Element.SpaceDetailViewController>(storyboard: SpaceDetailViewController.self)
  }
  internal enum SpaceExploreRoomViewController: StoryboardType {
    internal static let storyboardName = "SpaceExploreRoomViewController"

    internal static let initialScene = InitialSceneType<Element.SpaceExploreRoomViewController>(storyboard: SpaceExploreRoomViewController.self)
  }
  internal enum SpaceFeatureUnaivableViewController: StoryboardType {
    internal static let storyboardName = "SpaceFeatureUnaivableViewController"

    internal static let initialScene = InitialSceneType<Element.SpaceFeatureUnaivableViewController>(storyboard: SpaceFeatureUnaivableViewController.self)
  }
  internal enum SpaceListViewController: StoryboardType {
    internal static let storyboardName = "SpaceListViewController"

    internal static let initialScene = InitialSceneType<Element.SpaceListViewController>(storyboard: SpaceListViewController.self)
  }
  internal enum SpaceMenuViewController: StoryboardType {
    internal static let storyboardName = "SpaceMenuViewController"

    internal static let initialScene = InitialSceneType<Element.SpaceMenuViewController>(storyboard: SpaceMenuViewController.self)
  }
  internal enum TemplateScreenViewController: StoryboardType {
    internal static let storyboardName = "TemplateScreenViewController"

    internal static let initialScene = InitialSceneType<Element.TemplateScreenViewController>(storyboard: TemplateScreenViewController.self)
  }
  internal enum ThreadListViewController: StoryboardType {
    internal static let storyboardName = "ThreadListViewController"

    internal static let initialScene = InitialSceneType<Element.ThreadListViewController>(storyboard: ThreadListViewController.self)
  }
  internal enum ThreadsBetaViewController: StoryboardType {
    internal static let storyboardName = "ThreadsBetaViewController"

    internal static let initialScene = InitialSceneType<Element.ThreadsBetaViewController>(storyboard: ThreadsBetaViewController.self)
  }
  internal enum ThreadsNoticeViewController: StoryboardType {
    internal static let storyboardName = "ThreadsNoticeViewController"

    internal static let initialScene = InitialSceneType<Element.ThreadsNoticeViewController>(storyboard: ThreadsNoticeViewController.self)
  }
  internal enum UserVerificationSessionStatusViewController: StoryboardType {
    internal static let storyboardName = "UserVerificationSessionStatusViewController"

    internal static let initialScene = InitialSceneType<Element.UserVerificationSessionStatusViewController>(storyboard: UserVerificationSessionStatusViewController.self)
  }
  internal enum UserVerificationSessionsStatusViewController: StoryboardType {
    internal static let storyboardName = "UserVerificationSessionsStatusViewController"

    internal static let initialScene = InitialSceneType<Element.UserVerificationSessionsStatusViewController>(storyboard: UserVerificationSessionsStatusViewController.self)
  }
  internal enum UserVerificationStartViewController: StoryboardType {
    internal static let storyboardName = "UserVerificationStartViewController"

    internal static let initialScene = InitialSceneType<Element.UserVerificationStartViewController>(storyboard: UserVerificationStartViewController.self)
  }
  internal enum WidgetPermissionViewController: StoryboardType {
    internal static let storyboardName = "WidgetPermissionViewController"

    internal static let initialScene = InitialSceneType<Element.WidgetPermissionViewController>(storyboard: WidgetPermissionViewController.self)
  }
}
// swiftlint:enable explicit_type_interface identifier_name line_length prefer_self_in_static_references
// swiftlint:enable type_body_length type_name

// MARK: - Implementation Details

internal protocol StoryboardType {
  static var storyboardName: String { get }
}

internal extension StoryboardType {
  static var storyboard: UIStoryboard {
    let name = self.storyboardName
    return UIStoryboard(name: name, bundle: BundleToken.bundle)
  }
}

internal struct SceneType<T: UIViewController> {
  internal let storyboard: StoryboardType.Type
  internal let identifier: String

  internal func instantiate() -> T {
    let identifier = self.identifier
    guard let controller = storyboard.storyboard.instantiateViewController(withIdentifier: identifier) as? T else {
      fatalError("ViewController '\(identifier)' is not of the expected class \(T.self).")
    }
    return controller
  }

  @available(iOS 13.0, tvOS 13.0, *)
  internal func instantiate(creator block: @escaping (NSCoder) -> T?) -> T {
    return storyboard.storyboard.instantiateViewController(identifier: identifier, creator: block)
  }
}

internal struct InitialSceneType<T: UIViewController> {
  internal let storyboard: StoryboardType.Type

  internal func instantiate() -> T {
    guard let controller = storyboard.storyboard.instantiateInitialViewController() as? T else {
      fatalError("ViewController is not of the expected class \(T.self).")
    }
    return controller
  }

  @available(iOS 13.0, tvOS 13.0, *)
  internal func instantiate(creator block: @escaping (NSCoder) -> T?) -> T {
    guard let controller = storyboard.storyboard.instantiateInitialViewController(creator: block) else {
      fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.")
    }
    return controller
  }
}

// swiftlint:disable convenience_type
private final class BundleToken {
  static let bundle: Bundle = {
    #if SWIFT_PACKAGE
    return Bundle.module
    #else
    return Bundle(for: BundleToken.self)
    #endif
  }()
}
// swiftlint:enable convenience_type
