From 5bce5a7e33758e9332b8bf14b91b95a876516281 Mon Sep 17 00:00:00 2001 From: dayanch96 <38832025+dayanch96@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:11:32 +0300 Subject: [PATCH] 3.0 --- Makefile | 4 +- Settings.x | 713 ++++++++------- Utils/NSBundle+YTLite.h | 13 + Utils/NSBundle+YTLite.m | 19 + Reachability.h => Utils/Reachability.h | 0 Reachability.m => Utils/Reachability.m | 0 Utils/YTLUserDefaults.h | 15 + Utils/YTLUserDefaults.m | 40 + YTLite.h | 253 +++--- YTLite.x | 848 ++++++++---------- YTNativeShare.x | 126 +++ .../Application Support/YTLite.bundle/bnb.png | Bin 0 -> 6836 bytes .../YTLite.bundle/boosty.png | Bin 0 -> 8392 bytes .../en.lproj/Localizable.strings | 32 +- .../es.lproj/Localizable.strings | 126 ++- .../fr.lproj/Localizable.strings | 116 ++- .../ja.lproj/Localizable.strings | 30 + .../ru.lproj/Localizable.strings | 32 +- .../YTLite.bundle/usdt.png | Bin 0 -> 5955 bytes .../vi.lproj/Localizable.strings | 92 +- .../zh-Hans.lproj/Localizable.strings | 94 +- .../zh-Hant.lproj/Localizable.strings | 98 +- .../com.dvntm.ytlite_3.0_iphoneos-arm.deb | Bin 0 -> 113356 bytes .../com.dvntm.ytlite_3.0_iphoneos-arm64.deb | Bin 0 -> 113454 bytes 24 files changed, 1519 insertions(+), 1132 deletions(-) create mode 100644 Utils/NSBundle+YTLite.h create mode 100644 Utils/NSBundle+YTLite.m rename Reachability.h => Utils/Reachability.h (100%) rename Reachability.m => Utils/Reachability.m (100%) create mode 100644 Utils/YTLUserDefaults.h create mode 100644 Utils/YTLUserDefaults.m create mode 100644 YTNativeShare.x create mode 100644 layout/Library/Application Support/YTLite.bundle/bnb.png create mode 100644 layout/Library/Application Support/YTLite.bundle/boosty.png create mode 100644 layout/Library/Application Support/YTLite.bundle/usdt.png create mode 100644 packages/com.dvntm.ytlite_3.0_iphoneos-arm.deb create mode 100644 packages/com.dvntm.ytlite_3.0_iphoneos-arm64.deb diff --git a/Makefile b/Makefile index 34f058b..b4e1130 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ endif DEBUG=0 FINALPACKAGE=1 ARCHS = arm64 -PACKAGE_VERSION = 2.7 +PACKAGE_VERSION = 3.0 TARGET := iphone:clang:latest:13.0 include $(THEOS)/makefiles/common.mk @@ -13,6 +13,6 @@ include $(THEOS)/makefiles/common.mk TWEAK_NAME = YTLite $(TWEAK_NAME)_FRAMEWORKS = UIKit Foundation SystemConfiguration $(TWEAK_NAME)_CFLAGS = -fobjc-arc -DTWEAK_VERSION=$(PACKAGE_VERSION) -$(TWEAK_NAME)_FILES = $(wildcard *.x *.m) +$(TWEAK_NAME)_FILES = $(wildcard *.x Utils/*.m) include $(THEOS_MAKE_PATH)/tweak.mk diff --git a/Settings.x b/Settings.x index c521a6d..288def7 100644 --- a/Settings.x +++ b/Settings.x @@ -58,62 +58,54 @@ static NSString *GetCacheSize() { %hook YTSettingsSectionItemManager %new -- (void)updatePrefsForKey:(NSString *)key enabled:(BOOL)enabled { - NSString *prefsPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"YTLite.plist"]; - NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithContentsOfFile:prefsPath]; +- (YTSettingsSectionItem *)switchWithTitle:(NSString *)title key:(NSString *)key { + Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem); + Class YTAlertViewClass = %c(YTAlertView); + NSString *titleDesc = [NSString stringWithFormat:@"%@Desc", title]; - if (!prefs) prefs = [NSMutableDictionary dictionary]; + YTSettingsSectionItem *item = [YTSettingsSectionItemClass switchItemWithTitle:LOC(title) + titleDescription:LOC(titleDesc) + accessibilityIdentifier:@"YTLiteSectionItem" + switchOn:ytlBool(key) + switchBlock:^BOOL(YTSettingsCell *cell, BOOL enabled) { + if ([key isEqualToString:@"shortsOnlyMode"]) { + YTAlertView *alertView = [YTAlertViewClass confirmationDialogWithAction:^{ + ytlSetBool(enabled, @"shortsOnlyMode"); + } + actionTitle:LOC(@"Yes") + cancelAction:^{ + [cell setSwitchOn:!enabled animated:YES]; + } + cancelTitle:LOC(@"No")]; + alertView.title = LOC(@"Warning"); + alertView.subtitle = LOC(@"ShortsOnlyWarning"); + [alertView show]; + } - [prefs setObject:@(enabled) forKey:key]; - [prefs writeToFile:prefsPath atomically:NO]; + else { + ytlSetBool(enabled, key); - CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES); + if (ytlBool(@"removeLabels") || ytlBool(@"reExplore") || ytlBool(@"addExplore") || ytlBool(@"removeShorts") || ytlBool(@"removeSubscriptions") || ytlBool(@"removeUploads") || ytlBool(@"removeLibrary")) { + [[[%c(YTHeaderContentComboViewController) alloc] init] refreshPivotBar]; + } + } + + return YES; + } + settingItemId:0]; + + return item; } %new -- (void)updateIntegerPrefsForKey:(NSString *)key intValue:(NSInteger)intValue { - NSString *prefsPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"YTLite.plist"]; - NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithContentsOfFile:prefsPath]; - - if (!prefs) prefs = [NSMutableDictionary dictionary]; - - [prefs setObject:@(intValue) forKey:key]; - [prefs writeToFile:prefsPath atomically:NO]; - - CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES); -} - -static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, BOOL *value, id selfObject) { - Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem); - Class YTAlertViewClass = %c(YTAlertView); - - YTSettingsSectionItem *item = [YTSettingsSectionItemClass switchItemWithTitle:LOC(title) - titleDescription:LOC([NSString stringWithFormat:@"%@Desc", title]) - accessibilityIdentifier:@"YTLiteSectionItem" - switchOn:*value - switchBlock:^BOOL(YTSettingsCell *cell, BOOL enabled) { - if ([key isEqualToString:@"shortsOnlyMode"]) { - YTAlertView *alertView = [YTAlertViewClass confirmationDialogWithAction:^{ - [selfObject updatePrefsForKey:@"shortsOnlyMode" enabled:enabled]; - } - actionTitle:LOC(@"Yes") - cancelAction:^{ - [cell setSwitchOn:!enabled animated:YES]; - } - cancelTitle:LOC(@"No")]; - alertView.title = LOC(@"Warning"); - alertView.subtitle = LOC(@"ShortsOnlyWarning"); - [alertView show]; - } - - else { - [selfObject updatePrefsForKey:key enabled:enabled]; - } - - return YES; - } - settingItemId:0]; - return item; +- (YTSettingsSectionItem *)linkWithTitle:(NSString *)title description:(NSString *)description link:(NSString *)link { + return [%c(YTSettingsSectionItem) itemWithTitle:title + titleDescription:description + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:nil + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + return [%c(YTUIUtils) openURL:[NSURL URLWithString:link]]; + }]; } %new(v@:@) @@ -121,7 +113,6 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B NSMutableArray *sectionItems = [NSMutableArray array]; Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem); YTSettingsViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"]; - id selfObject = self; YTSettingsSectionItem *space = [%c(YTSettingsSectionItem) itemWithTitle:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:nil]; @@ -132,370 +123,372 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(@"RemoveAds", @"noAds", &kNoAds, selfObject), - createSwitchItem(@"BackgroundPlayback", @"backgroundPlayback", &kBackgroundPlayback, selfObject) + [self switchWithTitle:@"RemoveAds" key:@"noAds"], + [self switchWithTitle:@"BackgroundPlayback" key:@"backgroundPlayback"] ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"General") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; + [sectionItems addObject:general]; YTSettingsSectionItem *navbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Navbar") - accessibilityIdentifier:@"YTLiteSectionItem" - detailTextBlock:^NSString *() { - return @"‣"; - } - selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - NSArray *rows = @[ - createSwitchItem(@"RemoveCast", @"noCast", &kNoCast, selfObject), - createSwitchItem(@"RemoveNotifications", @"removeNotifsButton", &kNoNotifsButton, selfObject), - createSwitchItem(@"RemoveSearch", @"removeSearchButton", &kNoSearchButton, selfObject), - createSwitchItem(@"RemoveVoiceSearch", @"removeVoiceSearchButton", &kNoVoiceSearchButton, selfObject) + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + return @"‣"; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSArray *rows = @[ + [self switchWithTitle:@"RemoveCast" key:@"noCast"], + [self switchWithTitle:@"RemoveNotifications" key:@"noNotifsButton"], + [self switchWithTitle:@"RemoveSearch" key:@"noSearchButton"], + [self switchWithTitle:@"RemoveVoiceSearch" key:@"noVoiceSearchButton"] ]; - if (kAdvancedMode) { - YTSettingsSectionItem *addStickyNavbar = createSwitchItem(@"StickyNavbar", @"stickyNavbar", &kStickyNavbar, selfObject); - rows = [rows arrayByAddingObject:addStickyNavbar]; - - YTSettingsSectionItem *addNoSubbar = createSwitchItem(@"NoSubbar", @"noSubbar", &kNoSubbar, selfObject); - rows = [rows arrayByAddingObject:addNoSubbar]; - - YTSettingsSectionItem *addNoYTLogo = createSwitchItem(@"NoYTLogo", @"noYTLogo", &kNoYTLogo, selfObject); - rows = [rows arrayByAddingObject:addNoYTLogo]; + if (ytlBool(@"advancedMode")) { + rows = [rows arrayByAddingObjectsFromArray:@[ + [self switchWithTitle:@"StickyNavbar" key:@"stickyNavbar"], + [self switchWithTitle:@"NoSubbar" key:@"noSubbar"], + [self switchWithTitle:@"NoYTLogo" key:@"noYTLogo"], + [self switchWithTitle:@"PremiumYTLogo" key:@"premiumYTLogo"] + ]]; } YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Navbar") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; + [sectionItems addObject:navbar]; - if (kAdvancedMode) { + if (ytlBool(@"advancedMode")) { YTSettingsSectionItem *overlay = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Overlay") - accessibilityIdentifier:@"YTLiteSectionItem" - detailTextBlock:^NSString *() { - return @"‣"; - } - selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - NSArray *rows = @[ - createSwitchItem(@"HideAutoplay", @"hideAutoplay", &kHideAutoplay, selfObject), - createSwitchItem(@"HideSubs", @"hideSubs", &kHideSubs, selfObject), - createSwitchItem(@"NoHUDMsgs", @"noHUDMsgs", &kNoHUDMsgs, selfObject), - createSwitchItem(@"HidePrevNext", @"hidePrevNext", &kHidePrevNext, selfObject), - createSwitchItem(@"ReplacePrevNext", @"replacePrevNext", &kReplacePrevNext, selfObject), - createSwitchItem(@"NoDarkBg", @"noDarkBg", &kNoDarkBg, selfObject), - createSwitchItem(@"NoEndScreenCards", @"endScreenCards", &kEndScreenCards, selfObject), - createSwitchItem(@"NoFullscreenActions", @"noFullscreenActions", &kNoFullscreenActions, selfObject), - createSwitchItem(@"PersistentProgressBar", @"persistentProgressBar", &kPersistentProgressBar, selfObject), - createSwitchItem(@"NoRelatedVids", @"noRelatedVids", &kNoRelatedVids, selfObject), - createSwitchItem(@"NoPromotionCards", @"noPromotionCards", &kNoPromotionCards, selfObject), - createSwitchItem(@"NoWatermarks", @"noWatermarks", &kNoWatermarks, selfObject) - ]; - - YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Overlay") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; - [settingsViewController pushViewController:picker]; - return YES; - }]; - [sectionItems addObject:overlay]; - - YTSettingsSectionItem *player = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Player") - accessibilityIdentifier:@"YTLiteSectionItem" - detailTextBlock:^NSString *() { - return @"‣"; - } - selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - NSArray *rows = @[ - createSwitchItem(@"Miniplayer", @"miniplayer", &kMiniplayer, selfObject), - createSwitchItem(@"PortraitFullscreen", @"portraitFullscreen", &kPortraitFullscreen, selfObject), - createSwitchItem(@"CopyWithTimestamp", @"copyWithTimestamp", &kCopyWithTimestamp, selfObject), - createSwitchItem(@"DisableAutoplay", @"disableAutoplay", &kDisableAutoplay, selfObject), - createSwitchItem(@"DisableAutoCaptions", @"disableAutoCaptions", &kDisableAutoCaptions, selfObject), - createSwitchItem(@"NoContentWarning", @"noContentWarning", &kNoContentWarning, selfObject), - createSwitchItem(@"ClassicQuality", @"classicQuality", &kClassicQuality, selfObject), - createSwitchItem(@"ExtraSpeedOptions", @"extraSpeedOptions", &kExtraSpeedOptions, selfObject), - createSwitchItem(@"DontSnap2Chapter", @"dontSnapToChapter", &kDontSnapToChapter, selfObject), - createSwitchItem(@"RedProgressBar", @"redProgressBar", &kRedProgressBar, selfObject), - createSwitchItem(@"NoPlayerRemixButton", @"noPlayerRemixButton", &kNoPlayerRemixButton, selfObject), - createSwitchItem(@"NoPlayerClipButton", @"noPlayerClipButton", &kNoPlayerClipButton, selfObject), - createSwitchItem(@"NoPlayerDownloadButton", @"noPlayerDownloadButton", &kNoPlayerDownloadButton, selfObject), - createSwitchItem(@"NoHints", @"noHints", &kNoHints, selfObject), - createSwitchItem(@"NoFreeZoom", @"noFreeZoom", &kNoFreeZoom, selfObject), - createSwitchItem(@"AutoFullscreen", @"autoFullscreen", &kAutoFullscreen, selfObject), - createSwitchItem(@"ExitFullscreen", @"exitFullscreen", &kExitFullscreen, selfObject), - createSwitchItem(@"NoDoubleTap2Seek", @"noDoubleTapToSeek", &kNoDoubleTapToSeek, selfObject) - ]; - - YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Player") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; - [settingsViewController pushViewController:picker]; - return YES; - }]; - [sectionItems addObject:player]; - - YTSettingsSectionItem *shorts = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Shorts") - accessibilityIdentifier:@"YTLiteSectionItem" - detailTextBlock:^NSString *() { - return @"‣"; - } - selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - NSArray *rows = @[ - createSwitchItem(@"ShortsOnlyMode", @"shortsOnlyMode", &kShortsOnlyMode, selfObject), - createSwitchItem(@"HideShorts", @"hideShorts", &kHideShorts, selfObject), - createSwitchItem(@"ShortsProgress", @"shortsProgress", &kShortsProgress, selfObject), - createSwitchItem(@"PinchToFullscreenShorts", @"pinchToFullscreenShorts", &kPinchToFullscreenShorts, selfObject), - createSwitchItem(@"ShortsToRegular", @"shortsToRegular", &kShortsToRegular, selfObject), - createSwitchItem(@"ResumeShorts", @"resumeShorts", &kResumeShorts, selfObject), - createSwitchItem(@"HideShortsLogo", @"hideShortsLogo", &kHideShortsLogo, selfObject), - createSwitchItem(@"HideShortsSearch", @"hideShortsSearch", &kHideShortsSearch, selfObject), - createSwitchItem(@"HideShortsCamera", @"hideShortsCamera", &kHideShortsCamera, selfObject), - createSwitchItem(@"HideShortsMore", @"hideShortsMore", &kHideShortsMore, selfObject), - createSwitchItem(@"HideShortsSubscriptions", @"hideShortsSubscriptions", &kHideShortsSubscriptions, selfObject), - createSwitchItem(@"HideShortsLike", @"hideShortsLike", &kHideShortsLike, selfObject), - createSwitchItem(@"HideShortsDislike", @"hideShortsDislike", &kHideShortsDislike, selfObject), - createSwitchItem(@"HideShortsComments", @"hideShortsComments", &kHideShortsComments, selfObject), - createSwitchItem(@"HideShortsRemix", @"hideShortsRemix", &kHideShortsRemix, selfObject), - createSwitchItem(@"HideShortsShare", @"hideShortsShare", &kHideShortsShare, selfObject), - createSwitchItem(@"HideShortsAvatars", @"hideShortsAvatars", &kHideShortsAvatars, selfObject), - createSwitchItem(@"HideShortsThanks", @"hideShortsThanks", &kHideShortsThanks, selfObject), - createSwitchItem(@"HideShortsSource", @"hideShortsSource", &kHideShortsSource, selfObject), - createSwitchItem(@"HideShortsChannelName", @"hideShortsChannelName", &kHideShortsChannelName, selfObject), - createSwitchItem(@"HideShortsDescription", @"hideShortsDescription", &kHideShortsDescription, selfObject), - createSwitchItem(@"HideShortsAudioTrack", @"hideShortsAudioTrack", &kHideShortsAudioTrack, selfObject), - createSwitchItem(@"NoPromotionCards", @"hideShortsPromoCards", &kHideShortsPromoCards, selfObject) - ]; - YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Shorts") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; - [settingsViewController pushViewController:picker]; - return YES; - }]; - [sectionItems addObject:shorts]; - } - - YTSettingsSectionItem *tabbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Tabbar") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"‣"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(@"RemoveLabels", @"removeLabels", &kRemoveLabels, selfObject), - createSwitchItem(@"RemoveIndicators", @"removeIndicators", &kRemoveIndicators, selfObject), - createSwitchItem(@"ReExplore", @"reExplore", &kReExplore, selfObject), - createSwitchItem(@"AddExplore", @"addExplore", &kAddExplore, selfObject), - createSwitchItem(@"HideShortsTab", @"removeShorts", &kRemoveShorts, selfObject), - createSwitchItem(@"HideSubscriptionsTab", @"removeSubscriptions", &kRemoveSubscriptions, selfObject), - createSwitchItem(@"HideUploadButton", @"removeUploads", &kRemoveUploads, selfObject), - createSwitchItem(@"HideLibraryTab", @"removeLibrary", &kRemoveLibrary, selfObject) + [self switchWithTitle:@"HideAutoplay" key:@"hideAutoplay"], + [self switchWithTitle:@"HideSubs" key:@"hideSubs"], + [self switchWithTitle:@"NoHUDMsgs" key:@"noHUDMsgs"], + [self switchWithTitle:@"HidePrevNext" key:@"hidePrevNext"], + [self switchWithTitle:@"ReplacePrevNext" key:@"replacePrevNext"], + [self switchWithTitle:@"NoDarkBg" key:@"noDarkBg"], + [self switchWithTitle:@"NoEndScreenCards" key:@"endScreenCards"], + [self switchWithTitle:@"NoFullscreenActions" key:@"noFullscreenActions"], + [self switchWithTitle:@"PersistentProgressBar" key:@"persistentProgressBar"], + [self switchWithTitle:@"StockVolumeHUD" key:@"stockVolumeHUD"], + [self switchWithTitle:@"NoRelatedVids" key:@"noRelatedVids"], + [self switchWithTitle:@"NoPromotionCards" key:@"noPromotionCards"], + [self switchWithTitle:@"NoWatermarks" key:@"noWatermarks"], + [self switchWithTitle:@"VideoEndTime" key:@"videoEndTime"], + [self switchWithTitle:@"24hrFormat" key:@"24hrFormat"] + ]; + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Overlay") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; + return YES; + }]; + + [sectionItems addObject:overlay]; + + YTSettingsSectionItem *player = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Player") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + return @"‣"; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSArray *rows = @[ + [self switchWithTitle:@"Miniplayer" key:@"miniplayer"], + [self switchWithTitle:@"PortraitFullscreen" key:@"portraitFullscreen"], + [self switchWithTitle:@"CopyWithTimestamp" key:@"copyWithTimestamp"], + [self switchWithTitle:@"DisableAutoplay" key:@"disableAutoplay"], + [self switchWithTitle:@"DisableAutoCaptions" key:@"disableAutoCaptions"], + [self switchWithTitle:@"NoContentWarning" key:@"noContentWarning"], + [self switchWithTitle:@"ClassicQuality" key:@"classicQuality"], + [self switchWithTitle:@"ExtraSpeedOptions" key:@"extraSpeedOptions"], + [self switchWithTitle:@"DontSnap2Chapter" key:@"dontSnapToChapter"], + [self switchWithTitle:@"NoTwoFingerSnapToChapter" key:@"noTwoFingerSnapToChapter"], + [self switchWithTitle:@"PauseOnOverlay" key:@"pauseOnOverlay"], + [self switchWithTitle:@"RedProgressBar" key:@"redProgressBar"], + [self switchWithTitle:@"NoPlayerRemixButton" key:@"noPlayerRemixButton"], + [self switchWithTitle:@"NoPlayerClipButton" key:@"noPlayerClipButton"], + [self switchWithTitle:@"NoPlayerDownloadButton" key:@"noPlayerDownloadButton"], + [self switchWithTitle:@"NoHints" key:@"noHints"], + [self switchWithTitle:@"NoFreeZoom" key:@"noFreeZoom"], + [self switchWithTitle:@"AutoFullscreen" key:@"autoFullscreen"], + [self switchWithTitle:@"ExitFullscreen" key:@"exitFullscreen"], + [self switchWithTitle:@"NoDoubleTap2Seek" key:@"noDoubleTapToSeek"] + ]; + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Player") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; + return YES; + }]; + + [sectionItems addObject:player]; + + YTSettingsSectionItem *shorts = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Shorts") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + return @"‣"; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSArray *rows = @[ + [self switchWithTitle:@"ShortsOnlyMode" key:@"shortsOnlyMode"], + [self switchWithTitle:@"AutoSkipShorts" key:@"autoSkipShorts"], + [self switchWithTitle:@"HideShorts" key:@"hideShorts"], + [self switchWithTitle:@"ShortsProgress" key:@"shortsProgress"], + [self switchWithTitle:@"PinchToFullscreenShorts" key:@"pinchToFullscreenShorts"], + [self switchWithTitle:@"ShortsToRegular" key:@"shortsToRegular"], + [self switchWithTitle:@"ResumeShorts" key:@"resumeShorts"], + [self switchWithTitle:@"HideShortsLogo" key:@"hideShortsLogo"], + [self switchWithTitle:@"HideShortsSearch" key:@"hideShortsSearch"], + [self switchWithTitle:@"HideShortsCamera" key:@"hideShortsCamera"], + [self switchWithTitle:@"HideShortsMore" key:@"hideShortsMore"], + [self switchWithTitle:@"HideShortsSubscriptions" key:@"hideShortsSubscriptions"], + [self switchWithTitle:@"HideShortsLike" key:@"hideShortsLike"], + [self switchWithTitle:@"HideShortsDislike" key:@"hideShortsDislike"], + [self switchWithTitle:@"HideShortsComments" key:@"hideShortsComments"], + [self switchWithTitle:@"HideShortsRemix" key:@"hideShortsRemix"], + [self switchWithTitle:@"HideShortsShare" key:@"hideShortsShare"], + [self switchWithTitle:@"HideShortsAvatars" key:@"hideShortsAvatars"], + [self switchWithTitle:@"HideShortsThanks" key:@"hideShortsThanks"], + [self switchWithTitle:@"HideShortsSource" key:@"hideShortsSource"], + [self switchWithTitle:@"HideShortsChannelName" key:@"hideShortsChannelName"], + [self switchWithTitle:@"HideShortsDescription" key:@"hideShortsDescription"], + [self switchWithTitle:@"HideShortsAudioTrack" key:@"hideShortsAudioTrack"], + [self switchWithTitle:@"NoPromotionCards" key:@"hideShortsPromoCards"] + ]; + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Shorts") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; + return YES; + }]; + + [sectionItems addObject:shorts]; + } + + YTSettingsSectionItem *tabbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Tabbar") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + return @"‣"; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSArray *rows = @[ + [self switchWithTitle:@"RemoveLabels" key:@"removeLabels"], + [self switchWithTitle:@"RemoveIndicators" key:@"removeIndicators"], + [self switchWithTitle:@"ReExplore" key:@"reExplore"], + [self switchWithTitle:@"AddExplore" key:@"addExplore"], + [self switchWithTitle:@"HideShortsTab" key:@"removeShorts"], + [self switchWithTitle:@"HideSubscriptionsTab" key:@"removeSubscriptions"], + [self switchWithTitle:@"HideUploadButton" key:@"removeUploads"], + [self switchWithTitle:@"HideLibraryTab" key:@"removeLibrary"] ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Tabbar") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; + [sectionItems addObject:tabbar]; - if (kAdvancedMode) { + if (ytlBool(@"advancedMode")) { YTSettingsSectionItem *other = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Other") - accessibilityIdentifier:@"YTLiteSectionItem" - detailTextBlock:^NSString *() { - return @"‣"; - } - selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - NSArray *rows = @[ - createSwitchItem(@"CopyVideoInfo", @"copyVideoInfo", &kCopyVideoInfo, selfObject), - createSwitchItem(@"PostManager", @"postManager", &kPostManager, selfObject), - createSwitchItem(@"SaveProfilePhoto", @"saveProfilePhoto", &kSaveProfilePhoto, selfObject), - createSwitchItem(@"CommentManager", @"commentManager", &kCommentManager, selfObject), - createSwitchItem(@"FixAlbums", @"fixAlbums", &kFixAlbums, selfObject), - createSwitchItem(@"RemovePlayNext", @"removePlayNext", &kRemovePlayNext, selfObject), - createSwitchItem(@"RemoveDownloadMenu", @"removeDownloadMenu", &kRemoveDownloadMenu, selfObject), - createSwitchItem(@"RemoveWatchLaterMenu", @"removeWatchLaterMenu", &kRemoveWatchLaterMenu, selfObject), - createSwitchItem(@"RemoveSaveToPlaylistMenu", @"removeSaveToPlaylistMenu", &kRemoveSaveToPlaylistMenu, selfObject), - createSwitchItem(@"RemoveShareMenu", @"removeShareMenu", &kRemoveShareMenu, selfObject), - createSwitchItem(@"RemoveNotInterestedMenu", @"removeNotInterestedMenu", &kRemoveNotInterestedMenu, selfObject), - createSwitchItem(@"RemoveDontRecommendMenu", @"removeDontRecommendMenu", &kRemoveDontRecommendMenu, selfObject), - createSwitchItem(@"RemoveReportMenu", @"removeReportMenu", &kRemoveReportMenu, selfObject), - createSwitchItem(@"NoContinueWatching", @"noContinueWatching", &kNoContinueWatching, selfObject), - createSwitchItem(@"NoSearchHistory", @"noSearchHistory", &kNoSearchHistory, selfObject), - createSwitchItem(@"NoRelatedWatchNexts", @"noRelatedWatchNexts", &kNoRelatedWatchNexts, selfObject), - createSwitchItem(@"StickSortComments", @"stickSortComments", &kStickSortComments, selfObject), - createSwitchItem(@"HideSortComments", @"hideSortComments", &kHideSortComments, selfObject), - createSwitchItem(@"PlaylistOldMinibar", @"playlistOldMinibar", &kPlaylistOldMinibar, selfObject), - createSwitchItem(@"DisableRTL", @"disableRTL", &kDisableRTL, selfObject) + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + return @"‣"; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSArray *rows = @[ + [self switchWithTitle:@"CopyVideoInfo" key:@"copyVideoInfo"], + [self switchWithTitle:@"PostManager" key:@"postManager"], + [self switchWithTitle:@"SaveProfilePhoto" key:@"saveProfilePhoto"], + [self switchWithTitle:@"CommentManager" key:@"commentManager"], + [self switchWithTitle:@"FixAlbums" key:@"fixAlbums"], + [self switchWithTitle:@"NativeShare" key:@"nativeShare"], + [self switchWithTitle:@"RemovePlayNext" key:@"removePlayNext"], + [self switchWithTitle:@"RemoveDownloadMenu" key:@"removeDownloadMenu"], + [self switchWithTitle:@"RemoveWatchLaterMenu" key:@"removeWatchLaterMenu"], + [self switchWithTitle:@"RemoveSaveToPlaylistMenu" key:@"removeSaveToPlaylistMenu"], + [self switchWithTitle:@"RemoveShareMenu" key:@"removeShareMenu"], + [self switchWithTitle:@"RemoveNotInterestedMenu" key:@"removeNotInterestedMenu"], + [self switchWithTitle:@"RemoveDontRecommendMenu" key:@"removeDontRecommendMenu"], + [self switchWithTitle:@"RemoveReportMenu" key:@"removeReportMenu"], + [self switchWithTitle:@"NoContinueWatching" key:@"noContinueWatching"], + [self switchWithTitle:@"NoSearchHistory" key:@"noSearchHistory"], + [self switchWithTitle:@"NoRelatedWatchNexts" key:@"noRelatedWatchNexts"], + [self switchWithTitle:@"StickSortComments" key:@"stickSortComments"], + [self switchWithTitle:@"HideSortComments" key:@"hideSortComments"], + [self switchWithTitle:@"PlaylistOldMinibar" key:@"playlistOldMinibar"], + [self switchWithTitle:@"DisableRTL" key:@"disableRTL"] ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Other") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; + [sectionItems addObject:other]; [sectionItems addObject:space]; - YTSettingsSectionItem *wifiQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnWiFi") + YTSettingsSectionItem *speed = [YTSettingsSectionItemClass itemWithTitle:LOC(@"HoldToSpeed") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { - NSString *qualityLabel = kWiFiQualityIndex == 1 ? LOC(@"Best") : - kWiFiQualityIndex == 2 ? @"2160p60" : - kWiFiQualityIndex == 3 ? @"2160p" : - kWiFiQualityIndex == 4 ? @"1440p60" : - kWiFiQualityIndex == 5 ? @"1440p" : - kWiFiQualityIndex == 6 ? @"1080p60" : - kWiFiQualityIndex == 7 ? @"1080p" : - kWiFiQualityIndex == 8 ? @"720p60" : - kWiFiQualityIndex == 9 ? @"720p" : - kWiFiQualityIndex == 10 ? @"480p" : - kWiFiQualityIndex == 11 ? @"360p" : - LOC(@"Default"); - - return qualityLabel; + NSArray *speedLabels = @[LOC(@"Disabled"), LOC(@"Default"), @"0.25×", @"0.5×", @"0.75×", @"1.0×", @"1.25×", @"1.5×", @"1.75×", @"2.0×", @"3.0×", @"4.0×", @"5.0×"]; + return speedLabels[ytlInt(@"speedIndex")]; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSMutableArray *rows = [NSMutableArray array]; - NSArray *qualityTitles = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; + NSArray *speedLabels = @[LOC(@"Disable"), LOC(@"Default"), @"0.25×", @"0.5×", @"0.75×", @"1.0×", @"1.25×", @"1.5×", @"1.75×", @"2.0×", @"3.0×", @"4.0×", @"5.0×"]; - for (NSUInteger i = 0; i < qualityTitles.count; i++) { - NSString *title = qualityTitles[i]; + for (NSUInteger i = 0; i < speedLabels.count; i++) { + NSString *title = speedLabels[i]; YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - kWiFiQualityIndex = (int)arg1; [settingsViewController reloadData]; - [self updateIntegerPrefsForKey:@"wifiQualityIndex" intValue:kWiFiQualityIndex]; + ytlSetInt((int)arg1, @"speedIndex"); + return YES; + }]; + + [rows addObject:item]; + } + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"HoldToSpeed") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"speedIndex") parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; + return YES; + }]; + + [sectionItems addObject:speed]; + + YTSettingsSectionItem *autoSpeed = [YTSettingsSectionItemClass itemWithTitle:LOC(@"DefaultPlaybackRate") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + NSArray *speedLabels = @[@"0.25×", @"0.5×", @"0.75×", @"1.0×", @"1.25×", @"1.5×", @"1.75×", @"2.0×", @"3.0×", @"4.0×", @"5.0×"]; + return speedLabels[ytlInt(@"autoSpeedIndex")]; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSMutableArray *rows = [NSMutableArray array]; + NSArray *speedLabels = @[@"0.25×", @"0.5×", @"0.75×", @"1.0×", @"1.25×", @"1.5×", @"1.75×", @"2.0×", @"3.0×", @"4.0×", @"5.0×"]; + + for (NSUInteger i = 0; i < speedLabels.count; i++) { + NSString *title = speedLabels[i]; + YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + [settingsViewController reloadData]; + ytlSetInt((int)arg1, @"autoSpeedIndex"); return YES; }]; [rows addObject:item]; } - YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:kWiFiQualityIndex parentResponder:[self parentResponder]]; + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"DefaultPlaybackRate") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"autoSpeedIndex") parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; + + [sectionItems addObject:autoSpeed]; + + YTSettingsSectionItem *wifiQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnWiFi") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + NSArray *qualityLabels = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; + return qualityLabels[ytlInt(@"wiFiQualityIndex")]; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSMutableArray *rows = [NSMutableArray array]; + NSArray *qualityLabels = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; + + for (NSUInteger i = 0; i < qualityLabels.count; i++) { + NSString *title = qualityLabels[i]; + YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + [settingsViewController reloadData]; + ytlSetInt((int)arg1, @"wiFiQualityIndex"); + return YES; + }]; + + [rows addObject:item]; + } + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"wiFiQualityIndex") parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; + return YES; + }]; + [sectionItems addObject:wifiQuality]; YTSettingsSectionItem *cellQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnCellular") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { - NSString *qualityLabel = kCellQualityIndex == 1 ? LOC(@"Best") : - kCellQualityIndex == 2 ? @"2160p60" : - kCellQualityIndex == 3 ? @"2160p" : - kCellQualityIndex == 4 ? @"1440p60" : - kCellQualityIndex == 5 ? @"1440p" : - kCellQualityIndex == 6 ? @"1080p60" : - kCellQualityIndex == 7 ? @"1080p" : - kCellQualityIndex == 8 ? @"720p60" : - kCellQualityIndex == 9 ? @"720p" : - kCellQualityIndex == 10 ? @"480p" : - kCellQualityIndex == 11 ? @"360p" : - LOC(@"Default"); - - return qualityLabel; + NSArray *qualityLabels = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; + return qualityLabels[ytlInt(@"cellQualityIndex")]; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSMutableArray *rows = [NSMutableArray array]; - NSArray *qualityTitles = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; + NSArray *qualityLabels = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; - for (NSUInteger i = 0; i < qualityTitles.count; i++) { - NSString *title = qualityTitles[i]; + for (NSUInteger i = 0; i < qualityLabels.count; i++) { + NSString *title = qualityLabels[i]; YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - kCellQualityIndex = (int)arg1; [settingsViewController reloadData]; - [self updateIntegerPrefsForKey:@"cellQualityIndex" intValue:kCellQualityIndex]; + ytlSetInt((int)arg1, @"cellQualityIndex"); return YES; }]; + [rows addObject:item]; } - YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:kCellQualityIndex parentResponder:[self parentResponder]]; + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"cellQualityIndex") parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; + [sectionItems addObject:cellQuality]; YTSettingsSectionItem *startup = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Startup") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { - NSString *tabLabel = kPivotIndex == 1 ? LOC(@"Explore") : - kPivotIndex == 2 ? LOC(@"ShortsTab") : - kPivotIndex == 3 ? LOC(@"Subscriptions") : - kPivotIndex == 4 ? LOC(@"Library") : - LOC(@"Home"); - - return tabLabel; + NSArray *tabLabels = @[LOC(@"Home"), LOC(@"Explore"), LOC(@"ShortsTab"), LOC(@"Subscriptions"), LOC(@"Library")]; + return tabLabels[ytlInt(@"pivotIndex")]; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSMutableArray *rows = [NSMutableArray array]; - NSArray *tabTitles = @[LOC(@"Home"), LOC(@"Explore"), LOC(@"ShortsTab"), LOC(@"Subscriptions"), LOC(@"Library")]; + NSArray *tabLabels = @[LOC(@"Home"), LOC(@"Explore"), LOC(@"ShortsTab"), LOC(@"Subscriptions"), LOC(@"Library")]; - for (NSUInteger i = 0; i < tabTitles.count; i++) { - NSString *title = tabTitles[i]; + for (NSUInteger i = 0; i < tabLabels.count; i++) { + NSString *title = tabLabels[i]; YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - if (([title isEqualToString:LOC(@"Explore")] && !kReExplore && !kAddExplore) || - ([title isEqualToString:LOC(@"ShortsTab")] && kRemoveShorts) || - ([title isEqualToString:LOC(@"Subscriptions")] && kRemoveSubscriptions) || - ([title isEqualToString:LOC(@"Library")] && kRemoveLibrary)) { + if (([title isEqualToString:LOC(@"Explore")] && !ytlBool(@"reExplore") && !ytlBool(@"addExplore")) || + ([title isEqualToString:LOC(@"ShortsTab")] && ytlBool(@"removeShorts")) || + ([title isEqualToString:LOC(@"Subscriptions")] && ytlBool(@"removeSubscriptions")) || + ([title isEqualToString:LOC(@"Library")] && ytlBool(@"removeLibrary"))) { YTAlertView *alertView = [%c(YTAlertView) infoDialog]; alertView.title = LOC(@"Warning"); alertView.subtitle = LOC(@"TabIsHidden"); [alertView show]; return NO; } else { - kPivotIndex = (int)arg1; [settingsViewController reloadData]; - [self updateIntegerPrefsForKey:@"pivotIndex" intValue:kPivotIndex]; + ytlSetInt((int)arg1, @"pivotIndex"); return YES; } }]; + [rows addObject:item]; } - YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Startup") pickerSectionTitle:nil rows:rows selectedItemIndex:kPivotIndex parentResponder:[self parentResponder]]; + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Startup") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"pivotIndex") parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; + [sectionItems addObject:startup]; } [sectionItems addObject:space]; - YTSettingsSectionItem *ps = [%c(YTSettingsSectionItem) itemWithTitle:@"PoomSmart" titleDescription:@"YouTube-X, YTNoPremium, YTClassicVideoQuality, YTShortsProgress, YTReExplore, SkipContentWarning, YTAutoFullscreen, YouTubeHeaders" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/PoomSmart/"]]; - }]; - - YTSettingsSectionItem *miro = [%c(YTSettingsSectionItem) itemWithTitle:@"MiRO92" titleDescription:@"YTNoShorts" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/MiRO92/"]]; - }]; - - YTSettingsSectionItem *tonymillion = [%c(YTSettingsSectionItem) itemWithTitle:@"Tony Million" titleDescription:@"Reachability" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/tonymillion/Reachability"]]; - }]; - - YTSettingsSectionItem *stalker = [%c(YTSettingsSectionItem) itemWithTitle:@"Stalker" titleDescription:LOC(@"ChineseSimplified") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/xiangfeidexiaohuo"]]; - }]; - - YTSettingsSectionItem *clement = [%c(YTSettingsSectionItem) itemWithTitle:@"Clement" titleDescription:LOC(@"ChineseTraditional") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://twitter.com/a100900900"]]; - }]; - - YTSettingsSectionItem *balackburn = [%c(YTSettingsSectionItem) itemWithTitle:@"Balackburn" titleDescription:LOC(@"French") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Balackburn"]]; - }]; - - YTSettingsSectionItem *decibelios = [%c(YTSettingsSectionItem) itemWithTitle:@"DeciBelioS" titleDescription:LOC(@"Spanish") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Deci8BelioS"]]; - }]; - - YTSettingsSectionItem *skeids = [%c(YTSettingsSectionItem) itemWithTitle:@"SKEIDs" titleDescription:LOC(@"Japanese") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/SKEIDs"]]; - }]; - - YTSettingsSectionItem *hiepvk = [%c(YTSettingsSectionItem) itemWithTitle:@"Hiepvk" titleDescription:LOC(@"Vietnamese") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/hiepvk"]]; - }]; - - YTSettingsSectionItem *dayanch96 = [%c(YTSettingsSectionItem) itemWithTitle:@"Dayanch96" titleDescription:LOC(@"Developer") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Dayanch96/"]]; - }]; - YTSettingsSectionItem *support = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"SupportDevelopment") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"♡"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { YTDefaultSheetController *sheetController = [%c(YTDefaultSheetController) sheetControllerWithMessage:LOC(@"SupportDevelopment") subMessage:LOC(@"SupportDevelopmentDesc") delegate:nil parentResponder:nil]; YTActionSheetHeaderView *headerView = [sheetController valueForKey:@"_headerView"]; @@ -515,35 +508,63 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://www.buymeacoffee.com/dayanch96"]]; }]]; - UIViewController *currentController = UIApplication.sharedApplication.windows.firstObject.rootViewController; - [sheetController presentFromViewController:currentController.presentedViewController animated:YES completion:nil]; + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"USDT (TRC20)" iconImage:[self resizedImageNamed:@"usdt"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ { + [UIPasteboard generalPasteboard].string = @"TEdKJdKwc1Bbu8Py4um8qPQ6MbproEqNJw"; + [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:[self parentResponder]] send]; + }]]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"BNB Smart Chain (BEP20)" iconImage:[self resizedImageNamed:@"bnb"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ { + [UIPasteboard generalPasteboard].string = @"0xc6f9fddb30ce10d70e6497950f44c8e10b72bcd6"; + [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:[self parentResponder]] send]; + }]]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"Boosty" iconImage:[self resizedImageNamed:@"boosty"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ { + [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://boosty.to/dayanch96"]]; + }]]; + + [sheetController presentFromViewController:[%c(YTUIUtils) topViewControllerForPresenting] animated:YES completion:nil]; return YES; }]; - YTSettingsSectionItem *cache = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ClearCache") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return GetCacheSize(); } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; - [[NSFileManager defaultManager] removeItemAtPath:cachePath error:nil]; - }); - [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Done") firstResponder:[self parentResponder]] send]; + YTSettingsSectionItem *thanks = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Contributors") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + return @"‣"; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSArray *rows = @[ + [self linkWithTitle:@"Dayanch96" description:LOC(@"Developer") link:@"https://github.com/Dayanch96/"], + [self linkWithTitle:@"Dan Pashin" description:LOC(@"SpecialThanks") link:@"https://github.com/danpashin/"], + space, + [self linkWithTitle:@"Stalker" description:LOC(@"ChineseSimplified") link:@"https://github.com/xiangfeidexiaohuo"], + [self linkWithTitle:@"Clement" description:LOC(@"ChineseTraditional") link:@"https://twitter.com/a100900900"], + [self linkWithTitle:@"Balackburn" description:LOC(@"French") link:@"https://github.com/Balackburn"], + [self linkWithTitle:@"DeciBelioS" description:LOC(@"Spanish") link:@"https://github.com/Deci8BelioS"], + [self linkWithTitle:@"SKEIDs" description:LOC(@"Japanese") link:@"https://github.com/SKEIDs"], + [self linkWithTitle:@"Hiepvk" description:LOC(@"Vietnamese") link:@"https://github.com/hiepvk"] + ]; + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:LOC(@"Credits") rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; return YES; }]; - YTSettingsSectionItem *reset = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ResetSettings") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{ - NSString *prefsPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"YTLite.plist"]; - [[NSFileManager defaultManager] removeItemAtPath:prefsPath error:nil]; + YTSettingsSectionItem *sources = [YTSettingsSectionItemClass itemWithTitle:LOC(@"OpenSourceLibs") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + return @"‣"; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSArray *rows = @[ + [self linkWithTitle:@"PoomSmart" description:@"YouTube-X, YTNoPremium, YTClassicVideoQuality, YTShortsProgress, YTReExplore, SkipContentWarning, YTAutoFullscreen, YouTubeHeaders" link:@"https://github.com/PoomSmart/"], + [self linkWithTitle:@"MiRO92" description:@"YTNoShorts" link:@"https://github.com/MiRO92/YTNoShorts"], + [self linkWithTitle:@"Tony Million" description:@"Reachability" link:@"https://github.com/tonymillion/Reachability"], + [self linkWithTitle:@"jkhsjdhjs" description:@"YouTube Native Share" link:@"https://github.com/jkhsjdhjs/youtube-native-share"] + ]; - [[UIApplication sharedApplication] performSelector:@selector(suspend)]; - [NSThread sleepForTimeInterval:1.0]; - exit(0); - } - actionTitle:LOC(@"Yes") - cancelTitle:LOC(@"No")]; - alertView.title = LOC(@"Warning"); - alertView.subtitle = LOC(@"ResetMessage"); - [alertView show]; + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:LOC(@"Credits") rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; return YES; }]; @@ -553,13 +574,49 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B return @(OS_STRINGIFY(TWEAK_VERSION)); } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - NSArray *rows = @[ps, miro, tonymillion, dayanch96, stalker, clement, balackburn, decibelios, skeids, hiepvk, space, createSwitchItem(@"Advanced", @"advancedMode", &kAdvancedMode, selfObject), cache, reset]; + NSArray *rows = @[ + [self switchWithTitle:@"Advanced" key:@"advancedMode"], - YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:LOC(@"Credits") rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; + [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ClearCache") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return GetCacheSize(); } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; + [[NSFileManager defaultManager] removeItemAtPath:cachePath error:nil]; + }); + + [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Done") firstResponder:[self parentResponder]] send]; + + return YES; + }], + + [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ResetSettings") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{ + [YTLUserDefaults resetUserDefaults]; + + [[UIApplication sharedApplication] performSelector:@selector(suspend)]; + [NSThread sleepForTimeInterval:1.0]; + exit(0); + } + actionTitle:LOC(@"Yes") + cancelTitle:LOC(@"No")]; + alertView.title = LOC(@"Warning"); + alertView.subtitle = LOC(@"ResetMessage"); + [alertView show]; + + return YES; + }] + ]; + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; + + [sectionItems addObject:thanks]; + + [sectionItems addObject:sources]; + [sectionItems addObject:support]; + [sectionItems addObject:version]; BOOL isNew = [settingsViewController respondsToSelector:@selector(setSectionItems:forCategory:title:icon:titleDescription:headerHidden:)]; @@ -581,7 +638,7 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(32, 32)]; UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { UIView *imageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; - UIImageView *iconImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[YTLiteBundle() pathForResource:iconName ofType:@"png"]]]; + UIImageView *iconImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[NSBundle.ytl_defaultBundle pathForResource:iconName ofType:@"png"]]]; iconImageView.contentMode = UIViewContentModeScaleAspectFit; iconImageView.clipsToBounds = YES; iconImageView.frame = imageView.bounds; diff --git a/Utils/NSBundle+YTLite.h b/Utils/NSBundle+YTLite.h new file mode 100644 index 0000000..ccc7dee --- /dev/null +++ b/Utils/NSBundle+YTLite.h @@ -0,0 +1,13 @@ +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSBundle (YTLite) + +// Returns YTLite default bundle. Supports rootless if defined in compilation parameters +@property (class, nonatomic, readonly) NSBundle *ytl_defaultBundle; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Utils/NSBundle+YTLite.m b/Utils/NSBundle+YTLite.m new file mode 100644 index 0000000..f6ae24c --- /dev/null +++ b/Utils/NSBundle+YTLite.m @@ -0,0 +1,19 @@ +#import "NSBundle+YTLite.h" + +@implementation NSBundle (YTLite) + ++ (NSBundle *)ytl_defaultBundle { + static NSBundle *bundle = nil; + static dispatch_once_t onceToken; + + dispatch_once(&onceToken, ^{ + NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"YTLite" ofType:@"bundle"]; + NSString *rootlessBundlePath = ROOT_PATH_NS("/Library/Application Support/YTLite.bundle"); + + bundle = [NSBundle bundleWithPath:tweakBundlePath ?: rootlessBundlePath]; + }); + + return bundle; +} + +@end \ No newline at end of file diff --git a/Reachability.h b/Utils/Reachability.h similarity index 100% rename from Reachability.h rename to Utils/Reachability.h diff --git a/Reachability.m b/Utils/Reachability.m similarity index 100% rename from Reachability.m rename to Utils/Reachability.m diff --git a/Utils/YTLUserDefaults.h b/Utils/YTLUserDefaults.h new file mode 100644 index 0000000..e9f91a4 --- /dev/null +++ b/Utils/YTLUserDefaults.h @@ -0,0 +1,15 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface YTLUserDefaults : NSUserDefaults + +@property (class, readonly, strong) YTLUserDefaults *standardUserDefaults; + +- (void)reset; + ++ (void)resetUserDefaults; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Utils/YTLUserDefaults.m b/Utils/YTLUserDefaults.m new file mode 100644 index 0000000..f083932 --- /dev/null +++ b/Utils/YTLUserDefaults.m @@ -0,0 +1,40 @@ +#import "YTLUserDefaults.h" + +@implementation YTLUserDefaults + +static NSString *const kDefaultsSuiteName = @"com.dvntm.ytlite"; + ++ (YTLUserDefaults *)standardUserDefaults { + static dispatch_once_t onceToken; + static YTLUserDefaults *defaults = nil; + + dispatch_once(&onceToken, ^{ + defaults = [[self alloc] initWithSuiteName:kDefaultsSuiteName]; + [defaults registerDefaults]; + }); + + return defaults; +} + +- (void)reset { + [self removePersistentDomainForName:kDefaultsSuiteName]; +} + +- (void)registerDefaults { + [self registerDefaults:@{ + @"noAds": @YES, + @"backgroundPlayback": @YES, + @"removeUploads": @YES, + @"speedIndex": @1, + @"autoSpeedIndex": @3, + @"wiFiQualityIndex": @0, + @"cellQualityIndex": @0, + @"pivotIndex": @0 + }]; +} + ++ (void)resetUserDefaults { + [[self standardUserDefaults] reset]; +} + +@end diff --git a/YTLite.h b/YTLite.h index cb9fdcb..806d815 100644 --- a/YTLite.h +++ b/YTLite.h @@ -1,124 +1,19 @@ #import #import -#import #import -#import "Reachability.h" +#import +#import "Utils/NSBundle+YTLite.h" +#import "Utils/YTLUserDefaults.h" +#import "Utils/Reachability.h" #import "YouTubeHeaders.h" -static inline NSBundle *YTLiteBundle() { - static NSBundle *bundle = nil; - static dispatch_once_t onceToken; +#define LOC(key) [NSBundle.ytl_defaultBundle localizedStringForKey:key value:nil table:nil] - dispatch_once(&onceToken, ^{ - NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"YTLite" ofType:@"bundle"]; - NSString *rootlessBundlePath = ROOT_PATH_NS("/Library/Application Support/YTLite.bundle"); +#define ytlBool(key) [[YTLUserDefaults standardUserDefaults] boolForKey:key] +#define ytlInt(key) [[YTLUserDefaults standardUserDefaults] integerForKey:key] - bundle = [NSBundle bundleWithPath:tweakBundlePath ?: rootlessBundlePath]; - }); - - return bundle; -} - -static inline NSString *LOC(NSString *key) { - return [YTLiteBundle() localizedStringForKey:key value:nil table:nil]; -} - -BOOL kNoAds; -BOOL kBackgroundPlayback; -BOOL kNoCast; -BOOL kNoNotifsButton; -BOOL kNoSearchButton; -BOOL kNoVoiceSearchButton; -BOOL kStickyNavbar; -BOOL kNoSubbar; -BOOL kNoYTLogo; -BOOL kHideAutoplay; -BOOL kHideSubs; -BOOL kNoHUDMsgs; -BOOL kHidePrevNext; -BOOL kReplacePrevNext; -BOOL kNoDarkBg; -BOOL kEndScreenCards; -BOOL kNoFullscreenActions; -BOOL kPersistentProgressBar; -BOOL kNoRelatedVids; -BOOL kNoPromotionCards; -BOOL kNoWatermarks; -BOOL kMiniplayer; -BOOL kPortraitFullscreen; -BOOL kCopyWithTimestamp; -BOOL kDisableAutoplay; -BOOL kDisableAutoCaptions; -BOOL kNoContentWarning; -BOOL kClassicQuality; -BOOL kExtraSpeedOptions; -BOOL kDontSnapToChapter; -BOOL kRedProgressBar; -BOOL kNoPlayerRemixButton; -BOOL kNoPlayerClipButton; -BOOL kNoPlayerDownloadButton; -BOOL kNoHints; -BOOL kNoFreeZoom; -BOOL kAutoFullscreen; -BOOL kExitFullscreen; -BOOL kNoDoubleTapToSeek; -BOOL kShortsOnlyMode; -BOOL kHideShorts; -BOOL kShortsProgress; -BOOL kPinchToFullscreenShorts; -BOOL kShortsToRegular; -BOOL kResumeShorts; -BOOL kHideShortsLogo; -BOOL kHideShortsSearch; -BOOL kHideShortsCamera; -BOOL kHideShortsMore; -BOOL kHideShortsSubscriptions; -BOOL kHideShortsLike; -BOOL kHideShortsDislike; -BOOL kHideShortsComments; -BOOL kHideShortsRemix; -BOOL kHideShortsShare; -BOOL kHideShortsAvatars; -BOOL kHideShortsThanks; -BOOL kHideShortsSource; -BOOL kHideShortsChannelName; -BOOL kHideShortsDescription; -BOOL kHideShortsAudioTrack; -BOOL kHideShortsPromoCards; -BOOL kRemoveLabels; -BOOL kRemoveIndicators; -BOOL kReExplore; -BOOL kAddExplore; -BOOL kRemoveShorts; -BOOL kRemoveSubscriptions; -BOOL kRemoveUploads; -BOOL kRemoveLibrary; -BOOL kCopyVideoInfo; -BOOL kPostManager; -BOOL kSaveProfilePhoto; -BOOL kCommentManager; -BOOL kSavePost; -BOOL kFixAlbums; -BOOL kRemovePlayNext; -BOOL kRemoveDownloadMenu; -BOOL kRemoveWatchLaterMenu; -BOOL kRemoveSaveToPlaylistMenu; -BOOL kRemoveShareMenu; -BOOL kRemoveNotInterestedMenu; -BOOL kRemoveDontRecommendMenu; -BOOL kRemoveReportMenu; -BOOL kNoContinueWatching; -BOOL kNoSearchHistory; -BOOL kNoRelatedWatchNexts; -BOOL kStickSortComments; -BOOL kHideSortComments; -BOOL kPlaylistOldMinibar; -BOOL kDisableRTL; -BOOL kAdvancedMode; -BOOL kAdvancedModeReminder; -int kWiFiQualityIndex; -int kCellQualityIndex; -int kPivotIndex; +#define ytlSetBool(value, key) [[YTLUserDefaults standardUserDefaults] setBool:(value) forKey:(key)] +#define ytlSetInt(value, key) [[YTLUserDefaults standardUserDefaults] setInteger:(value) forKey:(key)] @interface YTTouchFeedbackController : YTCollectionViewCell @property (nonatomic, strong, readwrite) UIColor *feedbackColor; @@ -130,13 +25,12 @@ int kPivotIndex; @interface YTSettingsCell () - (void)setIndicatorIcon:(int)icon; +- (void)setTitleDescription:(id)titleDescription; @end @interface YTSettingsSectionItemManager (Custom) -@property (nonatomic, strong) NSMutableDictionary *prefs; -@property (nonatomic, strong) NSString *prefsPath; -- (void)updatePrefsForKey:(NSString *)key enabled:(BOOL)enabled; -- (void)updateIntegerPrefsForKey:(NSString *)key intValue:(NSInteger)intValue; +- (YTSettingsSectionItem *)switchWithTitle:(NSString *)title key:(NSString *)key; +- (YTSettingsSectionItem *)linkWithTitle:(NSString *)title description:(NSString *)description link:(NSString *)link; - (UIImage *)resizedImageNamed:(NSString *)iconName; @end @@ -147,6 +41,7 @@ int kPivotIndex; @interface YTQTMButton () @property (nonatomic, strong, readwrite) YTIButtonRenderer *buttonRenderer; - (void)setSizeWithPaddingAndInsets:(BOOL)sizeWithPaddingAndInsets; +- (BOOL)yt_isVisible; @end @interface YTRightNavigationButtons : UIView @@ -163,7 +58,15 @@ int kPivotIndex; @interface YTChipCloudCell : UICollectionViewCell @end +@interface YTHeaderContentComboViewController : UIViewController +- (void)refreshPivotBar; +@end + +@interface YTPivotBarViewController : UIViewController +@end + @interface YTAppViewController : UIViewController +@property (nonatomic, assign, readonly) YTPivotBarViewController *pivotBarViewController; - (void)hidePivotBar; - (void)showPivotBar; @end @@ -172,8 +75,9 @@ int kPivotIndex; - (void)selectItemWithPivotIdentifier:(id)pivotIndentifier; @end -@interface YTPivotBarViewController : UIViewController +@interface YTPivotBarViewController () @property (nonatomic, weak, readwrite) YTAppViewController *parentViewController; +@property (nonatomic, copy, readwrite) NSString *selectedPivotIdentifier; - (YTPivotBarView *)pivotBarView; - (void)selectItemWithPivotIdentifier:(id)pivotIndentifier; @end @@ -182,31 +86,17 @@ int kPivotIndex; @property (nonatomic, strong, readwrite) YTIPivotBarItemRenderer *renderer; @property (nonatomic, weak, readwrite) YTPivotBarViewController *delegate; @property (nonatomic, strong, readwrite) YTQTMButton *navigationButton; +- (void)manageTab:(UILongPressGestureRecognizer *)gesture; @end @interface YTScrollableNavigationController : UINavigationController @property (nonatomic, weak, readwrite) YTAppViewController *parentViewController; @end -@interface YTReelWatchRootViewController : UIViewController -@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController; -@end - @interface YTTabsViewController : UIViewController @property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController; @end -@interface YTReelWatchPlaybackOverlayView : UIView -@end - -@interface YTReelContentView : UIView -@property (nonatomic, assign, readonly) YTReelWatchPlaybackOverlayView *playbackOverlay; -@end - -@interface YTShortsPlayerViewController : UIViewController -@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController; -@end - @interface YTIVideoDetails : NSObject @property (nonatomic, copy, readwrite) NSString *title; @property (nonatomic, copy, readwrite) NSString *shortDescription; @@ -229,7 +119,13 @@ int kPivotIndex; @property (nonatomic, assign, readonly) int singleDimensionResolution; @end +@interface YTSingleVideoTime : NSObject +@property (nonatomic, assign, readonly) CGFloat time; +@end + @interface YTSingleVideoController : NSObject +@property (nonatomic, assign, readonly) float playbackRate; +@property (nonatomic, assign, readonly) CGFloat totalMediaTime; @property (nonatomic, assign, readonly) NSArray *selectableVideoFormats; - (void)setVideoFormatConstraint:(MLQuickMenuVideoQualitySettingFormatConstraint *)formatConstraint; @end @@ -237,20 +133,55 @@ int kPivotIndex; @interface YTPlayerViewController : UIViewController @property (nonatomic, assign, readonly) YTPlayerResponse *playerResponse; @property (nonatomic, assign, readonly) YTSingleVideoController *activeVideo; +@property (nonatomic, weak, readwrite) UIViewController *activeVideoPlayerOverlay; @property (nonatomic, weak, readwrite) UIViewController *parentViewController; -@property (readonly, nonatomic) NSString *contentVideoID; -- (void)setActiveCaptionTrack:(id)arg1; +@property (nonatomic, weak, readwrite) UIViewController *UIDelegate; +@property (nonatomic, readonly) NSString *contentVideoID; +- (void)setActiveCaptionTrack:(id)track; +- (void)setPlaybackRate:(CGFloat)rate; - (void)shortsToRegular; - (void)autoFullscreen; - (void)turnOffCaptions; +- (void)setAutoSpeed; - (void)autoQuality; +- (void)play; +- (void)pause; @end @interface YTPlayerView : UIView @property (nonatomic, weak, readwrite) YTPlayerViewController *playerViewDelegate; +@property (nonatomic, strong, readwrite) UIView *overlayView; +@end + +@interface YTMainAppControlsOverlayView : UIView +@property (nonatomic, strong, readwrite) YTPlayerViewController *playerViewController; +@end + +@interface YTReelWatchRootViewController : UIViewController +@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController; +@end + +@interface YTReelWatchPlaybackOverlayView : UIView +@end + +@interface YTReelContentView : UIView +@property (nonatomic, assign, readonly) YTReelWatchPlaybackOverlayView *playbackOverlay; - (void)turnShortsOnlyModeOff:(UILongPressGestureRecognizer *)gesture; @end +@interface YTReelPlayerViewController : UIViewController +@property (nonatomic, strong, readwrite) YTPlayerViewController *player; +- (void)reelContentViewRequestsAdvanceToNextVideo:(id)video; +@end + +@interface YTShortsPlayerViewController : YTReelPlayerViewController +@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController; +@end + +@interface YTPivotBarViewController () +@property (nonatomic, weak, readwrite) YTShortsPlayerViewController *scrubberDelegate; +@end + @interface YTEngagementPanelIdentifier : NSObject @property (nonatomic, copy, readonly) NSString *identifierString; @end @@ -282,7 +213,8 @@ int kPivotIndex; - (void)didTapCopyInfoButton:(UIButton *)sender; @end -@interface YTSegmentableInlinePlayerBarView +@interface YTSegmentableInlinePlayerBarView : UIView +@property (nonatomic, assign, readonly) CGFloat totalTime; @property (nonatomic, assign, readwrite) BOOL enableSnapToChapter; @end @@ -290,7 +222,7 @@ int kPivotIndex; - (void)confirmAlertDidPressConfirm; @end -@interface YTReelPlayerButton : UIButton +@interface YTReelPlayerButton : YTQTMButton @end @interface ELMCellNode @@ -304,12 +236,6 @@ int kPivotIndex; - (void)removeCellsAtIndexPath:(NSIndexPath *)indexPath; @end -// @interface YTReelWatchPlaybackOverlayView : UIView -// @end - -// @interface YTReelWatchHeaderView : UIView -// @end - @interface YTReelTransparentStackView : UIStackView @end @@ -354,11 +280,6 @@ int kPivotIndex; - (void)commentManager:(UILongPressGestureRecognizer *)sender; @end -// @interface MLHAMQueuePlayer : NSObject -// @property id playerEventCenter; -// -(void)setRate:(float)rate; -// @end - @interface YTVarispeedSwitchControllerOption : NSObject - (id)initWithTitle:(NSString *)title rate:(float)rate; @end @@ -367,17 +288,42 @@ int kPivotIndex; - (void)addActionForOption:(YTVarispeedSwitchControllerOption *)option; @end -@interface HAMPlayerInternal : NSObject -- (void)setRate:(float)rate; +@interface YTLabel : UILabel +- (void)setFontAttributes:(id)attributes text:(NSString *)text; @end -@interface MLPlayerEventCenter : NSObject -- (void)broadcastRateChange:(float)rate; +@interface YTInlinePlayerScrubUserEducationView : UIView +@property (nonatomic, assign, readwrite) NSUInteger labelType; +- (YTLabel *)userEducationLabel; +- (void)setVisible:(BOOL)visible; @end @interface YTMainAppVideoPlayerOverlayViewController : UIViewController +@property (nonatomic, weak, readwrite) YTPlayerViewController *parentViewController; +- (CGFloat)currentPlaybackRate; +@end + +@interface YTInlinePlayerBarContainerView : UIView +@property (nonatomic, strong, readwrite) YTLabel *durationLabel; +@property (nonatomic, strong, readwrite) NSString *endTimeString; +@end + +@interface YTMainAppVideoPlayerOverlayView : UIView +@property (nonatomic, assign, readonly) YTInlinePlayerScrubUserEducationView *scrubUserEducationView; +@property (nonatomic, strong, readwrite) YTInlinePlayerBarContainerView *playerBar; +@property (nonatomic, weak, readwrite) YTMainAppVideoPlayerOverlayViewController *delegate; +- (void)speedmasterYtLite:(UILongPressGestureRecognizer *)sender; +@end + +@interface YTMainAppVideoPlayerOverlayViewController () +@property (nonatomic, assign, readonly) YTMainAppVideoPlayerOverlayView * videoPlayerOverlayView; @property (readonly, nonatomic) CGFloat mediaTime; @property (readonly, nonatomic) NSString *videoID; +- (void)setPlaybackRate:(CGFloat)rate; +- (CGFloat)currentPlaybackRate; +@end + +@interface YTSpeedmasterController : NSObject @end @interface YTFormattedStringLabel : UILabel @@ -397,6 +343,7 @@ int kPivotIndex; - (void)addAction:(YTActionSheetAction *)action; - (void)presentFromView:(UIView *)view animated:(BOOL)animated completion:(void(^)(void))completion; - (void)presentFromViewController:(UIViewController *)vc animated:(BOOL)animated completion:(void(^)(void))completion; +- (void)dismissViewControllerAnimated:(BOOL)animated completion:(void(^)(void))completion; + (instancetype)sheetControllerWithParentResponder:(id)parentResponder; + (instancetype)sheetControllerWithParentResponder:(id)parentResponder forcedSheetStyle:(NSInteger)style; diff --git a/YTLite.x b/YTLite.x index 0334f74..1f7bdb9 100644 --- a/YTLite.x +++ b/YTLite.x @@ -7,45 +7,45 @@ static UIImage *YTImageNamed(NSString *imageName) { // YouTube-X (https://github.com/PoomSmart/YouTube-X/) // Background Playback %hook YTIPlayabilityStatus -- (BOOL)isPlayableInBackground { return kBackgroundPlayback ? YES : NO; } +- (BOOL)isPlayableInBackground { return ytlBool(@"backgroundPlayback") ? YES : NO; } %end %hook MLVideo -- (BOOL)playableInBackground { return kBackgroundPlayback ? YES : NO; } +- (BOOL)playableInBackground { return ytlBool(@"backgroundPlayback") ? YES : NO; } %end // Disable Ads %hook YTIPlayerResponse -- (BOOL)isMonetized { return kNoAds ? NO : YES; } +- (BOOL)isMonetized { return ytlBool(@"noAds") ? NO : YES; } %end %hook YTDataUtils -+ (id)spamSignalsDictionary { return kNoAds ? nil : %orig; } -+ (id)spamSignalsDictionaryWithoutIDFA { return kNoAds ? nil : %orig; } ++ (id)spamSignalsDictionary { return ytlBool(@"noAds") ? nil : %orig; } ++ (id)spamSignalsDictionaryWithoutIDFA { return ytlBool(@"noAds") ? nil : %orig; } %end %hook YTAdsInnerTubeContextDecorator -- (void)decorateContext:(id)context { if (!kNoAds) %orig; } +- (void)decorateContext:(id)context { if (!ytlBool(@"noAds")) %orig; } %end %hook YTAccountScopedAdsInnerTubeContextDecorator -- (void)decorateContext:(id)context { if (!kNoAds) %orig; } +- (void)decorateContext:(id)context { if (!ytlBool(@"noAds")) %orig; } %end %hook YTIElementRenderer - (NSData *)elementData { - if (self.hasCompatibilityOptions && self.compatibilityOptions.hasAdLoggingData && kNoAds) return nil; + if (self.hasCompatibilityOptions && self.compatibilityOptions.hasAdLoggingData && ytlBool(@"noAds")) return nil; NSString *description = [self description]; NSArray *ads = @[@"brand_promo", @"product_carousel", @"product_engagement_panel", @"product_item", @"text_search_ad", @"text_image_button_layout", @"carousel_headered_layout", @"carousel_footered_layout", @"square_image_layout", @"landscape_image_wide_button_layout", @"feed_ad_metadata"]; - if (kNoAds && [ads containsObject:description]) { + if (ytlBool(@"noAds") && [ads containsObject:description]) { return [NSData data]; } NSArray *shortsToRemove = @[@"shorts_shelf.eml", @"shorts_video_cell.eml", @"6Shorts"]; for (NSString *shorts in shortsToRemove) { - if (kHideShorts && [description containsString:shorts] && ![description containsString:@"history*"]) { + if (ytlBool(@"hideShorts") && [description containsString:shorts] && ![description containsString:@"history*"]) { return nil; } } @@ -56,7 +56,7 @@ static UIImage *YTImageNamed(NSString *imageName) { %hook YTSectionListViewController - (void)loadWithModel:(YTISectionListRenderer *)model { - if (kNoAds) { + if (ytlBool(@"noAds")) { NSMutableArray *contentsArray = model.contentsArray; NSIndexSet *removeIndexes = [contentsArray indexesOfObjectsPassingTest:^BOOL(YTISectionListSupportedRenderers *renderers, NSUInteger idx, BOOL *stop) { YTIItemSectionRenderer *sectionRenderer = renderers.itemSectionRenderer; @@ -106,13 +106,13 @@ static UIImage *YTImageNamed(NSString *imageName) { // Navbar Stuff // Disable Cast %hook MDXPlaybackRouteButtonController -- (BOOL)isPersistentCastIconEnabled { return kNoCast ? NO : YES; } -- (void)updateRouteButton:(id)arg1 { if (!kNoCast) %orig; } -- (void)updateAllRouteButtons { if (!kNoCast) %orig; } +- (BOOL)isPersistentCastIconEnabled { return ytlBool(@"noCast") ? NO : YES; } +- (void)updateRouteButton:(id)arg1 { if (!ytlBool(@"noCast")) %orig; } +- (void)updateAllRouteButtons { if (!ytlBool(@"noCast")) %orig; } %end %hook YTSettings -- (void)setDisableMDXDeviceDiscovery:(BOOL)arg1 { %orig(kNoCast); } +- (void)setDisableMDXDeviceDiscovery:(BOOL)arg1 { %orig(ytlBool(@"noCast")); } %end // Hide Navigation Bar Buttons @@ -120,12 +120,12 @@ static UIImage *YTImageNamed(NSString *imageName) { - (void)layoutSubviews { %orig; - if (kNoNotifsButton) self.notificationButton.hidden = YES; - if (kNoSearchButton) self.searchButton.hidden = YES; + if (ytlBool(@"noNotifsButton")) self.notificationButton.hidden = YES; + if (ytlBool(@"noSearchButton")) self.searchButton.hidden = YES; for (UIView *subview in self.subviews) { - if (kNoVoiceSearchButton && [subview.accessibilityLabel isEqualToString:NSLocalizedString(@"search.voice.access", nil)]) subview.hidden = YES; - if (kNoCast && [subview.accessibilityIdentifier isEqualToString:@"id.mdx.playbackroute.button"]) subview.hidden = YES; + if (ytlBool(@"noVoiceSearchButton") && [subview.accessibilityLabel isEqualToString:NSLocalizedString(@"search.voice.access", nil)]) subview.hidden = YES; + if (ytlBool(@"noCast") && [subview.accessibilityIdentifier isEqualToString:@"id.mdx.playbackroute.button"]) subview.hidden = YES; } } %end @@ -134,75 +134,106 @@ static UIImage *YTImageNamed(NSString *imageName) { - (void)viewDidLoad { %orig; - if (kNoVoiceSearchButton) [self setValue:@(NO) forKey:@"_isVoiceSearchAllowed"]; + if (ytlBool(@"noVoiceSearchButton")) [self setValue:@(NO) forKey:@"_isVoiceSearchAllowed"]; } -- (void)setSuggestions:(id)arg1 { if (!kNoSearchHistory) %orig; } +- (void)setSuggestions:(id)arg1 { if (!ytlBool(@"noSearchHistory")) %orig; } %end %hook YTPersonalizedSuggestionsCacheProvider -- (id)activeCache { return kNoSearchHistory ? nil : %orig; } +- (id)activeCache { return ytlBool(@"noSearchHistory") ? nil : %orig; } %end // Remove Videos Section Under Player %hook YTWatchNextResultsViewController - (void)setVisibleSections:(NSInteger)arg1 { - arg1 = (kNoRelatedWatchNexts) ? 1 : arg1; + arg1 = (ytlBool(@"noRelatedWatchNexts")) ? 1 : arg1; %orig(arg1); } %end %hook YTHeaderView // Stick Navigation bar -- (BOOL)stickyNavHeaderEnabled { return kStickyNavbar ? YES : %orig; } +- (BOOL)stickyNavHeaderEnabled { return ytlBool(@"stickyNavbar") ? YES : %orig; } // Hide YouTube Logo -- (void)setCustomTitleView:(UIView *)customTitleView { if (!kNoYTLogo) %orig; } -- (void)setTitle:(NSString *)title { kNoYTLogo ? %orig(@"") : %orig; } +- (void)setCustomTitleView:(UIView *)customTitleView { if (!ytlBool(@"noYTLogo")) %orig; } +- (void)setTitle:(NSString *)title { ytlBool(@"noYTLogo") ? %orig(@"") : %orig; } +%end + +// Premium logo +%hook UIImageView +- (void)setImage:(UIImage *)image { + if (!ytlBool(@"premiumYTLogo")) return %orig; + + NSString *resourcesPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Frameworks/Module_Framework.framework/Innertube_Resources.bundle"]; + NSBundle *frameworkBundle = [NSBundle bundleWithPath:resourcesPath]; + + if ([[image description] containsString:@"Resources: youtube_logo)"]) { + image = [UIImage imageNamed:@"youtube_premium_logo" inBundle:frameworkBundle compatibleWithTraitCollection:nil]; + } + + else if ([[image description] containsString:@"Resources: youtube_logo_dark)"]) { + image = [UIImage imageNamed:@"youtube_premium_logo_white" inBundle:frameworkBundle compatibleWithTraitCollection:nil]; + } + + %orig(image); +} %end // Remove Subbar %hook YTMySubsFilterHeaderView -- (void)setChipFilterView:(id)arg1 { if (!kNoSubbar) %orig; } +- (void)setChipFilterView:(id)arg1 { if (!ytlBool(@"noSubbar")) %orig; } %end %hook YTHeaderContentComboView -- (void)enableSubheaderBarWithView:(id)arg1 { if (!kNoSubbar) %orig; } -- (void)setFeedHeaderScrollMode:(int)arg1 { kNoSubbar ? %orig(0) : %orig; } +- (void)enableSubheaderBarWithView:(id)arg1 { if (!ytlBool(@"noSubbar")) %orig; } +- (void)setFeedHeaderScrollMode:(int)arg1 { ytlBool(@"noSubbar") ? %orig(0) : %orig; } %end %hook YTChipCloudCell - (void)layoutSubviews { - if (self.superview && kNoSubbar) { + if (self.superview && ytlBool(@"noSubbar")) { [self removeFromSuperview]; } %orig; } %end -// Hide Autoplay Switch and Subs Button %hook YTMainAppControlsOverlayView -- (void)setAutoplaySwitchButtonRenderer:(id)arg1 { if (!kHideAutoplay) %orig; } -- (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { kHideSubs ? %orig(NO) : %orig; } +// Hide Autoplay Switch +- (void)setAutoplaySwitchButtonRenderer:(id)arg1 { if (!ytlBool(@"hideAutoplay")) %orig; } + +// Hide Subs Button +- (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { ytlBool(@"hideSubs") ? %orig(NO) : %orig; } + +// Pause On Overlay +- (void)setOverlayVisible:(BOOL)visible { + %orig; + + if (!ytlBool(@"pauseOnOverlay")) return; + + visible ? [self.playerViewController pause] : [self.playerViewController play]; +} %end // Remove HUD Messages %hook YTHUDMessageView -- (id)initWithMessage:(id)arg1 dismissHandler:(id)arg2 { return kNoHUDMsgs ? nil : %orig; } +- (id)initWithMessage:(id)arg1 dismissHandler:(id)arg2 { return ytlBool(@"noHUDMsgs") ? nil : %orig; } %end %hook YTColdConfig // Hide Next & Previous buttons -- (BOOL)removeNextPaddleForSingletonVideos { return kHidePrevNext ? YES : %orig; } -- (BOOL)removePreviousPaddleForSingletonVideos { return kHidePrevNext ? YES : %orig; } +- (BOOL)removeNextPaddleForSingletonVideos { return ytlBool(@"hidePrevNext") ? YES : %orig; } +- (BOOL)removePreviousPaddleForSingletonVideos { return ytlBool(@"hidePrevNext") ? YES : %orig; } // Replace Next & Previous with Fast Forward & Rewind buttons -- (BOOL)replaceNextPaddleWithFastForwardButtonForSingletonVods { return kReplacePrevNext ? YES : %orig; } -- (BOOL)replacePreviousPaddleWithRewindButtonForSingletonVods { return kReplacePrevNext ? YES : %orig; } +- (BOOL)replaceNextPaddleWithFastForwardButtonForSingletonVods { return ytlBool(@"replacePrevNext") ? YES : %orig; } +- (BOOL)replacePreviousPaddleWithRewindButtonForSingletonVods { return ytlBool(@"replacePrevNext") ? YES : %orig; } // Disable Free Zoom -- (BOOL)videoZoomFreeZoomEnabledGlobalConfig { return kNoFreeZoom ? NO : %orig; } +- (BOOL)videoZoomFreeZoomEnabledGlobalConfig { return ytlBool(@"noFreeZoom") ? NO : %orig; } // Stick Sort Buttons in Comments Section -- (BOOL)enableHideChipsInTheCommentsHeaderOnScrollIos { return kStickSortComments ? NO : %orig; } +- (BOOL)enableHideChipsInTheCommentsHeaderOnScrollIos { return ytlBool(@"stickSortComments") ? NO : %orig; } // Hide Sort Buttons in Comments Section -- (BOOL)enableChipsInTheCommentsHeaderIos { return kHideSortComments ? NO : %orig; } +- (BOOL)enableChipsInTheCommentsHeaderIos { return ytlBool(@"hideSortComments") ? NO : %orig; } // Use System Theme - (BOOL)shouldUseAppThemeSetting { return YES; } // Dismiss Panel By Swiping in Fullscreen Mode @@ -210,85 +241,84 @@ static UIImage *YTImageNamed(NSString *imageName) { // Remove Video in Playlist By Swiping To The Right - (BOOL)enableSwipeToRemoveInPlaylistWatchEp { return YES; } // Enable Old-style Minibar For Playlist Panel -- (BOOL)queueClientGlobalConfigEnableFloatingPlaylistMinibar { return kPlaylistOldMinibar ? NO : %orig; } +- (BOOL)queueClientGlobalConfigEnableFloatingPlaylistMinibar { return ytlBool(@"playlistOldMinibar") ? NO : %orig; } %end // Remove Dark Background in Overlay %hook YTMainAppVideoPlayerOverlayView -- (void)setBackgroundVisible:(BOOL)arg1 isGradientBackground:(BOOL)arg2 { kNoDarkBg ? %orig(NO, arg2) : %orig; } +- (void)setBackgroundVisible:(BOOL)arg1 isGradientBackground:(BOOL)arg2 { ytlBool(@"noDarkBg") ? %orig(NO, arg2) : %orig; } %end // No Endscreen Cards %hook YTCreatorEndscreenView -- (void)setHidden:(BOOL)arg1 { kEndScreenCards ? %orig(YES) : %orig; } +- (void)setHidden:(BOOL)arg1 { ytlBool(@"endScreenCards") ? %orig(YES) : %orig; } %end // Disable Fullscreen Actions %hook YTFullscreenActionsView -- (BOOL)enabled { return kNoFullscreenActions ? NO : YES; } -- (void)setEnabled:(BOOL)arg1 { kNoFullscreenActions ? %orig(NO) : %orig; } +- (BOOL)enabled { return ytlBool(@"noFullscreenActions") ? NO : YES; } +- (void)setEnabled:(BOOL)arg1 { ytlBool(@"noFullscreenActions") ? %orig(NO) : %orig; } %end // Dont Show Related Videos on Finish %hook YTFullscreenEngagementOverlayController -- (void)setRelatedVideosVisible:(BOOL)arg1 { kNoRelatedVids ? %orig(NO) : %orig; } +- (void)setRelatedVideosVisible:(BOOL)arg1 { ytlBool(@"noRelatedVids") ? %orig(NO) : %orig; } %end // Hide Paid Promotion Cards %hook YTMainAppVideoPlayerOverlayViewController -- (void)setPaidContentWithPlayerData:(id)data { if (!kNoPromotionCards) %orig; } +- (void)setPaidContentWithPlayerData:(id)data { if (!ytlBool(@"noPromotionCards")) %orig; } - (void)playerOverlayProvider:(YTPlayerOverlayProvider *)provider didInsertPlayerOverlay:(YTPlayerOverlay *)overlay { - if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && kNoPromotionCards) return; + if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && ytlBool(@"noPromotionCards")) return; %orig; } %end %hook YTInlineMutedPlaybackPlayerOverlayViewController -- (void)setPaidContentWithPlayerData:(id)data { if (!kNoPromotionCards) %orig; } +- (void)setPaidContentWithPlayerData:(id)data { if (!ytlBool(@"noPromotionCards")) %orig; } %end %hook YTInlinePlayerBarContainerView -- (void)setPlayerBarAlpha:(CGFloat)alpha { kPersistentProgressBar ? %orig(1.0) : %orig; } +- (void)setPlayerBarAlpha:(CGFloat)alpha { ytlBool(@"persistentProgressBar") ? %orig(1.0) : %orig; } %end // Remove Watermarks %hook YTAnnotationsViewController -- (void)loadFeaturedChannelWatermark { if (!kNoWatermarks) %orig; } +- (void)loadFeaturedChannelWatermark { if (!ytlBool(@"noWatermarks")) %orig; } %end %hook YTMainAppVideoPlayerOverlayView -- (BOOL)isWatermarkEnabled { return kNoWatermarks ? NO : %orig; } +- (BOOL)isWatermarkEnabled { return ytlBool(@"noWatermarks") ? NO : %orig; } %end // Forcibly Enable Miniplayer %hook YTWatchMiniBarViewController -- (void)updateMiniBarPlayerStateFromRenderer { if (!kMiniplayer) %orig; } +- (void)updateMiniBarPlayerStateFromRenderer { if (!ytlBool(@"miniplayer")) %orig; } %end // Portrait Fullscreen %hook YTWatchViewController -- (unsigned long long)allowedFullScreenOrientations { return kPortraitFullscreen ? UIInterfaceOrientationMaskAllButUpsideDown : %orig; } +- (unsigned long long)allowedFullScreenOrientations { return ytlBool(@"portraitFullscreen") ? UIInterfaceOrientationMaskAllButUpsideDown : %orig; } %end // Disable Autoplay %hook YTPlaybackConfig -- (void)setStartPlayback:(BOOL)arg1 { kDisableAutoplay ? %orig(NO) : %orig; } +- (void)setStartPlayback:(BOOL)arg1 { ytlBool(@"disableAutoplay") ? %orig(NO) : %orig; } %end // Skip Content Warning (https://github.com/qnblackcat/uYouPlus/blob/main/uYouPlus.xm#L452-L454) %hook YTPlayabilityResolutionUserActionUIController -- (void)showConfirmAlert { kNoContentWarning ? [self confirmAlertDidPressConfirm] : %orig; } +- (void)showConfirmAlert { ytlBool(@"noContentWarning") ? [self confirmAlertDidPressConfirm] : %orig; } %end // Classic Video Quality (https://github.com/PoomSmart/YTClassicVideoQuality) %hook YTVideoQualitySwitchControllerFactory - (id)videoQualitySwitchControllerWithParentResponder:(id)responder { Class originalClass = %c(YTVideoQualitySwitchOriginalController); - return kClassicQuality && originalClass ? [[originalClass alloc] initWithParentResponder:responder] : %orig; + return ytlBool(@"classicQuality") && originalClass ? [[originalClass alloc] initWithParentResponder:responder] : %orig; } %end - // Extra Speed Options %hook YTVarispeedSwitchController - (void)setDelegate:(id)arg1 { @@ -301,7 +331,7 @@ static UIImage *YTImageNamed(NSString *imageName) { [optionsCopy addObject:option]; } - if (kExtraSpeedOptions) [self setValue:[optionsCopy copy] forKey:@"_options"]; + if (ytlBool(@"extraSpeedOptions")) [self setValue:[optionsCopy copy] forKey:@"_options"]; return %orig; } @@ -313,7 +343,7 @@ static UIImage *YTImageNamed(NSString *imageName) { NSString *originalVersion = %orig; NSString *fakeVersion = @"18.18.2"; - return (!kClassicQuality && !kExtraSpeedOptions && [originalVersion compare:fakeVersion options:NSNumericSearch] == NSOrderedDescending) ? originalVersion : fakeVersion; + return (!ytlBool(@"classicQuality") && !ytlBool(@"extraSpeedOptions") && [originalVersion compare:fakeVersion options:NSNumericSearch] == NSOrderedDescending) ? originalVersion : fakeVersion; } %end @@ -331,38 +361,65 @@ static UIImage *YTImageNamed(NSString *imageName) { // Disable Snap To Chapter (https://github.com/qnblackcat/uYouPlus/blob/main/uYouPlus.xm#L457-464) %hook YTSegmentableInlinePlayerBarView -- (void)didMoveToWindow { %orig; if (kDontSnapToChapter) self.enableSnapToChapter = NO; } +- (void)didMoveToWindow { %orig; if (ytlBool(@"dontSnapToChapter")) self.enableSnapToChapter = NO; } %end // Red Progress Bar and Gray Buffer Progress %hook YTInlinePlayerBarContainerView -- (id)quietProgressBarColor { return kRedProgressBar ? [UIColor redColor] : %orig; } +- (id)quietProgressBarColor { return ytlBool(@"redProgressBar") ? [UIColor redColor] : %orig; } %end %hook YTSegmentableInlinePlayerBarView -- (void)setBufferedProgressBarColor:(id)arg1 { if (kRedProgressBar) %orig([UIColor colorWithRed:0.65 green:0.65 blue:0.65 alpha:0.60]); } +- (void)setBufferedProgressBarColor:(id)arg1 { if (ytlBool(@"redProgressBar")) %orig([UIColor colorWithRed:0.65 green:0.65 blue:0.65 alpha:0.60]); } %end // Disable Hints %hook YTSettings -- (BOOL)areHintsDisabled { return kNoHints ? YES : NO; } -- (void)setHintsDisabled:(BOOL)arg1 { kNoHints ? %orig(YES) : %orig; } +- (BOOL)areHintsDisabled { return ytlBool(@"noHints") ? YES : NO; } +- (void)setHintsDisabled:(BOOL)arg1 { ytlBool(@"noHints") ? %orig(YES) : %orig; } %end %hook YTUserDefaults -- (BOOL)areHintsDisabled { return kNoHints ? YES : NO; } -- (void)setHintsDisabled:(BOOL)arg1 { kNoHints ? %orig(YES) : %orig; } +- (BOOL)areHintsDisabled { return ytlBool(@"noHints") ? YES : NO; } +- (void)setHintsDisabled:(BOOL)arg1 { ytlBool(@"noHints") ? %orig(YES) : %orig; } %end -// Enter Fullscreen on Start (https://github.com/PoomSmart/YTAutoFullScreen) +void addEndTime(YTPlayerViewController *self, YTSingleVideoController *video, YTSingleVideoTime *time) { + if (!ytlBool(@"videoEndTime")) return; + + CGFloat rate = video.playbackRate != 0 ? video.playbackRate : 1.0; + NSTimeInterval remainingTime = (lround(video.totalMediaTime) - lround(time.time)) / rate; + + NSDate *estimatedEndTime = [NSDate dateWithTimeIntervalSinceNow:remainingTime]; + + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; + [dateFormatter setDateFormat:ytlBool(@"24hrFormat") ? @"HH:mm" : @"h:mm a"]; + + NSString *formattedEndTime = [dateFormatter stringFromDate:estimatedEndTime]; + + YTPlayerView *playerView = (YTPlayerView *)self.view; + if (![playerView.overlayView isKindOfClass:%c(YTMainAppVideoPlayerOverlayView)]) return; + + YTMainAppVideoPlayerOverlayView *overlay = (YTMainAppVideoPlayerOverlayView*)playerView.overlayView; + YTLabel *durationLabel = overlay.playerBar.durationLabel; + overlay.playerBar.endTimeString = formattedEndTime; + + if (![durationLabel.text containsString:formattedEndTime]) { + durationLabel.text = [durationLabel.text stringByAppendingString:[NSString stringWithFormat:@" • %@", formattedEndTime]]; + [durationLabel sizeToFit]; + } +} + %hook YTPlayerViewController - (void)loadWithPlayerTransition:(id)arg1 playbackConfig:(id)arg2 { %orig; - if (kWiFiQualityIndex != 0 || kCellQualityIndex != 0) [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(autoQuality) userInfo:nil repeats:NO]; - if (kAutoFullscreen) [NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(autoFullscreen) userInfo:nil repeats:NO]; - if (kShortsToRegular) [NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(shortsToRegular) userInfo:nil repeats:NO]; - if (kDisableAutoCaptions) [NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(turnOffCaptions) userInfo:nil repeats:NO]; + if (ytlInt(@"wiFiQualityIndex") != 0 || ytlInt(@"cellQualityIndex") != 0) [self performSelector:@selector(autoQuality) withObject:nil afterDelay:1.0]; + if (ytlBool(@"autoFullscreen")) [self performSelector:@selector(autoFullscreen) withObject:nil afterDelay:0.75]; + if (ytlBool(@"shortsToRegular")) [self performSelector:@selector(shortsToRegular) withObject:nil afterDelay:0.75]; + if (ytlInt(@"autoSpeedIndex") != 3) [self performSelector:@selector(setAutoSpeed) withObject:nil afterDelay:0.75]; + if (ytlBool(@"disableAutoCaptions")) [self performSelector:@selector(turnOffCaptions) withObject:nil afterDelay:1.0]; } %new @@ -383,7 +440,20 @@ static UIImage *YTImageNamed(NSString *imageName) { %new - (void)turnOffCaptions { - [self setActiveCaptionTrack:nil]; + if ([self.view.superview isKindOfClass:NSClassFromString(@"YTWatchView")]) { + [self setActiveCaptionTrack:nil]; + } +} + +%new +- (void)setAutoSpeed { + if ([self.activeVideoPlayerOverlay isKindOfClass:NSClassFromString(@"YTMainAppVideoPlayerOverlayViewController")] + && [self.view.superview isKindOfClass:NSClassFromString(@"YTWatchView")]) { + YTMainAppVideoPlayerOverlayViewController *overlayVC = (YTMainAppVideoPlayerOverlayViewController *)self.activeVideoPlayerOverlay; + + NSArray *speedLabels = @[@0.25, @0.5, @0.75, @1.0, @1.25, @1.5, @1.75, @2.0, @3.0, @4.0, @5.0]; + [overlayVC setPlaybackRate:[speedLabels[ytlInt(@"autoSpeedIndex")] floatValue]]; + } } %new @@ -393,7 +463,7 @@ static UIImage *YTImageNamed(NSString *imageName) { } NetworkStatus status = [[Reachability reachabilityForInternetConnection] currentReachabilityStatus]; - NSInteger kQualityIndex = status == ReachableViaWiFi ? kWiFiQualityIndex : kCellQualityIndex; + NSInteger kQualityIndex = status == ReachableViaWiFi ? ytlInt(@"wiFiQualityIndex") : ytlInt(@"cellQualityIndex"); NSString *bestQualityLabel; int highestResolution = 0; @@ -405,18 +475,8 @@ static UIImage *YTImageNamed(NSString *imageName) { } } - NSString *qualityLabel = kQualityIndex == 1 ? bestQualityLabel : - kQualityIndex == 2 ? @"2160p60" : - kQualityIndex == 3 ? @"2160p" : - kQualityIndex == 4 ? @"1440p60" : - kQualityIndex == 5 ? @"1440p" : - kQualityIndex == 6 ? @"1080p60" : - kQualityIndex == 7 ? @"1080p" : - kQualityIndex == 8 ? @"720p60" : - kQualityIndex == 9 ? @"720p" : - kQualityIndex == 10 ? @"480p" : - kQualityIndex == 11 ? @"360p" : - nil; + NSArray *qualityLabels = @[@"Default", bestQualityLabel, @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; + NSString *qualityLabel = qualityLabels[kQualityIndex]; if (![qualityLabel isEqualToString:bestQualityLabel]) { BOOL exactMatch = NO; @@ -455,22 +515,51 @@ static UIImage *YTImageNamed(NSString *imageName) { [self.activeVideo setVideoFormatConstraint:[fc initWithVideoQualitySetting:3 formatSelectionReason:2 qualityLabel:qualityLabel]]; } } + +- (void)singleVideo:(YTSingleVideoController *)video currentVideoTimeDidChange:(YTSingleVideoTime *)time { + %orig; + + addEndTime(self, video, time); +} + +- (void)potentiallyMutatedSingleVideo:(YTSingleVideoController *)video currentVideoTimeDidChange:(YTSingleVideoTime *)time { + %orig; + + addEndTime(self, video, time); +} +%end + +%hook YTInlinePlayerBarContainerView +%property (nonatomic, strong) NSString *endTimeString; +- (void)setPeekableViewVisible:(BOOL)visible { + %orig; + + if (!ytlBool(@"videoEndTime")) return; + + if (self.endTimeString && ![self.durationLabel.text containsString:self.endTimeString]) { + self.durationLabel.text = [self.durationLabel.text stringByAppendingString:[NSString stringWithFormat:@" • %@", self.endTimeString]]; + [self.durationLabel sizeToFit]; + } +} %end // Exit Fullscreen on Finish %hook YTWatchFlowController -- (BOOL)shouldExitFullScreenOnFinish { return kExitFullscreen ? YES : NO; } +- (BOOL)shouldExitFullScreenOnFinish { return ytlBool(@"exitFullscreen") ? YES : NO; } %end %hook YTMainAppVideoPlayerOverlayViewController // Disable Double Tap To Seek -- (BOOL)allowDoubleTapToSeekGestureRecognizer { return kNoDoubleTapToSeek ? NO : %orig; } +- (BOOL)allowDoubleTapToSeekGestureRecognizer { return ytlBool(@"noDoubleTapToSeek") ? NO : %orig; } + +// Disable Two Finger Double Tap +- (BOOL)allowTwoFingerDoubleTapGestureRecognizer { return ytlBool(@"noTwoFingerSnapToChapter") ? NO : %orig; } // Copy Timestamped Link by Pressing On Pause - (void)didPressPause:(id)arg1 { %orig; - if (kCopyWithTimestamp) { + if (ytlBool(@"copyWithTimestamp")) { NSInteger mediaTimeInteger = (NSInteger)self.mediaTime; NSString *currentTimeLink = [NSString stringWithFormat:@"https://www.youtube.com/watch?v=%@&t=%lds", self.videoID, mediaTimeInteger]; @@ -482,25 +571,24 @@ static UIImage *YTImageNamed(NSString *imageName) { // Fit 'Play All' Buttons Text For Localizations %hook YTQTMButton -- (void)layoutSubviews { +- (UILabel *)titleLabel { + UILabel *label = %orig; + if ([self.accessibilityIdentifier isEqualToString:@"id.playlist.playall.button"]) { - self.titleLabel.adjustsFontSizeToFitWidth = YES; - } %orig; + label.adjustsFontSizeToFitWidth = YES; + } + + return label; } %end // Fit Shorts Button Labels For Localizations %hook YTReelPlayerButton -- (void)layoutSubviews { - %orig; +- (UILabel *)titleLabel { + UILabel *label = %orig; + label.adjustsFontSizeToFitWidth = YES; - for (UIView *subview in self.subviews) { - if ([subview isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)subview; - label.adjustsFontSizeToFitWidth = YES; - break; - } - } + return label; } %end @@ -515,7 +603,7 @@ static UIImage *YTImageNamed(NSString *imageName) { // Remove "Play next in queue" from the menu @PoomSmart (https://github.com/qnblackcat/uYouPlus/issues/1138#issuecomment-1606415080) %hook YTMenuItemVisibilityHandler - (BOOL)shouldShowServiceItemRenderer:(YTIMenuConditionalServiceItemRenderer *)renderer { - if (kRemovePlayNext && renderer.icon.iconType == 251) { + if (ytlBool(@"removePlayNext") && renderer.icon.iconType == 251) { return NO; } return %orig; } @@ -527,13 +615,13 @@ static UIImage *YTImageNamed(NSString *imageName) { NSString *identifier = [action valueForKey:@"_accessibilityIdentifier"]; NSDictionary *actionsToRemove = @{ - @"7": @(kRemoveDownloadMenu), - @"1": @(kRemoveWatchLaterMenu), - @"3": @(kRemoveSaveToPlaylistMenu), - @"5": @(kRemoveShareMenu), - @"12": @(kRemoveNotInterestedMenu), - @"31": @(kRemoveDontRecommendMenu), - @"58": @(kRemoveReportMenu) + @"7": @(ytlBool(@"removeDownloadMenu")), + @"1": @(ytlBool(@"removeWatchLaterMenu")), + @"3": @(ytlBool(@"removeSaveToPlaylistMenu")), + @"5": @(ytlBool(@"removeShareMenu")), + @"12": @(ytlBool(@"removeNotInterestedMenu")), + @"31": @(ytlBool(@"removeDontRecommendMenu")), + @"58": @(ytlBool(@"removeReportMenu")) }; if (![actionsToRemove[identifier] boolValue]) { @@ -577,15 +665,15 @@ static BOOL findCell(ASNodeController *nodeController, NSArray *ide ASCellNode *node = [element node]; ASNodeController *nodeController = [node controller]; - if (kNoPlayerRemixButton && findCell(nodeController, @[@"id.video.remix.button"])) { + if (ytlBool(@"noPlayerRemixButton") && findCell(nodeController, @[@"id.video.remix.button"])) { return CGSizeZero; } - if (kNoPlayerClipButton && findCell(nodeController, @[@"clip_button.eml"])) { + if (ytlBool(@"noPlayerClipButton") && findCell(nodeController, @[@"clip_button.eml"])) { return CGSizeZero; } - if (kNoPlayerDownloadButton && findCell(nodeController, @[@"id.ui.add_to.offline.button"])) { + if (ytlBool(@"noPlayerDownloadButton") && findCell(nodeController, @[@"id.ui.add_to.offline.button"])) { return CGSizeZero; } } @@ -604,12 +692,12 @@ static BOOL findCell(ASNodeController *nodeController, NSArray *ide if ([cell respondsToSelector:@selector(node)]) { NSString *idToRemove = [[cell node] accessibilityIdentifier]; if ([idToRemove isEqualToString:@"statement_banner.view"] || - (([idToRemove isEqualToString:@"eml.shorts-grid"] || [idToRemove isEqualToString:@"eml.shorts-shelf"]) && kHideShorts)) { + (([idToRemove isEqualToString:@"eml.shorts-grid"] || [idToRemove isEqualToString:@"eml.shorts-shelf"]) && ytlBool(@"hideShorts"))) { [self removeCellsAtIndexPath:indexPath]; } } - } else if (([cell isKindOfClass:objc_lookUpClass("YTReelShelfCell")] && kHideShorts) || - ([cell isKindOfClass:objc_lookUpClass("YTHorizontalCardListCell")] && kNoContinueWatching)) { + } else if (([cell isKindOfClass:objc_lookUpClass("YTReelShelfCell")] && ytlBool(@"hideShorts")) || + ([cell isKindOfClass:objc_lookUpClass("YTHorizontalCardListCell")] && ytlBool(@"noContinueWatching"))) { [self removeCellsAtIndexPath:indexPath]; } return %orig; } @@ -622,53 +710,54 @@ static BOOL findCell(ASNodeController *nodeController, NSArray *ide // Shorts Progress Bar (https://github.com/PoomSmart/YTShortsProgress) %hook YTReelPlayerViewController -- (BOOL)shouldEnablePlayerBar { return kShortsProgress ? YES : NO; } -- (BOOL)shouldAlwaysEnablePlayerBar { return kShortsProgress ? YES : NO; } -- (BOOL)shouldEnablePlayerBarOnlyOnPause { return kShortsProgress ? NO : YES; } +- (BOOL)shouldEnablePlayerBar { return ytlBool(@"shortsProgress") ? YES : NO; } +- (BOOL)shouldAlwaysEnablePlayerBar { return ytlBool(@"shortsProgress") ? YES : NO; } +- (BOOL)shouldEnablePlayerBarOnlyOnPause { return ytlBool(@"shortsProgress") ? NO : YES; } %end %hook YTReelPlayerViewControllerSub -- (BOOL)shouldEnablePlayerBar { return kShortsProgress ? YES : NO; } -- (BOOL)shouldAlwaysEnablePlayerBar { return kShortsProgress ? YES : NO; } -- (BOOL)shouldEnablePlayerBarOnlyOnPause { return kShortsProgress ? NO : YES; } +- (BOOL)shouldEnablePlayerBar { return ytlBool(@"shortsProgress") ? YES : NO; } +- (BOOL)shouldAlwaysEnablePlayerBar { return ytlBool(@"shortsProgress") ? YES : NO; } +- (BOOL)shouldEnablePlayerBarOnlyOnPause { return ytlBool(@"shortsProgress") ? NO : YES; } %end %hook YTShortsPlayerViewController -- (BOOL)shouldAlwaysEnablePlayerBar { return kShortsProgress ? YES : NO; } -- (BOOL)shouldEnablePlayerBarOnlyOnPause { return kShortsProgress ? NO : YES; } +- (BOOL)shouldAlwaysEnablePlayerBar { return ytlBool(@"shortsProgress") ? YES : NO; } +- (BOOL)shouldEnablePlayerBarOnlyOnPause { return ytlBool(@"shortsProgress") ? NO : YES; } %end %hook YTColdConfig -- (BOOL)iosEnableVideoPlayerScrubber { return kShortsProgress ? YES : NO; } -- (BOOL)mobileShortsTabInlined { return kShortsProgress ? YES : NO; } +- (BOOL)iosEnableVideoPlayerScrubber { return ytlBool(@"shortsProgress") ? YES : NO; } +- (BOOL)mobileShortsTabInlined { return ytlBool(@"shortsProgress") ? YES : NO; } +- (BOOL)iosUseSystemVolumeControlInFullscreen { return ytlBool(@"stockVolumeHUD") ? YES : NO; } %end %hook YTHotConfig -- (BOOL)enablePlayerBarForVerticalVideoWhenControlsHiddenInFullscreen { return kShortsProgress ? YES : NO; } +- (BOOL)enablePlayerBarForVerticalVideoWhenControlsHiddenInFullscreen { return ytlBool(@"shortsProgress") ? YES : NO; } %end // Dont Startup Shorts %hook YTShortsStartupCoordinator -- (id)evaluateResumeToShorts { return kResumeShorts ? nil : %orig; } +- (id)evaluateResumeToShorts { return ytlBool(@"resumeShorts") ? nil : %orig; } %end // Hide Shorts Elements %hook YTReelPausedStateCarouselView -- (void)setPausedStateCarouselVisible:(BOOL)arg1 animated:(BOOL)arg2 { kHideShortsSubscriptions ? %orig(arg1 = NO, arg2) : %orig; } +- (void)setPausedStateCarouselVisible:(BOOL)arg1 animated:(BOOL)arg2 { ytlBool(@"hideShortsSubscriptions") ? %orig(arg1 = NO, arg2) : %orig; } %end %hook YTReelWatchPlaybackOverlayView -- (void)setReelLikeButton:(id)arg1 { if (!kHideShortsLike) %orig; } -- (void)setReelDislikeButton:(id)arg1 { if (!kHideShortsDislike) %orig; } -- (void)setViewCommentButton:(id)arg1 { if (!kHideShortsComments) %orig; } -- (void)setRemixButton:(id)arg1 { if (!kHideShortsRemix) %orig; } -- (void)setShareButton:(id)arg1 { if (!kHideShortsShare) %orig; } -- (void)setNativePivotButton:(id)arg1 { if (!kHideShortsAvatars) %orig; } -- (void)setPivotButtonElementRenderer:(id)arg1 { if (!kHideShortsAvatars) %orig; } +- (void)setReelLikeButton:(id)arg1 { if (!ytlBool(@"hideShortsLike")) %orig; } +- (void)setReelDislikeButton:(id)arg1 { if (!ytlBool(@"hideShortsDislike")) %orig; } +- (void)setViewCommentButton:(id)arg1 { if (!ytlBool(@"hideShortsComments")) %orig; } +- (void)setRemixButton:(id)arg1 { if (!ytlBool(@"hideShortsRemix")) %orig; } +- (void)setShareButton:(id)arg1 { if (!ytlBool(@"hideShortsShare")) %orig; } +- (void)setNativePivotButton:(id)arg1 { if (!ytlBool(@"hideShortsAvatars")) %orig; } +- (void)setPivotButtonElementRenderer:(id)arg1 { if (!ytlBool(@"hideShortsAvatars")) %orig; } %end %hook YTReelHeaderView -- (void)setTitleLabelVisible:(BOOL)arg1 animated:(BOOL)arg2 { kHideShortsLogo ? %orig(arg1 = NO, arg2) : %orig; } +- (void)setTitleLabelVisible:(BOOL)arg1 animated:(BOOL)arg2 { ytlBool(@"hideShortsLogo") ? %orig(arg1 = NO, arg2) : %orig; } %end %hook YTReelTransparentStackView @@ -677,21 +766,22 @@ static BOOL findCell(ASNodeController *nodeController, NSArray *ide for (YTQTMButton *button in self.subviews) { if ([button respondsToSelector:@selector(buttonRenderer)]) { - if (kHideShortsSearch && button.buttonRenderer.icon.iconType == 1045) button.hidden = YES; - if (kHideShortsCamera && button.buttonRenderer.icon.iconType == 1046) button.hidden = YES; - if (kHideShortsMore && button.buttonRenderer.icon.iconType == 1047) button.hidden = YES; + if (ytlBool(@"hideShortsSearch") && button.buttonRenderer.icon.iconType == 1045) button.hidden = YES; + if (ytlBool(@"hideShortsCamera") && button.buttonRenderer.icon.iconType == 1046) button.hidden = YES; + if (ytlBool(@"hideShortsMore") && button.buttonRenderer.icon.iconType == 1047) button.hidden = YES; } } } %end %hook YTReelWatchHeaderView -- (void)setChannelBarElementRenderer:(id)renderer { if (!kHideShortsChannelName) %orig; } -- (void)setHeaderRenderer:(id)renderer { if (!kHideShortsDescription) %orig; } -- (void)setSoundMetadataElementRenderer:(id)renderer { if (!kHideShortsAudioTrack) %orig; } -- (void)setActionElement:(id)renderer { if (!kHideShortsPromoCards) %orig; } -- (void)setBadgeRenderer:(id)renderer { if (!kHideShortsThanks) %orig; } -- (void)setMultiFormatLinkElementRenderer:(id)renderer { if (!kHideShortsSource) %orig; } +- (void)setChannelBarElementRenderer:(id)renderer { if (!ytlBool(@"hideShortsChannelName")) %orig; } +- (void)setHeaderRenderer:(id)renderer { if (!ytlBool(@"hideShortsDescription")) %orig; } +- (void)setShortsVideoTitleElementRenderer:(id)renderer { if (!ytlBool(@"hideShortsDescription")) %orig; } +- (void)setSoundMetadataElementRenderer:(id)renderer { if (!ytlBool(@"hideShortsAudioTrack")) %orig; } +- (void)setActionElement:(id)renderer { if (!ytlBool(@"hideShortsPromoCards")) %orig; } +- (void)setBadgeRenderer:(id)renderer { if (!ytlBool(@"hideShortsThanks")) %orig; } +- (void)setMultiFormatLinkElementRenderer:(id)renderer { if (!ytlBool(@"hideShortsSource")) %orig; } %end static BOOL isOverlayShown = YES; @@ -700,19 +790,21 @@ static BOOL isOverlayShown = YES; - (void)didPinch:(UIPinchGestureRecognizer *)gesture { %orig; - if (kPinchToFullscreenShorts && [self.playerViewDelegate.parentViewController isKindOfClass:NSClassFromString(@"YTShortsPlayerViewController")]) { + if (ytlBool(@"pinchToFullscreenShorts") && [self.playerViewDelegate.parentViewController isKindOfClass:NSClassFromString(@"YTShortsPlayerViewController")]) { YTShortsPlayerViewController *shortsPlayerVC = (YTShortsPlayerViewController *)self.playerViewDelegate.parentViewController; YTReelContentView *contentView = (YTReelContentView *)shortsPlayerVC.view; + UIWindow *mainWindow = [UIApplication sharedApplication].windows.firstObject; + YTAppViewController *appVC = (YTAppViewController *)mainWindow.rootViewController; if (gesture.scale > 1) { - if (!kShortsOnlyMode) [shortsPlayerVC.navigationController.parentViewController hidePivotBar]; + if (!ytlBool(@"shortsOnlyMode")) [appVC hidePivotBar]; [UIView animateWithDuration:0.3 animations:^{ contentView.playbackOverlay.alpha = 0; isOverlayShown = contentView.playbackOverlay.alpha; }]; } else { - if (!kShortsOnlyMode) [shortsPlayerVC.navigationController.parentViewController showPivotBar]; + if (!ytlBool(@"shortsOnlyMode")) [appVC showPivotBar]; [UIView animateWithDuration:0.3 animations:^{ contentView.playbackOverlay.alpha = 1; @@ -721,11 +813,15 @@ static BOOL isOverlayShown = YES; } } } +%end -- (void)layoutSubviews { +%hook YTReelContentView +- (void)setPlaybackView:(id)arg1 { %orig; - if (kShortsOnlyMode && [self.playerViewDelegate.parentViewController isKindOfClass:NSClassFromString(@"YTShortsPlayerViewController")]) { + self.playbackOverlay.alpha = isOverlayShown; + + if (ytlBool(@"shortsOnlyMode")) { UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(turnShortsOnlyModeOff:)]; longPressGesture.numberOfTouchesRequired = 2; longPressGesture.minimumPressDuration = 0.5; @@ -737,37 +833,34 @@ static BOOL isOverlayShown = YES; %new - (void)turnShortsOnlyModeOff:(UILongPressGestureRecognizer *)gesture { if (gesture.state == UIGestureRecognizerStateBegan) { - NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"YTLite.plist"]; - NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithContentsOfFile:path]; + ytlSetBool(NO, @"shortsOnlyMode"); - [prefs setObject:@NO forKey:@"shortsOnlyMode"]; - [prefs writeToFile:path atomically:NO]; - - CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES); - - UIResponder *responder = self.nextResponder; - while (responder && ![responder isKindOfClass:[UIViewController class]]) responder = responder.nextResponder; - if (responder) [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"ShortsModeTurnedOff") firstResponder:responder] send]; - - YTShortsPlayerViewController *shortsPlayerVC = (YTShortsPlayerViewController *)self.playerViewDelegate.parentViewController; - [shortsPlayerVC.navigationController.parentViewController performSelector:@selector(showPivotBar) withObject:nil afterDelay:1.0]; + [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"ShortsModeTurnedOff") firstResponder:[%c(YTUIUtils) topViewControllerForPresenting]] send]; + UIWindow *mainWindow = [UIApplication sharedApplication].windows.firstObject; + YTAppViewController *appVC = (YTAppViewController *)mainWindow.rootViewController; + [appVC performSelector:@selector(showPivotBar) withObject:nil afterDelay:1.0]; } } %end -%hook YTReelWatchPlaybackOverlayView -- (void)layoutSubviews { +%hook YTSegmentableInlinePlayerBarView +- (void)setScrubberTime:(CGFloat)time { %orig; - self.alpha = isOverlayShown; + if (ytlBool(@"autoSkipShorts") && round(time) == round(self.totalTime)) { + UIWindow *mainWindow = [UIApplication sharedApplication].windows.firstObject; + YTAppViewController *appVC = (YTAppViewController *)mainWindow.rootViewController; + + [appVC.pivotBarViewController.scrubberDelegate performSelector:@selector(reelContentViewRequestsAdvanceToNextVideo:)]; + } } %end static void downloadImageFromURL(UIResponder *responder, NSURL *URL, BOOL download) { NSString *URLString = URL.absoluteString; - if (kFixAlbums && [URLString hasPrefix:@"https://yt3."]) { + if (ytlBool(@"fixAlbums") && [URLString hasPrefix:@"https://yt3."]) { URLString = [URLString stringByReplacingOccurrencesOfString:@"https://yt3." withString:@"https://yt4."]; } @@ -825,29 +918,42 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c - (void)setFrame:(CGRect)frame { %orig; - if (kCommentManager && [[self valueForKey:@"_accessibilityIdentifier"] isEqualToString:@"id.comment.content.label"]) { - ASTextNode *textNode = (ASTextNode *)self; - NSString *comment = textNode.attributedText.string; + if (ytlBool(@"commentManager") && [[self valueForKey:@"_accessibilityIdentifier"] isEqualToString:@"id.comment.content.label"]) { + if ([self isKindOfClass:NSClassFromString(@"ASTextNode")]) { + ASTextNode *textNode = (ASTextNode *)self; - NSMutableArray *allObjects = self.supernodes.allObjects; - for (ELMContainerNode *containerNode in allObjects) { - if ([containerNode.description containsString:@"id.ui.comment_cell"] && comment) { - containerNode.copiedComment = comment; - break; + NSString *comment; + if ([textNode respondsToSelector:@selector(attributedText)]) { + if (textNode.attributedText) comment = textNode.attributedText.string; + } + + NSMutableArray *allObjects = self.supernodes.allObjects; + for (ELMContainerNode *containerNode in allObjects) { + if ([containerNode.description containsString:@"id.ui.comment_cell"] && comment) { + containerNode.copiedComment = comment; + break; + } } } } - if (kPostManager && [self isKindOfClass:NSClassFromString(@"ELMExpandableTextNode")]) { + if (ytlBool(@"postManager") && [self isKindOfClass:NSClassFromString(@"ELMExpandableTextNode")]) { ELMExpandableTextNode *expandableTextNode = (ELMExpandableTextNode *)self; - ASTextNode *textNode = (ASTextNode *)expandableTextNode.currentTextNode; - NSString *text = textNode.attributedText.string; - NSMutableArray *allObjects = self.supernodes.allObjects; - for (ELMContainerNode *containerNode in allObjects) { - if ([containerNode.description containsString:@"id.ui.backstage.original_post"] && text) { - containerNode.copiedComment = text; - break; + if ([expandableTextNode.currentTextNode isKindOfClass:NSClassFromString(@"ASTextNode")]) { + ASTextNode *textNode = (ASTextNode *)expandableTextNode.currentTextNode; + + NSString *text; + if ([textNode respondsToSelector:@selector(attributedText)]) { + if (textNode.attributedText) text = textNode.attributedText.string; + } + + NSMutableArray *allObjects = self.supernodes.allObjects; + for (ELMContainerNode *containerNode in allObjects) { + if ([containerNode.description containsString:@"id.ui.backstage.original_post"] && text) { + containerNode.copiedComment = text; + break; + } } } } @@ -857,7 +963,7 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c %hook YTImageZoomNode - (BOOL)gestureRecognizer:(id)arg1 shouldRecognizeSimultaneouslyWithGestureRecognizer:(id)arg2 { BOOL isImageLoaded = [self valueForKey:@"_didLoadImage"]; - if (kPostManager && isImageLoaded) { + if (ytlBool(@"postManager") && isImageLoaded) { ASDisplayNode *displayNode = (ASDisplayNode *)self; ASNetworkImageNode *imageNode = (ASNetworkImageNode *)self; NSURL *URL = imageNode.URL; @@ -880,9 +986,9 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c %orig; NSArray *gesturesInfo = @[ - @{@"selector": @"postManager:", @"text": @"id.ui.backstage.original_post", @"key": @(kPostManager)}, - @{@"selector": @"savePFP:", @"text": @"ELMImageNode-View", @"key": @(kSaveProfilePhoto)}, - @{@"selector": @"commentManager:", @"text": @"id.ui.comment_cell", @"key": @(kCommentManager)} + @{@"selector": @"postManager:", @"text": @"id.ui.backstage.original_post", @"key": @(ytlBool(@"postManager"))}, + @{@"selector": @"savePFP:", @"text": @"ELMImageNode-View", @"key": @(ytlBool(@"saveProfilePhoto"))}, + @{@"selector": @"commentManager:", @"text": @"id.ui.comment_cell", @"key": @(ytlBool(@"commentManager"))} ]; for (NSDictionary *gestureInfo in gesturesInfo) { @@ -963,7 +1069,7 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c }]]; } - [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"SavePostAsImage") titleColor:[[UIColor redColor] colorWithAlphaComponent:0.7f] iconImage:YTImageNamed(@"yt_outline_image_24pt") iconColor:[[UIColor redColor] colorWithAlphaComponent:0.7f] disableAutomaticButtonColor:YES accessibilityIdentifier:nil handler:^ { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"SavePostAsImage") titleColor:[UIColor colorWithRed:0.75 green:0.50 blue:0.90 alpha:1.0] iconImage:YTImageNamed(@"yt_outline_image_24pt") iconColor:[UIColor colorWithRed:0.75 green:0.50 blue:0.90 alpha:1.0] disableAutomaticButtonColor:YES accessibilityIdentifier:nil handler:^ { genImageFromLayer(layer, backgroundColor, ^(UIImage *image) { [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAssetFromImage:image]; @@ -975,7 +1081,7 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c }); }]]; - [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyPostAsImage") titleColor:[[UIColor redColor] colorWithAlphaComponent:0.7f] iconImage:YTImageNamed(@"yt_outline_library_image_24pt") iconColor:[[UIColor redColor] colorWithAlphaComponent:0.7f] disableAutomaticButtonColor:YES accessibilityIdentifier:nil handler:^ { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyPostAsImage") titleColor:[UIColor colorWithRed:0.75 green:0.50 blue:0.90 alpha:1.0] iconImage:YTImageNamed(@"yt_outline_library_image_24pt") iconColor:[UIColor colorWithRed:0.75 green:0.50 blue:0.90 alpha:1.0] disableAutomaticButtonColor:YES accessibilityIdentifier:nil handler:^ { genImageFromLayer(layer, backgroundColor, ^(UIImage *image) { [UIPasteboard generalPasteboard].image = image; [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:containerNode.closestViewController] send]; @@ -1034,10 +1140,10 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c NSMutableArray *items = [renderer itemsArray]; NSDictionary *identifiersToRemove = @{ - @"FEshorts": @[@(kRemoveShorts), @(kReExplore)], - @"FEsubscriptions": @[@(kRemoveSubscriptions)], - @"FEuploads": @[@(kRemoveUploads)], - @"FElibrary": @[@(kRemoveLibrary)] + @"FEshorts": @[@(ytlBool(@"removeShorts")), @(ytlBool(@"reExplore"))], + @"FEsubscriptions": @[@(ytlBool(@"removeSubscriptions"))], + @"FEuploads": @[@(ytlBool(@"removeUploads"))], + @"FElibrary": @[@(ytlBool(@"removeLibrary"))] }; for (NSString *identifier in identifiersToRemove) { @@ -1061,7 +1167,7 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c return [[[renderers pivotBarItemRenderer] pivotIdentifier] isEqualToString:[%c(YTIBrowseRequest) browseIDForExploreTab]]; }]; - if (exploreIndex == NSNotFound && (kReExplore || kAddExplore)) { + if (exploreIndex == NSNotFound && (ytlBool(@"reExplore") || ytlBool(@"addExplore"))) { YTIPivotBarSupportedRenderers *exploreTab = [%c(YTIPivotBarRenderer) pivotSupportedRenderersWithBrowseId:[%c(YTIBrowseRequest) browseIDForExploreTab] title:LOC(@"Explore") iconType:292]; [items insertObject:exploreTab atIndex:1]; } @@ -1072,8 +1178,8 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c // Hide Tab Bar Indicators %hook YTPivotBarIndicatorView -- (void)setFillColor:(id)arg1 { %orig(kRemoveIndicators ? [UIColor clearColor] : arg1); } -- (void)setBorderColor:(id)arg1 { %orig(kRemoveIndicators ? [UIColor clearColor] : arg1); } +- (void)setFillColor:(id)arg1 { %orig(ytlBool(@"removeIndicators") ? [UIColor clearColor] : arg1); } +- (void)setBorderColor:(id)arg1 { %orig(ytlBool(@"removeIndicators") ? [UIColor clearColor] : arg1); } %end // Hide Tab Labels @@ -1081,10 +1187,23 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c - (void)setRenderer:(YTIPivotBarRenderer *)renderer { %orig; - if (kRemoveLabels) { + if (ytlBool(@"removeLabels")) { [self.navigationButton setTitle:@"" forState:UIControlStateNormal]; [self.navigationButton setSizeWithPaddingAndInsets:NO]; } + + UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(manageTab:)]; + longPress.minimumPressDuration = 0.3; + if ([self.renderer.pivotIdentifier isEqualToString:@"FEwhat_to_watch"]) [self addGestureRecognizer:longPress]; +} + +%new +- (void)manageTab:(UILongPressGestureRecognizer *)gesture { + if (gesture.state == UIGestureRecognizerStateBegan) { + ytlBool(@"removeLibrary") ? ytlSetBool(NO, @"removeLibrary") : ytlSetBool(YES, @"removeLibrary"); + [[[%c(YTHeaderContentComboViewController) alloc] init] refreshPivotBar]; + [[%c(YTToastResponderEvent) eventWithMessage:ytlBool(@"removeLibrary") ? LOC(@"LibraryRemoved") : LOC(@"LibraryAdded") firstResponder:self.delegate] send]; + } } %end @@ -1094,45 +1213,34 @@ BOOL isTabSelected = NO; - (void)viewDidAppear:(BOOL)animated { %orig; - if (!isTabSelected && !kShortsOnlyMode) { - NSString *pivotIdentifier = kPivotIndex == 1 ? @"FEexplore" : - kPivotIndex == 2 ? @"FEshorts" : - kPivotIndex == 3 ? @"FEsubscriptions" : - kPivotIndex == 4 ? @"FElibrary" : - @"FEwhat_to_watch"; - - [self selectItemWithPivotIdentifier:pivotIdentifier]; + if (!isTabSelected && !ytlBool(@"shortsOnlyMode")) { + NSArray *pivotIdentifiers = @[@"FEwhat_to_watch", @"FEexplore", @"FEshorts", @"FEsubscriptions", @"FElibrary"]; + [self selectItemWithPivotIdentifier:pivotIdentifiers[ytlInt(@"pivotIndex")]]; isTabSelected = YES; } - if (kShortsOnlyMode) { + if (ytlBool(@"shortsOnlyMode")) { [self selectItemWithPivotIdentifier:@"FEshorts"]; [self.parentViewController hidePivotBar]; } } %end -%hook YTTabsViewController -- (void)viewDidAppear:(BOOL)animated { - %orig; - - isOverlayShown = YES; - - if (kShortsOnlyMode) { - [self.navigationController.parentViewController hidePivotBar]; +%hook YTAppViewController +- (void)showPivotBar { + if (!ytlBool(@"shortsOnlyMode")) { + %orig; + + isOverlayShown = YES; } } %end -%hook YTAppViewController -- (void)showPivotBar { if (!kShortsOnlyMode) %orig; } -%end - %hook YTReelWatchRootViewController - (void)viewDidAppear:(BOOL)animated { %orig; - if (kShortsOnlyMode) { + if (ytlBool(@"shortsOnlyMode")) { [self.navigationController.parentViewController hidePivotBar]; } } @@ -1142,7 +1250,7 @@ BOOL isTabSelected = NO; - (void)layoutSubviews { %orig; - if (kCopyVideoInfo && [self.panelIdentifier.identifierString isEqualToString:@"video-description-ep-identifier"]) { + if (ytlBool(@"copyVideoInfo") && [self.panelIdentifier.identifierString isEqualToString:@"video-description-ep-identifier"]) { YTQTMButton *copyInfoButton = [%c(YTQTMButton) iconButton]; copyInfoButton.accessibilityLabel = LOC(@"CopyVideoInfo"); [copyInfoButton setTag:999]; @@ -1187,10 +1295,58 @@ BOOL isTabSelected = NO; } %end +CGFloat rateBeforeSpeedmaster = 1.0; + +static void manageSpeedmasterYTLite(UILongPressGestureRecognizer *gesture, YTMainAppVideoPlayerOverlayViewController *delegate, YTInlinePlayerScrubUserEducationView *edu) { + NSArray *speedLabels = @[@0, @2.0, @0.25, @0.5, @0.75, @1.0, @1.25, @1.5, @1.75, @2.0, @3.0, @4.0, @5.0]; + + YTLabel *label = [edu valueForKey:@"_userEducationLabel"]; + edu.labelType = 1; + [label setValue:[NSString stringWithFormat:@"%@: %@×", LOC(@"PlaybackSpeed"), speedLabels[ytlInt(@"speedIndex")]] forKey:@"text"]; + + if (gesture.state == UIGestureRecognizerStateBegan) { + rateBeforeSpeedmaster = delegate.currentPlaybackRate; + [delegate setPlaybackRate:[speedLabels[ytlInt(@"speedIndex")] floatValue]]; + [edu setVisible:YES]; + } + + else if (gesture.state == UIGestureRecognizerStateEnded) { + [delegate setPlaybackRate:rateBeforeSpeedmaster]; + [edu setVisible:NO]; + } +} + +%hook YTMainAppVideoPlayerOverlayView +- (void)setSeekAnywherePanGestureRecognizer:(id)arg1 { + if (ytlInt(@"speedIndex") == 0) return %orig; + + UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(speedmasterYtLite:)]; + longPress.minimumPressDuration = 0.3; + if (ytlInt(@"speedIndex") != 0) [self addGestureRecognizer:longPress]; +} + +%new +- (void)speedmasterYtLite:(UILongPressGestureRecognizer *)gesture { + YTInlinePlayerScrubUserEducationView *edu = self.scrubUserEducationView; + manageSpeedmasterYTLite(gesture, self.delegate, edu); +} +%end + +%hook YTSpeedmasterController +- (void)speedmasterDidLongPressWithRecognizer:(UILongPressGestureRecognizer *)gesture { + if (ytlInt(@"speedIndex") == 0) return; + if (ytlInt(@"speedIndex") == 1) return %orig; + + YTMainAppVideoPlayerOverlayViewController *delegate = [self valueForKey:@"_delegate"]; + YTInlinePlayerScrubUserEducationView *edu = (YTInlinePlayerScrubUserEducationView *)delegate.videoPlayerOverlayView.scrubUserEducationView; + manageSpeedmasterYTLite(gesture, delegate, edu); +} +%end + // Disable Right-To-Left Formatting %hook NSParagraphStyle -+ (NSWritingDirection)defaultWritingDirectionForLanguage:(id)lang { return kDisableRTL ? NSWritingDirectionLeftToRight : %orig; } -+ (NSWritingDirection)_defaultWritingDirection { return kDisableRTL ? NSWritingDirectionLeftToRight : %orig; } ++ (NSWritingDirection)defaultWritingDirectionForLanguage:(id)lang { return ytlBool(@"disableRTL") ? NSWritingDirectionLeftToRight : %orig; } ++ (NSWritingDirection)_defaultWritingDirection { return ytlBool(@"disableRTL") ? NSWritingDirectionLeftToRight : %orig; } %end // Fix Albums For Russian Users @@ -1201,7 +1357,7 @@ static NSURL *newCoverURL(NSURL *originalURL) { }; NSString *const replacement = hostsToReplace[originalURL.host]; - if (kFixAlbums && replacement) { + if (ytlBool(@"fixAlbums") && replacement) { NSURLComponents *components = [NSURLComponents componentsWithURL:originalURL resolvingAgainstBaseURL:NO]; components.host = replacement; return components.URL; @@ -1209,243 +1365,30 @@ static NSURL *newCoverURL(NSURL *originalURL) { return originalURL; } -%hook ELMImageDownloader -- (id)downloadImageWithURL:(id)arg1 targetSize:(CGSize)arg2 callbackQueue:(id)arg3 downloadProgress:(id)arg4 completion:(id)arg5 { - return %orig(newCoverURL(arg1), arg2, arg3, arg4, arg5); +%hook YTImageSelectionStrategyImageURLs +- (id)initWithSelectedImageURL:(NSURL *)selectedImageURL updatedImageURL:(NSURL *)updatedImageURL { + return %orig(newCoverURL(selectedImageURL), newCoverURL(updatedImageURL)); } %end -// Not necessary but preferred -%hook ASBasicImageDownloader -- (id)downloadImageWithURL:(id)arg1 shouldRetry:(BOOL)arg2 callbackQueue:(id)arg3 downloadProgress:(id)arg4 completion:(id)arg5 { - return %orig(newCoverURL(arg1), arg2, arg3, arg4, arg5); -} -%end - -static void reloadPrefs() { - NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"YTLite.plist"]; - NSDictionary *prefs = [NSDictionary dictionaryWithContentsOfFile:path]; - - kNoAds = (prefs[@"noAds"] != nil) ? [prefs[@"noAds"] boolValue] : YES; - kBackgroundPlayback = (prefs[@"backgroundPlayback"] != nil) ? [prefs[@"backgroundPlayback"] boolValue] : YES; - kNoCast = [prefs[@"noCast"] boolValue] ?: NO; - kNoNotifsButton = [prefs[@"removeNotifsButton"] boolValue] ?: NO; - kNoSearchButton = [prefs[@"removeSearchButton"] boolValue] ?: NO; - kNoVoiceSearchButton = [prefs[@"removeVoiceSearchButton"] boolValue] ?: NO; - kStickyNavbar = [prefs[@"stickyNavbar"] boolValue] ?: NO; - kNoSubbar = [prefs[@"noSubbar"] boolValue] ?: NO; - kNoYTLogo = [prefs[@"noYTLogo"] boolValue] ?: NO; - kHideAutoplay = [prefs[@"hideAutoplay"] boolValue] ?: NO; - kHideSubs = [prefs[@"hideSubs"] boolValue] ?: NO; - kNoHUDMsgs = [prefs[@"noHUDMsgs"] boolValue] ?: NO; - kHidePrevNext = [prefs[@"hidePrevNext"] boolValue] ?: NO; - kReplacePrevNext = [prefs[@"replacePrevNext"] boolValue] ?: NO; - kNoDarkBg = [prefs[@"noDarkBg"] boolValue] ?: NO; - kEndScreenCards = [prefs[@"endScreenCards"] boolValue] ?: NO; - kNoFullscreenActions = [prefs[@"noFullscreenActions"] boolValue] ?: NO; - kPersistentProgressBar = [prefs[@"persistentProgressBar"] boolValue] ?: NO; - kNoRelatedVids = [prefs[@"noRelatedVids"] boolValue] ?: NO; - kNoPromotionCards = [prefs[@"noPromotionCards"] boolValue] ?: NO; - kNoWatermarks = [prefs[@"noWatermarks"] boolValue] ?: NO; - kMiniplayer = [prefs[@"miniplayer"] boolValue] ?: NO; - kPortraitFullscreen = [prefs[@"portraitFullscreen"] boolValue] ?: NO; - kCopyWithTimestamp = [prefs[@"copyWithTimestamp"] boolValue] ?: NO; - kDisableAutoplay = [prefs[@"disableAutoplay"] boolValue] ?: NO; - kDisableAutoCaptions = [prefs[@"disableAutoCaptions"] boolValue] ?: NO; - kNoContentWarning = [prefs[@"noContentWarning"] boolValue] ?: NO; - kClassicQuality = [prefs[@"classicQuality"] boolValue] ?: NO; - kExtraSpeedOptions = [prefs[@"extraSpeedOptions"] boolValue] ?: NO; - kDontSnapToChapter = [prefs[@"dontSnapToChapter"] boolValue] ?: NO; - kRedProgressBar = [prefs[@"redProgressBar"] boolValue] ?: NO; - kNoPlayerRemixButton = [prefs[@"noPlayerRemixButton"] boolValue] ?: NO; - kNoPlayerClipButton = [prefs[@"noPlayerClipButton"] boolValue] ?: NO; - kNoPlayerDownloadButton = [prefs[@"noPlayerDownloadButton"] boolValue] ?: NO; - kNoHints = [prefs[@"noHints"] boolValue] ?: NO; - kNoFreeZoom = [prefs[@"noFreeZoom"] boolValue] ?: NO; - kAutoFullscreen = [prefs[@"autoFullscreen"] boolValue] ?: NO; - kExitFullscreen = [prefs[@"exitFullscreen"] boolValue] ?: NO; - kNoDoubleTapToSeek = [prefs[@"noDoubleTapToSeek"] boolValue] ?: NO; - kShortsOnlyMode = [prefs[@"shortsOnlyMode"] boolValue] ?: NO; - kHideShorts = [prefs[@"hideShorts"] boolValue] ?: NO; - kShortsProgress = [prefs[@"shortsProgress"] boolValue] ?: NO; - kPinchToFullscreenShorts = [prefs[@"pinchToFullscreenShorts"] boolValue] ?: NO; - kShortsToRegular = [prefs[@"shortsToRegular"] boolValue] ?: NO; - kResumeShorts = [prefs[@"resumeShorts"] boolValue] ?: NO; - kHideShortsLogo = [prefs[@"hideShortsLogo"] boolValue] ?: NO; - kHideShortsSearch = [prefs[@"hideShortsSearch"] boolValue] ?: NO; - kHideShortsCamera = [prefs[@"hideShortsCamera"] boolValue] ?: NO; - kHideShortsMore = [prefs[@"hideShortsMore"] boolValue] ?: NO; - kHideShortsSubscriptions = [prefs[@"hideShortsSubscriptions"] boolValue] ?: NO; - kHideShortsLike = [prefs[@"hideShortsLike"] boolValue] ?: NO; - kHideShortsDislike = [prefs[@"hideShortsDislike"] boolValue] ?: NO; - kHideShortsComments = [prefs[@"hideShortsComments"] boolValue] ?: NO; - kHideShortsRemix = [prefs[@"hideShortsRemix"] boolValue] ?: NO; - kHideShortsShare = [prefs[@"hideShortsShare"] boolValue] ?: NO; - kHideShortsAvatars = [prefs[@"hideShortsAvatars"] boolValue] ?: NO; - kHideShortsThanks = [prefs[@"hideShortsThanks"] boolValue] ?: NO; - kHideShortsSource = [prefs[@"hideShortsSource"] boolValue] ?: NO; - kHideShortsChannelName = [prefs[@"hideShortsChannelName"] boolValue] ?: NO; - kHideShortsDescription = [prefs[@"hideShortsDescription"] boolValue] ?: NO; - kHideShortsAudioTrack = [prefs[@"hideShortsAudioTrack"] boolValue] ?: NO; - kHideShortsPromoCards = [prefs[@"hideShortsPromoCards"] boolValue] ?: NO; - kRemoveLabels = [prefs[@"removeLabels"] boolValue] ?: NO; - kRemoveIndicators = [prefs[@"removeIndicators"] boolValue] ?: NO; - kReExplore = [prefs[@"reExplore"] boolValue] ?: NO; - kAddExplore = [prefs[@"addExplore"] boolValue] ?: NO; - kRemoveShorts = [prefs[@"removeShorts"] boolValue] ?: NO; - kRemoveSubscriptions = [prefs[@"removeSubscriptions"] boolValue] ?: NO; - kRemoveUploads = (prefs[@"removeUploads"] != nil) ? [prefs[@"removeUploads"] boolValue] : YES; - kRemoveLibrary = [prefs[@"removeLibrary"] boolValue] ?: NO; - kCopyVideoInfo = [prefs[@"copyVideoInfo"] boolValue] ?: NO; - kPostManager = [prefs[@"postManager"] boolValue] ?: NO; - kSaveProfilePhoto = [prefs[@"saveProfilePhoto"] boolValue] ?: NO; - kCommentManager = [prefs[@"commentManager"] boolValue] ?: NO; - kFixAlbums = [prefs[@"fixAlbums"] boolValue] ?: NO; - kRemovePlayNext = [prefs[@"removePlayNext"] boolValue] ?: NO; - kRemoveDownloadMenu = [prefs[@"removeDownloadMenu"] boolValue] ?: NO; - kRemoveWatchLaterMenu = [prefs[@"removeWatchLaterMenu"] boolValue] ?: NO; - kRemoveSaveToPlaylistMenu = [prefs[@"removeSaveToPlaylistMenu"] boolValue] ?: NO; - kRemoveShareMenu = [prefs[@"removeShareMenu"] boolValue] ?: NO; - kRemoveNotInterestedMenu = [prefs[@"removeNotInterestedMenu"] boolValue] ?: NO; - kRemoveDontRecommendMenu = [prefs[@"removeDontRecommendMenu"] boolValue] ?: NO; - kRemoveReportMenu = [prefs[@"removeReportMenu"] boolValue] ?: NO; - kNoContinueWatching = [prefs[@"noContinueWatching"] boolValue] ?: NO; - kNoSearchHistory = [prefs[@"noSearchHistory"] boolValue] ?: NO; - kNoRelatedWatchNexts = [prefs[@"noRelatedWatchNexts"] boolValue] ?: NO; - kStickSortComments = [prefs[@"stickSortComments"] boolValue] ?: NO; - kHideSortComments = [prefs[@"hideSortComments"] boolValue] ?: NO; - kPlaylistOldMinibar = [prefs[@"playlistOldMinibar"] boolValue] ?: NO; - kDisableRTL = [prefs[@"disableRTL"] boolValue] ?: NO; - kWiFiQualityIndex = (prefs[@"wifiQualityIndex"] != nil) ? [prefs[@"wifiQualityIndex"] intValue] : 0; - kCellQualityIndex = (prefs[@"cellQualityIndex"] != nil) ? [prefs[@"cellQualityIndex"] intValue] : 0; - kPivotIndex = (prefs[@"pivotIndex"] != nil) ? [prefs[@"pivotIndex"] intValue] : 0; - kAdvancedMode = [prefs[@"advancedMode"] boolValue] ?: NO; - kAdvancedModeReminder = [prefs[@"advancedModeReminder"] boolValue] ?: NO; - - NSDictionary *newSettings = @{ - @"noAds" : @(kNoAds), - @"backgroundPlayback" : @(kBackgroundPlayback), - @"noCast" : @(kNoCast), - @"removeNotifsButton" : @(kNoNotifsButton), - @"removeSearchButton" : @(kNoSearchButton), - @"removeVoiceSearchButton" : @(kNoVoiceSearchButton), - @"stickyNavbar" : @(kStickyNavbar), - @"noSubbar" : @(kNoSubbar), - @"noYTLogo" : @(kNoYTLogo), - @"hideAutoplay" : @(kHideAutoplay), - @"hideSubs" : @(kHideSubs), - @"noHUDMsgs" : @(kNoHUDMsgs), - @"hidePrevNext" : @(kHidePrevNext), - @"replacePrevNext" : @(kReplacePrevNext), - @"noDarkBg" : @(kNoDarkBg), - @"endScreenCards" : @(kEndScreenCards), - @"noFullscreenActions" : @(kNoFullscreenActions), - @"persistentProgressBar" : @(kPersistentProgressBar), - @"noRelatedVids" : @(kNoRelatedVids), - @"noPromotionCards" : @(kNoPromotionCards), - @"noWatermarks" : @(kNoWatermarks), - @"miniplayer" : @(kMiniplayer), - @"portraitFullscreen" : @(kPortraitFullscreen), - @"copyWithTimestamp" : @(kCopyWithTimestamp), - @"disableAutoplay" : @(kDisableAutoplay), - @"disableAutoCaptions" : @(kDisableAutoCaptions), - @"noContentWarning" : @(kNoContentWarning), - @"classicQuality" : @(kClassicQuality), - @"extraSpeedOptions" : @(kExtraSpeedOptions), - @"dontSnapToChapter" : @(kDontSnapToChapter), - @"redProgressBar" : @(kRedProgressBar), - @"noPlayerRemixButton" : @(kNoPlayerRemixButton), - @"noPlayerClipButton" : @(kNoPlayerClipButton), - @"noPlayerDownloadButton" : @(kNoPlayerDownloadButton), - @"noHints" : @(kNoHints), - @"noFreeZoom" : @(kNoFreeZoom), - @"autoFullscreen" : @(kAutoFullscreen), - @"exitFullscreen" : @(kExitFullscreen), - @"noDoubleTapToSeek" : @(kNoDoubleTapToSeek), - @"shortsOnlyMode" : @(kShortsOnlyMode), - @"hideShorts" : @(kHideShorts), - @"shortsProgress" : @(kShortsProgress), - @"pinchToFullscreenShorts" : @(kPinchToFullscreenShorts), - @"shortsToRegular" : @(kShortsToRegular), - @"resumeShorts" : @(kResumeShorts), - @"hideShortsLogo" : @(kHideShortsLogo), - @"hideShortsSearch" : @(kHideShortsSearch), - @"hideShortsCamera" : @(kHideShortsCamera), - @"hideShortsMore" : @(kHideShortsMore), - @"hideShortsSubscriptions" : @(kHideShortsSubscriptions), - @"hideShortsLike" : @(kHideShortsLike), - @"hideShortsDislike" : @(kHideShortsDislike), - @"hideShortsComments" : @(kHideShortsComments), - @"hideShortsRemix" : @(kHideShortsRemix), - @"hideShortsShare" : @(kHideShortsShare), - @"hideShortsAvatars" : @(kHideShortsAvatars), - @"hideShortsThanks" : @(kHideShortsThanks), - @"hideShortsSource" : @(kHideShortsSource), - @"hideShortsChannelName" : @(kHideShortsChannelName), - @"hideShortsDescription" : @(kHideShortsDescription), - @"hideShortsAudioTrack" : @(kHideShortsAudioTrack), - @"hideShortsPromoCards" : @(kHideShortsPromoCards), - @"removeLabels" : @(kRemoveLabels), - @"removeIndicators" : @(kRemoveIndicators), - @"reExplore" : @(kReExplore), - @"addExplore" : @(kAddExplore), - @"removeShorts" : @(kRemoveShorts), - @"removeSubscriptions" : @(kRemoveSubscriptions), - @"removeUploads" : @(kRemoveUploads), - @"removeLibrary" : @(kRemoveLibrary), - @"copyVideoInfo" : @(kCopyVideoInfo), - @"postManager" : @(kPostManager), - @"saveProfilePhoto" : @(kSaveProfilePhoto), - @"commentManager" : @(kCommentManager), - @"fixAlbums" : @(kFixAlbums), - @"removePlayNext" : @(kRemovePlayNext), - @"removeDownloadMenu" : @(kRemoveDownloadMenu), - @"removeWatchLaterMenu" : @(kRemoveWatchLaterMenu), - @"removeSaveToPlaylistMenu" : @(kRemoveSaveToPlaylistMenu), - @"removeShareMenu" : @(kRemoveShareMenu), - @"removeNotInterestedMenu" : @(kRemoveNotInterestedMenu), - @"removeDontRecommendMenu" : @(kRemoveDontRecommendMenu), - @"removeReportMenu" : @(kRemoveReportMenu), - @"noContinueWatching" : @(kNoContinueWatching), - @"noSearchHistory" : @(kNoSearchHistory), - @"noRelatedWatchNexts" : @(kNoRelatedWatchNexts), - @"stickSortComments" : @(kStickSortComments), - @"hideSortComments" : @(kHideSortComments), - @"playlistOldMinibar" : @(kPlaylistOldMinibar), - @"disableRTL" : @(kDisableRTL), - @"wifiQualityIndex" : @(kWiFiQualityIndex), - @"cellQualityIndex" : @(kCellQualityIndex), - @"pivotIndex" : @(kPivotIndex), - @"advancedMode" : @(kAdvancedMode), - @"advancedModeReminder" : @(kAdvancedModeReminder) - }; - - if (![newSettings isEqualToDictionary:prefs]) [newSettings writeToFile:path atomically:NO]; -} - -static void prefsChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { - reloadPrefs(); -} +// %hook ELMImageDownloader +// - (id)downloadImageWithURL:(id)arg1 targetSize:(CGSize)arg2 callbackQueue:(id)arg3 downloadProgress:(id)arg4 completion:(id)arg5 { +// return %orig(newCoverURL(arg1), arg2, arg3, arg4, arg5); +// } +// %end %ctor { - NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"YTLite.plist"]; - NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithContentsOfFile:path]; - - if ([prefs[@"shortsOnlyMode"] boolValue] && ([prefs[@"removeShorts"] boolValue] || [prefs[@"reExplore"] boolValue])) { - [prefs setObject:@NO forKey:@"removeShorts"]; - [prefs setObject:@NO forKey:@"reExplore"]; - [prefs writeToFile:path atomically:NO]; + if (ytlBool(@"shortsOnlyMode") && (ytlBool(@"removeShorts") || ytlBool(@"reExplore"))) { + ytlSetBool(NO, @"removeShorts"); + ytlSetBool(NO, @"reExplore"); } - if (![prefs[@"advancedMode"] boolValue] && ![prefs[@"advancedModeReminder"] boolValue]) { - [prefs setObject:@(YES) forKey:@"advancedModeReminder"]; - [prefs writeToFile:path atomically:NO]; + if (!ytlBool(@"advancedMode") && !ytlBool(@"advancedModeReminder")) { + ytlSetBool(YES, @"advancedModeReminder"); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{ - [prefs setObject:@(YES) forKey:@"advancedMode"]; - [prefs writeToFile:path atomically:NO]; - CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES); + ytlSetBool(YES, @"advancedMode"); } actionTitle:LOC(@"Yes") cancelTitle:LOC(@"No")]; @@ -1454,7 +1397,4 @@ static void prefsChanged(CFNotificationCenterRef center, void *observer, CFStrin [alertView show]; }); } - - CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)prefsChanged, CFSTR("com.dvntm.ytlite.prefschanged"), NULL, CFNotificationSuspensionBehaviorCoalesce); - reloadPrefs(); } diff --git a/YTNativeShare.x b/YTNativeShare.x new file mode 100644 index 0000000..e4b8b40 --- /dev/null +++ b/YTNativeShare.x @@ -0,0 +1,126 @@ +/* YouTube Native Share - An iOS Tweak to replace YouTube's share sheet and remove source identifiers. + * Copyright (C) 2024 YouTube Native Share Contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +// Source code can be found here: https://github.com/jkhsjdhjs/youtube-native-share (Thanks to @jkhsjdhjs) + +#include + +#import "../YouTubeHeader/YTUIUtils.h" + +#import "../protobuf/objectivec/GPBDescriptor.h" +#import "../protobuf/objectivec/GPBMessage.h" +#import "../protobuf/objectivec/GPBUnknownField.h" +#import "../protobuf/objectivec/GPBUnknownFieldSet.h" + +#define ytlBool(key) [[[NSUserDefaults alloc] initWithSuiteName:@"com.dvntm.ytlite"] boolForKey:key] + +@interface CustomGPBMessage : GPBMessage ++ (instancetype)deserializeFromString:(NSString *)string; +@end + +@interface YTICommand : GPBMessage +@end + +@interface ELMPBCommand : GPBMessage +@end + +@interface ELMPBShowActionSheetCommand : GPBMessage +@property (nonatomic, strong, readwrite) ELMPBCommand *onAppear; +@property (nonatomic, assign, readwrite) BOOL hasOnAppear; +@end + +@interface YTIUpdateShareSheetCommand +@property (nonatomic, assign, readwrite) BOOL hasSerializedShareEntity; +@property (nonatomic, copy, readwrite) NSString *serializedShareEntity; ++ (GPBExtensionDescriptor*)updateShareSheetCommand; +@end + +@interface YTIInnertubeCommandExtensionRoot ++ (GPBExtensionDescriptor*)innertubeCommand; +@end + +typedef NS_ENUM(NSInteger, ShareEntityType) { + ShareEntityFieldVideo = 1, + ShareEntityFieldPlaylist = 2, + ShareEntityFieldChannel = 3, + ShareEntityFieldClip = 8 +}; + +static inline NSString* extractIdWithFormat(GPBUnknownFieldSet *fields, NSInteger fieldNumber, NSString *format) { + if (![fields hasField:fieldNumber]) + return nil; + GPBUnknownField *idField = [fields getField:fieldNumber]; + if ([idField.lengthDelimitedList count] != 1) + return nil; + NSString *id = [[NSString alloc] initWithData:[idField.lengthDelimitedList firstObject] encoding:NSUTF8StringEncoding]; + return [NSString stringWithFormat:format, id]; +} + +%hook ELMPBShowActionSheetCommand +- (void)executeWithCommandContext:(id)_context handler:(id)_handler { + if (!ytlBool(@"nativeShare")) + return %orig; + + if (!self.hasOnAppear) + return %orig; + GPBExtensionDescriptor *innertubeCommandDescriptor = [%c(YTIInnertubeCommandExtensionRoot) innertubeCommand]; + if (![self.onAppear hasExtension:innertubeCommandDescriptor]) + return %orig; + YTICommand *innertubeCommand = [self.onAppear getExtension:innertubeCommandDescriptor]; + GPBExtensionDescriptor *updateShareSheetCommandDescriptor = [%c(YTIUpdateShareSheetCommand) updateShareSheetCommand]; + if(![innertubeCommand hasExtension:updateShareSheetCommandDescriptor]) + return %orig; + YTIUpdateShareSheetCommand *updateShareSheetCommand = [innertubeCommand getExtension:updateShareSheetCommandDescriptor]; + if (!updateShareSheetCommand.hasSerializedShareEntity) + return %orig; + + GPBMessage *shareEntity = [%c(GPBMessage) deserializeFromString:updateShareSheetCommand.serializedShareEntity]; + GPBUnknownFieldSet *fields = shareEntity.unknownFields; + NSString *shareUrl; + + if ([fields hasField:ShareEntityFieldClip]) { + GPBUnknownField *shareEntityClip = [fields getField:ShareEntityFieldClip]; + if ([shareEntityClip.lengthDelimitedList count] != 1) + return %orig; + GPBMessage *clipMessage = [%c(GPBMessage) parseFromData:[shareEntityClip.lengthDelimitedList firstObject] error:nil]; + shareUrl = extractIdWithFormat(clipMessage.unknownFields, 1, @"https://youtube.com/clip/%@"); + } + + if (!shareUrl) + shareUrl = extractIdWithFormat(fields, ShareEntityFieldChannel, @"https://youtube.com/channel/%@"); + + if (!shareUrl) { + shareUrl = extractIdWithFormat(fields, ShareEntityFieldPlaylist, @"%@"); + if (shareUrl) { + if (![shareUrl hasPrefix:@"PL"] && ![shareUrl hasPrefix:@"FL"]) + shareUrl = [shareUrl stringByAppendingString:@"&playnext=1"]; + shareUrl = [@"https://youtube.com/playlist?list=" stringByAppendingString:shareUrl]; + } + } + + if (!shareUrl) + shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, @"https://youtube.com/watch?v=%@"); + + if (!shareUrl) + return %orig; + + UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:@[shareUrl] applicationActivities:nil]; + [[%c(YTUIUtils) topViewControllerForPresenting] presentViewController:activityViewController animated:YES completion:^{}]; +} +%end \ No newline at end of file diff --git a/layout/Library/Application Support/YTLite.bundle/bnb.png b/layout/Library/Application Support/YTLite.bundle/bnb.png new file mode 100644 index 0000000000000000000000000000000000000000..d617570a09b701c7cacfc8411e8c36b9df155985 GIT binary patch literal 6836 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

#~0{BaxsZQd}za z=4tj{iC%gs)mG16e4P}=F43uCOpG7;5&F~#Re~r{;%8jFP>Qn|hN_R)n5_!!4-P@K zZLZ9-7(VVd`Kk0gW1sv?SQkTD%Z9=Gf7+vbPGdVwLf8{T5p+xF*?mMbE% zd??%~5{&KRK+&_CYOs=g?!vQ#VIMu4zsuM$%u}&0iQ>G!KLbeZ8rXKz=5Vjxrx>o# z=>J(1L$;Qt&cphh zDUC?JG_WPB>RD`zAZ30`-GeoMjK$*Dpf>2#=5H=I35u&T9=>sNts^Bl2zdbK^jdzK zHpm#$&f3b)ygRQVLp}Q%B0D9;kLnQodNKeY_+)r+WG9U4boM7BDq4X!`~LOX$@pl( z)S^O=YO8*y^ELu zmg~d6_df@#mH$IM8&BgKvTL^J2a&Mp!OE88LOI2e0f$j7dCuTXeoY?_$&v&T+#r4*>jjhTr?jrgnUh1bLTHd#4Z zeOAJdTZ!%qd3L%pAuQx=7{gOs=8*e9`@E;s=1SmW>6eYJ3uLSXm)JRIpoWh&{tyz; z%SyCZ+IZQg%wxKuWpqp}^A63qemhFX-w5Foi&C-O=1L>Z{-*z}eK`&dFvU!d`B?bv zQzI~)w1zfiX<+G&x&wGrD-tV^Qy;4Ok_Q_7dxU5I6E+2~xQ~iVz0gL4Q(8*yv3^4R zsA3Y@yj~`maC4#2LerL!b$KJ9K9f9%z1NG8b!!ZR@kqlF0#~F+l4+=0nk#C68qhJH zLFC81-L-(Wd8{sNhx9cJFRbtfwOGF2s3_?*pjpM$9I;mMPQ^P9soyNeWu~sr*XuAe{LdI=7fB$&yiW;tlS!rR}4#4es13URfNuX`}_W&Wio@P?KAa!N!= z0y|a90B!`zWKc!s!72Uz$S19PPvcSYIuXhx_GosaOWR8_e@byx?HVy9hedUGQyr21 zv$Jqf$$`u5#{YV(o#ZrQLyVmaiPl&`T2#l}2v33}o}nO3yaZ*{zj}tifpCchSrEm0@`5@M z&SNQ}rQU^>W1=wh%y+&EHGgaqxu6`SoCqCo`UAmO@!^`B>0S>!lKCC%D~*r#q}2Q>;B()#hZdv#d%UsC6l*PR4h{?jyJ)%q zrdmrbE-2lQTg=@qEZCQnMc_&!;3>zB+3WB?G`)y?4XY?#Fx(z|+cOnd?Q@+hufS@e zA%uOxTb?p-2_Zxk5AiNMVifD0h@wL)kFxvZy@9i94sKfHcjAcSS`QL&y;iZC-6Tolzf^Rb!4bE-ARvu2fd z^2`Gs^SLYh!24MZzyy6O`DQt193j5 zjR~I;LrS23-B3PxD6_hU9kN6f`4o!N23fQFiY?RTv-f3Bj4`0=^xl2CWl^YgQ=p_^ zS@6}A-Z|d}21UGqI#4I-^oVWC`?vz~7cmGx>zkh*@a0-KC@6IBJh`7KDg9&A5?w4d z&n8x0*VH6iv#9Biu;HO3|Iq~Lo;IF0p}X5f zC(b+pqQDJdPMZePn%CZJNl;=FK1C~7aJ!Ykx&=khH+lRHlury69c7$+n7w%3Lx*D| z>W}uJKl70hjB#__;%h5QFz%jZb37OIS{7kd4tU&d!RGREBB!NZH4^K%u3f_3f9|ZX z@^mbcNAfVKT@U3UW!1mmF<_iLrS0#u#5(czL_r2E!X_2QB|qosn!%>4-KgEGC!LQG z%;^5J=vp{O<$WibhCjOt$cFFC@GCI}f+(WLYAEz9kTAe>w-$KzDk*9e7i+K$(kwQw z;w-}(Bt(682cn;VX{DgXv(kDIaZ=Wm17LHBbd#lKgujIw22{=jbq%z{RRRMxj4EV? zW=EIB*(pL?2IacR@b|pA zxhPtBF;Sfa9~7+6-soNj$xM~x@^EAo-ro-_32t8)C3X*+T6;6~(7XcKLMsAm0sn-* zKY~~^$~Oe^F_X4#E5RA0>;#vVJ-UCemnF(jw5}7$kr)H|Sn$UqLan7g65tU9h>E@a09S9$^ zid`uJ(A6%<|Dy?g3ZFA5Qv;p;p9jEJ*9{~fSoZ^-9o_E*3ypBi7S&J-X~e7^)1tFF z?>azSN9xQ!9_ad)0f(N(Zwl#cOOzs)Gxi0qR>$2O=EJ5GEjee&e1wUOyQ2uf!@QI_ z)_6~=(qeY9=X(gAXwmGCe0OyNCCC+qsSEPONse$50LQy2t0tleRhL3vGLu~1AZ^@D zd!U|HYuCubc)iNZZ@IOEq=+$OWc}zx!KW-d2cD60&LtJ({ig6kz8%0IH>RH*_7Nzp z;^R(^fIUpxRu5uB=XEDl|IoLB;0pekMMYT@E2PmW(Ij4{(9#mrFA82Xcb&>@Kn#ek zD|2nw{(Dr|oRjC*rfI$Y=)=x9BRytDY8mV#?UjGxP4E=NhJZ%~@kFke6o3{45!;!* zq^+UP_UTUJA3LT;c;d8Kt_qg@XXW6SBk1&qS4$uUg#hcXHC-xRCVuhxB5bIcC(T|J#Y8zl{oy&s5B=n{Bm@O{9@fDkE-u5Ohm+fr~BTo&zvw#6iF@SX*; z{P`US*WW|5n!%-K!ds_mFUJP@qmlaC^8lxOZz96UI#668yTIook*Me*Vx$c zRnWdP6m&bUjk>VUU>_dx>67C3agi!5r}p^$VvSApIA0+;Pg(8{YYf$MW{HnwPh4B; zJJI570Nxzw<~ z&ywUKG!5m9Q&~7MBV=8Ll+Myx)j|FT!Cp5A`OdN;TaZp%OyI?sk|O;z2Vg;~IPc7p zOEIGy=*)X95>&62U!n!SQra9&(y<_rX{9d$>j+FXv`7K38%SL7SVG7Q94(&imHbnw$$dYGe84&^|wpPSQc46AFhB!5nzYDj2W@Jjnb2Wj_8C#~4BJZ-3uz!F}Kj{}Dd( z^J(;^IG9WC0f|yE0T|Vs)~ko&e};mUtekFP2HIsUYxYdd+f(09&^C`5Qz5aff<`D$+&@QoGpQ|jN zET;zLBR(vn1UM)N|O0?e}iW)Kcs}AZ9e;C-z23H5 zu(O@dr5~?pDX~*HI18HLlyzA$oSN``))3~enx9^7nGeXlnmB6!!&2GaY4tHV=kz!L z9)S7W%pQ+{9xU+zt7S3|7ftX{r+tz74Z6^J3bu#mLp`6zKZqxG2}0NU0Ds1hq%CN4 z^FwR>I^&7eMs7OQgQ~*04#sAu+%H!REtU^zdI2Pp)y1?A%TfPTt1yb;nyW%r!z$#& zkXgEcvL}++71$4REl%VkpqUDsV9yB87_mWEHzuYD9CWA#t-ha*pc>odig^fQay`Rn zrjE)=R##RLjaC=D)0lxV`3*bJ@*?^?J@^~Sg?P?7(C3B${wh=tEDh9C$TN?^dCC3; z1z(SEqcAi1?Bs`s<_cGovmOz|X}s!2o3 zV8MG9|7uWnd!2))X7y_+nx4~Hd#JA#xn9_BDE z&R?q+Or!8Wxohr)`30tos~6GptjSuV{FYj@9LJNd1WWfux755;{&^OS(=k2X&!5{C z03%1LVOSG&!hi(Vkc+_5bEu4f#2(r|womY-YTIT!Z-#1uEcHvR7H4jNZ?08d4!jd8 z=`Oc?3NPSsuQooTAh{T5DN|~$oM(l(k17rCOCRCnYeH91fz3Z6)thM?q0zvj**&})nai?5)rd? zifz;}?!&be7 ztJfgNj$`9`-JKMyMgX3raQl7_PgD5Le7K!6&dA{tqZ>yndQiH)Ow3Y_^@h!Ad%!D| zvU-I)@;5pp6IOfKD`$|HKHZ8AB`RwArjdG%Za8wE)ce_IoGg~JI=Lc<)F^6HOmdlp zF8c#1(q|T8tMQWANE@Pkskgbl7F2K$jO(j4y=e{=fte!%5c^s*VE z`;!xzEBj1z4%&VaL5&F>RM4cQV^3QR%zMb_rX4QYYTe{_>s3VRS7qyABiJERPRu`v zC7(AL`Jt{{D+T$v(9yl_mirt-vFkkwkngDxZ32n?$wd>C9h;u4Nfz3r`J1LS0(ixL z{9jJ8IzLFV3#zLJ7#fTbKoF>{6CKEmXgRzPkE(i8YiNEb(B9)h!_P+gNZ2aVGk(M% zTj!}z7oj<+tOs*bGrA(Grdw%aSEgN&+eL;g@wk!Kue@4t0>*U|k5QX9%@Hkf9-*38Co+T|LS_s=o# zoV^M;J$PGZko`}Ehac`+B3S@k1s30*S_NsBLPg%AG&$hpAUuE=K3r)=a$zlYy78sg zGDkIZbmmKIVsDROaBcNE)9e0)WNKug&!(fZ<$ZtNe8*u$6b^T|xi13D9Ut!rB)UK= z5a=ynY;f7;t2=E<`s^q1=cbRp^EE`GLIThR_GN9j_5nETM^KG%K^C%nUDKPifGX){ z4{jrx_APQ^-u#ise0BLkhU7DoK+9EY#W;%6n*e8SCX(K%MSi7rjdr=zP4RmcLpA$` zc~P!u0j-_A^uT`EPBI$^epYE$9uj2*xF2a zqq8ONu4f%WkJ;zF5C#C6RiyOxKmoyEZ11m?`u{>)*dOK1S(}8ZP&mUMTs&-gzUVV0 z!TtdAd_yXt5ynn^b3(9R3k{TT11x=s4ihlQdO zGZ1{Ax?SyH9AL%d>*-SlVfNQn9fc(~_o|ttY4$PgnwaeH#lnEAH|(*i^#DI$eaBrlo1_ZJ3CC-p~T9+{AARr zdda?8uHp&eg^8HNxEKGFPtB*xB_!T8o_8Q4VBCe9xo7nYDj3*DC(g0a0AZ=@$Z7E( z*o1D${mYVMS|x}L+KaS`zVazJkIHd4Dqojb8S|-YWwo2G+Me+nhHYIrH7pa^yzw&7 z!K8*S+?KH`;$yta!6bb16Et9)$zK4&#vL@dGR^;+w~e;jZH4a}ZHJ(ZcCY!;lBZ9H z%lm(Sjcinye^$|HxQiZTiz}UJmU&2I3Dwy!TsOZ1P0VTNKUMITK)EmgFjN-HIwrED zAe9)$JoX=0V=W=|PyAAfJY>ngAj1UGgk%?MJ#^`vn~1baI>#51e3O>V$2gBK zYJFQ04)IFh+AVgcxkY0=v^TtEH0ELpj}e;k_?7^@1Y zfZV5?<0T>=S~*;8_}}ch_F_4rBr#;k4?oB`JRXp41gC2^%{`JmB*pEtzEefYTcEIK zaOI%An3!`cr9QDTc+!%H2~;J|^l>4Qu_jr%ZV&JQy`+98R1aa?&1d0KIF?C|W-)I;1H* zb~i?}vrD^zPz__n*Y9E1vwg7}qlJ*a8t5%FkrtC>Yvk;ar)+RpQp_q=?l>NYBd>@Z zFm4#q#kmPIzC;^2OT#SLT|r6gf(cer)~Z2hVCRKW6e7mS1h z#^roNP>oEa+B-Wu|B#qbHcu>GSw*ffeT<1BGv7s{`=Dxf*)!N%l=TR+?;QtO5{c-> zpEWSQ|6|G}RfM1#1*aOvfghjBn(Olk|5hWhj=KnCp1?llycFMZ)xm$n3Nk}v%f#Q#}#$&we1&{3{zECVu#n~z%V zU4q=t!`ysmbh<;g4wQeZjm52sJTOdzK>J8pWyn)twZ*~K;et-uI>}|LM$CLA4(r}( z^|Z^n%RaHxq?zeq>=pl|$~6yM5WMy8vd3Y~5RM$$M!mH2bALmIm43kpl$)))_I?f`}SjG)uU6I>{Y>H>~~bf1J~v2U6G337$unlu2U2JM^t$LX(bY* zJb%!4I1fW-x8{UNfe3F-q++Q$t~LT>qfCtrFXEYCdPa%Q+8Sjb{br%(vrl$S(jD8L zK`d(V0Mnk%AM66cR5Nz5VToSIUmT>z$W;Rk7iim95rjXsm;hb;emWFDbSV0nTRdwY+5OtY` z^)rH|Wc&K!C0!01*7clg(0c2b^ZXEM3bEs__1#R$LyKKL|2SYM8!A%GMUIUKI);^g zMB1d`*8W0Rx&cuaV{CX-g}G^@*RxJ0F3y|MFC^V*{%bJNWUl;6VwSK0}u< zM1KgHGYAcpZ{3p1(~QP0Y+&1_F>IaKYQLZGWYg{O{u~1*eAhomMun7k4Wc(3ged#R zm(?sKC$vPqEeztS3G&O6Uq_5R8~Fsxxk0Fc8IYK7cbZ?d5^Wrb#G(POaISgTw%PQ% zrd?7P@JMlzJ5X;;&QVP(n9$k8k98$f$I2N{UdbH19zf)w6G30KXw^;=%Y>L;%H^cd)j5p z+DFZu*aNw<3-iQlU;+&akCkj&iGgMOS@R9f@WCH1Epdsb2HWbsNMF@Y`W0*XK_eI) zga`5lI4*XknotF2@8yLO?9(dn&Sgp9ix*2b#GHc1sN%9e1c5o2J)Rur7VsN{rK=eS z8~AI{q}ss^&V04Vr&|wqLVcoOKmEih=S=%%uypm!GOruO1 zP%oci#VKmBu+)m6^D6h+rXDqhLV7z7wDktc;nro%f zU1_nyZe8AEw6_b}QM9LR%+R zn`tvlm2)$dpSz5Em`LF0D0=90mP4G8+Byc;;~+A?IfBAH8}h6((`=Z=`w_~(%$QweZlp_gaMd6uu8Xxww~P-KtRB%+)&^yg z0GKdk)}_XWXBGW;G2h$h6qrwQF=*C^%%jki@T)S2p+6&ZN>fa_a{(~JGl1n6HV1^%rS#4=mRnA9i8UC za}Whn5q{jNCD-Cscb!dt;rwS6&VFZapUEdv7oSXQ5=6*6f{d(lre@ZWY2^}B!*vC1 zGUJW|V07oOsqLfmjVtVP(+XO&76WbL!fbSD3ZcQy{ zXL4xb;v{7##-h_9wb95^(={hB?f0e_;NG!-TJLl-^A!w2{%ZrVLU?+^WENW@!p(TRQ%h$6`W2vEm zO%}oAE~`~pPP-6KxF;U|emLLxw77s@r0g9LyDLQV%lzfRjnTY@Won zK5xAlylGeu56c2i1r2>G!_5!O-JV9eQd*Se-A-ZOQ{T7M;+~=U58kAU0pgkG{s8}x z5Q>$+dk|`=_dj1zi=9c65lqrTv6MW=`z{~`veS4u_9%hGBV_R!3XAK%kr5WI3aqVNKnV22Bv0EIilrL{yXyJC8>k71Z;JL%-=nV;(f_=gW3^6yM;* za29Dxg=C321szo1)`H@&>sX=)6ij8uQU0d-j8OloWDFQJ&MWzzp@zdwPkCT%*T&l$ zwn*%C(04(lBdCXQ>>h{4Cb%));#q?buymwR5xyj zWS|XJQ8d~ukgnejf!*sDQOB<;a%5@}solb5diBG;q(3s(VkhuP%VqGcx+DfJMOr{} zm4RCuYZ2l9gwRlE!W$VI8CK|NL)H=RMr)B}>-7Cheb|L6%M~rElTCbyTEz0oT&MX( z$5v2HFjKW_&bP8<)LQV;(%+hrvMKS5lqWe}bon3N4frf?QgB`s_%@`(@0Q`||HbBk zMUe6Crwban2g4mdb|8H0MtBjh+;F((6_d(MqY@*W$bXZ&VUNPLuG4IDiP2nZP2893Nk8UHac5D@&w|L{MSk%57Yg@u6NKmITDp_u3xpp5Kn zogMA0>6{H5>C8O;|NhJ@{}YdZKpzS}3IYJ8_uK>s_$FDwYKQ<~%;#0<9n@0VQZcn{ z@KyeNG~Z-i%qo^bhNWENocBi>7#C)>4VLo}m`4u&F1Am6;cf^+>*T{YYN9ckSh$uU z`O!P2WC~SENmy|dI#&D_yrp0l{J>CRcGI5PRvuvHhKyM6RW^PV#4KxXwQv91?1$s8 z)-TnRgXlWw2bykEJOq=x4b%-ipI zAYv*YP1a37ODVCYRs};pdt%`A>lfm9g2I60-#1M&q=P^81Sz8Ko4`g@8!*RCBR+pN z_wM+D0-8KUCiuTle z*LvJ-GOPZNV0-KSJ8X6ziH>3@J6Uf?X@F(J5m*6aav+ zfwRH?6T{lm#^67t{(pKhGBR;6G5%jk^`UeC002P#{ucn~0L=0j#nZQR-1t$7E^Rf- zrh6s?2JHtdnLCmBDE&1cwNfDRhmOmK3-lbkP*7P^?qk#o=epu-m7fVfdS4D8k`3aA z-+#xVVJX>b@mAkBmjeuTfWrSKPsOzPR^^Bhc`ci}L5J@iay9XCKl$L7c5J*R5}u?E zARqUTnVU2q)(81fJ_z8Jnrk|N5!W*YMERHe>%B4nv!v1)j2BxXeYcI&v;!2mwpUL0 zhAE;x6Wvp2qGI}8N1d%>uaZ?o8x#RlNJ9+Mytk~;oB=4>UY_`4!T%syaQK?kAVj}k z0?9O-UKM-dnwuTI%)v(*xXoi(y0KCCpuACFqoq|;4d2`Y(l1ITTg4xsv`xNcGKMOC za|of8Dvz}hx-Sb?IDbel8lf?dt$x(PMR6(L_L@2z#3-p~iqhk@gI-!|R_(cctV&)x ztg)dm?O#P?Y-F$Ey@GwIUPeS+f3vM2Xk}h?C~W4Myhi*IozwINZBn;4r^!RHK~G>O z4a1=ETk(5!NklQeq5kfF%hcS#uxg1giekc*P9-| zzCt~TvU{G%$!kMqpFlOOeyq^t$y#2^S4p5E92?*K|0JZE6Xt=Fc@9(V-NWhrK1R6Q z-FIq(Pm9u0YAZYB(px_5vZ_Xtkc=nNq*_k`NyEP@zIQY*R~`3zv8_=V4}+TMD1);w zr^>?rtx5C_g8QdaGNi%SpKH+^Wz(W1GCk6u?7Cu?fJ!w+_5g)vTBOkZsdeizcWSTu zup=04X$xZ!C{Y!|u+l$T1k>hOt9f1)&Niul@? zJ(n}}@Y}vBIJLMKOapw79}Xczd1j@@2J@La8QtM3l#Rl zm5c$l39C|IZGiMyL5Ap{}$Lqw&EZcJDFqt0>)GjhS9f8jMo!yC_%)r3W zx_=GE;m96h)T9Ue(~k{uf~m|_ObqOxd;yYH z^3my{A490_3#w}s4BV8&!yDJ`V-=oQbi|MM3m(Dy)~D%!tVdyj!E4??6Wx9`i&xmM ze$0wFu7vcV)(Pc@0|6Rkuza((9Vqu%B&!zNj#Anh#3VZF&Z_|*_OdXGr69J_i3Xfy zX&&Uil#+p9$j?>d0PJI@7g#;%5vDIA3rvBjyQBOO5~HZ7cvNu9a^LEJzH}#b9_kV4 zTiFz+DrYJzP3gjt+CEjdV27Shh_3f76W)QEr>-nxV3&C8|I3Y<{G4)s{(0RI;3c?= z@w()a*8URlUHhBadd;f(8)Kg^nlxD8|oAB+mcm82XXTiZZ86b>(6EA?}5d7Kg0J zV3o?f2p{b29sq-DNQiwCjVAN>@+_j2S-6a~tET>kO3I{O&|T~$)j(LE%mGM`TKio+ z0C#wxhW-ty>+1Tiyk-`JB$-R{ujN@jqmFeb?QNjDQ^z^X*7cR+kt5RhIsAYplZ8od z!Qp}%p7!Wo(DcajJS>mPfFPmw-|F~LGIYc~Oe)gWEDGf|!~Q>*D6ej;d4i@Yn`qBL z*(>`+4X>>kuFh81lYdP zB1vt|j~K5(r>XS=mJDnym2dw>kcOdhz!hiE1in%n7fUo2Z#449%s?w7A)$m)WHC^l zS;Cy39bhSur$Q_8yM|D@w<9|*<1+7#w?ciQeT~(v;Ev(#Dfmmi13g>TN9`K_F1>%8 zIw$q=r(9YYbtKPbL$?prq^wH#R2Zz%YIeCpGB(TT=mx)vA}Tqa*5MXFZs%qguQmZ6 zn&9NC=+o|nvhNxzo@_jRrsXO9Z~EnlGtyHWa=AWJ$vc%_mJ1!*wghQd3UXqrM7?{{ zohl{utp))O^>~OPI2jn=h zn9e%Tu9)_i5dIf3RMZB~Dg*bci&jam$}zxT^e2r?o-);OmNRAL?6#w;r5DN8)KrK* zGuf_PcXkT9-x52}sM}!Yooco!E^%agza*dd^A(lEdE@wx=p%rNCuR1oj3s?#)6$=JJ!XrofsuSJ{jR36092RGGbCOg!R~n~fkg~k zx~3yB{bNSSG^$sHPKLRLLgPfjji&(zJ-mRzMhTS1&8KoH>AU$Iqvr$ZiI`9w zlPtN=n~yM)mLJY2ybsJHKKxXJRPd{P%fBc=`6grJ7}e=zZSgN4;a~7|6xMR|2&r-(WACrnE;Jmp_0)nGo`Ymjp=`Q+ z)3=o=O&$qr$W$efZCmjE_)8q)ctL(-t%g1uko2{sk~ zs=7|ZZ1|C#0YwCd1YJ1pZEmSa;I0JeaqVKAvysc{oq8D2jrU(9$NccSbIS~^*5mTL z4jdF0UqqFt!UUqt;7V3ZcPT8KX%CE_tX}H729R7Ke(@uGJp50|IzA9K2_Z6q=bqrN z9f=ky3&Q4czN8wO60RNP%A^L1KgkzUmKI-lFH7@)oNMKpBeexu;Fsn{69oyu-0zH8 zT5Zuo9~j5;xzQH+r_`)P!a8go=qe<~yTk7%3jHZhV|kXX|j<>(i03#z7C| z+_K%1d4Up>m(Y{gEGp4@iuwc$N!PHHeEr9y&wO zclON@Hm}G8V*Q#@44iAqv?SXrwZw2bQOw7F z+p5=co#W06`q&_N1f|lTvS4YYE8Oe1q=s*-CK=7AZ%ll_6@CNikT5Z5t@2-DI7DD9 zTMqde0oCjD>-|CJ&>=SpzlxS|+fLlsZj>?U)3~`ilQ233xK`^qz+d3`E2-OeR}XFi zd%mAQ?z=rUC!#heuUaA!SBo?{xzH8zfo1m5sAv9(?zG6?%`Sh(m$PScbMJ6T)j^X@ zZ=;aOT1Y3aev9O>36*`-dpSgX+ns1tP~%gXyaITVNY}5J7AT6O;&LIGR!0 z0*qRJPShITR5(u$PWBV!zV03tGSnExs{T+!2Tf0>$mK%H@w+m(Be6@~uPHL!f}~1^ zwT4_aYCz2%S%Tbf>k1UNJ{f;N9C`ywz@%Bxa1l$p1*~a~egFFEV16xU4GzG0c*aAd zN%{On2#|G0$d^t9?<}DME+K#efAWNTIM9?OWJC{HbSp|V{2XsGI&p-Oq$!p(Njc~! z3TO=u-p)#ADY zq9=K={F#Jab?bjZ=ssbJn37Q~2 z%@7x)K+NYxu^`dtu`?C~xfexqj$4}d(!FepX>f79HQvGn{PL#};7|RkZ=2tXuC$VN8#PDsy7O%SP1&o_qVmE0NG(JmGCpJe96{aopzJ zYWF~o)^AiJBR>w5hKsrIUAf1`(bQvOn=R1-f10FQ;USRRv=;LOsoIk+n?gOwHDN7z zw>D-fKqQw4pa2cFskE+EO*o?a;ynO*g2M7XH(_>jQA=`O)|y90D{H^nZ+Qscr0aWY z+AO4LO~@W2?ZdrncHHOHqCC0A4f+5Uo&WO3KSznoR(94-h{n7n@Ytd~E#y(1)2c-buzvAbnspv%+J?VDK4Pa!8Iwl1$QaQU-`(lwSPu% zw|=z%@@&etephWt|BEi0*c@>>6+vZ0rfKP53XIZGIp-3T%PRT~lC@^seYn+|ghGb8 zSNe(93ej>%mOSeuruW&(eSGVk(N*(tj3L=Zh{Z8d#ih)Dy5B~1v6AbDSZ+7(7;0~~ zrT&D?P0_ek2whor@X33xH=}f9`!$CW7=ncu@ zEYdQ(;Y5D!!6%`QQpIi`yy-f`@Fb%yetc40RPHa9LGOqPucjiTUE|d&y!*%}7S#I0 zUwWP(3)(X*CDw@+khk)nBK@jx#T1 zegPBz=8g>_YrG_2h>8FvOTA9N>^xi9L0^DPR>N*rfwD;7SNul}xY37#bbIl0tsH5- z$f?Bl$dR-}^4KL#s+L**QMx9aTz1<>TOja|2p2Vjs+5K{w$YqOUZ>t|rwHeBV{_34 zh`TF~csxxcqigR+NXYfwU6lKJ@&Pdx=TS3HR-$c1N1dxg#sx#nFbcy&#O0sNHYU{i zc!nOdN!20n3BGNh4JioR*eGOjh`jlhAjvlLxuS#~`ofPhvt z`~H(|Sy2&Cbd4Pi&15C}ess=7PHB*D4@jRW{hIB`VWrt4Vym^XWx#r*YgejqE zqAqnLxdcZDmqWV|rv$7wxnd}#kYHOJE-PYut#Y)Ci_CbHgI=2+B;DH1g?;IDGlGqY zz+g|>+s^E^{c*E#enem!h;4uga!anT>G&zeS};!DXjmc~Wg(C}o4}H8`vIUtpner( zga@v9wy4d$g&%w9*AoyC>~f?lZYn9)G@$K-`wq9;c9bX90 zjC}YME`jI=1Pq1W+slQRM#Mj{4;{#Lqgvqx+|3(B`UGcSd`+sEa?hD9L3&B9Koz1* zKllkmlJn1)+J&#;hy&793HP8{C?5^F>ITtHf2v~&Q!!|3oNVC2fW25F_Q^q|La^9L zZr|8ZL~ysBB=adqjfrkvD;t9jA3Ek=Zs9@)5O+|~75xt(wYmr>96N*76HB5mBtC6y zi`^++$728*6{H`y=@IxX0&PyWA~7w?^6S2B%z&4LkUz^FSf8 z)4T`F3ToSRb`5de+_8S${z;kTX}}fz?BJI8Ax+=p;{?<74J*pFAQvfX0oT3j)lRA+ zdAFOsQ^j2o{D@e@9?`)}&5Y>nRa1044{fm158e7PIpkVKdVPf}mLcl6e!;r>1?VeM zm^$+2e0o)qkXj_6&>M`!*3s}I;d@gz!6NgM?S#GTvrN|N7_-NXxq2YWXSJkdHqBu#6#CHt+Zylud3@Y9`+ zy5a;~`5l7BKtdK4(rI+B5X_mvZ7t-O}FsdBx(uw0}w6SejiyX-!(uMAbHRVFh+Sp|*OA4~} z?qd&ALbOJ3HU|CB>~L7>Iiuvv&NY|2ScGa?U?@t8&1?B_e8kh}W4QAX`?16&v3HA& z`-9on(AW2s?9)K6ob&d~`_oF6e_J8Rd(wW82bUn^05p%Z>J%gn0t=Jom zR@Y*NHY#%UA~h!XUvG4il>@NT#X>3PBpg$5(B$Y_DcqVkZ?Ty*mhk6-LS1J#h!#*A$_havKjE2m;T`^RiXG7vYF9oUcl7gMw+tL}V@s3{#`TZIF z{)&NOq0dJXaRQPD1=iwvU1|mskx$-|h4!fEBaB7f1rs6qs7{||+f1X69Rv-fWX%W#rz#Wcz zaKdqdmgQ*mlv)Ypeq2hc7a5#t0%fLRcx-CXA{63RUV*j+r@a-@2$XP#eeymje^76b zi6u)f$TUerBSyd5uS+H@3Sgk?$DIsyAwHCfqi0DlnB??%V&=L+SvN1A6_80Qsk4DM zG+-K;9gh?va!vxwqZQtzx8Yc4P;}lY4OJv{BYMxr0c>#xte#fJ^`!V|A#4M^_WpPG zf~NJY#g%h|XN~QEhgHUN1nZx?5lt(=+;=wHl!%+&aKh|=IXi12&q%Q$+%K4KDzebc zuhiU=lP4oeHR4fQ0k|5P3@f$5f|m4=_^30kkf1THBU2ik&L2sZ50Hc&SCRWN3~jc7 z8_b;yCLuyyneSiZ=XD-w8ME=C4rD!I7YF#d)8&SZ>!@?rI|F_+pCP#7jJRL2Si1Dd znKT}1x+VI)41hZK%YzwZYYBfCjnXiw5Mb(tK3Fhe!>0oTkTfIc2!z#^ZCMCngUT;G zEv;YbP@CcE?HbY;)McV}3Pq%y(eyoq2Cz1@iF4Gd0pdB%dna55SCpF`$tx_IwZ*L- zop3-*;J?1c^8^M~Y4q6Yvo^0flC$H_le8u~Yy794 zpIUHt`ZZM0z1fAxwtm+bna|>AiZ# zF_Dhuo?*FtfU=*(FRII&x}7;23lv{}_@Ty?*h4cp&EUivP$TL0<;W`H%a{~U&!d#E z?FDyA|NOEmaB5MF>tNlnGNNQ;Wa5}&PM*B&(j0R*>NA_CZ~h0wHZ?@gBRI0$|Gg3@ z`2&DH`G6ph`B{6Bu&)M{(_H0YJ@B*MEwy|j`u z;6i^_M(A)!E22Axv5-O_98tC_Y{ebeMN-sugx3x?fl2;F`JNH(0DH6YL zT@n;W8ze~$5`{e0^IeA-rb~s&9Mn--t8(TKe)E89@*4g6M8?%j(68mMi5YW=hdt-ecJL_HA#N~dRLFl1oi+(TNT)(_M>pJ z;8(wtoa=h>1L+fpfR4!)!_^LH?aItCs-t22M-nE?OkgA;owjstPthJ-dSKQ9yi=n8 z9W|O=B;lnP1AN(LfCp?zC-VYgd{YEh%`F$K(hoR_C6S;o&g&eMDDg*cQ8PJPqsmtY zrI*N&^gn~}s0?!uQGaX3iat#_^okkEHFj;8{s>&)UStaG?xHLNS~ZrTm{D@1{PzoA zMCXbp_hzPYN)zb^NP+2O;O&d*9YpuMb;LiO6-h zgAxkH<7EWEKcP{#r(>D5rjJ4$n~)Z2GOzn~{GK39vD^mF~1?Q$;yo!>k8$gxaKvJ++ImC`}B6xRGg2>`zkM! zf@brN8jWS8{6({;3mEVzrTa%Gr+N)h`gMED1sT*AJUwHRY>dt{tNIhpn8veeivES! z7P1^N9?EWHEd+blrhMDn{*J0=gbXgbZ#@(UAg%WV=35jKG4$-D{C493EhyswEO9pz zCZ9nae&wp^isSC3Goe$$()F;{x(uFUcPNC^U?#4&Kaue{z)HS1L=dZ(m@(0OvJ^ELCoO~izQLRrEL%$>a``+ZkD1Ds-M!T#HkD6A(?sF$J>l=WK!FI=S zJiMX2XuLM{t(jrS;-!!h#vo>02hnHP&_CYNHYIZ5 zg3)Kz-6 zU=f7|vcDN#PJ_SXX^kO1Fs2?E`~M|C29|MZ4& z3#qB7q3ZDAR(r!sp=7Zlv1jw7pEVe)&>pR1PkQt*4%p)MZ1gy%Ki_J8l)0KM%4Gq4 z+w@@k3`~PN-`XZe!D^Loj(e&CjnuZNOc6*@jJ+bGa z$M!2|_Ll&OG>Lrybv?>iivZ^_G^@FDP%rK45H}m^DiIs`EXCA(B%I0Y3zQGPRZl)= zIy1|;tWsr_4oR6yU!?NCu@#SV&f@y6U1)E2jo=0xFDWM`#Rc`la<)y;N4_Dt62tB{ z1>nDc7-AwaK&)c|9(jenTmgXUczW*TbZrQpTo62?zg z9y3746qtwf07mDl0nTOBc3pUIm|@StmcXNzTrFpvicIW8C!ked0J(`;yBBn}GTF}P z78UgY-4@OWeH>RLcdT1SVLI_Cf16N8xC5evg}T>kY$t-(*qa^m=irLr(WwsceoC$aXxjAA%fhYp-Etk^yUw`a4ObwoABp`Lqq{a>k%25&IY=L%J+el`low+@KEYsXx`kSYo^X-0pKmUm zK$)rtkd+ogMg7-4)r3ISxe_D54q$jnKR}q6jutG{Iy@M9eUkAW@*S}8M+h{Qt_%f4KWHpIR9$uQxSM7JrcuLyb-kef+@>c0 zE`BJoY-i&M^T(R70FrY{G-MH#lTj)Wkb|j>jN&ZhHAC9rQShe_oHKVXIy?yS;)y%nI=)kyBUDbT9KUER;Wj6Q?~zh&>cX?wyvjBi&fHb@EvePc$Y)-S=b(~RREhX zrMeHI+m+on3`(~t$r6-<#Rgk?HV|>Bwx2~Qg1CR8`lE!&ps^#;_MA3poQ2)X@4l}x zh@sqn8j;c7`*vg~fUVeU+Zx_Wj-k`kmV6uupY5VTtW9&DzO6u1*34t3)EU{Jp=Y@!6N`;k`D<0MPkFPPg8#R>)^dvut@y~F%a4eXEoL@8NSj>NhM3crj z?hbe4R50ks5^Omj45&N!WS_QROgfxE(T~&=AGxf4i;;}X@G90jb9ybQMXWdScqqS> zQ(zR#9)F2ZFQHdZw$s*^qGYZ9nGzd~^uE_<))FUEO0NtHq5W z3A%J#@8fAuCqxdbIbe#hvSt<`Rr&jXCp*onxdT1Al(l+Ysy1rAVy(^Ay=gSTTynXs z@&%J(L;I^E1J{mLC|%F#7u`^s^5nAwcf1uOUef{3KQCi?xt~4-XMc*jA*9(nISCQFD`AeB_!~0=J^{pBoS|b# z11=28U=@~uNrb4tC3f3^+&NL0s>wOS@S;rq9gvx?21gho%88m>0*C%CIR)xJbOc#q zBi2vt+$XhVt6LCQX0Cn#iW}Df<($VsT$cs+EC4dima=D1uaS0U2zE)`AE-ugXwwqB zluUD$er;N%nAH{3pn|d@mg8=<3A&J;`DAuJ3_4l>?y~MS8 zE+T9VMNy>wNNqZz1SW~p6Z;H~D+T@acSpqGgv&oXeXH4GEK&C6S?!G)m}2XH!RNi64Rg5f-F%~;!D)(h{WOOfMD?|POIf-1G{IAT zSP@z4Yru<$mBq`_q>WDAGik{TlxG|V5$Bk@BlYehcKJDJT}H;?yV12WYuggD6w&0vG3Ih_!WPBuS?O6`V1<$p0SNog)I(4*h6a>TPLVEt^m`BzA9c|O~H6dytG-#po@fjebWDk-8a=9NtCZ(Z- zQ(jX<~jomFPX=gEQL#g2ux z3LKFLI-k3K$^weTo)tyN6>QGnwVmi>hj_J|uVesz&BwF?DKJ{d1E#&uK6Or+c^(-r zZLwuCdtfa+80F}_2D!aspXms>ZW_weqrw<89hY5U*Vcz(h#OtNH2Y35;7v15W_C1} zH_VD+EQ<?bc7meb|%NU2-O#Uu7K zMle2NPr^o_OgG;iMYZme*<1+~9d4Ag!HtQCv+5?Yx>5O}Fv(`e3`I-)I=R*lQ2y0Q zYFLr~{xFeV)o#hu!O0`t9GR0B&@_}Y)FAAY*gh<|mN5YfJW`>inUU-UEO^RH8qxTjl-}h`o~IfMr1^=nnwUqE z;$2LOk}y`r)0{%|!>aH~5RocO*$4F+GBKdMJU3F_4Y8=Z2a#xUo})geIR!vI`Bl!V zXPL~8toA@&+uF3C&qtyoT-nP{Q;`Y~BoOc-FU+9Lm-tM@w3T!{fczX|=`tVePJU}B zQ#8R^5jx=C*d#8;g7sHQT4%{PlHMuGD~8~*ER6fNEPcaOQp5g>avczIS~>Q&O$W^e z6`%mQ#e_yld`hZMH>AIY>Kct7WywSIoEezIKUyS`fr~2H^qLkRJ`SjlE)?xCn@^ZU z&S9yYchiK7h2EKtAe&G396HE6VW2q--?Mpx2qnlQ6|or%S8Sl}oibS##gv`7XFy>! zh-?yvf@vyr1Nr-R-!VXqS{Vtu=0egn++~yT@xmI5#;cMveLZFT(E4S}QS@+JrtPym zPaDm4d=euB78saQ(`JwQP-m2#m%F{`di2Y;%7(4WbXeEu&&N@?gAquup00&k3K=QC z>AlEKAn7Z<^x1%1>hGCx)WvA$QlcY`(kfh*%nm-u6qjz(ChsEM;t_7gx-2kH!eHK_ z5G-i3z*z?Esx{fj$`x0NTO+Y7xX#e|^r|Qi5{tCPY4usd>n!npWLM~dE=B5IdOTU7 zf8MHqNZ5w8P&}c2-o&L((^9M%h`{XhKo4uD{ss)2PIBND>O%q??A)~U)n(v9sf~wx zX}lg2V#9O;W9;-iDIKb!m+iscAK5YJR8xkyczq0e@AM*PP-1YXz?hk*R_(P(=2%!O@ zvL=InpYpC5b~-7_QUuU$D!7R|Cj066;{RPY9?(=OK!+nBCp%qE@z=M$CD2v&EvT!- zI=uJ?VEG0;7iXr{jkcUW=}ubI%BYgl%7^&88EKfcTmxIi7j^;f-h%{aX-#NQgLd|~ zU+qi<85tfDD$4tcqVd5}f!EyA3{+;A`);b#*c zv^KyN+}m0Ph0v<$-_&Tr zb9B5OxBhwXp_goh-cu<#D<4>)H?E!D!WYBl(uwU5U(=7mj7q+akwmHm9{$6-RS-8<;d*953mKKsfC8)47=RDq1{fv)?p{aE zv8}t7P8*r%cIq_~F4PI>XBys-7iQ>TBGTWf7NAsSCoiQsr!{^b{T@Oh>|)VlRCxYY zb&7*j9h(H!@wJ;Z(M%HLt@SQBZom-{@%n=x8A6B4JSBPi-L=zw=3Ob|>d_c-UxZH0 z?AX*lV}i`_fc1J9ePZ>zCRxb4i|mp2SyCH-w;4baCsYOLo3l`|`|;!f;H@DpgOM&K z$guUQAoetM?U!}7!3uE465VI$nzM%qQY+y!6H20#vqar_WF{@pPNqR!+9*;#&#swd zuO$?UG~sYIDBQaxwV-Zte%_h-n#Y&S>kbpZ9a18>i4>OGq+?dC4=TMF)pl^cIwpK~ zLQUr#bN&MOv$mIL9`d&s-jLR~)?wnB1KV28f6*rqYq+FbJN71a$wZ@*ZVk4C-}urc zKfpXz0x|bB%yeU12Nf&@&=u4@Rc$|aG49(v(_zGXm`lz-AK%9w5`QH&QKzN+qVjwh zoo`$^+cpx-FI9e9W}2jiVkb>A|C>Oc>8~Y(7=5N;M@%Xjk!Go=*d)l+w^tcTWPf4d z->uf>Wd*kmT&cyJKGzP(`?obWcY_|{7>ji3GqpnW zOJ8XI!ZE_s;uStL(U(B&hA4<=j?=~AuD%^_l)KiNXcrNQz-dkZ?TK3;HiS>-$h7#c z#(Wi5a)I9z(?%ewWgbfWGuwe`_Dx#aPv z?h@LDi)Ey+%Nu0RK39uY0s;x&C^H_g8whke&NiQe6*?ACM}GcsK;G|@c`;t=S%g)Y z<=Uo~Qy$$uV0g(fCekJROCB1a7!v8Zn~oQ>Rb_ZkBw}MkUE@4%bA`5#R%<=7E5x~s zZ>@@X+*>ltW&HtcgkkcoM`%^r9&ZvPFV)cwW-9al5LU(E(RRSsY*e?1U;cX-DgSYH zY)rW2YQ|kpmDt7HKL1t6qC$R8|&v~_ul6UMVSpR zvYT&~Zz}e)xmFCt{pLIy`0tC@5QOHQflrHJ@hC~!U=5?OML9`{bB=*MkqE`3_10O+ z=5giVpZXWIP($b~7cD&jvjo*6?RwSg-~I-0I24Omi0>*pQ`5^mZzKXVy~YXA>JLIE zCk>t_NT_n@-lr{(RPMIoKyN=*Z+DMOgJ8H}f$C3^02K_W=?6M+CZ9m1IbKHjOPbL4 z(c0&UE@|;~`45T5yb`c1Nv1zu%J?n@qyD@&lGCBWL!LjIgtv?`CcFS|jFkUfrt@LI za-%Hxd1Psxh1f;T$z#kcysMx7IxgSt-w24^S0`Ha<^?vL)se1`=(`-@WSqLrv=$NB zgp`DIO+&jhKyfl+oAj4qM#394dif;GS64xp)W-ZkFJObw?;_uAi{$te?cZKFC3b3- zgDfYJDV&ntE?`^mS-mpNNT%b!S468cP$P}AYp<&vPpzp?GC@?m_c3a|7l>O6OkN7$ zuxwfg>HdImhtfPqZ(l3|VvUa47>8`*7iC>n#{7d65x8AzgPHHpnox2Sis8Or zXA(;&<<&lNdHV^%kMo<$d{CW%=2q77&ip_R_cntk8F(&a;L+qD8V0i#rZmr66!~J{ zjI<7zT%(dO(xczr^m@mA|iEtP>|uqo-~4ZMiglX<5K17U&M>fWH+NmqLoh<;Pr<1EJb( zq-~uu+Z&!YE4Ombw1gFZ1F1bj%xudsTtwG&=f@0jb6XU{e>?9~wi@O#$ z{+lUa-TJlT2T7=3s>GTaZJMNGyLtx;Kc+g>kni{(d}@3-wRZu?OO+VnbU-E*exz?w zBYozC<&B_e%o*P`dyQF-+t?+3*$^pJ*p@k-Wxnuhmi0|5YL;206^F90Cw*74JSI-w z$n7QbLOq!Vbc9vUzP610omWh#UjG4WpH}}p`lba(L9byQ%NbU1PWr>1hhjxZa*WZF zFf>?3Pw6Gn4Fu^6BZo+^25-9?>-nRoME zSs?@9g=c@wC&O~4(-V7|Cd)ZXbk}agS*2iFu5_kXq(){|dMwQfcC?`~Mf2s%I{Q6z z&s-+0xp}T?J_6BnxaM(EJ$}T@PIWx_RRVBe#kdx}pU6GFJcg+!ZW-L+T8P zb}4QWXO(^;eD|DvWnhB#PSTK-1&=j)*QK=xcJ=wA(yruQIN}9v!zI-p$j&hmIBzh zP_34vhrQhj&pB);kUWiL_J{i!6SO-N8FCUSl2Os3(zaSqkhDj^&KXtLA=tiAtAG15 zFi^RS?p>%wH%d?|NQ&6oK|&g1BzdP4*eke@si2*wJ?%fdF#X#oj5R3beOu_AAOuJ; zodKPo+2;IJd~>!@{==d_p*Mx-H%+EMM1|R($SvK2&b_iY(lbslPhsoZPQbDDlGDeQ zhuQ0-Hu1i4HoH?NR%Z?%8+c+M^mb2_c1{b4WF?nPd1}hq7xJ`^ z9$z_MyFXoa@zqqoQ|VQ$?`%Wm32YbL10_S9AmPBdoI#tO6gc6nqIv8j&Uda(yO|^K zz*j<^o*JWX&rKKH2H8JpiZ6e!cdm7}zAcAMutbMv_03+r>VntiryCk~;FDxxQNlR* z6?x#S>a)8jI-!yM)*5KD^bzg`olJN}?K^~Wq$XZ2^& zLv;lp5e`;goj}Ck>(9I0%BN=v=#xYHBmuaF2R++_cCV(Jer4(Ems#(#j(rc<@~Z@N zFMx_-G|aAcGN<&=_TiUr=6Zim*zn}NI>!{f)iuN8hfpfiv;x#t-HWMWB(B&GnVbMs z);; ziv2j3S$uLLYp@uziYZdR6FJCJbg=#$sUa>m%a+42dDM{<9PH>jp&L5O8+AJ>1oxRq z(l3W46P61S1artHb?vY}a_lrH;U{qbYbaS%b;7MhX=0Q);^j zS0u-^#XnUQCdNS`&XYzSO%5!H(t(5TuHDCgN4Q5vS}R|KBqz&sw23j1&A9>I%eO#LEi~Mq0hs8%wN|0% zi;0|s{OZZs9xg#*b0A{)6bi|tdB6y-8Q6NQ+`Z#|S*m4GYxL(l(Ve7jHYBXt`J&U8IrKU@QBSgd6~Z5_l(qgrtyTOhjm%40qvu z+i*o9A;RV6Tyj%K2j4jmWHhv!+8$3VQg0g!QfWXXB>^>`{_C|qO3a_y!)`a^N#>XR?9&bG zLuQ)rR*o5eozBBq$;2m=7GXY!yL+uXlM6yqM+Jebs@IvfHxwQr(Gg_wK?t9Exn|Bh z-^k^h@uH*&H6k}Mf9U+>Vqh#!7XdIYAqVjv3N3n8p!BAzV8QgkER+WP0ua%XQ+!(x zhc(U=;bbbpcnkf?k9N=dK0taaR@imo2`PXdqDgBZ@TYOX8%`~i#3gHX8B8wVx&f!x zwadx^DHg!9KBQ20J45OWtQ=lu=L+v4L@CZ_7?qXk82n+TyWY0x64X{K)SO->x5zsi z&vcpYoHfI8qo9GFZ#S5whwReI3m%{C{d79`cB1Z7xECY^sq`9nF{mg$yoAfpdg=vqUj=DEmRG*dxUYm-4DwX^fY-F5Y?;nYVhpDv{3ZqDv#oVOw2YC|?!O7F z=$fD&6}F|CX~r@6O|uK9`1GYLBu{RBD5pQlD63f54OY`tCq2XmIe$ET0E0R5v7xB* z1cdIr#m^z)GAL|+odW0(no|D9!X!<5&!wxz+Tb)Ej?F57H`^F)00_govs4b6I_^i_bd%T%L1+dpBqEZJ?wJNa}xSt=GE_|g#QHM$9&@FN8Z|Q>nC;u+w|H{sbq@Te*l#Z0PGQNWfS6O?8 z)}!GLJ8>8w+9gzhNSPLOb9~VVGi;r1s-6df6zLQv|KCji8U%<^839%HB@+aFLFb+r ztC|5?CuKS0OmvG^WFQr@pG^A|AXG4>!L#qeEG)}b#6I2Wf&$nm^jA98A8{k5KwzaXbiUxj@dWUdL?+yF{IK%VhHD6fTw&@G+YvWsGm$^YrRd z&kW$c&`14yDgd*UU`iD#GV zWcJ@QafbzYph3}$HIyweA7WRFjodPt=EIX*JC>d%piJDG4k~H}iU&6>0Y3MgTmlH! z&*|O9mnV@2wm7Rt+3D+K+3OTe=c0AG+N_Yu_TQY$#7^>gv)crujJxxvPm}u)p46U* z@(9q7WU`(-OcL#yJa{% z9Tdo>7}&}}Pn?Y7F57I?`Eh&{`1$yHlz~DxsbBs?=>+z5Z2vZ$O?KBimAC1+WM2Er zPtJS0C>hT7#7~q#jW|CgUEJG5|5HS8AJM@&0A)rAAmv1iW#LqW#}nlw)3tA7M*<8G z@I>WkN=>G0;QtxJ_N5@5=WruAmK3f=^EWVk-<)>bgqII~UpoyGz4J2fyWFppgD^>A z%7@(>q8%`3xs54@)wx$~*5twqUUD=|qWaNEWo*zR?Ghpxtg?^)3HS;4#=^rPFfPYd#A~1SmB>h8AZQ981UEZ5*GABiVRpe!@^ZC%+S+Wp>w9-#BX#kLh9fl!!*jclAstLcM*d7e#i7gBN zbvxUvlrFGOa#b%CR-;zcG#6oIqO<4N3S?I<@{t*ulD;z;f0F8136qF7r;ieV7~pBP zMOWCbTG)+de)u2E<2AVA#c0s87?Vpy433uh*R1RTUwuv0!4-t`U#%_U9NnOAtFH$d zv)o%uSaqUXNlcl&X3SssO-KM@gEuEP_F z)w|ldMCGGOMqKAo8M}^n>~}7pbG^Oyvn7}?^leBlwGgEp@O?>rZ^3K9b?i&|90Y-7 zWG#l0ufp;ppyLIdi8PwuV!NqFc5~4Zz}(>yk6W=MjgwYy#Iwq6R$w-QQd`-=LDrMy z+Ve=X#v0(AzG%$?q%L9?kc2?bCO!8uDE@)?P=#Bz_LB+9IG(YDef?g@O$Ry-`|WIH zt0u@QvoKgv_*W)g=3HxTG*|UCO^J$gPT{zki=%*pngRQ`&}P1t8q5xWlD3imZJ$^B%{;#(w>4_WahEL zI+pq#>75r&)NbXMV`QN2{Jl9ms@xqq26li0sK+!mpMyH>K12z4k#A=1p#G&FiarT; zNxi^cHbd3sh?f_v-mL#<<@feJYt;ga-jT1O;w=AU?v_AbEDtR$T4Z_7-g~IT!w{B? zI|)BcuEiMT*E5{6X-z5??p?K;^h$wMoRhs;1L>{MIgh6K@_1$7gm;@({ue)Gh0rOS zWiP4vAiD?XrTuV;Lrz$Xv>OkiIut>r>*o)RmJj@LW-VPb-t|<(L_H1`O?OyF2(w8o zBGGzU`pV;K%%SpL8&a91oAhcBvMmJVnXS1j%K7$^OcLq`t6Q|3CHM-X{1<@gQ z6!^+iCzauieyXYyeqf*}J9G;VJG>v~!<-G`hWZW z@F{VSE`*rs-J8#2mWi{t_uSYAtb=Mz>g@v{nZcn{OGdL-7C@H*6{pIOCb7F889do^=$A#w0Bf!a!26S`-c{iF1 zoZGdQQd9lyvLn#CfM3OPa(b5RAM2Hw(n$L~pjRrLs+xM&HP-y7QnBEpT6|n~t{)Pk zsgI7qG9OYm4Ll1aphoDQei|kSqAzT&3L^40^CIc0lU7hBynFYUIbC!*6(=GZ_h;3m zfRR1(O@h-~y}9Ff7H_Bk-~ROHM}sv9{JQ2N#@lkZ!@SD9ucnI?2G96L8kZwXgG-YU zi0k$RU>5Hiqz|mAH9TT^Mi*otGXxfFwtp+VAk$-2?Mu?yk`H}djf(}2O{D5X?=)rz z0x=tV+A82QSBiREEFVaMA?u<_4{JIC4MefMs3(WUdtw7d&I*|u;eiV;PyWKo=N-gPNL`V#KU1NWdA3Pe z6MT7o&B4l&_igTJ)kK89mA3VG#q&fNctn3={efs1m&OAQmP3B3?~=qzIarkp*j(`b z3+u&e=UnLxx_bt5uW((@6j=gr^KwkXn*sUjxxl{-P}2m)9+@(jq^S*XsUk5cK;L(< zEl~nV4E@YGSw`Fkj?S*>Q3smTs|HlQ_{gxtu#(%(t=2o7 zK&kEFie0MilGiWzJP?E}u8g7q^R9DJIt|}PQ4l60S4cGV74+4r5BUk^Zv}1k?O53* zL68-jJ>>qsG4?iRmh^bb?G4*X&alTx(~sfPe!M5C1T9e`*s0x7JzTcU*K;4r7 zJ!AAZf{o+Cp$NMm@A*I#v`_J00Y3=jB%^HX&gS;`(>_}zQ3(2R84fae_%v(9 zs>W-kQNaa2iBhXOs<$xdRISk_tBX{~yNy~m++i9ei5p*WxT~(ZoEaBXV9uV3Ptc;e zqH}N|tWphx29#r9^IXyC=~wEh^MseDs)g*^M^aeuZNC7y2{l+h4i7+J+F5%5UMX-q zyEFcE@6m+uO)sIMb5iV8^Mn9R(5`xx3>Hu*Brm^sB=+*t65oJU3z}aB$Z}vaRri%X z=-MN5y}IS1=#hn2h*JtWsMwdhQ1k^EbJwDOb964=uXV_U+LyMDMz=QSR=|>`Ni2+Y z%Q$_#eAB7fc@;mhw*Ki5OEm^INe&E(!^?4KTW)Pf00I+d{t*Wo$Bniin_~W!A`vM5 zlH9G+1KMGvIK4khmJetgT5 znSNyVzj$oDH@J1Z7hoc$W(#rsjvF(e8vX3GmUUrfp>hp8tiYZ5G_0&G>;}RJYUwdhG=O%K z{;a6T0?Bc&vmzx^DI_}@cuRvUsi7T$#t*4rR~$Tdd8%NaoBj~dA#h|lX_g14H*T7c5{44o(4!d3CK{6==@w4Y7_lE>&P()K#}Q$ikm8v)C5ykzk}wxm9%I@2JDPcvq#p(Cl8NXC8g7vAms0p>3UhEU9iVwX|EUrBHnOoeH$l2&G__33!0l2 zF(g++rS4QZgI0@2hvUuFJls*?64ne{^z#r(Sc&L*SO5Y{STmX}7ns(e#vvkHk(A1C z+!sW5_5UKG=K~D``ReydYB{uZM9#Z3^t2s0F;&b!{&qHs#`K*t`l2MlGGgS!59x#9DFSb2DZ%LC0QVy@OL76cae zmCgeW?RR+w^g2(`q&2L@FfbS31xk#W2n{D_<)@|pJcYgAgW;uKSv^ZOaDJ+ml@b(y zF%0VI?t18OTzt}|jBjYEP)_)+tg>xe~6 zMQy}Q>fK_U6f==y=Wu#mUVB6F3|cs=-J*RoP}Iw|FboOZ`64yz6nCvHkjw(y0N`eJ zsIbQ>ou*}Y#hD4`Vl5Yniff^H@+2`09KCl({vJQjDtf|^2IRWhdF^qM5hDw| zeeK6Hp5d7Hg)WdI>Xse>lq6#IsyDZ#3q+XS6S0$9jA!q91ELSq<`vb=XDygU*DqG_ zAPUbBm^Ha4yCd|m%II<4ww?=T*xV&NiQ%v_FGw|EO{^{+*7f&lPL=MgPY~D*rZjFB z|N6OJlu+ogM9>rWYbV-R?i@-wq$f1Koq|4C`K4OaNC@}mHNL^C;58K7_R{W~d&YDo zqacAz3rT4?+#Pu!m0K}*ToJ>FxPA2J7#qV^vZ_Pp0<;E1ci7{R)wvoEDfQ(YO-=6X zPXyYCdzmCn?}XFy#FWa`Y?9{$$3a>GXP7m$!(6)6Y3$VSEc!{!`0;&92lyqc&RGeq?H3Fp>SMLw^9IB#kwf31vOlaS110o*_4n zGE}Qr3pL;zO`3d|H2OhnfQ|RIZF)-@Jc;3=pr@tGc1QlzFz_t(j<94;@sR-v)ZJ8G zCc8xEv^7pJ)d!$8HzqmG&MY?o*1H51T#3AxPs6y((m$~>K#Ph8=|^H1e|n8(Cok1i zK;b6bolY=OQ^$og6c5Dl-T>+zAsUX!Q45dS12gO*)`+aP)%Grf6AR!-u~B5D?t1jP zKlf#YS*U8tFjQgLy>*X~3CrPGP}FLfliyVWfhK#{*7EBwv^Xh7cPQqCJK;WDW)6eP zqy9!9hwmI7UB%Z-{)D!VtcyEvkdDwIVT`_Q~^oDE<** z)rxU?0xUCCcI8%8f{7D~VJ5XF49XUin{MJ^lj?tb0OaMdDDE+hxihRp;|*esEcQA8m+mr(S%hP4CE;N&5L&@dEVxZZP%H7U3_cN_Q^_AvnaSZlz4wm|l1 zl}d|kMqaHag-q64u8t(!BQ>dc03H1IQ2s5;+@R%@_X;GMb(8^_ud!mP^I#1}Ybqxr zN(qIcyKVlhJCK(Aga{0kZsWjJ(Nw4}A|-Z%l7@&_%o4F{OVf8VFo~BC<3DQHg<9?= z;z{KkKuwzqf5Ka+sn=d_Rlh3k1lt97OkUE2Ca=3dPpq3jIJj75A@0d;W3k-2Z90jO zy!+le&VydE zA+Z&lv;YW&+Ny|18q){*F~3mfb16aMP7m*v(rrh)+c9TQOy>t`3^{nib&|*veghMJ zdJu7&61BOJ0A~y>IfWqx#kso{xCtPlkdHAF+C4U)R>ZG__@D|Cb4InLj??B4qV-D8Aym`) zUe?^Mbnr>i2jg6>{$(-N=Jj>HgS`^Z@-3um77>YW5wUdOE&ByPjcMd25|00(nCjuX z6r#h-E2K4`Dfqj43eA;Ha}YvmLg+?eS?%AH`dW~dTYsyR8l}$-RHR`0leTH&OKs(H zDs4OI<&K|YRB3j!gsNr?9@CVaXitfVxSb6_QD7tYO?{O3aO%43UHbUy=T5+>(n(=L zBGzeoA~~PDKpgxX)}m_~=Ez-LnN749ncy;GX_tU~6pZc>v(r~Awq8bhRF z^pQXEfY1OCl_zU*sP%=?92HT~!_<{Q7?V<3n$NEUQ5D^Ca$CB|y6p`Q-5~}X+TqYX z@!VW98qkOAubQZS1EpsAFyKVzN9G44iAJ&a9oJ()Go58vL%C9%=ta&R@mT2(l<@bl zeQwvv(XwD;rl(6HP2qAUOdQ1_B_Y$oRt-@+QDv@oO8`$ut@k{#`vrSmdtBjxbZ=bWp5+csHowdaR=)!>k*C z7w5@(CIx#YZx!a3uzV>fT82Jo-vPnRX$To!QUQF#g-nQ4cgz9l+#-k4?GezEDb=wN zCJ{Go^!}(ihHS!Ol8UNnKrGX=7{`Ugv;w;i<{;*}_h4R2Pj+p_epw2s>5~8FcK|2+DuxtW?NMD8cxwNz8^IN~ zs|SUctc7%@^N5u=`lzGLH`8Rf+EcsUB#Tx3@Brn*tQD4A<2=&7F^k3%a z%Z6F<9dJZ_i9ytQq=b%Ns6?afBbS7XDo{2zB5n*3Om#|d!|b&z{?CiE97#*B(}|ED>&+y!oi#Xg1N+g2l1$ls#a^3lMjFfQT-LEcJ}-*~_tL8Jk?X-qrJoId<8w zFiOK+8KI{-Cbu;p5(IncT3kA?cPhzc;Om6dwB44Tah-kG__=?!4P(#74LS{`;b)wD4@Y-n0cLldL=47GjJq zT=@U1j{T%fpaA$GQ{2DQPjBGZDY&zMK>TLA)KEAJuLsA3^tBcqe4R6j`7lBUpGd^% zQ*=j4qos*(>eqBHLlF`E zW_c1hz$wR$ybJ7&+A2063xK}A_tyhl(+bx}Js{$rLLyrjY^*`VH|9)#gI+z|mekMP*Z zlC7NJi3N;9>x0k=uS%0?8!>^H+ikLVlot~*pHKfh4{VTsHl_n5pZ9U)v>YF;74E3= z3YXt6s4{L7MBaMSi_04i7He(4rduw^S#}+5-@5U*4R{ zt23(We?|$kPqD_PpxlQO8fkb){h&!Ya^SreRh@vIe;)KgC{QvdT;n4(FR8xOy&84S zaUsW$$gAy0_)V5u5#t0Is*7ZI<^hzi(^M9xHeq_u2t-bxRTTqvZ0uu&Z2K5sZ?>$o z$p%8J8wNSJ0=Ll;NkvEVA?_L?flMQdy@Z2^O?5O%cEI)gSXb(#(AaDB?yN>%59QM)pTwos+TfutivL__hy6&}~k6t!S zj$*FhZ%gmu&Dq0aXf0+o8E}Zl0oFqjby&ykYBLp!TvcEsSi+!?y~h9?cT8xGJ6{9q zL@%c1W9sP^>f>&}6#j0N9$W0|=}@BEy<3^NI9lAJBTXmmPdceroLCE2?B+nQLy-m| zX2>9hS*Dx}P%s)y-jyHbNy;lqOX}vNM!r?;P#G9>aQ#&kqslFRu56qRcVz|OMCW62 z-&8Y6TIKd+j&AX1C{QwaMpGl5T~Bb*-SEd-`P^p2rg_0C-@3Q%*aIV1d8>+zD-AK2 zW(-ySo`+54I-c`(gT8_@^?upF4sn7;QLRuzX1X)(N)ZFun|oClFV#gig-JZWuvxE{zQ&muQD8r%#aMn9!qD+%yv`LkcSn52o`{ zG!&B&WS-=&J5G`=g#Y#^%9hr6PO@czZ^s|*>Dc5qO57PIwy4OZ3h3|OVAQOzLXDKb z3AW)fgT@BVP071N<)#ctK-hhzF%cfdv?D9Y#C=_%tB*vK07^s*-%aV0nHxwgQNP1T z!Nh}KFih-f?u&IBNI1WR7b|It04o1n&oT3rA1nTChF#}_8GJ2r#qP1QQRbjJp3h^< zgPgz;suqfgOztOgHRsqqzzdu2gl5EAu1Rg!@42-HjT0aQ%?|*^XeQ3eDiHr^@PV5! zy;ecQDR33m6YG3mD=iBxW@4NwOprtX599XL9o#O=W=Bx@QC+yo%U0p+|JFe@riHo zE+|ymV}@VeU*WfW!rbP&cD@6*0#faOmYz1|w`L&f1n{@|@F2+JH0|P9p_-jDpxm3s z25atm+xxJIJsFRrjuZ?BW4C&bg*(a<5lmMFGsL|(qS)#u@1)>}Z$a)H9U!{8wXgwZ z9|z}$k7)DqHtXKuH19(SbBqsvC37=fLaxV0wX@>lohF?NMFHHQablb(@IK+em?i4n zN>T4$iK{!_7sur67k1#x^1T$}fT!Aj>S&0#x%v<&-+vknpM?TK5lf`1dBHDc{M)O* z5+=6pHU`fc#x98f?g?e;q1NI_N_G`2GaYG#KwU;Cs1=7;l+u?@e}QA1M71WGzCun@ zOiO5Ff8{r1--QoLxV6TE9v-nGjobr=HqsG%MtNomoyUq`rSq3tCF�ui9au2|(+E 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