From 8aae77ed06b9d11d93ce75ac28219256a89cd6fb Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Sat, 15 Apr 2023 17:15:02 +0800 Subject: [PATCH 001/158] AGP 8.0.0 --- app/build.gradle | 14 +++++++++----- app/src/main/AndroidManifest.xml | 5 ++--- gradle.properties | 2 ++ gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 4 ++-- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5d16e6c0..20f556b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,12 +5,12 @@ plugins { } def gitCommitCount = Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim()) -def sdk = 32 +def sdk = 33 android { compileSdk sdk - buildToolsVersion '33.0.0' - ndkVersion '24.0.8215888' + buildToolsVersion '33.0.2' + ndkVersion '25.2.9519653' defaultConfig { applicationId 'gm.tieba.tabswitch' @@ -51,6 +51,9 @@ android { resources { excludes += ['/META-INF/**', '/kotlin/**', '/okhttp3/**'] } + jniLibs { + excludes += ['**/liblog.so'] + } } buildFeatures { prefab true @@ -58,12 +61,13 @@ android { lint { checkDependencies true } + namespace 'gm.tieba.tabswitch' } dependencies { compileOnly 'de.robv.android.xposed:api:82' - api 'androidx.annotation:annotation:1.3.0' - def room_version = '2.4.2' + api 'androidx.annotation:annotation:1.5.0' + def room_version = '2.5.1' implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" implementation "androidx.room:room-ktx:$room_version" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c5b564d..1847396a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + - \ No newline at end of file + diff --git a/gradle.properties b/gradle.properties index 466077c4..44c2bf3f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,3 +26,5 @@ android.nonTransitiveRClass=true android.experimental.enableNewResourceShrinker=true android.experimental.enableNewResourceShrinker.preciseShrinking=true android.enableR8.fullMode=true +android.defaults.buildfeatures.buildconfig=true +android.nonFinalResIds=false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2f997ea4..05044f2d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Aug 24 21:31:51 CST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index f670e3b0..4350906a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '7.4.2' - id 'com.android.library' version '7.4.2' + id 'com.android.application' version '8.0.0' + id 'com.android.library' version '8.0.0' id 'org.jetbrains.kotlin.android' version '1.7.0' id 'org.jetbrains.kotlin.kapt' version '1.7.0' } From 2c7016bc203e45e77042df0fa3f46e91d3b84b35 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Sat, 15 Apr 2023 17:40:40 +0800 Subject: [PATCH 002/158] Update android.yml --- .github/workflows/android.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 9d705b11..85fd3ade 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -13,14 +13,14 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: submodules: 'recursive' fetch-depth: 0 - - name: Setup JDK 11 - uses: actions/setup-java@v1 + - name: Setup JDK 17 + uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 17 - name: Retrieve version run: | echo VERSION=$(echo ${{ github.event.head_commit.id }} | head -c 10) >> $GITHUB_ENV @@ -31,7 +31,7 @@ jobs: id: sign uses: r0adkll/sign-android-release@v1 env: - BUILD_TOOLS_VERSION: "31.0.0" + BUILD_TOOLS_VERSION: "33.0.2" with: releaseDirectory: app/build/outputs/apk/release signingKeyBase64: ${{ secrets.SIGNING_KEY }} @@ -40,7 +40,7 @@ jobs: keyPassword: ${{ secrets.KEY_PASSWORD }} - name: Upload built apk if: success() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: TS_${{ env.VERSION }}.apk path: ${{ steps.sign.outputs.signedReleaseFile }} From 41e0d8453abce2c8763eda9ceb8bd4ecbe1518b1 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Sat, 15 Apr 2023 17:46:52 +0800 Subject: [PATCH 003/158] Update android.yml --- .github/workflows/android.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 85fd3ade..b7514453 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,6 +21,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: 17 + distribution: 'temurin' - name: Retrieve version run: | echo VERSION=$(echo ${{ github.event.head_commit.id }} | head -c 10) >> $GITHUB_ENV From 195086efa3efb10929724a8a45b37faf9e901105 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Thu, 20 Apr 2023 16:42:15 +0800 Subject: [PATCH 004/158] JDK 17 --- app/build.gradle | 4 +- app/src/main/cpp/CMakeLists.txt | 1 + .../gm/tieba/tabswitch/XposedContext.java | 4 +- .../java/gm/tieba/tabswitch/XposedInit.java | 36 +++--- .../java/gm/tieba/tabswitch/dao/AcRules.java | 16 +-- .../main/java/gm/tieba/tabswitch/dao/Adp.java | 30 ++--- .../gm/tieba/tabswitch/dao/Preferences.java | 44 +++---- .../tieba/tabswitch/hooker/TSPreference.java | 90 +++++++------- .../tabswitch/hooker/TSPreferenceHelper.java | 40 +++--- .../tabswitch/hooker/add/CreateView.java | 22 ++-- .../tabswitch/hooker/add/HistoryCache.java | 28 ++--- .../tabswitch/hooker/add/MyAttention.java | 24 ++-- .../gm/tieba/tabswitch/hooker/add/NewSub.java | 16 +-- .../gm/tieba/tabswitch/hooker/add/Ripple.java | 28 ++--- .../tabswitch/hooker/add/SaveImages.java | 34 ++--- .../tabswitch/hooker/add/ThreadStore.java | 28 ++--- .../tieba/tabswitch/hooker/auto/AgreeNum.java | 2 +- .../tieba/tabswitch/hooker/auto/AutoSign.java | 31 ++--- .../tabswitch/hooker/auto/AutoSignHelper.java | 36 +++--- .../tieba/tabswitch/hooker/auto/FrsTab.java | 8 +- .../tieba/tabswitch/hooker/auto/OpenSign.java | 10 +- .../tabswitch/hooker/auto/OriginSrc.java | 34 ++--- .../hooker/deobfuscation/Deobfuscation.java | 117 +++++++++--------- .../deobfuscation/DeobfuscationHelper.java | 40 +++--- .../deobfuscation/DeobfuscationHooker.java | 28 ++--- .../deobfuscation/DeobfuscationViewModel.java | 2 +- .../hooker/deobfuscation/DexBakSearcher.kt | 2 + .../hooker/eliminate/ContentFilter.java | 10 +- .../hooker/eliminate/FollowFilter.java | 6 +- .../hooker/eliminate/FragmentTab.java | 12 +- .../hooker/eliminate/FrsPageFilter.java | 2 +- .../hooker/eliminate/PersonalizedFilter.java | 2 +- .../tabswitch/hooker/eliminate/Purge.java | 58 ++++----- .../hooker/eliminate/PurgeEnter.java | 12 +- .../tabswitch/hooker/eliminate/PurgeMy.java | 10 +- .../tabswitch/hooker/eliminate/RedTip.java | 2 +- .../hooker/eliminate/SwitchManager.java | 6 +- .../tabswitch/hooker/extra/ForbidGesture.java | 12 +- .../gm/tieba/tabswitch/hooker/extra/Hide.java | 14 +-- .../tabswitch/hooker/extra/NativeCheck.java | 6 +- .../tabswitch/hooker/extra/RedirectImage.java | 26 ++-- .../tabswitch/hooker/extra/StackTrace.java | 14 +-- .../tabswitch/hooker/extra/TraceChecker.java | 80 ++++++------ .../gm/tieba/tabswitch/util/DisplayUtils.java | 12 +- .../gm/tieba/tabswitch/util/FileUtils.java | 32 ++--- .../java/gm/tieba/tabswitch/util/Parser.java | 6 +- .../gm/tieba/tabswitch/util/ReflectUtils.java | 70 +++++------ .../tieba/tabswitch/widget/NavigationBar.java | 12 +- .../gm/tieba/tabswitch/widget/Switch.java | 18 +-- .../gm/tieba/tabswitch/widget/TbDialog.java | 44 +++---- .../gm/tieba/tabswitch/widget/TbEditText.java | 4 +- .../gm/tieba/tabswitch/widget/TbToast.java | 8 +- 52 files changed, 617 insertions(+), 616 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 20f556b0..a11e7a47 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,8 +39,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } externalNativeBuild { cmake { diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt index 46630389..fb1d525a 100644 --- a/app/src/main/cpp/CMakeLists.txt +++ b/app/src/main/cpp/CMakeLists.txt @@ -1,4 +1,5 @@ cmake_minimum_required(VERSION 3.18.1) +project(TS) set(CMAKE_CXX_STANDARD 20) set(C_FLAGS "-Werror=format -fdata-sections -ffunction-sections -fno-exceptions -fno-rtti -fno-threadsafe-statics") diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java index 45dc43f5..ab9bdc6b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java @@ -15,7 +15,7 @@ public abstract class XposedContext { protected static String sPath; private static Handler sHandler; - protected static void attachBaseContext(Context context) { + protected static void attachBaseContext(final Context context) { if (sContextRef != null) { throw new IllegalStateException("Base context already set"); } @@ -27,7 +27,7 @@ protected static Context getContext() { return sContextRef.get(); } - protected static void runOnUiThread(Runnable r) { + protected static void runOnUiThread(final Runnable r) { sHandler.post(r); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 750b0279..22e1c412 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -60,24 +60,24 @@ public class XposedInit extends XposedContext implements IXposedHookZygoteInit, IXposedHookLoadPackage { @Override - public void initZygote(IXposedHookZygoteInit.StartupParam startupParam) throws Throwable { + public void initZygote(final IXposedHookZygoteInit.StartupParam startupParam) throws Throwable { sPath = startupParam.modulePath; } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!"com.baidu.tieba".equals(lpparam.packageName) && XposedHelpers.findClassIfExists( "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader) == null) return; XposedHelpers.findAndHookMethod(Instrumentation.class, "callApplicationOnCreate", Application.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { if (!(param.args[0] instanceof Application)) return; attachBaseContext((Application) param.args[0]); sClassLoader = lpparam.classLoader; Preferences.init(getContext()); AcRules.init(getContext()); - var hookers = List.of( + final var hookers = List.of( new TSPreference(), new FragmentTab(), new SwitchManager(), @@ -106,10 +106,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new Hide(), new StackTrace() ); - var matchers = new ArrayList(hookers.size() + 2); + final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbDialog()); matchers.add(new TbToast()); - for (var hooker : hookers) { + for (final var hooker : hookers) { if (hooker instanceof Obfuscated) { matchers.add((Obfuscated) hooker); } @@ -119,9 +119,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if ("com.baidu.tieba".equals(lpparam.processName)) { XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var activity = (Activity) param.thisObject; - var intent = new Intent(activity, XposedHelpers.findClass("com.baidu.tieba.LogoActivity", sClassLoader)); + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var activity = (Activity) param.thisObject; + final var intent = new Intent(activity, XposedHelpers.findClass("com.baidu.tieba.LogoActivity", sClassLoader)); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); activity.startActivity(intent); } @@ -136,7 +136,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { ).hook(); return; } - var lostList = matchers.stream() + final var lostList = matchers.stream() .map(Obfuscated::matchers) .flatMap(Collection::stream) .map(Matcher::toString) @@ -145,14 +145,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (!lostList.isEmpty()) { XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - var activity = (Activity) param.thisObject; - var messages = new ArrayList(); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var activity = (Activity) param.thisObject; + final var messages = new ArrayList(); messages.add(Constants.getStrings().get("exception_rules_incomplete")); messages.add(String.format(Locale.CHINA, "tbversion: %s, module version: %d", DeobfuscationHelper.getTbVersion(getContext()), BuildConfig.VERSION_CODE)); messages.add(String.format(Locale.CHINA, "%d rule(s) lost: %s", lostList.size(), lostList)); - var message = TextUtils.join("\n", messages); + final var message = TextUtils.join("\n", messages); XposedBridge.log(message); new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? AlertDialog.THEME_DEVICE_DEFAULT_LIGHT : AlertDialog.THEME_DEVICE_DEFAULT_DARK) @@ -172,22 +172,22 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { if (Preferences.getBoolean("hide_native")) { try { System.loadLibrary("hide"); - } catch (UnsatisfiedLinkError e) { + } catch (final UnsatisfiedLinkError e) { XposedBridge.log(e); } } - var activeHookerKeys = Preferences.getAll().entrySet().stream() + final var activeHookerKeys = Preferences.getAll().entrySet().stream() .filter(entry -> Boolean.FALSE != entry.getValue()) .map(Map.Entry::getKey) .collect(Collectors.toSet()); activeHookerKeys.add("ts_pref"); activeHookerKeys.add("fragment_tab"); - for (var hooker : hookers) { + for (final var hooker : hookers) { try { if (activeHookerKeys.contains(hooker.key())) { hooker.hook(); } - } catch (Throwable tr) { + } catch (final Throwable tr) { XposedBridge.log(tr); sExceptions.put(hooker.key(), tr); } diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java b/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java index ad7ff63e..11cd62fb 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java +++ b/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java @@ -13,7 +13,7 @@ public class AcRules { public static final String ACRULES_DATABASE_NAME = "Deobfs.db"; public static AcRuleDao sDao; - public static void init(Context context) { + public static void init(final Context context) { sDao = Room.databaseBuilder( context.getApplicationContext(), AcRuleDatabase.class, ACRULES_DATABASE_NAME ) @@ -26,27 +26,27 @@ public static void dropAllRules() { sDao.getAll().forEach(it -> sDao.delete(it)); } - public static void putRule(String matcher, String clazz, String method) { + public static void putRule(final String matcher, final String clazz, final String method) { sDao.insertAll(AcRule.Companion.create(matcher, clazz, method)); } - public static void findRule(Matcher matcher, Callback callback) { - for (var rule : sDao.loadAllMatch(matcher.toString())) { + public static void findRule(final Matcher matcher, final Callback callback) { + for (final var rule : sDao.loadAllMatch(matcher.toString())) { callback.onRuleFound(rule.getMatcher(), rule.getClazz(), rule.getMethod()); } } - public static void findRule(List matchers, Callback callback) { - for (var rule : sDao.loadAllMatch(matchers.stream().map(Matcher::toString).toArray(String[]::new))) { + public static void findRule(final List matchers, final Callback callback) { + for (final var rule : sDao.loadAllMatch(matchers.stream().map(Matcher::toString).toArray(String[]::new))) { callback.onRuleFound(rule.getMatcher(), rule.getClazz(), rule.getMethod()); } } - public static boolean isRuleFound(String matcher) { + public static boolean isRuleFound(final String matcher) { return !sDao.loadAllMatch(matcher).isEmpty(); } - public static boolean isRuleFound(String... matchers) { + public static boolean isRuleFound(final String... matchers) { return Arrays.stream(matchers).allMatch(AcRules::isRuleFound); } diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Adp.java b/app/src/main/java/gm/tieba/tabswitch/dao/Adp.java index dfd4e2ea..cd39d548 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Adp.java +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Adp.java @@ -34,21 +34,21 @@ private void getAccountData() { XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.data.AccountData", sClassLoader, "getBDUSS", new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { BDUSS = (String) param.getResult(); } }); XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.data.AccountData", sClassLoader, "getTbs", new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { tbs = (String) param.getResult(); } }); XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.data.AccountData", sClassLoader, "getAccount", new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { account = (String) param.getResult(); } }); @@ -57,9 +57,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { private void refreshCache() { XposedHelpers.findAndHookMethod("tbclient.ForumRecommend.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - public void beforeHookedMethod(MethodHookParam param) throws Throwable { - Set forums = new HashSet<>(); - List list = (List) XposedHelpers.getObjectField(param.thisObject, "like_forum"); + public void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Set forums = new HashSet<>(); + final List list = (List) XposedHelpers.getObjectField(param.thisObject, "like_forum"); if (list == null) return; for (int i = 0; i < list.size(); i++) { forums.add((String) XposedHelpers.getObjectField(list.get(i), "forum_name")); @@ -77,10 +77,10 @@ public static Adp getInstance() { public synchronized Adp parseDatabase() throws JSONException { String myPagesTable = null; mDb = getContext().openOrCreateDatabase("baidu_adp.db", Context.MODE_PRIVATE, null); - try (Cursor c = mDb.query("cache_meta_info", null, null, null, null, null, null)) { + try (final Cursor c = mDb.query("cache_meta_info", null, null, null, null, null, null)) { for (int i = 0; i < c.getCount(); i++) { c.moveToNext(); - String nameSpace = c.getString(0); + final String nameSpace = c.getString(0); if ("tb.my_pages".equals(nameSpace)) { myPagesTable = c.getString(1); } @@ -91,15 +91,15 @@ public synchronized Adp parseDatabase() throws JSONException { return this; } - private void parseMyPages(String tableName) throws JSONException { - try (Cursor c = mDb.query(tableName, null, null, null, null, null, null)) { + private void parseMyPages(final String tableName) throws JSONException { + try (final Cursor c = mDb.query(tableName, null, null, null, null, null, null)) { c.moveToNext(); - String mValue = c.getString(4); - JSONObject jsonObject = new JSONObject(mValue); - JSONArray followList = jsonObject.optJSONArray("follow_list"); + final String mValue = c.getString(4); + final JSONObject jsonObject = new JSONObject(mValue); + final JSONArray followList = jsonObject.optJSONArray("follow_list"); for (int i = 0; i < followList.length(); i++) { - JSONObject follow = followList.optJSONObject(i); - String name = follow.getString("name_show"); + final JSONObject follow = followList.optJSONObject(i); + final String name = follow.getString("name_show"); follows.add(name); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java index d2e40807..2ffaa203 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java @@ -16,7 +16,7 @@ public class Preferences { private static SharedPreferences sTsConfig; private static SharedPreferences sTsNotes; - public static void init(Context context) { + public static void init(final Context context) { sTsPreferences = context.getSharedPreferences("TS_preferences", Context.MODE_PRIVATE); sTsConfig = context.getSharedPreferences("TS_config", Context.MODE_PRIVATE); sTsNotes = context.getSharedPreferences("TS_notes", Context.MODE_PRIVATE); @@ -27,49 +27,49 @@ public static void init(Context context) { return sTsPreferences.getAll(); } - public static void remove(String key) { - SharedPreferences.Editor editor = sTsPreferences.edit(); + public static void remove(final String key) { + final SharedPreferences.Editor editor = sTsPreferences.edit(); editor.remove(key); editor.apply(); } - public static void putBoolean(String key, boolean value) { - SharedPreferences.Editor editor = sTsPreferences.edit(); + public static void putBoolean(final String key, final boolean value) { + final SharedPreferences.Editor editor = sTsPreferences.edit(); editor.putBoolean(key, value); editor.apply(); } - public static boolean getBoolean(String key) { + public static boolean getBoolean(final String key) { return sTsPreferences.getBoolean(key, false); } - public static void putString(String key, String value) { - SharedPreferences.Editor editor = sTsPreferences.edit(); + public static void putString(final String key, final String value) { + final SharedPreferences.Editor editor = sTsPreferences.edit(); editor.putString(key, value); editor.apply(); } - public static String getString(String key) { + public static String getString(final String key) { return sTsPreferences.getString(key, null); } - public static void putStringSet(String key, String value, boolean isContain) { - List list = new ArrayList<>(getStringSet(key)); + public static void putStringSet(final String key, final String value, final boolean isContain) { + final List list = new ArrayList<>(getStringSet(key)); if (!isContain) list.remove(value); else if (!list.contains(value)) list.add(value); - SharedPreferences.Editor editor = sTsPreferences.edit(); + final SharedPreferences.Editor editor = sTsPreferences.edit(); editor.putStringSet(key, new HashSet<>(list)); editor.apply(); } - public static Set getStringSet(String key) { + public static Set getStringSet(final String key) { return sTsPreferences.getStringSet(key, new HashSet<>()); } // Config public static void putEULAAccepted() { - SharedPreferences.Editor editor = sTsConfig.edit(); + final SharedPreferences.Editor editor = sTsConfig.edit(); editor.putBoolean("EULA", true); editor.apply(); } @@ -79,7 +79,7 @@ public static boolean getIsEULAAccepted() { } public static void putAutoSignEnabled() { - SharedPreferences.Editor editor = sTsConfig.edit(); + final SharedPreferences.Editor editor = sTsConfig.edit(); editor.putBoolean("auto_sign", true); editor.apply(); } @@ -90,7 +90,7 @@ public static boolean getIsAutoSignEnabled() { @SuppressLint("ApplySharedPref") public static void putPurgeEnabled() { - SharedPreferences.Editor editor = sTsConfig.edit(); + final SharedPreferences.Editor editor = sTsConfig.edit(); editor.putBoolean("ze", true); editor.commit(); } @@ -100,8 +100,8 @@ public static boolean getIsPurgeEnabled() { } @SuppressLint("ApplySharedPref") - public static void putSignature(int i) { - SharedPreferences.Editor editor = sTsConfig.edit(); + public static void putSignature(final int i) { + final SharedPreferences.Editor editor = sTsConfig.edit(); editor.putInt("signature", i); editor.commit(); } @@ -110,8 +110,8 @@ public static int getSignature() { return sTsConfig.getInt("signature", 0); } - public static void putLikeForum(Set follow) { - SharedPreferences.Editor editor = sTsConfig.edit(); + public static void putLikeForum(final Set follow) { + final SharedPreferences.Editor editor = sTsConfig.edit(); editor.putStringSet("like_forum", follow); editor.apply(); } @@ -121,7 +121,7 @@ public static Set getLikeForum() { } public static void putSignDate() { - SharedPreferences.Editor editor = sTsConfig.edit(); + final SharedPreferences.Editor editor = sTsConfig.edit(); editor.putInt("sign_date", Calendar.getInstance().get(Calendar.DAY_OF_YEAR)); editor.apply(); } @@ -135,7 +135,7 @@ public static boolean getIsSigned() { return sTsNotes.getAll(); } - public static String getNote(String name) { + public static String getNote(final String name) { return sTsNotes.getString(name, null); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index b99b1201..6510ccc8 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -67,12 +67,12 @@ public List matchers() { public void hook() throws Throwable { XposedHelpers.findAndHookMethod(Dialog.class, "dismissDialog", new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) { - Dialog dialog = (Dialog) param.thisObject; + protected void beforeHookedMethod(final MethodHookParam param) { + final Dialog dialog = (Dialog) param.thisObject; if (dialog.isShowing()) { - View view = dialog.getWindow().getCurrentFocus(); + final View view = dialog.getWindow().getCurrentFocus(); if (view != null) { - InputMethodManager imm = (InputMethodManager) view.getContext() + final InputMethodManager imm = (InputMethodManager) view.getContext() .getSystemService(Activity.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getRootView().getWindowToken(), 0); } @@ -82,12 +82,12 @@ protected void beforeHookedMethod(MethodHookParam param) { XposedHelpers.findAndHookMethod("com.baidu.tieba.setting.more.MoreActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var activity = (Activity) param.thisObject; - var contentView = (ViewGroup) activity.findViewById(android.R.id.content); - var parent = (RelativeLayout) contentView.getChildAt(0); - var scroll = (ScrollView) parent.getChildAt(0); - var containerView = (LinearLayout) scroll.getChildAt(0); + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var activity = (Activity) param.thisObject; + final var contentView = (ViewGroup) activity.findViewById(android.R.id.content); + final var parent = (RelativeLayout) contentView.getChildAt(0); + final var scroll = (ScrollView) parent.getChildAt(0); + final var containerView = (LinearLayout) scroll.getChildAt(0); containerView.addView(TSPreferenceHelper.createButton(MAIN, null, true, v -> startRootPreferenceActivity(activity)), 11); } @@ -97,11 +97,11 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookConstructor(clazz, sClassLoader, XposedHelpers .findClass(PROXY_ACTIVITY, sClassLoader), new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var activity = (Activity) param.args[0]; + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var activity = (Activity) param.args[0]; try { - var navigationBar = new NavigationBar(param.thisObject); - var proxyPage = activity.getIntent().getStringExtra("proxyPage"); + final var navigationBar = new NavigationBar(param.thisObject); + final var proxyPage = activity.getIntent().getStringExtra("proxyPage"); if (proxyPage == null) return; switch (proxyPage) { case MAIN: @@ -117,13 +117,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { proxyPage(activity, navigationBar, TRACE, createHidePreference(activity)); break; } - } catch (Throwable tr) { - var messages = new ArrayList(); + } catch (final Throwable tr) { + final var messages = new ArrayList(); messages.add(Constants.getStrings().get("exception_init_preference")); messages.add(String.format(Locale.CHINA, "tbversion: %s, module version: %d", DeobfuscationHelper.getTbVersion(getContext()), BuildConfig.VERSION_CODE)); messages.add(Log.getStackTraceString(tr)); - var message = TextUtils.join("\n", messages); + final var message = TextUtils.join("\n", messages); XposedBridge.log(message); new AlertDialog.Builder(activity, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT) .setTitle("警告").setMessage(message).setCancelable(false) @@ -132,32 +132,32 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } }); - } catch (NoSuchMethodError ignored) { + } catch (final NoSuchMethodError ignored) { } }); } - private void proxyPage(Activity activity, NavigationBar navigationBar, String title, - LinearLayout preferenceLayout) throws Throwable { + private void proxyPage(final Activity activity, final NavigationBar navigationBar, final String title, + final LinearLayout preferenceLayout) throws Throwable { navigationBar.setTitleText(title); navigationBar.addTextButton("重启", v -> DisplayUtils.restart(activity)); - var contentView = (ViewGroup) activity.findViewById(android.R.id.content); - var parent = (LinearLayout) contentView.getChildAt(0); - var mainScroll = (ScrollView) parent.getChildAt(1); - var containerView = (LinearLayout) mainScroll.getChildAt(0); + final var contentView = (ViewGroup) activity.findViewById(android.R.id.content); + final var parent = (LinearLayout) contentView.getChildAt(0); + final var mainScroll = (ScrollView) parent.getChildAt(1); + final var containerView = (LinearLayout) mainScroll.getChildAt(0); containerView.removeAllViews(); containerView.addView(preferenceLayout); } - private void startRootPreferenceActivity(Activity activity) { + private void startRootPreferenceActivity(final Activity activity) { if (!Preferences.getIsEULAAccepted()) { - StringBuilder stringBuilder = new StringBuilder().append(Constants.getStrings().get("EULA")); + final StringBuilder stringBuilder = new StringBuilder().append(Constants.getStrings().get("EULA")); if (BuildConfig.VERSION_NAME.contains("alpha") || BuildConfig.VERSION_NAME.contains("beta")) { stringBuilder.append("\n\n").append(Constants.getStrings().get("dev_tip")); } - TbDialog bdAlert = new TbDialog(activity, "使用协议", stringBuilder.toString(), true, null); + final TbDialog bdAlert = new TbDialog(activity, "使用协议", stringBuilder.toString(), true, null); bdAlert.setOnNoButtonClickListener(v -> { - Intent intent = new Intent(); + final Intent intent = new Intent(); intent.setAction(Intent.ACTION_DELETE); intent.setData(Uri.parse("package:" + (sPath.contains(BuildConfig.APPLICATION_ID) && new File(sPath).exists() ? @@ -171,20 +171,20 @@ && new File(sPath).exists() ? }); bdAlert.show(); } else { - Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); + final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); intent.putExtra("proxyPage", MAIN); activity.startActivity(intent); } } @NotNull - private LinearLayout createRootPreference(Activity activity) { - boolean isPurgeEnabled = Preferences.getIsPurgeEnabled(); - TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); + private LinearLayout createRootPreference(final Activity activity) { + final boolean isPurgeEnabled = Preferences.getIsPurgeEnabled(); + final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "轻车简从" : "净化界面")); preferenceLayout.addView(TSPreferenceHelper.createButton(MODIFY_TAB, null, true, v -> { - Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); + final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); intent.putExtra("proxyPage", MODIFY_TAB); activity.startActivity(intent); })); @@ -207,16 +207,16 @@ private LinearLayout createRootPreference(Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createButton(NOTES, null, true, v -> { - Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); + final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); intent.putExtra("proxyPage", NOTES); activity.startActivity(intent); })); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "垂手可得" : "自动化")); - SwitchButtonHolder autoSign = new SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH); + final SwitchButtonHolder autoSign = new SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH); if (!Preferences.getIsAutoSignEnabled()) { autoSign.setOnButtonClickListener(v -> { - TbDialog bdalert = new TbDialog(activity, "提示", + final TbDialog bdalert = new TbDialog(activity, "提示", "这是一个需要网络请求并且有封号风险的功能,您需要自行承担使用此功能的风险,请谨慎使用!", true, null); bdalert.setOnNoButtonClickListener(v2 -> bdalert.dismiss()); bdalert.setOnYesButtonClickListener(v2 -> { @@ -237,26 +237,26 @@ private LinearLayout createRootPreference(Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "用赞踩差数代替赞数", "agree_num", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createButton(TRACE, "希望有一天不再需要贴吧TS", true, v -> { - Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); + final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); intent.putExtra("proxyPage", TRACE); activity.startActivity(intent); })); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "关于就是关于" : "关于")); preferenceLayout.addView(TSPreferenceHelper.createButton("版本", BuildConfig.VERSION_NAME, true, v -> { - Intent intent = new Intent(); + final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases/latest")); activity.startActivity(intent); })); preferenceLayout.addView(TSPreferenceHelper.createButton("源代码", "想要小星星", true, v -> { - Intent intent = new Intent(); + final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS")); activity.startActivity(intent); })); preferenceLayout.addView(TSPreferenceHelper.createButton("TG群", "及时获取更新", true, v -> { - Intent intent = new Intent(); + final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse("https://t.me/TabSwitch")); activity.startActivity(intent); @@ -274,8 +274,8 @@ private LinearLayout createRootPreference(Activity activity) { return preferenceLayout; } - private LinearLayout createModifyTabPreference(Activity activity) { - TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); + private LinearLayout createModifyTabPreference(final Activity activity) { + final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); preferenceLayout.addView(TSPreferenceHelper.createTextView("主页导航栏")); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏首页", "home_recommend", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏进吧", "enter_forum", SwitchButtonHolder.TYPE_SWITCH)); @@ -291,9 +291,9 @@ private LinearLayout createModifyTabPreference(Activity activity) { return preferenceLayout; } - private LinearLayout createHidePreference(Activity activity) { - boolean isPurgeEnabled = Preferences.getIsPurgeEnabled(); - TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); + private LinearLayout createHidePreference(final Activity activity) { + final boolean isPurgeEnabled = Preferences.getIsPurgeEnabled(); + final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); if (isPurgeEnabled || BuildConfig.DEBUG) { preferenceLayout.addView(TSPreferenceHelper.createTextView(null)); preferenceLayout.addView(new SwitchButtonHolder(activity, isPurgeEnabled ? "藏起尾巴" : "隐藏模块", "hide", SwitchButtonHolder.TYPE_SWITCH)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java index f16aeb2f..79a14e38 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java @@ -37,12 +37,12 @@ import gm.tieba.tabswitch.widget.TbToast; public class TSPreferenceHelper extends XposedContext { - public static TextView createTextView(String text) { - TextView textView = new TextView(getContext()); + public static TextView createTextView(final String text) { + final TextView textView = new TextView(getContext()); textView.setText(text); textView.setTextColor(ReflectUtils.getColor("CAM_X0108")); textView.setTextSize(ReflectUtils.getDimenDip("fontsize28")); - LinearLayout.LayoutParams layoutParams; + final LinearLayout.LayoutParams layoutParams; if (text != null) { textView.setPaddingRelative((int) ReflectUtils.getDimen("ds30"), (int) ReflectUtils.getDimen("ds32"), 0, @@ -57,18 +57,18 @@ public static TextView createTextView(String text) { return textView; } - public static LinearLayout createButton(String text, String tip, boolean showArrow, View.OnClickListener l) { - Object textTipView = XposedHelpers.newInstance(XposedHelpers.findClass( + public static LinearLayout createButton(final String text, final String tip, final boolean showArrow, final View.OnClickListener l) { + final Object textTipView = XposedHelpers.newInstance(XposedHelpers.findClass( "com.baidu.tbadk.coreExtra.view.TbSettingTextTipView", sClassLoader), getContext()); XposedHelpers.callMethod(textTipView, "setText", text); XposedHelpers.callMethod(textTipView, "setTip", tip); if (!showArrow) { // R.id.arrow2 - var imageView = ReflectUtils.getObjectField(textTipView, ImageView.class); + final var imageView = ReflectUtils.getObjectField(textTipView, ImageView.class); imageView.setVisibility(View.GONE); } - var newButton = ReflectUtils.getObjectField(textTipView, LinearLayout.class); + final var newButton = ReflectUtils.getObjectField(textTipView, LinearLayout.class); ((ViewGroup) newButton.getParent()).removeView(newButton); newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); if (l != null) newButton.setOnClickListener(l); @@ -93,12 +93,12 @@ static String randomToast() { } public static class PreferenceLayout extends LinearLayout { - public PreferenceLayout(Context context) { + public PreferenceLayout(final Context context) { super(context); setOrientation(LinearLayout.VERTICAL); } - public void addView(SwitchButtonHolder view) { + public void addView(final SwitchButtonHolder view) { addView(view.switchButton); } } @@ -113,11 +113,11 @@ static class SwitchButtonHolder { public Switch bdSwitch; public LinearLayout switchButton; - SwitchButtonHolder(Activity activity, String text, String key, int type) { + SwitchButtonHolder(final Activity activity, final String text, final String key, final int type) { mKey = key; if (sExceptions.containsKey(key)) { switchButton = createButton(text, "此功能初始化失败", false, v -> { - Throwable tr = sExceptions.get(key); + final Throwable tr = sExceptions.get(key); XposedBridge.log(tr); Toast.makeText(activity, Log.getStackTraceString(tr), Toast.LENGTH_SHORT).show(); }); @@ -125,7 +125,7 @@ static class SwitchButtonHolder { } bdSwitch = new Switch(); bdSwitch.setOnSwitchStateChangeListener(new SwitchStatusChangeHandler()); - View bdSwitchView = bdSwitch.bdSwitch; + final View bdSwitchView = bdSwitch.bdSwitch; bdSwitchView.setLayoutParams(new LinearLayout.LayoutParams(bdSwitchView.getWidth(), bdSwitchView.getHeight(), 0.16F)); bdSwitchView.setId(View.generateViewId()); @@ -152,16 +152,16 @@ static class SwitchButtonHolder { switchButton.addView(bdSwitchView); } - void setOnButtonClickListener(View.OnClickListener l) { + void setOnButtonClickListener(final View.OnClickListener l) { switchButton.setOnClickListener(l); bdSwitch.bdSwitch.setOnTouchListener((View v, MotionEvent event) -> false); } - private void showRegexDialog(Activity activity) { - EditText editText = new TbEditText(getContext()); + private void showRegexDialog(final Activity activity) { + final EditText editText = new TbEditText(getContext()); editText.setHint(Constants.getStrings().get("regex_hint")); editText.setText(Preferences.getString(mKey)); - TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); + final TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); bdAlert.setOnNoButtonClickListener(v -> bdAlert.dismiss()); bdAlert.setOnYesButtonClickListener(v -> { try { @@ -174,7 +174,7 @@ private void showRegexDialog(Activity activity) { bdSwitch.turnOn(); } bdAlert.dismiss(); - } catch (PatternSyntaxException e) { + } catch (final PatternSyntaxException e) { TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); } }); @@ -195,9 +195,9 @@ private void showRegexDialog(Activity activity) { private static class SwitchStatusChangeHandler implements InvocationHandler { @SuppressWarnings("SuspiciousInvocationHandlerImplementation") @Override - public Object invoke(Object proxy, Method method, Object[] args) { - View view = (View) args[0]; - var tag = sIdToTag.get(view.getId()); + public Object invoke(final Object proxy, final Method method, final Object[] args) { + final View view = (View) args[0]; + final var tag = sIdToTag.get(view.getId()); if (tag != null) { switch (Integer.parseInt(tag.substring(0, 1))) { case TYPE_SWITCH: diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/CreateView.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/CreateView.java index dfb55fde..ccaedf45 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/CreateView.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/CreateView.java @@ -40,12 +40,12 @@ public void hook() throws Throwable { } XposedBridge.hookMethod(method, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var controller = ReflectUtils.getObjectField(param.thisObject, 1); - var signButton = ReflectUtils.getObjectField(controller, ImageView.class); - var activity = (Activity) XposedHelpers.callMethod(param.thisObject, "requireActivity"); - var parent = (RelativeLayout) signButton.getParent(); - var signButtonLayoutParams = (RelativeLayout.LayoutParams) signButton.getLayoutParams(); + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var controller = ReflectUtils.getObjectField(param.thisObject, 1); + final var signButton = ReflectUtils.getObjectField(controller, ImageView.class); + final var activity = (Activity) XposedHelpers.callMethod(param.thisObject, "requireActivity"); + final var parent = (RelativeLayout) signButton.getParent(); + final var signButtonLayoutParams = (RelativeLayout.LayoutParams) signButton.getLayoutParams(); signButtonLayoutParams.leftMargin = 0; signButton.setLayoutParams(signButtonLayoutParams); // historyButton @@ -53,18 +53,18 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { historyDrawable.setImageResource( ReflectUtils.getDrawableId("icon_mask_wo_list_history24_svg")); final var historyButton = new RelativeLayout(activity); - var historyLayoutParams = new RelativeLayout.LayoutParams( + final var historyLayoutParams = new RelativeLayout.LayoutParams( signButtonLayoutParams.height, RelativeLayout.LayoutParams.MATCH_PARENT); historyLayoutParams.addRule(RelativeLayout.LEFT_OF, signButton.getId()); historyButton.setLayoutParams(historyLayoutParams); historyButton.setId(View.generateViewId()); historyButton.addView(historyDrawable); - var drawableLayoutParams = (RelativeLayout.LayoutParams) historyDrawable.getLayoutParams(); + final var drawableLayoutParams = (RelativeLayout.LayoutParams) historyDrawable.getLayoutParams(); drawableLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); historyDrawable.setLayoutParams(drawableLayoutParams); parent.addView(historyButton); historyButton.setOnClickListener(view -> { - var intent = new Intent().setClassName(activity, + final var intent = new Intent().setClassName(activity, "com.baidu.tieba.myCollection.history.PbHistoryActivity"); activity.startActivity(intent); }); @@ -73,7 +73,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { collectDrawable.setImageResource( ReflectUtils.getDrawableId("icon_mask_wo_list_collect24_svg")); final var collectButton = new RelativeLayout(activity); - var collectButtonLayoutParams = new RelativeLayout.LayoutParams( + final var collectButtonLayoutParams = new RelativeLayout.LayoutParams( signButtonLayoutParams.height, RelativeLayout.LayoutParams.MATCH_PARENT); collectButtonLayoutParams.addRule(RelativeLayout.LEFT_OF, historyButton.getId()); collectButton.setLayoutParams(collectButtonLayoutParams); @@ -81,7 +81,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { collectDrawable.setLayoutParams(drawableLayoutParams); parent.addView(collectButton); collectButton.setOnClickListener(view -> { - var intent = new Intent().setClassName(activity, + final var intent = new Intent().setClassName(activity, "com.baidu.tieba.myCollection.CollectTabActivity"); activity.startActivity(intent); }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java index 2c39a345..adff20fc 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java @@ -41,19 +41,19 @@ public void hook() throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.tieba.myCollection.history.PbHistoryActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var activity = (Activity) param.thisObject; + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var activity = (Activity) param.thisObject; new NavigationBar(param.thisObject) .addTextButton("搜索", v -> showRegexDialog(activity)); } }); - var method = ReflectUtils.findFirstMethodByExactType( + final var method = ReflectUtils.findFirstMethodByExactType( "com.baidu.tieba.myCollection.history.PbHistoryActivity", List.class ); XposedBridge.hookMethod(method, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - var list = (List) param.args[0]; + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var list = (List) param.args[0]; if (list == null) return; final var pattern = Pattern.compile(mRegex); @@ -62,11 +62,11 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { try { strings = new String[]{(String) XposedHelpers.getObjectField(o, "forumName"), (String) XposedHelpers.getObjectField(o, "threadName")}; - } catch (NoSuchFieldError e) { + } catch (final NoSuchFieldError e) { strings = new String[]{(String) ReflectUtils.getObjectField(o, 3), (String) ReflectUtils.getObjectField(o, 2)}; } - for (var string : strings) { + for (final var string : strings) { if (pattern.matcher(string).find()) { return false; } @@ -77,32 +77,32 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } - private void showRegexDialog(Activity activity) { - EditText editText = new TbEditText(activity); + private void showRegexDialog(final Activity activity) { + final EditText editText = new TbEditText(activity); editText.setHint(Constants.getStrings().get("regex_hint")); editText.setText(mRegex); editText.addTextChangedListener(new TextWatcher() { @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { + public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { } @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { + public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { } @Override - public void afterTextChanged(Editable s) { + public void afterTextChanged(final Editable s) { mRegex = s.toString(); } }); - TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); + final TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); bdAlert.setOnNoButtonClickListener(v -> bdAlert.dismiss()); bdAlert.setOnYesButtonClickListener(v -> { try { Pattern.compile(editText.getText().toString()); bdAlert.dismiss(); activity.recreate(); - } catch (PatternSyntaxException e) { + } catch (final PatternSyntaxException e) { TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java index 631fd9a5..7617479a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java @@ -34,25 +34,25 @@ public String key() { return "my_attention"; } - public static LinearLayout createNotesPreference(Activity activity) { + public static LinearLayout createNotesPreference(final Activity activity) { Preferences.putBoolean("my_attention", !Preferences.getNotes().isEmpty()); - TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); + final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); Set follows = Collections.emptySet(); try { follows = Adp.getInstance().parseDatabase().follows; preferenceLayout.addView(TSPreferenceHelper.createTextView(null)); - } catch (Throwable e) { + } catch (final Throwable e) { XposedBridge.log(e); preferenceLayout.addView(TSPreferenceHelper.createTextView("读取数据库缓存失败\n" + Log.getStackTraceString(e))); } - for (String follow : follows) { + for (final String follow : follows) { preferenceLayout.addView(TSPreferenceHelper.createButton(follow, Preferences.getNote(follow), true, v -> showNoteDialog(activity, follow))); } boolean isAdd = true; - for (String follow : Preferences.getNotes().keySet()) { + for (final String follow : Preferences.getNotes().keySet()) { if (follows.contains(follow)) continue; if (isAdd) { preferenceLayout.addView(TSPreferenceHelper.createTextView("已取消关注的人")); @@ -64,14 +64,14 @@ public static LinearLayout createNotesPreference(Activity activity) { return preferenceLayout; } - private static void showNoteDialog(Activity activity, String name) { - EditText editText = new TbEditText(activity); - String note = Preferences.getNote(name); + private static void showNoteDialog(final Activity activity, final String name) { + final EditText editText = new TbEditText(activity); + final String note = Preferences.getNote(name); editText.setText(note != null ? note : name); - TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); + final TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); bdAlert.setOnNoButtonClickListener(v -> bdAlert.dismiss()); bdAlert.setOnYesButtonClickListener(v -> { - SharedPreferences.Editor editor = Preferences.getTsNotesEditor(); + final SharedPreferences.Editor editor = Preferences.getTsNotesEditor(); if (TextUtils.isEmpty(editText.getText()) || editText.getText().toString().equals(name)) { editor.remove(name); } else editor.putString(name, editText.getText().toString()); @@ -99,8 +99,8 @@ private static void showNoteDialog(Activity activity, String name) { public void hook() throws Throwable { XposedHelpers.findAndHookMethod("tbclient.User$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - String nameShow = (String) XposedHelpers.getObjectField(param.thisObject, "name_show"); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final String nameShow = (String) XposedHelpers.getObjectField(param.thisObject, "name_show"); if (Preferences.getNote(nameShow) != null) { XposedHelpers.setObjectField(param.thisObject, "name_show", String.format("%s(%s)", Preferences.getNote(nameShow), nameShow)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/NewSub.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/NewSub.java index d61ceeb2..b6075db2 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/NewSub.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/NewSub.java @@ -40,24 +40,24 @@ public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> XposedBridge.hookAllConstructors(XposedHelpers.findClass(clazz, sClassLoader), new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { try { - var activity = (Activity) ReflectUtils.getObjectField(param.thisObject, + final var activity = (Activity) ReflectUtils.getObjectField(param.thisObject, "com.baidu.tieba.pb.pb.sub.NewSubPbActivity"); if (activity.getIntent().getStringExtra("st_type").equals("search_post")) { new NavigationBar(param.thisObject) .addTextButton("查看主题贴", v -> startPbActivity(activity)); } - } catch (NoSuchFieldError ignored) { + } catch (final NoSuchFieldError ignored) { } } })); XposedHelpers.findAndHookMethod("tbclient.PbFloor.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - var thread = XposedHelpers.getObjectField(param.thisObject, "thread"); - var post = XposedHelpers.getObjectField(param.thisObject, "post"); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var thread = XposedHelpers.getObjectField(param.thisObject, "thread"); + final var post = XposedHelpers.getObjectField(param.thisObject, "post"); // null when post is omitted if (thread != null && post != null) { mThreadId = XposedHelpers.getObjectField(thread, "id"); @@ -68,8 +68,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } // "com.baidu.tieba.pb.pb.main.PbModel", "initWithIntent" - private void startPbActivity(Activity activity) { - var intent = new Intent().setClassName(activity, "com.baidu.tieba.pb.pb.main.PbActivity"); + private void startPbActivity(final Activity activity) { + final var intent = new Intent().setClassName(activity, "com.baidu.tieba.pb.pb.main.PbActivity"); intent.putExtra("thread_id", String.valueOf(mThreadId)); intent.putExtra("post_id", String.valueOf(mPostId)); activity.startActivity(intent); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java index b863d675..5365d639 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java @@ -31,34 +31,34 @@ public String key() { } public void hook() throws Throwable { - var subPbLayoutClass = XposedHelpers.findClass("com.baidu.tieba.pb.pb.sub.SubPbLayout", sClassLoader); + final var subPbLayoutClass = XposedHelpers.findClass("com.baidu.tieba.pb.pb.sub.SubPbLayout", sClassLoader); // 楼中楼 try { Method md; try { md = subPbLayoutClass.getDeclaredFields()[4].getType().getDeclaredMethod("createView"); - } catch (NoSuchMethodException e) { + } catch (final NoSuchMethodException e) { md = subPbLayoutClass.getDeclaredFields()[4].getType().getDeclaredMethod("b"); } XposedBridge.hookMethod(md, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var newSubPbListItem = (View) param.getResult(); - var tag = (SparseArray) newSubPbListItem.getTag(); - var b = tag.valueAt(0); + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var newSubPbListItem = (View) param.getResult(); + final var tag = (SparseArray) newSubPbListItem.getTag(); + final var b = tag.valueAt(0); // R.id.new_sub_pb_list_richText - var view = (View) ReflectUtils.getObjectField(b, "com.baidu.tbadk.widget.richText.TbRichTextView"); + final var view = (View) ReflectUtils.getObjectField(b, "com.baidu.tbadk.widget.richText.TbRichTextView"); view.setBackground(createSubPbBackground()); } }); - } catch (NoSuchMethodException e) { + } catch (final NoSuchMethodException e) { XposedBridge.log(e); } // 查看全部回复 XposedHelpers.findAndHookConstructor(subPbLayoutClass, Context.class, AttributeSet.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var view = ReflectUtils.getObjectField(param.thisObject, RelativeLayout.class); + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var view = ReflectUtils.getObjectField(param.thisObject, RelativeLayout.class); view.setBackground(createSubPbBackground()); } }); @@ -66,16 +66,16 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookConstructor("com.baidu.tieba.pb.pb.main.PbCommenFloorItemViewHolder", sClassLoader, XposedHelpers.findClass("com.baidu.tbadk.TbPageContext", sClassLoader), View.class, int.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { // R.id.all_content - var mAllContent = ReflectUtils.getObjectField(param.thisObject, LinearLayout.class); + final var mAllContent = ReflectUtils.getObjectField(param.thisObject, LinearLayout.class); mAllContent.setBackground(createBackground()); } }); } private StateListDrawable createBackground() { - StateListDrawable sld = new StateListDrawable(); + final StateListDrawable sld = new StateListDrawable(); sld.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(ReflectUtils.getColor("CAM_X0204"))); return sld; @@ -85,7 +85,7 @@ private StateListDrawable createSubPbBackground() { if (!DisplayUtils.getTbSkin(getContext()).equals("")) { return createBackground(); } else { - StateListDrawable sld = new StateListDrawable(); + final StateListDrawable sld = new StateListDrawable(); sld.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(Color.WHITE)); return sld; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java index aedfef66..6909ccad 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java @@ -39,36 +39,36 @@ public String key() { } public void hook() throws Throwable { - var method = ReflectUtils.findFirstMethodByExactType( + final var method = ReflectUtils.findFirstMethodByExactType( "com.baidu.tbadk.coreExtra.view.ImagePagerAdapter", ArrayList.class ); XposedBridge.hookMethod(method, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mList = (ArrayList) param.args[0]; } }); XposedHelpers.findAndHookMethod("com.baidu.tbadk.widget.richText.TbRichText", sClassLoader, "toString", new XC_MethodHook() { @Override - protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { if (param.getResult() != null) mTitle = (String) param.getResult(); } }); XposedHelpers.findAndHookConstructor("com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout", sClassLoader, Context.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { - var context = ((Context) param.args[0]).getApplicationContext(); + protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { + final var context = ((Context) param.args[0]).getApplicationContext(); // R.id.download_icon - var imageView = (ImageView) ReflectUtils.getObjectField(param.thisObject, 11); + final var imageView = (ImageView) ReflectUtils.getObjectField(param.thisObject, 11); imageView.setOnLongClickListener(v -> { TbToast.showTbToast(String.format(Locale.CHINA, "开始下载%d张图片", mList.size()), TbToast.LENGTH_SHORT); new Thread(() -> { try { - var list = new ArrayList<>(mList); - var title = mTitle; + final var list = new ArrayList<>(mList); + final var title = mTitle; for (var i = 0; i < list.size(); i++) { var url = list.get(i); url = StringsKt.substringBeforeLast(url, "*", url); @@ -78,7 +78,7 @@ protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Thr TbToast.showTbToast(String.format(Locale.CHINA, "已保存%d张图片至手机相册", list.size()), TbToast.LENGTH_SHORT)); - } catch (IOException | NullPointerException e) { + } catch (final IOException | NullPointerException e) { new Handler(Looper.getMainLooper()).post(() -> TbToast.showTbToast("保存失败", TbToast.LENGTH_SHORT)); } @@ -89,15 +89,15 @@ protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Thr }); } - private static void saveImage(String url, String title, int i, Context context) throws IOException { - try (var is = new URL(url).openStream()) { - var bb = FileUtils.toByteBuffer(is); - var imageDetails = new ContentValues(); + private static void saveImage(final String url, final String title, final int i, final Context context) throws IOException { + try (final var is = new URL(url).openStream()) { + final var bb = FileUtils.toByteBuffer(is); + final var imageDetails = new ContentValues(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { imageDetails.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + File.separator + "tieba" + File.separator + title); } else { - var path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), + final var path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "tieba" + File.separator + title); path.mkdirs(); imageDetails.put(MediaStore.MediaColumns.DATA, path + File.separator @@ -105,9 +105,9 @@ private static void saveImage(String url, String title, int i, Context context) } imageDetails.put(MediaStore.MediaColumns.DISPLAY_NAME, String.format(Locale.CHINA, "%02d", i)); imageDetails.put(MediaStore.MediaColumns.MIME_TYPE, "image/" + FileUtils.getExtension(bb)); - var resolver = context.getContentResolver(); - var imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails); - var descriptor = resolver.openFileDescriptor(imageUri, "w"); + final var resolver = context.getContentResolver(); + final var imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails); + final var descriptor = resolver.openFileDescriptor(imageUri, "w"); FileUtils.copy(bb, descriptor.getFileDescriptor()); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/ThreadStore.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/ThreadStore.java index a75c9d50..3f6faf51 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/ThreadStore.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/ThreadStore.java @@ -51,9 +51,9 @@ public void hook() throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.tieba.myCollection.CollectTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var controller = ReflectUtils.getObjectField(param.thisObject, 1); - var activity = (Activity) param.thisObject; + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var controller = ReflectUtils.getObjectField(param.thisObject, 1); + final var activity = (Activity) param.thisObject; new NavigationBar(controller) .addTextButton("搜索", v -> showRegexDialog(activity)); } @@ -61,16 +61,16 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, Boolean[].class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - var list = ReflectUtils.getObjectField(param.getResult(), ArrayList.class); + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var list = ReflectUtils.getObjectField(param.getResult(), ArrayList.class); if (list == null) return; final Pattern pattern = Pattern.compile(mRegex); list.removeIf(o -> { // com.baidu.tbadk.baseEditMark.MarkData - String[] strings = new String[]{(String) XposedHelpers.getObjectField(o, "mTitle"), + final String[] strings = new String[]{(String) XposedHelpers.getObjectField(o, "mTitle"), (String) XposedHelpers.getObjectField(o, "mForumName"), (String) XposedHelpers.getObjectField(o, "mAuthorName")}; - for (String string : strings) { + for (final String string : strings) { if (pattern.matcher(string).find()) { return false; } @@ -86,32 +86,32 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { })); } - private void showRegexDialog(Activity activity) { - EditText editText = new TbEditText(activity); + private void showRegexDialog(final Activity activity) { + final EditText editText = new TbEditText(activity); editText.setHint(Constants.getStrings().get("regex_hint")); editText.setText(mRegex); editText.addTextChangedListener(new TextWatcher() { @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { + public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { } @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { + public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { } @Override - public void afterTextChanged(Editable s) { + public void afterTextChanged(final Editable s) { mRegex = s.toString(); } }); - TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); + final TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); bdAlert.setOnNoButtonClickListener(v -> bdAlert.dismiss()); bdAlert.setOnYesButtonClickListener(v -> { try { Pattern.compile(editText.getText().toString()); bdAlert.dismiss(); activity.recreate(); - } catch (PatternSyntaxException e) { + } catch (final PatternSyntaxException e) { TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.java index 2ca03b1b..fce83052 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.java @@ -20,7 +20,7 @@ public void hook() throws Throwable { XposedHelpers.findAndHookMethod("tbclient.Agree$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - public void beforeHookedMethod(MethodHookParam param) throws Throwable { + public void beforeHookedMethod(final MethodHookParam param) throws Throwable { XposedHelpers.setObjectField(param.thisObject, "agree_num", XposedHelpers.getObjectField(param.thisObject, "diff_agree_num")); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java index 3fe52ace..5b398851 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java @@ -8,6 +8,7 @@ import org.json.JSONObject; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -45,10 +46,10 @@ public void hook() throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { if (Preferences.getIsSigned()) return; new Thread(() -> { - String result = main(Adp.getInstance().BDUSS); + final String result = main(Adp.getInstance().BDUSS); if (result.endsWith("全部签到成功")) { Preferences.putSignDate(); Preferences.putLikeForum(new HashSet<>(mSuccess)); @@ -59,14 +60,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); } - private String main(String BDUSS) { + private String main(final String BDUSS) { if (BDUSS == null) return "暂未获取到 BDUSS"; AutoSignHelper.setCookie(BDUSS); getTbs(); getFollow(); runSign(); - int failNum = mFollowNum - mSuccess.size(); - String result = "共 {" + mFollowNum + "} 个吧 - 成功: {" + mSuccess.size() + "} - 失败: {" + failNum + "}"; + final int failNum = mFollowNum - mSuccess.size(); + final String result = "共 {" + mFollowNum + "} 个吧 - 成功: {" + mSuccess.size() + "} - 失败: {" + failNum + "}"; XposedBridge.log(result); if (failNum == 0) return "共 {" + mFollowNum + "} 个吧 - 全部签到成功"; else return result; @@ -76,21 +77,21 @@ private void getTbs() { mTbs = Adp.getInstance().tbs; if (mTbs != null) return; try { - JSONObject jsonObject = AutoSignHelper.get(TBS_URL); + final JSONObject jsonObject = AutoSignHelper.get(TBS_URL); if ("1".equals(jsonObject.getString("is_login"))) { XposedBridge.log("获取tbs成功"); mTbs = jsonObject.getString("tbs"); } else XposedBridge.log("获取tbs失败 -- " + jsonObject); - } catch (Exception e) { + } catch (final Exception e) { XposedBridge.log("获取tbs部分出现错误 -- " + e); } } private void getFollow() { try { - JSONObject jsonObject = AutoSignHelper.get(LIKE_URL); + final JSONObject jsonObject = AutoSignHelper.get(LIKE_URL); XposedBridge.log("获取贴吧列表成功"); - JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("like_forum"); + final JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("like_forum"); mFollowNum = jsonArray.length(); // 获取用户所有关注的贴吧 for (int i = 0; i < jsonArray.length(); i++) { @@ -100,7 +101,7 @@ private void getFollow() { mSuccess.add(jsonArray.optJSONObject(i).getString("forum_name")); } } - } catch (Exception e) { + } catch (final Exception e) { XposedBridge.log("获取贴吧列表部分出现错误 -- " + e); } } @@ -110,12 +111,12 @@ private void runSign() { int flag = 3; try { while (mSuccess.size() < mFollowNum && flag-- > 0) { - Iterator iterator = mFollow.iterator(); + final Iterator iterator = mFollow.iterator(); while (iterator.hasNext()) { - String s = iterator.next(); - String body = "kw=" + URLEncoder.encode(s, "UTF-8") + "&tbs=" + mTbs + "&sign=" + + final String s = iterator.next(); + final String body = "kw=" + URLEncoder.encode(s, StandardCharsets.UTF_8) + "&tbs=" + mTbs + "&sign=" + AutoSignHelper.enCodeMd5("kw=" + s + "tbs=" + mTbs + "tiebaclient!!!"); - JSONObject post = AutoSignHelper.post(SIGN_URL, body); + final JSONObject post = AutoSignHelper.post(SIGN_URL, body); if ("0".equals(post.getString("error_code"))) { iterator.remove(); mSuccess.add(s); @@ -129,7 +130,7 @@ private void runSign() { getTbs(); } } - } catch (Exception e) { + } catch (final Exception e) { XposedBridge.log("签到部分出现错误 -- " + e); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.java index c6a19b11..df27f6bf 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.java @@ -18,13 +18,13 @@ public class AutoSignHelper { private static String sCookie; - static void setCookie(String BDUSS) { + static void setCookie(final String BDUSS) { sCookie = "BDUSS=" + BDUSS; } - static JSONObject get(String url) throws JSONException { - OkHttpClient okHttpClient = new OkHttpClient(); - okhttp3.Request request = new okhttp3.Request.Builder() + static JSONObject get(final String url) throws JSONException { + final OkHttpClient okHttpClient = new OkHttpClient(); + final okhttp3.Request request = new okhttp3.Request.Builder() .url(url).get() .addHeader("connection", "keep-alive") .addHeader("Content-Type", "application/x-www-form-urlencoded") @@ -32,23 +32,23 @@ static JSONObject get(String url) throws JSONException { .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36") .addHeader("Cookie", sCookie) .build(); - Call call = okHttpClient.newCall(request); + final Call call = okHttpClient.newCall(request); String respContent = null; try { - Response response = call.execute(); + final Response response = call.execute(); if (response.code() < 400) respContent = response.body().string(); else throw new IOException("response code: " + response.code()); - } catch (IOException e) { + } catch (final IOException e) { XposedBridge.log("get请求错误 -- " + e); } return new JSONObject(respContent); } - static JSONObject post(String url, String body) throws JSONException { - MediaType mediaType = MediaType.Companion.parse("text/x-markdown; charset=utf-8"); - RequestBody stringBody = RequestBody.Companion.create(body, mediaType); - OkHttpClient okHttpClient = new OkHttpClient(); - okhttp3.Request request = new okhttp3.Request.Builder() + static JSONObject post(final String url, final String body) throws JSONException { + final MediaType mediaType = MediaType.Companion.parse("text/x-markdown; charset=utf-8"); + final RequestBody stringBody = RequestBody.Companion.create(body, mediaType); + final OkHttpClient okHttpClient = new OkHttpClient(); + final okhttp3.Request request = new okhttp3.Request.Builder() .url(url).post(stringBody) .addHeader("connection", "keep-alive") .addHeader("Host", "tieba.baidu.com") @@ -57,29 +57,29 @@ static JSONObject post(String url, String body) throws JSONException { .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36") .addHeader("Cookie", sCookie) .build(); - Call call = okHttpClient.newCall(request); + final Call call = okHttpClient.newCall(request); String respContent = null; try { - Response response = call.execute(); + final Response response = call.execute(); if (response.code() < 400) respContent = response.body().string(); else throw new IOException("response code: " + response.code()); - } catch (IOException e) { + } catch (final IOException e) { XposedBridge.log("post请求错误 -- " + e); } return new JSONObject(respContent); } - static String enCodeMd5(String str) { + static String enCodeMd5(final String str) { try { // 生成一个MD5加密计算摘要 - MessageDigest md = MessageDigest.getInstance("MD5"); + final MessageDigest md = MessageDigest.getInstance("MD5"); // 计算md5函数 md.update(str.getBytes(StandardCharsets.UTF_8)); // digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 //一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) return new BigInteger(1, md.digest()).toString(16); - } catch (Exception e) { + } catch (final Exception e) { XposedBridge.log("字符串进行MD5加密错误 -- " + e); return ""; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java index 464d1ae1..e1860441 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java @@ -33,8 +33,8 @@ public List matchers() { public void hook() throws Throwable { XposedHelpers.findAndHookMethod("tbclient.FrsPage.NavTabInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - public void beforeHookedMethod(MethodHookParam param) throws Throwable { - List list = (List) XposedHelpers.getObjectField(param.thisObject, "tab"); + public void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final List list = (List) XposedHelpers.getObjectField(param.thisObject, "tab"); if (list == null) return; for (int i = 0; i < list.size(); i++) { if ((Integer) XposedHelpers.getObjectField(list.get(i), "tab_type") == 14) { @@ -48,8 +48,8 @@ public void beforeHookedMethod(MethodHookParam param) throws Throwable { if (!"com.baidu.tieba.frs.vc.FrsTabViewController".equals(clazz)) return; XposedHelpers.findAndHookMethod("com.baidu.tieba.frs.vc.FrsTabViewController", sClassLoader, method, new XC_MethodHook() { @Override - public void afterHookedMethod(MethodHookParam param) throws Throwable { - Object viewPager = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tieba.frs.FrsTabViewPager"); + public void afterHookedMethod(final MethodHookParam param) throws Throwable { + final Object viewPager = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tieba.frs.FrsTabViewPager"); XposedHelpers.callMethod(viewPager, "setCurrentItem", mPosition, false); } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.java index 2b2e5773..d2b75f84 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.java @@ -27,18 +27,18 @@ public String key() { public void hook() throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - Activity activity = (Activity) param.thisObject; + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final Activity activity = (Activity) param.thisObject; if (!Preferences.getIsSigned() && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) != 0) { - Intent intent = new Intent().setClassName(activity, "com.baidu.tieba.signall.SignAllForumActivity"); + final Intent intent = new Intent().setClassName(activity, "com.baidu.tieba.signall.SignAllForumActivity"); activity.startActivity(intent); } } }); XposedHelpers.findAndHookMethod("com.baidu.tieba.signall.SignAllForumActivity", sClassLoader, "onClick", View.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - Activity activity = (Activity) param.thisObject; + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final Activity activity = (Activity) param.thisObject; if (!Preferences.getIsSigned() && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) != 0) { Preferences.putSignDate(); activity.finish(); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java index 164f916c..b139e650 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java @@ -32,14 +32,14 @@ private static void doHook() { AcRules.findRule(new StringMatcher("pic_amount"), (matcher, clazz, method) -> XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, JSONObject.class, Boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject jsonObject = (JSONObject) param.args[0]; - JSONArray picList = jsonObject.optJSONArray("pic_list"); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final JSONObject jsonObject = (JSONObject) param.args[0]; + final JSONArray picList = jsonObject.optJSONArray("pic_list"); if (picList == null) return; for (int i = 0; i < picList.length(); i++) { - JSONObject pic = picList.optJSONObject(i); - JSONObject img = pic.getJSONObject("img"); - JSONObject original = img.getJSONObject("original"); + final JSONObject pic = picList.optJSONObject(i); + final JSONObject img = pic.getJSONObject("img"); + final JSONObject original = img.getJSONObject("original"); original.put("big_cdn_src", original.getString("original_src")); img.put("original", original); pic.put("img", img); @@ -50,10 +50,10 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { })); XposedHelpers.findAndHookMethod("tbclient.PbContent$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { XposedHelpers.setObjectField(param.thisObject, "show_original_btn", 0); - String[] strings = new String[]{"big_cdn_src", "cdn_src", "cdn_src_active"}; - for (String string : strings) { + final String[] strings = new String[]{"big_cdn_src", "cdn_src", "cdn_src_active"}; + for (final String string : strings) { XposedHelpers.setObjectField(param.thisObject, string, XposedHelpers .getObjectField(param.thisObject, "origin_src")); } @@ -61,10 +61,10 @@ protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Th }); XposedHelpers.findAndHookMethod("tbclient.Media$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { XposedHelpers.setObjectField(param.thisObject, "show_original_btn", 0); - String[] strings = new String[]{"small_pic", "water_pic"}; - for (String string : strings) { + final String[] strings = new String[]{"small_pic", "water_pic"}; + for (final String string : strings) { XposedHelpers.setObjectField(param.thisObject, string, XposedHelpers .getObjectField(param.thisObject, "big_pic")); } @@ -75,10 +75,10 @@ protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Th @SuppressLint("MissingPermission") @Override public void hook() throws Throwable { - NetworkCallbackImpl networkCallback = new NetworkCallbackImpl(); - NetworkRequest.Builder builder = new NetworkRequest.Builder(); - NetworkRequest request = builder.build(); - ConnectivityManager connMgr = (ConnectivityManager) getContext().getSystemService( + final NetworkCallbackImpl networkCallback = new NetworkCallbackImpl(); + final NetworkRequest.Builder builder = new NetworkRequest.Builder(); + final NetworkRequest request = builder.build(); + final ConnectivityManager connMgr = (ConnectivityManager) getContext().getSystemService( Context.CONNECTIVITY_SERVICE); if (connMgr != null) connMgr.registerNetworkCallback(request, networkCallback); } @@ -88,7 +88,7 @@ private static class NetworkCallbackImpl extends ConnectivityManager.NetworkCall } @Override - public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { + public void onCapabilitiesChanged(final Network network, final NetworkCapabilities networkCapabilities) { super.onCapabilitiesChanged(network, networkCapabilities); if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 5f2e3fa1..6b75d1ba 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -23,7 +23,6 @@ import brut.androlib.res.data.value.ResFileValue; import brut.androlib.res.data.value.ResStringValue; import brut.androlib.res.decoder.ARSCDecoder; -import de.robv.android.xposed.XposedBridge; import gm.tieba.tabswitch.dao.AcRule; import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.dao.Preferences; @@ -39,38 +38,37 @@ public class Deobfuscation { private DexBakSearcher searcher; private final SearchScope scope = new SearchScope(); - public void setMatchers(List matchers) { + public void setMatchers(final List matchers) { this.matchers.clear(); this.matchers.addAll(matchers); } - public void unzip(PublishSubject _progress, Context context) throws IOException { + public void unzip(final PublishSubject _progress, final Context context) throws IOException { packageResource = new File(context.getPackageResourcePath()); - var dexDir = new File(context.getCacheDir(), "app_dex"); + final var dexDir = new File(context.getCacheDir(), "app_dex"); FileUtils.deleteRecursively(dexDir); dexDir.mkdirs(); - var sizeToZipEntryMatcher = new HashMap(); - for (var matcher : matchers) { - if (matcher instanceof ZipEntryMatcher) { - var zipEntryMatcher = (ZipEntryMatcher) matcher; + final var sizeToZipEntryMatcher = new HashMap(); + for (final var matcher : matchers) { + if (matcher instanceof final ZipEntryMatcher zipEntryMatcher) { sizeToZipEntryMatcher.put(zipEntryMatcher.getSize(), zipEntryMatcher); } } - var zipFile = new ZipFile(packageResource); - var enumeration = zipFile.entries(); + final var zipFile = new ZipFile(packageResource); + final var enumeration = zipFile.entries(); var entryCount = 0; - var entrySize = zipFile.size(); + final var entrySize = zipFile.size(); while (enumeration.hasMoreElements()) { entryCount++; _progress.onNext((float) entryCount / entrySize); - var ze = enumeration.nextElement(); + final var ze = enumeration.nextElement(); if (ze.getName().matches("classes[0-9]*?\\.dex")) { FileUtils.copy(zipFile.getInputStream(ze), new File(dexDir, ze.getName())); } else { - var matcher = sizeToZipEntryMatcher.get(ze.getSize()); + final var matcher = sizeToZipEntryMatcher.get(ze.getSize()); if (matcher != null) { matcher.setEntryName(ze.getName()); } @@ -78,14 +76,14 @@ public void unzip(PublishSubject _progress, Context context) throws IOExc } zipFile.close(); - var fs = dexDir.listFiles(); + final var fs = dexDir.listFiles(); if (fs == null) { throw new FileNotFoundException("解压失败"); } Arrays.sort(fs, Comparator.comparingInt(it -> { try { return Integer.parseInt(it.getName().replaceAll("[a-z.]", "")); - } catch (NumberFormatException e) { + } catch (final NumberFormatException e) { return 1; } })); @@ -94,12 +92,11 @@ public void unzip(PublishSubject _progress, Context context) throws IOExc } public void decodeArsc() throws IOException, AndrolibException { - var strToResMatcher = new HashMap(); - var entryNameToZipEntryMatcher = new HashMap(); - for (var matcher : matchers) { + final var strToResMatcher = new HashMap(); + final var entryNameToZipEntryMatcher = new HashMap(); + for (final var matcher : matchers) { if (matcher instanceof ResMatcher) { - if (matcher instanceof ZipEntryMatcher) { - var zipEntryMatcher = (ZipEntryMatcher) matcher; + if (matcher instanceof final ZipEntryMatcher zipEntryMatcher) { entryNameToZipEntryMatcher.put(zipEntryMatcher.getEntryName(), zipEntryMatcher); } else { strToResMatcher.put(matcher.toString(), (ResMatcher) matcher); @@ -107,28 +104,28 @@ public void decodeArsc() throws IOException, AndrolibException { } } - var zipFile = new ZipFile(packageResource); - var ze = zipFile.getEntry("resources.arsc"); - try (var in = zipFile.getInputStream(ze)) { - var pkg = ARSCDecoder.decode(in, true, true).getOnePackage(); + final var zipFile = new ZipFile(packageResource); + final var ze = zipFile.getEntry("resources.arsc"); + try (final var in = zipFile.getInputStream(ze)) { + final var pkg = ARSCDecoder.decode(in, true, true).getOnePackage(); pkg.listResSpecs().forEach(resResSpec -> { if (resResSpec.hasDefaultResource()) { try { - var resValue = resResSpec.getDefaultResource().getValue(); - if (resValue instanceof ResStringValue) { - var str = ((ResStringValue) resValue).encodeAsResXmlValue(); - var matcher = strToResMatcher.get(str); + final var resValue = resResSpec.getDefaultResource().getValue(); + if (resValue instanceof final ResStringValue resStringValue) { + final var str = resStringValue.encodeAsResXmlValue(); + final var matcher = strToResMatcher.get(str); if (matcher != null) { matcher.setId(resResSpec.getId().id); } } else if (resValue instanceof ResFileValue) { - var path = resValue.toString(); - var matcher = entryNameToZipEntryMatcher.get(path); + final var path = resValue.toString(); + final var matcher = entryNameToZipEntryMatcher.get(path); if (matcher != null) { matcher.setId(resResSpec.getId().id); } } - } catch (AndrolibException e) { + } catch (final AndrolibException e) { // should not happen } } @@ -137,20 +134,20 @@ public void decodeArsc() throws IOException, AndrolibException { zipFile.close(); } - public SearchScope fastSearchAndFindScope(PublishSubject _progress) throws IOException { + public SearchScope fastSearchAndFindScope(final PublishSubject _progress) throws IOException { searcher = new DexBakSearcher(matchers); var progress = 0F; - for (var f : dexs) { - try (var in = new BufferedInputStream(new FileInputStream(f))) { - var dex = DexBackedDexFile.fromInputStream(null, in); - var classDefs = new ArrayList<>(dex.getClasses()); + for (final var f : dexs) { + try (final var in = new BufferedInputStream(new FileInputStream(f))) { + final var dex = DexBackedDexFile.fromInputStream(null, in); + final var classDefs = new ArrayList<>(dex.getClasses()); for (int i = 0, classCount = classDefs.size(); i < classCount; i++) { progress += (float) 1 / dexCount / classCount; _progress.onNext(progress); searcher.searchStringAndLiteral(classDefs.get(i), new DexBakSearcher.MatcherListener() { @Override - public void onMatch(@NonNull Matcher matcher, @NonNull String clazz, @NonNull String method) { + public void onMatch(@NonNull final Matcher matcher, @NonNull final String clazz, @NonNull final String method) { AcRules.putRule(matcher.toString(), clazz, method); } }); @@ -159,20 +156,20 @@ public void onMatch(@NonNull Matcher matcher, @NonNull String clazz, @NonNull St } // find repackageclasses - var segments = new ArrayList>(); + final var segments = new ArrayList>(); AcRules.sDao.getAll().stream().map(AcRule::getClazz).forEach(cls -> { - var splits = cls.split("\\."); + final var splits = cls.split("\\."); for (int i = 0, length = splits.length; i < length; i++) { - var split = splits[i]; + final var split = splits[i]; if (segments.size() <= i) { segments.add(new ArrayList<>()); } segments.get(i).add(split); } }); - StringBuilder repackageclasses = new StringBuilder("L"); - for (var segment : segments) { - var most = gm.tieba.tabswitch.util.CollectionsKt.most(segment); + final var repackageclasses = new StringBuilder("L"); + for (final var segment : segments) { + final var most = gm.tieba.tabswitch.util.CollectionsKt.most(segment); if (CollectionsKt.count(segment, s -> s.equals(most)) < segments.get(0).size() / 2) { break; } @@ -180,13 +177,13 @@ public void onMatch(@NonNull Matcher matcher, @NonNull String clazz, @NonNull St } scope.pkg = repackageclasses.toString(); - var numberOfClassesNeedToSearch = new int[dexCount]; + final var numberOfClassesNeedToSearch = new int[dexCount]; for (var i = 0; i < dexCount; i++) { - try (var in = new BufferedInputStream(new FileInputStream(dexs[i]))) { - var dex = DexBackedDexFile.fromInputStream(null, in); - var classDefs = ClassDefItem.getClasses(dex); + try (final var in = new BufferedInputStream(new FileInputStream(dexs[i]))) { + final var dex = DexBackedDexFile.fromInputStream(null, in); + final var classDefs = ClassDefItem.getClasses(dex); var count = 0; - for (var classDef : classDefs) { + for (final var classDef : classDefs) { if (scope.isInScope(classDef)) { count++; } @@ -198,25 +195,25 @@ public void onMatch(@NonNull Matcher matcher, @NonNull String clazz, @NonNull St return new SearchScope(scope); } - public void searchSmali(PublishSubject _progress) throws IOException { + public void searchSmali(final PublishSubject _progress) throws IOException { var searchedClassCount = 0; - var totalClassesNeedToSearch = Arrays.stream(scope.numberOfClassesNeedToSearch).sum(); + final var totalClassesNeedToSearch = Arrays.stream(scope.numberOfClassesNeedToSearch).sum(); for (var i = 0; i < dexCount; i++) { if (scope.numberOfClassesNeedToSearch[i] == 0) { continue; } - try (var in = new BufferedInputStream(new FileInputStream(dexs[i]))) { - var dex = DexBackedDexFile.fromInputStream(null, in); - var classDefs = new ArrayList<>(dex.getClasses()); - for (var classDef : classDefs) { - var signature = classDef.getType(); + try (final var in = new BufferedInputStream(new FileInputStream(dexs[i]))) { + final var dex = DexBackedDexFile.fromInputStream(null, in); + final var classDefs = new ArrayList<>(dex.getClasses()); + for (final var classDef : classDefs) { + final var signature = classDef.getType(); if (scope.isInScope(signature)) { searchedClassCount++; _progress.onNext((float) searchedClassCount / totalClassesNeedToSearch); searcher.searchSmali(classDef, new DexBakSearcher.MatcherListener() { @Override - public void onMatch(@NonNull Matcher matcher, @NonNull String clazz, @NonNull String method) { + public void onMatch(@NonNull final Matcher matcher, @NonNull final String clazz, @NonNull final String method) { AcRules.putRule(matcher.toString(), clazz, method); } }); @@ -227,8 +224,8 @@ public void onMatch(@NonNull Matcher matcher, @NonNull String clazz, @NonNull St } public void saveDexSignatureHashCode() throws IOException { - try (var in = new FileInputStream(dexs[0])) { - var signatureHashCode = Arrays.hashCode(DeobfuscationHelper.calcSignature(in)); + try (final var in = new FileInputStream(dexs[0])) { + final var signatureHashCode = Arrays.hashCode(DeobfuscationHelper.calcSignature(in)); Preferences.putSignature(signatureHashCode); } } @@ -240,12 +237,12 @@ public static class SearchScope { SearchScope() { } - SearchScope(SearchScope scope) { + SearchScope(final SearchScope scope) { pkg = scope.pkg; numberOfClassesNeedToSearch = scope.numberOfClassesNeedToSearch; } - boolean isInScope(String classDef) { + boolean isInScope(final String classDef) { return classDef.startsWith(pkg); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java index c91828ce..88bfc4c9 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java @@ -27,50 +27,50 @@ public class DeobfuscationHelper { - static byte[] calcSignature(InputStream dataStoreInput) throws IOException { - MessageDigest md; + static byte[] calcSignature(final InputStream dataStoreInput) throws IOException { + final MessageDigest md; try { md = MessageDigest.getInstance("SHA-1"); - } catch (NoSuchAlgorithmException ex) { + } catch (final NoSuchAlgorithmException ex) { throw new RuntimeException(ex); } dataStoreInput.skip(HeaderItem.SIGNATURE_DATA_START_OFFSET); - byte[] buffer = new byte[4 * 1024]; + final byte[] buffer = new byte[4 * 1024]; int bytesRead = dataStoreInput.read(buffer); while (bytesRead >= 0) { md.update(buffer, 0, bytesRead); bytesRead = dataStoreInput.read(buffer); } - byte[] signature = md.digest(); + final byte[] signature = md.digest(); if (signature.length != HeaderItem.SIGNATURE_SIZE) { throw new RuntimeException("unexpected digest write: " + signature.length + " bytes"); } return signature; } - public static boolean isVersionChanged(Context context) { - SharedPreferences tsConfig = context.getSharedPreferences("TS_config", Context.MODE_PRIVATE); + public static boolean isVersionChanged(final Context context) { + final SharedPreferences tsConfig = context.getSharedPreferences("TS_config", Context.MODE_PRIVATE); return !tsConfig.getString("deobfs_version", "unknown").equals(getTbVersion(context)); } - public static boolean isDexChanged(Context context) { + public static boolean isDexChanged(final Context context) { try { - ZipFile zipFile = new ZipFile(new File(context.getPackageResourcePath())); - try (InputStream in = zipFile.getInputStream(zipFile.getEntry("classes.dex"))) { + final ZipFile zipFile = new ZipFile(new File(context.getPackageResourcePath())); + try (final InputStream in = zipFile.getInputStream(zipFile.getEntry("classes.dex"))) { return Arrays.hashCode(calcSignature(in)) != Preferences.getSignature(); } - } catch (IOException e) { + } catch (final IOException e) { XposedBridge.log(e); } return false; } - public static String getTbVersion(Context context) { - PackageManager pm = context.getPackageManager(); + public static String getTbVersion(final Context context) { + final PackageManager pm = context.getPackageManager(); try { - ApplicationInfo applicationInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); + final ApplicationInfo applicationInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); switch ((Integer) applicationInfo.metaData.get("versionType")) { case 3: return pm.getPackageInfo(context.getPackageName(), 0).versionName; @@ -81,27 +81,27 @@ public static String getTbVersion(Context context) { default: throw new PackageManager.NameNotFoundException("unknown tb version"); } - } catch (PackageManager.NameNotFoundException e) { + } catch (final PackageManager.NameNotFoundException e) { XposedBridge.log(e); return "unknown"; } } @SuppressLint("ApplySharedPref") - public static void saveAndRestart(Activity activity, String version, Class trampoline) { - SharedPreferences.Editor editor = activity.getSharedPreferences("TS_config", Context.MODE_PRIVATE).edit(); + public static void saveAndRestart(final Activity activity, final String version, final Class trampoline) { + final SharedPreferences.Editor editor = activity.getSharedPreferences("TS_config", Context.MODE_PRIVATE).edit(); editor.putString("deobfs_version", version); editor.commit(); if (trampoline == null) { DisplayUtils.restart(activity); } else { XposedHelpers.findAndHookMethod(trampoline, "onCreate", Bundle.class, new XC_MethodHook() { - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Activity activity = (Activity) param.thisObject; + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Activity activity = (Activity) param.thisObject; DisplayUtils.restart(activity); } }); - Intent intent = new Intent(activity, trampoline); + final Intent intent = new Intent(activity, trampoline); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); activity.startActivity(intent); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java index c289c7af..e249de14 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java @@ -39,7 +39,7 @@ public class DeobfuscationHooker extends XposedContext implements IHooker { private FrameLayout mProgressContainer; private LinearLayout mContentView; - public DeobfuscationHooker(List matchers) { + public DeobfuscationHooker(final List matchers) { mMatchers = matchers; } @@ -54,11 +54,11 @@ public void hook() throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.tieba.LogoActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @SuppressLint("ApplySharedPref") @Override - public void afterHookedMethod(MethodHookParam param) throws Throwable { - var hooks = disableStartAndFinishActivity(); + public void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var hooks = disableStartAndFinishActivity(); mActivity = (Activity) param.thisObject; if (Preferences.getBoolean("purge")) { - var editor = mActivity + final var editor = mActivity .getSharedPreferences("settings", Context.MODE_PRIVATE) .edit(); editor.putString("key_location_request_dialog_last_show_version", @@ -93,7 +93,7 @@ public void afterHookedMethod(MethodHookParam param) throws Throwable { viewModel.deobfuscateStep2(); setMessage("(3/4) 搜索字符串和资源 id"); - var scope = viewModel.deobfuscateStep3(); + final var scope = viewModel.deobfuscateStep3(); setMessage("(4/4) 在 " + scope.pkg + " 中搜索代码"); viewModel.deobfuscateStep4(); @@ -105,7 +105,7 @@ public void afterHookedMethod(MethodHookParam param) throws Throwable { DeobfuscationHelper.getTbVersion(mActivity), XposedHelpers.findClass(TRAMPOLINE_ACTIVITY, sClassLoader) ); - } catch (Throwable e) { + } catch (final Throwable e) { XposedBridge.log(e); setMessage("处理失败\n" + Log.getStackTraceString(e)); } @@ -131,7 +131,7 @@ private List disableStartAndFinishActivity() { @SuppressLint({"SetTextI18n"}) private void initProgressIndicator() { - var title = new TextView(mActivity); + final var title = new TextView(mActivity); title.setTextSize(16); title.setPaddingRelative(0, 0, 0, 8); title.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); @@ -143,22 +143,22 @@ private void initProgressIndicator() { mMessage.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); mMessage.setTextSize(16); mMessage.setTextColor(Color.parseColor("#FF303030")); - var messageLayoutParams = new FrameLayout.LayoutParams( + final var messageLayoutParams = new FrameLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); mMessage.setLayoutParams(messageLayoutParams); mProgressContainer = new FrameLayout(mActivity); mProgressContainer.addView(mProgress); mProgressContainer.addView(mMessage); - var frameLayoutParams = new FrameLayout.LayoutParams( + final var frameLayoutParams = new FrameLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); mProgressContainer.setLayoutParams(frameLayoutParams); - var progressIndicator = new LinearLayout(mActivity); + final var progressIndicator = new LinearLayout(mActivity); progressIndicator.setOrientation(LinearLayout.VERTICAL); progressIndicator.setBackgroundColor(Color.WHITE); progressIndicator.addView(title); progressIndicator.addView(mProgressContainer); progressIndicator.setPaddingRelative(0, 16, 0, 16); - var linearLayoutParams = new LinearLayout.LayoutParams( + final var linearLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); progressIndicator.setLayoutParams(linearLayoutParams); mContentView = new LinearLayout(mActivity); @@ -166,13 +166,13 @@ private void initProgressIndicator() { mContentView.addView(progressIndicator); } - private void setMessage(String message) { + private void setMessage(final String message) { mActivity.runOnUiThread(() -> mMessage.setText(message)); } - private void setProgress(float progress) { + private void setProgress(final float progress) { mActivity.runOnUiThread(() -> { - var lp = mProgress.getLayoutParams(); + final var lp = mProgress.getLayoutParams(); lp.height = mMessage.getHeight(); lp.width = Math.round(mProgressContainer.getWidth() * progress); mProgress.setLayoutParams(lp); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java index f01aaf68..b631775d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java @@ -14,7 +14,7 @@ public class DeobfuscationViewModel { Observable progress = _progress; private final Deobfuscation deobfuscation = new Deobfuscation(); - public void deobfuscateStep1(Context context, List matchers) throws IOException { + public void deobfuscateStep1(final Context context, final List matchers) throws IOException { deobfuscation.setMatchers(matchers); deobfuscation.unzip(_progress, context); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DexBakSearcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DexBakSearcher.kt index 18e588b0..c1d6d155 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DexBakSearcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DexBakSearcher.kt @@ -91,6 +91,7 @@ class DexBakSearcher(matchers: Iterable = emptyList()) { } } } + Opcode.CONST_4, Opcode.CONST_16, Opcode.CONST, Opcode.CONST_HIGH16, Opcode.CONST_WIDE_16, Opcode.CONST_WIDE_32, Opcode.CONST_WIDE, Opcode.CONST_WIDE_HIGH16 -> if (instruction.opcode.format in arrayOf( @@ -104,6 +105,7 @@ class DexBakSearcher(matchers: Iterable = emptyList()) { l.onMatch(it, type.convert(), method.name) } } + else -> { // do nothing. } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java index e9ed76ec..09bd5879 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java @@ -28,7 +28,7 @@ public void hook() throws Throwable { // 楼层 XposedHelpers.findAndHookMethod("tbclient.PbPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { final var postList = (List) XposedHelpers.getObjectField(param.thisObject, "post_list"); if (postList == null) return; final var pattern = getPattern(); @@ -42,7 +42,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 楼中楼:[\u202e|\ud83c\udd10-\ud83c\udd89] XposedHelpers.findAndHookMethod("tbclient.SubPost$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { final var subPostList = (List) XposedHelpers.getObjectField(param.thisObject, "sub_post_list"); if (subPostList == null) return; final var pattern = getPattern(); @@ -53,7 +53,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 楼层回复 XposedHelpers.findAndHookMethod("tbclient.PbFloor.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { final var subpostList = (List) XposedHelpers.getObjectField(param.thisObject, "subpost_list"); if (subpostList == null) return; final var pattern = getPattern(); @@ -71,9 +71,9 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } - private void initIdList(Object thisObject, Pattern pattern) { + private void initIdList(final Object thisObject, final Pattern pattern) { final var userList = (List) XposedHelpers.getObjectField(thisObject, "user_list"); - for (var user : userList) { + for (final var user : userList) { final var authors = new String[]{(String) XposedHelpers.getObjectField(user, "name"), (String) XposedHelpers.getObjectField(user, "name_show")}; if (Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find())) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java index d8164f0d..f68f2bf7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java @@ -27,15 +27,15 @@ public void hook() throws Throwable { XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - public void beforeHookedMethod(MethodHookParam param) throws Throwable { - Set forums = Preferences.getLikeForum(); + public void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Set forums = Preferences.getLikeForum(); if (forums == null) { Looper.prepare(); TbToast.showTbToast("暂未获取到关注列表", TbToast.LENGTH_LONG); Looper.loop(); return; } - List list = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); + final List list = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); if (list == null) return; list.removeIf(o -> !forums.contains((String) XposedHelpers.getObjectField(o, "fname"))); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java index 4f5ad012..4a71c1c0 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java @@ -39,11 +39,11 @@ public List matchers() { @Override public void hook() throws Throwable { AcRules.findRule(new StringMatcher("has_show_message_tab_tips"), (matcher, clazz, method) -> { - var md = ReflectUtils.findFirstMethodByExactType(clazz, ArrayList.class); + final var md = ReflectUtils.findFirstMethodByExactType(clazz, ArrayList.class); XposedBridge.hookMethod(md, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - var tabsToRemove = new HashSet(); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var tabsToRemove = new HashSet(); if (Preferences.getBoolean("home_recommend")) { tabsToRemove.add("com.baidu.tieba.homepage.framework.RecommendFrsDelegateStatic"); } @@ -62,7 +62,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { tabsToRemove.add("com.baidu.tieba.imMessageCenter.im.chat.notify.ImMessageCenterDelegateStatic"); tabsToRemove.add("com.baidu.tieba.immessagecenter.im.chat.notify.ImMessageCenterDelegateStatic"); } - var list = (ArrayList) param.args[0]; + final var list = (ArrayList) param.args[0]; list.removeIf(tab -> tabsToRemove.contains(tab.getClass().getName())); } }); @@ -71,8 +71,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.adp.framework.MessageManager", sClassLoader), "dispatchResponsedMessage", new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Object responsedMessage = param.args[0]; + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Object responsedMessage = param.args[0]; if ((int) XposedHelpers.getObjectField(responsedMessage, "mCmd") == 2921551) { param.setResult(null); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java index dee0aeda..498d0fae 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java @@ -23,7 +23,7 @@ public String key() { public void hook() throws Throwable { XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { final var threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); if (threadList == null) return; final var pattern = getPattern(); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java index 06a80ec0..d42aad47 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java @@ -23,7 +23,7 @@ public String key() { public void hook() throws Throwable { XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { final var threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); if (threadList == null) return; final var pattern = getPattern(); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 67906fde..48fbcebb 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -54,14 +54,14 @@ public void hook() throws Throwable { XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(null)); break; case "pic_amount": // 图片广告:必须"recom_ala_info", "app", 可选"goods_info" - for (var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { + for (final var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { if (Arrays.toString(md.getParameterTypes()).contains("JSONObject") && !md.getName().equals(method)) { XposedBridge.hookMethod(md, XC_MethodReplacement.returnConstant(null)); } } break; case "key_frs_dialog_ad_last_show_time": // 吧推广弹窗 - for (var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { + for (final var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { if (md.getName().equals(method) && md.getReturnType().equals(boolean.class)) { XposedBridge.hookMethod(md, XC_MethodReplacement.returnConstant(true)); } @@ -72,8 +72,8 @@ public void hook() throws Throwable { // 启动广告 XposedHelpers.findAndHookMethod("com.baidu.adp.framework.MessageManager", sClassLoader, "findTask", int.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - int task = (int) param.args[0]; + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final int task = (int) param.args[0]; if (task == 2016555 || task == 2921390) { param.setResult(null); } @@ -83,8 +83,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.adp.framework.MessageManager", sClassLoader), "dispatchResponsedMessage", new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Object responsedMessage = param.args[0]; + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Object responsedMessage = param.args[0]; if ((int) XposedHelpers.getObjectField(responsedMessage, "mCmd") == 2016520) { param.setResult(null); } @@ -94,24 +94,24 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { Class clazz; try { clazz = XposedHelpers.findClass("com.baidu.tieba.pb.pb.main.AbsPbActivity", sClassLoader); - } catch (XposedHelpers.ClassNotFoundError e) { + } catch (final XposedHelpers.ClassNotFoundError e) { clazz = XposedHelpers.findClass("com.baidu.tieba.pb.pb.main.PbActivity", sClassLoader); } XposedHelpers.findAndHookMethod(clazz, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Activity activity = (Activity) param.thisObject; - Bundle bundle = activity.getIntent().getExtras(); - Intent intent = new Intent(); - for (String key : bundle.keySet()) { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Activity activity = (Activity) param.thisObject; + final Bundle bundle = activity.getIntent().getExtras(); + final Intent intent = new Intent(); + for (final String key : bundle.keySet()) { if /* 为您推荐 */ (key.equals("key_start_from")) { - int startFrom = (int) bundle.get(key); + final int startFrom = (int) bundle.get(key); if (startFrom == 2 || startFrom == 3) intent.putExtra(key, 0); } else if /* 浏览器打开热门推荐 */ (key.equals("key_uri")) { - Uri uri = (Uri) bundle.get(key); + final Uri uri = (Uri) bundle.get(key); intent.putExtra("thread_id", uri.getQueryParameter("tid")); } else { - Object value = bundle.get(key); + final Object value = bundle.get(key); if (value instanceof Serializable) { intent.putExtra(key, (Serializable) value); } else { @@ -125,12 +125,12 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 帖子直播推荐:在 com/baidu/tieba/pb/pb/main/ 中搜索 tbclient/AlaLiveInfo XposedHelpers.findAndHookMethod("tbclient.AlaLiveInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { XposedHelpers.setObjectField(param.thisObject, "user_info", null); } }); // 首页直播推荐卡片:R.layout.card_home_page_ala_live_item_new - for (Method method : XposedHelpers.findClass("com.baidu.tieba.homepage.personalize.adapter.HomePageAlaLiveThreadAdapter", sClassLoader).getDeclaredMethods()) { + for (final Method method : XposedHelpers.findClass("com.baidu.tieba.homepage.personalize.adapter.HomePageAlaLiveThreadAdapter", sClassLoader).getDeclaredMethods()) { if (method.getReturnType().toString().endsWith("HomePageAlaLiveThreadViewHolder")) { XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(null)); } @@ -138,15 +138,15 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 首页推荐 XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); if (threadList == null) return; threadList.removeIf(o -> { if (XposedHelpers.getObjectField(o, "forum_info") == null) { return true; } - Object worksInfo = XposedHelpers.getObjectField(o, "works_info"); + final Object worksInfo = XposedHelpers.getObjectField(o, "works_info"); return worksInfo != null && (Integer) XposedHelpers.getObjectField(worksInfo, "is_works") == 1; }); } @@ -154,18 +154,18 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 吧页面 XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { // 吧公告 XposedHelpers.setObjectField(param.thisObject, "star_enter", new ArrayList<>()); - List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); + final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); if (threadList == null) return; threadList.removeIf(o -> { if (XposedHelpers.getObjectField(o, "ala_info") != null) { return true; } - Object worksInfo = XposedHelpers.getObjectField(o, "works_info"); + final Object worksInfo = XposedHelpers.getObjectField(o, "works_info"); return worksInfo != null && (Integer) XposedHelpers.getObjectField(worksInfo, "is_works") == 1; }); @@ -178,14 +178,14 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 吧友直播 XposedHelpers.findAndHookMethod("tbclient.FrsPage.NavTabInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - List list = (List) XposedHelpers.getObjectField(param.thisObject, "tab"); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final List list = (List) XposedHelpers.getObjectField(param.thisObject, "tab"); if (list == null) return; list.removeIf(o -> (Integer) XposedHelpers.getObjectField(o, "tab_type") == 92); } }); // 你可能感兴趣的人:initUI() - var md = ReflectUtils.findFirstMethodByExactType("com.baidu.tieba.homepage.concern.view.ConcernRecommendLayout"); + final var md = ReflectUtils.findFirstMethodByExactType("com.baidu.tieba.homepage.concern.view.ConcernRecommendLayout"); XposedBridge.hookMethod(md, XC_MethodReplacement.returnConstant(null)); // 首页任务中心:R.id.task TbImageView // XposedHelpers.findAndHookMethod("com.baidu.tieba.homepage.framework.indicator.NestedScrollHeader", sClassLoader, "onAttachedToWindow", new XC_MethodHook() { @@ -205,13 +205,13 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 一键签到广告 XposedHelpers.findAndHookMethod("com.baidu.tieba.signall.SignAllForumAdvertActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Activity activity = (Activity) param.thisObject; + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Activity activity = (Activity) param.thisObject; activity.finish(); } }); // 首页推荐右侧悬浮 - for (var method : XposedHelpers.findClass("com.baidu.tbadk.widget.RightFloatLayerView", sClassLoader).getDeclaredMethods()) { + for (final var method : XposedHelpers.findClass("com.baidu.tbadk.widget.RightFloatLayerView", sClassLoader).getDeclaredMethods()) { if (method.getParameterTypes().length == 0 && method.getReturnType() == boolean.class) { XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(false)); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index b742362d..b75ca72b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -40,21 +40,21 @@ public void hook() throws Throwable { case "热门吧精选": XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mRecommendHotForumTitle = param.getResult(); } }); break; case "c13378": - for (var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { - var paramTypes = md.getParameterTypes(); + for (final var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { + final var paramTypes = md.getParameterTypes(); if (paramTypes.length == 2 && paramTypes[0] == List.class) { XposedBridge.hookMethod(md, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { if (mRecommendHotForumTitle != null) { - var list = (List) param.args[0]; - var index = list.indexOf(mRecommendHotForumTitle); + final var list = (List) param.args[0]; + final var index = list.indexOf(mRecommendHotForumTitle); if (index != -1) { while (list.size() > index) { list.remove(index); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java index 49d170fa..db59c389 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java @@ -39,9 +39,9 @@ public void hook() throws Throwable { case "Lcom/baidu/tieba/R$drawable;->icon_pure_topbar_store44_svg:I": // 商店 XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, int.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { // R.id.person_navigation_dressup_img - var imageView = (ImageView) ReflectUtils.getObjectField(param.thisObject, 4); + final var imageView = (ImageView) ReflectUtils.getObjectField(param.thisObject, 4); imageView.setVisibility(View.GONE); } }); @@ -50,13 +50,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if ("com.baidu.tieba.post.PersonPostActivity".equals(clazz)) { break; } - for (var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { + for (final var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { if (Arrays.toString(md.getParameterTypes()).equals("[interface com.baidu.tbadk.TbPageContext, int]")) { XposedBridge.hookMethod(md, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { // R.id.function_item_bottom_divider - var view = (View) ReflectUtils.getObjectField(param.thisObject, 10); + final var view = (View) ReflectUtils.getObjectField(param.thisObject, 10); view.setVisibility(View.GONE); } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.java index ad576628..6f5c8786 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.java @@ -31,7 +31,7 @@ public void hook() throws Throwable { try { XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.view.MessageRedDotView", sClassLoader, "onChangeSkinType", XC_MethodReplacement.returnConstant(null)); - } catch (NoSuchMethodError e) { + } catch (final NoSuchMethodError e) { XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.view.MessageRedDotView", sClassLoader, "e", XC_MethodReplacement.returnConstant(null)); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/SwitchManager.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/SwitchManager.java index a9d59662..69edf54a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/SwitchManager.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/SwitchManager.java @@ -21,7 +21,7 @@ public void hook() throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.adp.lib.featureSwitch.SwitchManager", sClassLoader, "findType", String.class, new XC_MethodHook() { @Override - public void beforeHookedMethod(MethodHookParam param) throws Throwable { + public void beforeHookedMethod(final MethodHookParam param) throws Throwable { if (Preferences.getStringSet("switch_manager").contains((String) param.args[0])) { param.setResult(-1); } @@ -31,8 +31,8 @@ public void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.view.AgreeView", sClassLoader, "setAgreeAlone", boolean.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - StackTraceElement[] stes = new Exception().getStackTrace(); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final StackTraceElement[] stes = new Exception().getStackTrace(); for (int i = 5; i < 20; i++) { if (stes[i].getClassName().equals( "com.baidu.tbadk.core.view.ThreadCommentAndPraiseInfoLayout")) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java index 5240f575..23d14fc7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java @@ -48,8 +48,8 @@ public void hook() throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.tieba.pb.videopb.fragment.DetailInfoAndReplyFragment", sClassLoader, "onCreateView", LayoutInflater.class, ViewGroup.class, Bundle.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - ViewGroup recyclerView = (ViewGroup) ReflectUtils.getObjectField(param.thisObject, + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final ViewGroup recyclerView = (ViewGroup) ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdTypeRecyclerView"); recyclerView.setOnTouchListener((v, event) -> false); } @@ -58,21 +58,21 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod("com.baidu.tieba.pb.pb.main.PbLandscapeListView", sClassLoader, "dispatchTouchEvent", MotionEvent.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { XposedHelpers.callMethod(param.thisObject, "setForbidDragListener", true); } }); // 图片缩放倍数 - Class clazz = XposedHelpers.findClass("com.baidu.tbadk.widget.DragImageView", sClassLoader); + final Class clazz = XposedHelpers.findClass("com.baidu.tbadk.widget.DragImageView", sClassLoader); Method method; try { method = clazz.getDeclaredMethod("getMaxScaleValue", Bitmap.class); - } catch (NoSuchMethodException e) { + } catch (final NoSuchMethodException e) { method = clazz.getDeclaredMethod("U", Bitmap.class); } XposedBridge.hookMethod(method, new XC_MethodHook() { @Override - protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { param.setResult(3 * (float) param.getResult()); } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/Hide.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/Hide.java index 28a489b5..b3bcfee2 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/Hide.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/Hide.java @@ -25,14 +25,14 @@ public String key() { @Deprecated @Override public void hook() throws Throwable { - for (Class clazz : new Class[]{Throwable.class, Thread.class}) { + for (final Class clazz : new Class[]{Throwable.class, Thread.class}) { XposedHelpers.findAndHookMethod(clazz, "getStackTrace", new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - StackTraceElement[] stes = (StackTraceElement[]) param.getResult(); - List filtered = new ArrayList<>(); - for (StackTraceElement ste : stes) { - String name = ste.getClassName(); + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final StackTraceElement[] stes = (StackTraceElement[]) param.getResult(); + final List filtered = new ArrayList<>(); + for (final StackTraceElement ste : stes) { + final String name = ste.getClassName(); if (!name.contains("posed") && !name.contains("Hooker") && !name.contains(BuildConfig.APPLICATION_ID) && !name.equals("java.lang.reflect.Method")) { @@ -40,7 +40,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } - StackTraceElement[] result = new StackTraceElement[filtered.size()]; + final StackTraceElement[] result = new StackTraceElement[filtered.size()]; for (int i = 0; i < filtered.size(); i++) { result[i] = filtered.get(i); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/NativeCheck.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/NativeCheck.java index 5ed1f883..cd6ef392 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/NativeCheck.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/NativeCheck.java @@ -8,16 +8,16 @@ @SuppressLint("UnsafeDynamicallyLoadedCode") public class NativeCheck extends XposedContext { static { - var soPaths = new String[]{ + final var soPaths = new String[]{ sPath + "!/lib/armeabi-v7a/libcheck.so", sPath + "!/lib/arm64-v8a/libcheck.so", }; for (int i = 0; i < 3; i++) { - for (var soPath : soPaths) { + for (final var soPath : soPaths) { try { System.load(soPath); break; - } catch (UnsatisfiedLinkError e) { + } catch (final UnsatisfiedLinkError e) { XposedBridge.log(i + soPath); XposedBridge.log(e); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java index abe291f5..208caf6e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java @@ -33,12 +33,12 @@ public String key() { @Override public void hook() throws Throwable { // 0x4197d783fc000000L - for (var md : XposedHelpers.findClass("com.baidu.tbadk.core.util.FileHelper", sClassLoader).getDeclaredMethods()) { + for (final var md : XposedHelpers.findClass("com.baidu.tbadk.core.util.FileHelper", sClassLoader).getDeclaredMethods()) { switch (Arrays.toString(md.getParameterTypes())) { case "[class java.lang.String, class [B, class android.content.Context]": XposedBridge.hookMethod(md, new XC_MethodReplacement() { @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + protected Object replaceHookedMethod(final MethodHookParam param) throws Throwable { return saveImage((String) param.args[0], new ByteArrayInputStream( (byte[]) param.args[1]), (Context) param.args[2]); } @@ -47,7 +47,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { case "[class java.lang.String, class java.lang.String, class android.content.Context]": XposedBridge.hookMethod(md, new XC_MethodReplacement() { @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + protected Object replaceHookedMethod(final MethodHookParam param) throws Throwable { return saveImage((String) param.args[1], new FileInputStream( (String) param.args[0]), (Context) param.args[2]); } @@ -57,17 +57,17 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } } - private int saveImage(String url, InputStream is, Context context) { - var appContext = context.getApplicationContext(); - var fileName = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf(".")); + private int saveImage(final String url, final InputStream is, final Context context) { + final var appContext = context.getApplicationContext(); + final var fileName = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf(".")); try { - var bb = FileUtils.toByteBuffer(is); - var imageDetails = new ContentValues(); + final var bb = FileUtils.toByteBuffer(is); + final var imageDetails = new ContentValues(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { imageDetails.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + File.separator + "tieba"); } else { - var path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), + final var path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "tieba"); path.mkdirs(); imageDetails.put(MediaStore.MediaColumns.DATA, path + File.separator @@ -75,13 +75,13 @@ private int saveImage(String url, InputStream is, Context context) { } imageDetails.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName); imageDetails.put(MediaStore.MediaColumns.MIME_TYPE, "image/" + FileUtils.getExtension(bb)); - var resolver = appContext.getContentResolver(); - var imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails); - var descriptor = resolver.openFileDescriptor(imageUri, "w"); + final var resolver = appContext.getContentResolver(); + final var imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails); + final var descriptor = resolver.openFileDescriptor(imageUri, "w"); FileUtils.copy(bb, descriptor.getFileDescriptor()); is.close(); return 0; - } catch (IOException | NullPointerException e) { + } catch (final IOException | NullPointerException e) { XposedBridge.log(e); return -1; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/StackTrace.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/StackTrace.java index 11bb71f2..deb95396 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/StackTrace.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/StackTrace.java @@ -23,22 +23,22 @@ public String key() { @Override public void hook() throws Throwable { - for (Method method : XposedHelpers.findClass("com.baidu.tieba.LogoActivity", sClassLoader).getDeclaredMethods()) { + for (final Method method : XposedHelpers.findClass("com.baidu.tieba.LogoActivity", sClassLoader).getDeclaredMethods()) { XposedBridge.hookMethod(method, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - List sts = new ArrayList<>(); - StackTraceElement[] stes = Thread.currentThread().getStackTrace(); + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final List sts = new ArrayList<>(); + final StackTraceElement[] stes = Thread.currentThread().getStackTrace(); boolean isXposedStackTrace = false; - for (StackTraceElement ste : stes) { - String name = ste.getClassName(); + for (final StackTraceElement ste : stes) { + final String name = ste.getClassName(); if (name.contains("Activity") || name.equals("android.app.Instrumentation")) break; if (isXposedStackTrace) sts.add(name); if (name.equals("java.lang.Thread")) isXposedStackTrace = true; } - for (String st : sts) { + for (final String st : sts) { if (!sStes.contains(st)) sStes.add(st); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/TraceChecker.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/TraceChecker.java index 7e7fe6cb..2117b70c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/TraceChecker.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/TraceChecker.java @@ -41,7 +41,7 @@ public class TraceChecker extends XposedContext { private final String FAKE = "fake"; private int mTraceCount; - public TraceChecker(TSPreferenceHelper.PreferenceLayout preferenceLayout) { + public TraceChecker(final TSPreferenceHelper.PreferenceLayout preferenceLayout) { mPreferenceLayout = preferenceLayout; } @@ -67,12 +67,12 @@ public void checkAll() { } private void classloader() { - ResultBuilder result = new ResultBuilder("类加载器"); + final ResultBuilder result = new ResultBuilder("类加载器"); try { - String clazz = "de.robv.android.xposed.XposedBridge"; + final String clazz = "de.robv.android.xposed.XposedBridge"; PathClassLoader.getSystemClassLoader().loadClass(clazz); result.addTrace(JAVA, clazz); - } catch (ClassNotFoundException ignored) { + } catch (final ClassNotFoundException ignored) { } if (NativeCheck.findXposed()) result.addTrace(C, "de/robv/android/xposed/XposedBridge"); @@ -81,12 +81,12 @@ private void classloader() { } private void files() { - ResultBuilder result = new ResultBuilder("文件"); - for (String symbol : new String[]{"access", "faccessat"}) { + final ResultBuilder result = new ResultBuilder("文件"); + for (final String symbol : new String[]{"access", "faccessat"}) { if (NativeCheck.inline(symbol)) result.addTrace(FAKE, symbol + " is inline hooked"); } - String[] paths = new String[]{getContext().getFilesDir().getParent() + final String[] paths = new String[]{getContext().getFilesDir().getParent() .replace(getContext().getPackageName(), BuildConfig.APPLICATION_ID), getContext().getExternalFilesDir(null).getParent() .replace(getContext().getPackageName(), BuildConfig.APPLICATION_ID), @@ -97,21 +97,21 @@ private void files() { + File.separator + "TS_config.xml", getContext().getFilesDir().getParent() + File.separator + "shared_prefs" + File.separator + "TS_notes.xml"}; - for (String path : paths) { + for (final String path : paths) { if (NativeCheck.access(path) == 0) result.addTrace(C, path); } result.show(); } private void maps() { - ResultBuilder result = new ResultBuilder("内存映射"); - for (String symbol : new String[]{"open", "open64", "openat", "openat64", "__openat", + final ResultBuilder result = new ResultBuilder("内存映射"); + for (final String symbol : new String[]{"open", "open64", "openat", "openat64", "__openat", "fopen", "fdopen"}) { if (NativeCheck.inline(symbol)) result.addTrace(FAKE, symbol + " is inline hooked"); } - String path = String.format(Locale.getDefault(), "/proc/%d/maps", Process.myPid()); - String trace = NativeCheck.fopen(path); + final String path = String.format(Locale.getDefault(), "/proc/%d/maps", Process.myPid()); + final String trace = NativeCheck.fopen(path); if (!TextUtils.isEmpty(trace)) { result.addTrace(C, trace.substring(0, trace.length() - 1)); } @@ -119,11 +119,11 @@ private void maps() { } private void mounts() { - ResultBuilder result = new ResultBuilder("挂载"); + final ResultBuilder result = new ResultBuilder("挂载"); try { - BufferedReader br = new BufferedReader(new FileReader(String.format(Locale.getDefault(), + final BufferedReader br = new BufferedReader(new FileReader(String.format(Locale.getDefault(), "/proc/%d/mountinfo", Process.myPid()))); - List paths = new ArrayList<>(); + final List paths = new ArrayList<>(); String lastPath = getContext().getExternalFilesDir(null).getPath(); while (!paths.contains(Environment.getExternalStorageDirectory().getPath())) { lastPath = FileUtils.getParent(lastPath); @@ -131,24 +131,24 @@ private void mounts() { } for (String line = br.readLine(); line != null; line = br.readLine()) { - for (String path : paths) { + for (final String path : paths) { if (line.contains(String.format(" %s ", path))) { result.addTrace(FAKE, line); } } } - } catch (IOException e) { + } catch (final IOException e) { XposedBridge.log(e); result.addTrace(FAKE, e.getMessage()); } if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { try { - for (File f : getContext().getExternalFilesDir(null).getParentFile() + for (final File f : getContext().getExternalFilesDir(null).getParentFile() .getParentFile().listFiles()) { result.addTrace(FAKE, f.getPath()); } - } catch (NullPointerException ignored) { + } catch (final NullPointerException ignored) { } } result.show(); @@ -156,37 +156,37 @@ private void mounts() { @SuppressLint({"DiscouragedPrivateApi", "PrivateApi", "QueryPermissionsNeeded"}) private void pm() { - ResultBuilder result = new ResultBuilder("包管理器"); - List modules = new ArrayList<>(); - PackageManager pm = getContext().getPackageManager(); + final ResultBuilder result = new ResultBuilder("包管理器"); + final List modules = new ArrayList<>(); + final PackageManager pm = getContext().getPackageManager(); try { - IBinder service = (IBinder) Class.forName("android.os.ServiceManager") + final IBinder service = (IBinder) Class.forName("android.os.ServiceManager") .getDeclaredMethod("getService", String.class).invoke(null, "package"); - Object iPackageManager = Class.forName("android.content.pm.IPackageManager$Stub") + final Object iPackageManager = Class.forName("android.content.pm.IPackageManager$Stub") .getDeclaredMethod("asInterface", IBinder.class).invoke(null, service); - Field field = pm.getClass().getDeclaredField("mPM"); + final Field field = pm.getClass().getDeclaredField("mPM"); field.setAccessible(true); - Class mPMClass = field.get(pm).getClass(); + final Class mPMClass = field.get(pm).getClass(); if (!mPMClass.equals(iPackageManager.getClass())) { result.addTrace(FAKE, mPMClass.getName()); } - } catch (Throwable e) { + } catch (final Throwable e) { XposedBridge.log(e); result.addTrace(FAKE, e.getMessage()); } - for (PackageInfo pkg : pm.getInstalledPackages(PackageManager.GET_META_DATA)) { - ApplicationInfo app = pkg.applicationInfo; + for (final PackageInfo pkg : pm.getInstalledPackages(PackageManager.GET_META_DATA)) { + final ApplicationInfo app = pkg.applicationInfo; if (app.metaData != null && app.metaData.containsKey("xposedmodule")) { modules.add(pm.getApplicationLabel(pkg.applicationInfo).toString()); } } - Intent intentToResolve = new Intent(Intent.ACTION_MAIN); + final Intent intentToResolve = new Intent(Intent.ACTION_MAIN); intentToResolve.addCategory("de.robv.android.xposed.category.MODULE_SETTINGS"); - List ris = pm.queryIntentActivities(intentToResolve, 0); - for (ResolveInfo ri : ris) { - String name = ri.loadLabel(pm).toString(); + final List ris = pm.queryIntentActivities(intentToResolve, 0); + for (final ResolveInfo ri : ris) { + final String name = ri.loadLabel(pm).toString(); if (!modules.contains(name)) modules.add(name); } @@ -197,8 +197,8 @@ private void pm() { } private void preferences() { - ResultBuilder result = new ResultBuilder("偏好"); - for (String sp : new String[]{"TS_preferences", "TS_config", "TS_notes"}) { + final ResultBuilder result = new ResultBuilder("偏好"); + for (final String sp : new String[]{"TS_preferences", "TS_config", "TS_notes"}) { if (getContext().getSharedPreferences(sp, Context.MODE_PRIVATE) .getAll().keySet().size() != 0) result.addTrace(JAVA, sp); } @@ -206,8 +206,8 @@ private void preferences() { } private void stackTrace() { - ResultBuilder result = new ResultBuilder("堆栈"); - for (String st : StackTrace.sStes) { + final ResultBuilder result = new ResultBuilder("堆栈"); + for (final String st : StackTrace.sStes) { result.addTrace(JAVA, st); } result.show(); @@ -242,18 +242,18 @@ private class ResultBuilder { private static final String INDENT = "  "; StringBuilder mResult; - private ResultBuilder(String text) { + private ResultBuilder(final String text) { mResult = new StringBuilder("检测" + text + " -> "); } - private void addTrace(String tag, String msg) { + private void addTrace(final String tag, final String msg) { if (msg == null) return; mResult.append("\n").append(INDENT).append(tag).append(": ").append(msg); mTraceCount++; } private void show() { - String result = mResult.toString(); + final String result = mResult.toString(); XposedBridge.log(result); mPreferenceLayout.addView(TSPreferenceHelper.createTextView(result)); } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java index e4fa0858..7dbceec9 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java @@ -6,13 +6,13 @@ import android.content.res.Configuration; public class DisplayUtils { - public static boolean isLightMode(Context context) { + public static boolean isLightMode(final Context context) { return (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO; } - public static void restart(Activity activity) { - var intent = activity.getPackageManager().getLaunchIntentForPackage(activity + public static void restart(final Activity activity) { + final var intent = activity.getPackageManager().getLaunchIntentForPackage(activity .getPackageName()); if (intent != null) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -21,7 +21,7 @@ public static void restart(Activity activity) { } } - public static String getTbSkin(Context context) { + public static String getTbSkin(final Context context) { final var settings = context.getSharedPreferences("settings", Context.MODE_PRIVATE); if (settings.getBoolean("key_is_follow_system_mode", false)) { return isLightMode(context) ? "" : "_2"; @@ -38,12 +38,12 @@ public static String getTbSkin(Context context) { } } - public static int dipToPx(Context context, float dipValue) { + public static int dipToPx(final Context context, final float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } - public static int pxToDip(Context context, float pxValue) { + public static int pxToDip(final Context context, final float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java index a54b60ba..5390a922 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java @@ -11,8 +11,8 @@ import java.nio.ByteBuffer; public class FileUtils { - public static void copy(Object input, Object output) throws IOException { - InputStream is; + public static void copy(final Object input, final Object output) throws IOException { + final InputStream is; if (input instanceof InputStream) { is = (InputStream) input; } else if (input instanceof File) { @@ -23,7 +23,7 @@ public static void copy(Object input, Object output) throws IOException { is = new FileInputStream((String) input); } else throw new IllegalArgumentException("unknown input type"); - OutputStream os; + final OutputStream os; if (output instanceof OutputStream) { os = (OutputStream) output; } else if (output instanceof File) { @@ -37,8 +37,8 @@ public static void copy(Object input, Object output) throws IOException { copy(is, os); } - private static void copy(InputStream is, OutputStream os) throws IOException { - byte[] buffer = new byte[8192]; + private static void copy(final InputStream is, final OutputStream os) throws IOException { + final byte[] buffer = new byte[8192]; int byteCount; while ((byteCount = is.read(buffer)) != -1) { os.write(buffer, 0, byteCount); @@ -48,8 +48,8 @@ private static void copy(InputStream is, OutputStream os) throws IOException { os.close(); } - public static void copy(ByteBuffer bb, Object output) throws IOException { - OutputStream os; + public static void copy(final ByteBuffer bb, final Object output) throws IOException { + final OutputStream os; if (output instanceof OutputStream) { os = (OutputStream) output; } else if (output instanceof File) { @@ -63,14 +63,14 @@ public static void copy(ByteBuffer bb, Object output) throws IOException { os.write(bb.array()); } - public static ByteBuffer toByteBuffer(InputStream is) throws IOException { - var baos = new ByteArrayOutputStream(); + public static ByteBuffer toByteBuffer(final InputStream is) throws IOException { + final var baos = new ByteArrayOutputStream(); copy(is, baos); return ByteBuffer.wrap(baos.toByteArray()); } - public static String getExtension(ByteBuffer bb) throws IOException { - var chunk = new String(bb.array(), 0, 6); + public static String getExtension(final ByteBuffer bb) throws IOException { + final var chunk = new String(bb.array(), 0, 6); try { if (chunk.contains("GIF")) return "gif"; else if (chunk.contains("PNG")) return "png"; @@ -80,16 +80,16 @@ public static String getExtension(ByteBuffer bb) throws IOException { } } - public static String getParent(String path) { - int index = path.lastIndexOf(File.separatorChar); + public static String getParent(final String path) { + final int index = path.lastIndexOf(File.separatorChar); return path.substring(0, index); } - public static void deleteRecursively(File file) { + public static void deleteRecursively(final File file) { if (file.isDirectory()) { - File[] files = file.listFiles(); + final File[] files = file.listFiles(); if (files != null) { - for (File f : files) { + for (final File f : files) { deleteRecursively(f); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/Parser.java b/app/src/main/java/gm/tieba/tabswitch/util/Parser.java index 3408e669..0abad942 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/Parser.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/Parser.java @@ -6,9 +6,9 @@ import gm.tieba.tabswitch.XposedContext; public class Parser extends XposedContext { - public static String parsePbContent(Object instance, String fieldName) { - List contents = (List) XposedHelpers.getObjectField(instance, fieldName); - StringBuilder pbContent = new StringBuilder(); + public static String parsePbContent(final Object instance, final String fieldName) { + final List contents = (List) XposedHelpers.getObjectField(instance, fieldName); + final StringBuilder pbContent = new StringBuilder(); for (int i = 0; i < contents.size(); i++) { pbContent.append(XposedHelpers.getObjectField(contents.get(i), "text")); } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java index d2b82fd9..80f0f37f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java @@ -12,22 +12,22 @@ import gm.tieba.tabswitch.XposedContext; public class ReflectUtils extends XposedContext { - public static int getR(String innerClassName, String fieldName) { + public static int getR(final String innerClassName, final String fieldName) { return getContext().getResources() .getIdentifier(fieldName, innerClassName, getContext().getPackageName()); } - public static int getId(String fieldName) { + public static int getId(final String fieldName) { return getR("id", fieldName); } @ColorInt - public static int getColor(String fieldName) { + public static int getColor(final String fieldName) { return getContext().getColor( getR("color", fieldName + DisplayUtils.getTbSkin(getContext()))); } - public static float getDimen(String fieldName) { + public static float getDimen(final String fieldName) { switch (fieldName) { case "ds10": return DisplayUtils.dipToPx(getContext(), 5F); @@ -41,7 +41,7 @@ public static float getDimen(String fieldName) { return getContext().getResources().getDimension(getR("dimen", fieldName)); } - public static float getDimenDip(String fieldName) { + public static float getDimenDip(final String fieldName) { switch (fieldName) { case "fontsize28": return 14F; @@ -51,7 +51,7 @@ public static float getDimenDip(String fieldName) { return DisplayUtils.pxToDip(getContext(), getDimen(fieldName)); } - public static int getDrawableId(String fieldName) { + public static int getDrawableId(final String fieldName) { return getR("drawable", fieldName); } @@ -64,41 +64,41 @@ public static int getDrawableId(String fieldName) { * @return A reference to the first field of the given type. * @throws NoSuchFieldError In case no matching field was not found. */ - public static T getObjectField(Object instance, Class type) { + public static T getObjectField(final Object instance, final Class type) { try { return type.cast(XposedHelpers.findFirstFieldByExactType(instance.getClass(), type) .get(instance)); - } catch (IllegalAccessException e) { + } catch (final IllegalAccessException e) { XposedBridge.log(e); throw new IllegalAccessError(e.getMessage()); } } - public static Object getObjectField(Object instance, String className) { + public static Object getObjectField(final Object instance, final String className) { try { return XposedHelpers.findFirstFieldByExactType(instance.getClass(), XposedHelpers.findClass(className, sClassLoader)) .get(instance); - } catch (IllegalAccessException e) { + } catch (final IllegalAccessException e) { XposedBridge.log(e); throw new IllegalAccessError(e.getMessage()); } } - public static void setObjectField(Object instance, Class type, Object value) { + public static void setObjectField(final Object instance, final Class type, final Object value) { try { XposedHelpers.findFirstFieldByExactType(instance.getClass(), type) .set(instance, value); - } catch (IllegalAccessException e) { + } catch (final IllegalAccessException e) { XposedBridge.log(e); throw new IllegalAccessError(e.getMessage()); } } - public static void setObjectField(Object instance, String className, Object value) { + public static void setObjectField(final Object instance, final String className, final Object value) { try { XposedHelpers.findFirstFieldByExactType(instance.getClass(), XposedHelpers.findClass(className, sClassLoader)) .set(instance, value); - } catch (IllegalAccessException e) { + } catch (final IllegalAccessException e) { XposedBridge.log(e); throw new IllegalAccessError(e.getMessage()); } @@ -113,23 +113,23 @@ public static void setObjectField(Object instance, String className, Object valu * @return A reference to the first field of the given type. * @throws NoSuchFieldError In case no matching field was not found. */ - public static Object getObjectField(Object instance, int position) { + public static Object getObjectField(final Object instance, final int position) { try { - var field = instance.getClass().getDeclaredFields()[position]; + final var field = instance.getClass().getDeclaredFields()[position]; field.setAccessible(true); return field.get(instance); - } catch (IllegalAccessException e) { + } catch (final IllegalAccessException e) { XposedBridge.log(e); throw new IllegalAccessError(e.getMessage()); } } - public static void setObjectField(Object instance, int position, Object value) { + public static void setObjectField(final Object instance, final int position, final Object value) { try { - var field = instance.getClass().getDeclaredFields()[position]; + final var field = instance.getClass().getDeclaredFields()[position]; field.setAccessible(true); field.set(instance, value); - } catch (IllegalAccessException e) { + } catch (final IllegalAccessException e) { XposedBridge.log(e); throw new IllegalAccessError(e.getMessage()); } @@ -143,39 +143,39 @@ public interface Callback { boolean onFieldFound(Object objField); } - public static void walkField(Object instance, Class cls, Callback handle) { + public static void walkField(final Object instance, final Class cls, final Callback handle) { try { - Field[] declaredFields = instance.getClass().getDeclaredFields(); - for (Field field : declaredFields) { + final Field[] declaredFields = instance.getClass().getDeclaredFields(); + for (final Field field : declaredFields) { field.setAccessible(true); - Object objField = field.get(instance); + final Object objField = field.get(instance); if (objField != null && cls.equals(objField.getClass()) && handle.onFieldFound(objField)) { return; } } - for (Field field : declaredFields) { - Object objField = field.get(instance); + for (final Field field : declaredFields) { + final Object objField = field.get(instance); if (objField != null && cls.isAssignableFrom(objField.getClass()) && handle.onFieldFound(objField)) { return; } } - } catch (IllegalAccessException e) { + } catch (final IllegalAccessException e) { throw new IllegalAccessError(e.getMessage()); } } - public static void walkObjectFields(Object instance, Class cls, Callback handle) { + public static void walkObjectFields(final Object instance, final Class cls, final Callback handle) { walkField(instance, cls, handle); } - public static void walkObjectFields(Object instance, String className, Callback handle) { + public static void walkObjectFields(final Object instance, final String className, final Callback handle) { walkField(instance, XposedHelpers.findClass(className, sClassLoader), handle); } - public static Method findFirstMethodByExactType(Class cls, Class... paramTypes) { - for (var method : cls.getDeclaredMethods()) { + public static Method findFirstMethodByExactType(final Class cls, final Class... paramTypes) { + for (final var method : cls.getDeclaredMethods()) { if (Arrays.equals(method.getParameterTypes(), paramTypes)) { return method; } @@ -183,21 +183,21 @@ public static Method findFirstMethodByExactType(Class cls, Class... paramT throw new NoSuchMethodError(Arrays.toString(paramTypes)); } - public static Method findFirstMethodByExactType(String className, Class... paramTypes) { + public static Method findFirstMethodByExactType(final String className, final Class... paramTypes) { return findFirstMethodByExactType(XposedHelpers.findClass(className, sClassLoader), paramTypes); } - public static Object callMethod(Method method, Object instance, Object... args) { + public static Object callMethod(final Method method, final Object instance, final Object... args) { try { method.setAccessible(true); return method.invoke(instance, args); - } catch (IllegalAccessException | InvocationTargetException e) { + } catch (final IllegalAccessException | InvocationTargetException e) { XposedBridge.log(e); throw new IllegalArgumentException(e); } } - public static Object callStaticMethod(Method method, Object... args) { + public static Object callStaticMethod(final Method method, final Object... args) { return callMethod(method, null, args); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java index 7c1af66d..c8cc7c2f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java +++ b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java @@ -10,17 +10,17 @@ public class NavigationBar extends XposedContext { private final Object mNavigationBar; - public NavigationBar(Object thisObject) { + public NavigationBar(final Object thisObject) { mNavigationBar = ReflectUtils.getObjectField(thisObject, "com.baidu.tbadk.core.view.NavigationBar"); } - public void addTextButton(String text, View.OnClickListener l) { - Class ControlAlign = XposedHelpers.findClass( + public void addTextButton(final String text, final View.OnClickListener l) { + final Class ControlAlign = XposedHelpers.findClass( "com.baidu.tbadk.core.view.NavigationBar$ControlAlign", sClassLoader); - for (Object HORIZONTAL_RIGHT : ControlAlign.getEnumConstants()) { + for (final Object HORIZONTAL_RIGHT : ControlAlign.getEnumConstants()) { if (HORIZONTAL_RIGHT.toString().equals("HORIZONTAL_RIGHT")) { - TextView textView = (TextView) XposedHelpers.callMethod(mNavigationBar, + final TextView textView = (TextView) XposedHelpers.callMethod(mNavigationBar, "addTextButton", HORIZONTAL_RIGHT, text, l); textView.setTextColor(ReflectUtils.getColor("CAM_X0105")); break; @@ -28,7 +28,7 @@ public void addTextButton(String text, View.OnClickListener l) { } } - public void setTitleText(String title) { + public void setTitleText(final String title) { XposedHelpers.callMethod(mNavigationBar, "setTitleText", title); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java index 553bd848..49d5646a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java +++ b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java @@ -15,30 +15,30 @@ public class Switch extends XposedContext { private Method[] mMethods; public Switch() { - var cls = XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView", sClassLoader); + final var cls = XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView", sClassLoader); bdSwitch = (View) XposedHelpers.newInstance(cls, getContext()); mMethods = cls.getDeclaredMethods(); } - public Switch(View bdSwitch) { + public Switch(final View bdSwitch) { this.bdSwitch = bdSwitch; } - public void setOnSwitchStateChangeListener(InvocationHandler l) { + public void setOnSwitchStateChangeListener(final InvocationHandler l) { Class clazz; try { clazz = XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView$b", sClassLoader); - } catch (XposedHelpers.ClassNotFoundError e) { + } catch (final XposedHelpers.ClassNotFoundError e) { clazz = XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView$a", sClassLoader); } - Object proxy = Proxy.newProxyInstance(sClassLoader, new Class[]{clazz}, l); + final Object proxy = Proxy.newProxyInstance(sClassLoader, new Class[]{clazz}, l); XposedHelpers.callMethod(bdSwitch, "setOnSwitchStateChangeListener", proxy); } public boolean isOn() { try { return (Boolean) XposedHelpers.callMethod(bdSwitch, "isOn"); - } catch (NoSuchMethodError e) { + } catch (final NoSuchMethodError e) { return (Boolean) ReflectUtils.callMethod(mMethods[6], bdSwitch); } } @@ -46,7 +46,7 @@ public boolean isOn() { public void changeState() { try { XposedHelpers.callMethod(bdSwitch, "changeState"); - } catch (NoSuchMethodError e) { + } catch (final NoSuchMethodError e) { ReflectUtils.callMethod(mMethods[3], bdSwitch); } } @@ -54,7 +54,7 @@ public void changeState() { public void turnOn() { try { XposedHelpers.callMethod(bdSwitch, "turnOn"); - } catch (NoSuchMethodError e) { + } catch (final NoSuchMethodError e) { ReflectUtils.callMethod(mMethods[11], bdSwitch); } } @@ -62,7 +62,7 @@ public void turnOn() { public void turnOff() { try { XposedHelpers.callMethod(bdSwitch, "turnOff"); - } catch (NoSuchMethodError e) { + } catch (final NoSuchMethodError e) { ReflectUtils.callMethod(mMethods[8], bdSwitch); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/TbDialog.java b/app/src/main/java/gm/tieba/tabswitch/widget/TbDialog.java index bfcb0f39..bf52eba8 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/TbDialog.java +++ b/app/src/main/java/gm/tieba/tabswitch/widget/TbDialog.java @@ -32,16 +32,16 @@ public List matchers() { public TbDialog() { } - public TbDialog(Activity activity, String title, String message, boolean cancelable, View contentView) { + public TbDialog(final Activity activity, final String title, final String message, final boolean cancelable, final View contentView) { XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.BaseFragment", sClassLoader, "getPageContext", new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mPageContext = param.getResult(); } }); AcRules.findRule(matchers(), (matcher, clazz, method) -> { - var cls = XposedHelpers.findClass(clazz, sClassLoader); + final var cls = XposedHelpers.findClass(clazz, sClassLoader); if (cls.getDeclaredMethods().length < 20) { return; } @@ -52,7 +52,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.setObjectField(mBdAlert, "mMessage", message); XposedHelpers.setObjectField(mBdAlert, "mCancelable", cancelable); XposedHelpers.setObjectField(mBdAlert, "mContentView", contentView); - } catch (NoSuchFieldError e) { + } catch (final NoSuchFieldError e) { XposedHelpers.setObjectField(mBdAlert, "f", title); XposedHelpers.setObjectField(mBdAlert, "h", message); XposedHelpers.setObjectField(mBdAlert, "C", cancelable); @@ -60,14 +60,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } initButtonStyle(param -> { - int color = ReflectUtils.getColor("CAM_X0204"); + final int color = ReflectUtils.getColor("CAM_X0204"); // R.id.bdDialog_divider_line - var bdDialogDividerLine = (View) XposedHelpers.getObjectField(mBdAlert, "bdDialog_divider_line"); + final var bdDialogDividerLine = (View) XposedHelpers.getObjectField(mBdAlert, "bdDialog_divider_line"); if (bdDialogDividerLine != null) { bdDialogDividerLine.setBackgroundColor(color); } // R.id.divider_yes_no_button - var dividerWithButton = (View) XposedHelpers.getObjectField(mBdAlert, "dividerWithButton"); + final var dividerWithButton = (View) XposedHelpers.getObjectField(mBdAlert, "dividerWithButton"); if (dividerWithButton != null) { dividerWithButton.setBackgroundColor(color); } @@ -76,40 +76,40 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } // called in create() - private void initButtonStyle(Consumer consumer) { + private void initButtonStyle(final Consumer consumer) { XposedHelpers.findAndHookMethod(mClass, "initButtonStyle", new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { consumer.accept(param); } }); } - public void setOnNoButtonClickListener(View.OnClickListener l) { + public void setOnNoButtonClickListener(final View.OnClickListener l) { initButtonStyle(param -> { - var cancel = getContext().getString(android.R.string.cancel); + final var cancel = getContext().getString(android.R.string.cancel); try { XposedHelpers.setObjectField(mBdAlert, "mNegativeButtonTip", cancel); - } catch (NoSuchFieldError e) { + } catch (final NoSuchFieldError e) { XposedHelpers.setObjectField(mBdAlert, "m", cancel); } // R.id.no - var noButton = (TextView) XposedHelpers.getObjectField(mBdAlert, "noButton"); + final var noButton = (TextView) XposedHelpers.getObjectField(mBdAlert, "noButton"); if (noButton != null) { noButton.setOnClickListener(l); } }); } - public void setOnYesButtonClickListener(View.OnClickListener l) { + public void setOnYesButtonClickListener(final View.OnClickListener l) { initButtonStyle(param -> { - var ok = getContext().getString(android.R.string.ok); + final var ok = getContext().getString(android.R.string.ok); try { XposedHelpers.setObjectField(mBdAlert, "mPositiveButtonTip", ok); - } catch (NoSuchFieldError e) { + } catch (final NoSuchFieldError e) { XposedHelpers.setObjectField(mBdAlert, "l", ok); } - var yesButton = (TextView) findYesButton(); + final var yesButton = (TextView) findYesButton(); if (yesButton != null) { yesButton.setOnClickListener(l); } @@ -122,8 +122,8 @@ public TextView findYesButton() { } public void show() { - for (var md : mClass.getDeclaredMethods()) { - var parameterTypesString = Arrays.toString(md.getParameterTypes()); + for (final var md : mClass.getDeclaredMethods()) { + final var parameterTypesString = Arrays.toString(md.getParameterTypes()); if (parameterTypesString.startsWith("[interface") && !parameterTypesString.contains("$")) { ReflectUtils.callMethod(md, mBdAlert, mPageContext); // create() @@ -139,7 +139,7 @@ public void show() { // } // } // } - for (var method : mClass.getDeclaredMethods()) { + for (final var method : mClass.getDeclaredMethods()) { if (method.getParameterTypes().length == 0 && mClass.equals(method.getReturnType())) { ReflectUtils.callMethod(method, mBdAlert); // show() break; @@ -147,7 +147,7 @@ public void show() { } try { mDialog = XposedHelpers.getObjectField(mBdAlert, "mDialog"); - } catch (NoSuchFieldError e) { + } catch (final NoSuchFieldError e) { mDialog = XposedHelpers.getObjectField(mBdAlert, "w"); } } @@ -160,7 +160,7 @@ public Window getWindow() { public void dismiss() { try { XposedHelpers.callMethod(mBdAlert, "dismiss"); - } catch (NoSuchMethodError e) { + } catch (final NoSuchMethodError e) { XposedHelpers.callMethod(mBdAlert, "k"); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/TbEditText.java b/app/src/main/java/gm/tieba/tabswitch/widget/TbEditText.java index 10d0fca6..88723749 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/TbEditText.java +++ b/app/src/main/java/gm/tieba/tabswitch/widget/TbEditText.java @@ -10,11 +10,11 @@ @SuppressLint("AppCompatCustomView") public class TbEditText extends EditText { - public TbEditText(Context context) { + public TbEditText(final Context context) { super(context); setFocusable(true); setFocusableInTouchMode(true); - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( + final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); setLayoutParams(layoutParams); setTextColor(ReflectUtils.getColor("CAM_X0105")); diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java b/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java index 355d8aa4..d5f6a5f1 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java +++ b/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java @@ -24,14 +24,14 @@ public List matchers() { } @MainThread - public static void showTbToast(String text, int duration) { + public static void showTbToast(final String text, final int duration) { AcRules.findRule(new TbToast().matchers(), (matcher, clazz, method) -> { try { - var md = ReflectUtils.findFirstMethodByExactType(clazz, Context.class, String.class, int.class); + final var md = ReflectUtils.findFirstMethodByExactType(clazz, Context.class, String.class, int.class); runOnUiThread(() -> ReflectUtils.callStaticMethod(md, getContext(), text, duration)); - } catch (NoSuchMethodError e) { + } catch (final NoSuchMethodError e) { // 12.32.3.0 + - var md = ReflectUtils.findFirstMethodByExactType(clazz, String.class, int.class, boolean.class); + final var md = ReflectUtils.findFirstMethodByExactType(clazz, String.class, int.class, boolean.class); runOnUiThread(() -> ReflectUtils.callStaticMethod(md, text, duration, true)); } }); From b0be179baa508a09841c0626d300f116a8a86b73 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Mon, 8 May 2023 16:35:51 +0800 Subject: [PATCH 005/158] refactor with DexKit --- app/apktool_2.6.1.jar | Bin 699185 -> 0 bytes app/apktool_2.7.0.jar | Bin 0 -> 932338 bytes app/build.gradle | 6 +- .../gm/tieba/tabswitch/XposedContext.java | 16 ++ .../hooker/deobfuscation/Deobfuscation.java | 177 +++++++----------- .../deobfuscation/DeobfuscationHelper.java | 8 +- .../deobfuscation/DeobfuscationViewModel.java | 6 +- .../hooker/deobfuscation/DexBakSearcher.kt | 144 -------------- .../tabswitch/hooker/deobfuscation/Matcher.kt | 28 +++ .../tabswitch/hooker/extra/NativeCheck.java | 17 +- .../java/gm/tieba/tabswitch/util/Strings.kt | 16 -- settings.gradle | 4 +- 12 files changed, 125 insertions(+), 297 deletions(-) delete mode 100644 app/apktool_2.6.1.jar create mode 100644 app/apktool_2.7.0.jar delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DexBakSearcher.kt create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/util/Strings.kt diff --git a/app/apktool_2.6.1.jar b/app/apktool_2.6.1.jar deleted file mode 100644 index 1e74c30fc0250dbe4a3c19f6468308a220b78c05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699185 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

6}xE4M-qa7)7CEo(Q z;YOpj)ZhLiOx2BT?ni9a>^>5QJb>^-GWAZXHTbk!=Y@0h7v?&xm(y$GCeyI}I&(hd zPGOVXa>#BUag!ZMyrI?^`t(i^TyIC1Q^%RQ$w-eMknmZXNOrRU>msuc|Kma;7p(zS zU^vMja=|c?ZSxxIAaxo>6i;XiF_?1A(~RpOH4++;HeSZLm+0>55@i3F8^H+Ln48aR zIO1t~VYPO8A^t@HoU)kw11)T0kL+(P-7piB={LkCR$2_I7*WxxJ2Ui&w(Nl)Jw1ON zQTNw}AH;`weNl*ZApb5KeDFT4Dd3ibZo@!o9K4<%sZ!K|t)U|1N!@xrav)d;1+!k_ z(wNN;`nn@v?Ygk~5bZ6(qZl!ZfcxOCH0N(9px`q`0yrqxaIkRclPrWT-FNn zTrAR6%u=G>`rU@2J7}(2GTE@6fq{+1INcL;_-?4FYauJ@DzK~?N@#=|t9d-odoJ03 z?h+9^GT0u@*ftUWR)`SfZ9y6yC3;+}A%2!9ziHj=^ukBgNP<^hyV^)Ohd3WLA3SR{&s<;+n(&e0KnZgp$ojO-DPjj_uS4Z!ZA{9sWaJ~vmL2u5C@9IaZ zG#|ax6(gN)69VaNpjZ7nv~)mPUkV7ruuWemw_~{9aT&L0E|o9SXzSl9=5kFH_i2#m zrY$6Da5SbZDWm#v8W{xW*Vi8?TtvUCTk@wD-_|61{k85Jd4v|cqk9w7Gc*F$`V zcCxD#XYQXjXw$)WyA<t@egNsCi7Q0QJ)sf?XO)gC%$o?GX_1D&rhy!=ml$OP@s_XU^= zeC7p=iiMl0*|laRQJ#A!KSZ7pb!VyD6u3f78l^TEE=}r(Z|5Q_=g?OOXWfs2$Lba` z=Z&xU%K?L1V~t${$F*N|eR6)R>4)AE5=g;&lMcC_4ikq&r^9c;NH@_$?D&K>LfN{s z4V$uodm3ze9K*FS($4gF4GIJX0T(GFFRQ*4b3DXh(dGCd2T#d|wA_hi^FD=p-{!@Aew4nG;>%|m|NghmxanmY&uf*U}r-bXs33wn^Y0i=M<`HI0vf`mjT?7J-a zu=97?Kms9f|H1i|y_179lXzX!hmOw9U0G9?+F|YZ=~>J`FK0QPLPGE9*ux=2O8~Ja zQv68r%das>I;hd*H~a}HpARg!2l?g5(#?^{TxZ@c9;?Y-fWa7wZN-xt%Ig!14lIZzxfIn7L>x{cUK7cWx!O6c__cGl#DG;*^ z2d9YI1gGdCHTiKTO2Z}m zB6+Y3Mo1AyrgYsX%tIk^=c`{kNsP8YjP-2a8OMi?4FV!vX?3$7OI3J%aVg_2X8|1uPR>bw{7&2%?RWm zzQr4=Udr7Ir4Rp>TD+E8-pwXZocRl5UI$@;n($IzaQjtBt@&)n>M$c{g;O)`AY~IQX z>0aw3GahVQM}QkMLc)zzeA8hRwl0Q-GZhSMQn18Upgepxj2g&-w z)*SK~A@*a4K5tGihu6Ntbwn7#A{+S=3-Y}nmEF;=d-{L7PNiR`@WI4u8PVq6ES*HplSQe% ze1OfW=6qw~WwR{}E6Z-`A6LH+gwZwx(EXCOcev5ERJJcDKvnD^FJ?HTe;u20|An+9 zHwystgwRPuq)4@Av!A)U{5D=|0%LDJ)o_^>;mm2!G2|ASlf+s$y5lAzcMs<4{~@|3 z#3KFrn=ik#w%8$%f9YF4Z1CbN&Tj{iHE;UEyA30Pe)Ne3i#wl!kR5oJ7eCHb9h=TC z8hg_BvZrF1rE+}BsO84+fn^|z@(6KjFWl@yqOAR zd5M+a7M89J2!6s2?ql{ew^d|wl0K7!Lmp0?W7X$XdPwv;2&`Y zx|E7}=$6I52d~t9D%W~JUc?3HAqjznYBwIaZxq`!!4eHao_VJHns_#=B6q_Qke_98^u(^G6W4o~CIF-!>3_ z1seMw{0qzfq9gmke{a%vW9MDhx91x-dAWI_+zGxj44g6?bo^t>?@1(8@kkf5SHI`< z;K35w58C{E!}{I}tNzZo;a}hOx1U`$8?^8;S;ex3!! z7wN^SC{oU3gBffhUgAuaLv`c@F>FZSaBl0Tntk@5p-M+t|A+$%w>T3RSCFL%G=Hn+ zhhXp{qtGYb-*?dMdG56tF?*Vz)f1t3i(alz){f4eT^y^91T>vQ19v&d;}aI~&<~UF zjLVVD%aZ!JF)hQ~+IV*JrhPXvzIHy`Nj_Z><@cVd-urL$ruCRekI5vG&U&G8Fnamm zukh3eD0B#zxCzvo9k1UjQ1EKd1qw9GWMFeCZ;a0wVSh~*3vFH36n(yc$ePg1l=qj$ z?@tEfp86Ri7;-3}+a6k;VeX=yn9v0tJmg)C*)5nkcJ&2q?@X>j-aXZnqU(3OV6H=X zt6Ff==fBiWY13*IWyZ5}pt9Ka^mJvPW$u6yn?653hw%wJwH)lDTac!b^K-HTb)p}p ziW!qD+mHTGj8wtx%bk)do#%Wo!;PgZHxOQNQ0tte)Ao;(zOJ_wE#qxlBPizNnwRX~I2VaL*JUOgrdkD(;^5L>XUs<7iJg`ctAXZh_PLb(p9B;VB(X5P zF~4)?y#+@tBYl;`2Vs3R2)(!QF47DAnJhs&W}8Xo^aue1#g35|GHVT@o)+XrcV_Cf zj^46WM4{0+GNtiDqmm+6m`c%vNX@&-9Sxdgd6_ndL4^8i_M!Vc%{HOuv=usw(?^+c zYPU1ORo+yjv%naM^Cyf0oDG3FB+f(S4%hsnio=`lurWm@U}PIIN)%-S1gwa3qplqW zGon0tq(=iN#DK%}E;bZ`MAxhj;(rfBD3j@k4?=-}On&i;Nd6-bVdr4RtZMfaotAen z`=17HOgAdxFIcY3}l#8?4;Z-@=wABwA^8{&!D@HQ%|J zVhX7`NsP{`^VjcV)A?8K+aM4=3nTC%jW!Ue;)zOIM;J*5M~Q$w6-nDJ00jew!OA&C zoP>8H2HqeQY_!7PAmeOLNBjeg1D#^ih*5B`a4@+^St^aeB{^L83I-YmDh4tJU;`tO zYDSd0L2i162BeF?6`! z=zNkG0O?EVe0JsxnQ>RkWb{CX?&e@P-t2v6BfiNNeK?v;$-wfNHC~fhCCfiW3YA8@?u7B#{*!m@ zE3cLofN|afU6FMUXxnQA+EbYrhLhnEk8QM4l=4b9xuWZyE6Q+dGbJ-<`-H92z2QDW zEq^xMuQIC*@|Dd!Zx2T^Z}0Jzpg;+5a{ERC7L7D*oEmt2Sr^OEHxeE-2itCYEj`yI zHro~P%~UJcSI?)M)avR#)M-?v*8W*>TSn!TihLdv8gNS?nolk(e6+vfsbu{kQ&pHI ziSF+-qMZXw9+ffwDw*hHwf)3`O#Its3k^*}P^1j`d$BV|9RV=UNUJoV<~QQT*e^*M zU6kj#!VK-oaO1N{rwzQDgx#C1NVhawDYIL}qsMMa6SB4-#M8TfdS~~XK2{y9ou0&B zx7Byc*)z~tsAP?Vo^aCn<4z2BU)m5_TCv449lvZO?~UGEVXmO&N)sK zP4WbLNYaIXpjmI*wpn9q{{A$G*z8^ObawVQQ#h|)HeO0SbR7a!bXLyhs*S3eeX4is~=`hE;A$Q(nzIp`LeXC;+{}cZ^G4 zZ1Yl*#@|Kzn6Al5Dhs_Tp$*QOhPFMT4jSLh$}}y~$VS7?;))Jk0$o}Y#pqG{6FuE! z&BNt*GvdVHL(xwv9sys-x2bQXP|4U8qJt?%mf9Th+u^cL1MCflI24^QxJ~Ayfy*orN(W-Bsx0iq)Ga(%Fw#I}b!G9|}nN zT0(l@-@-lR8nlof^eT!W>WftTr8`)SL%VHW6YYu4KZbQJM%Hai?tp)5z^A2fLh)gZ z0{y;cZ}tLca3mHA`Lq9qGh%)@e&0dNybqf9gz^zM{7fANWF{EwcS5K)hNwRfd55;{ z5utZ5{%$?ofi~)7j;KI)!CL5gfWfpBEcgCy`2<7@(s6D-sD8$9Vd$k+HcKo0!{r<3 zFLxvHB)X776K*uj8Ftx-}BDjY5FGJWOFq@8=B_qKNAp6lX>SJANsjO4}pp6 zNt8z=z@^Uhg&JVm?u^uNq4vdnK&b|HfjQ=;@nNNN9?|8q=kSqML1TIX$oQQyV(f>< zxtDMv5q+O$miG?`+V>hi!T;U<>NDU3NkKtCPQTWFc8QofJ2Q(J+q+6y+ne$HS9PeE zm7Be-gr}+b7d^BF*&SZufZ2Tx{IK{~!lAws30@vi!`lDwtc?g0CCRbwn>L zzh1yAE#FR`qv1U3g+V{NipRyHmZkTZTDT2u123f>*Bp{;BtCgPekV<8*C_2Wj9G>f z%9RcqCgJFG3(d>mP%fm8b^6SD!qEv_x?{@^U5bg?Lb%GO!sQHj)J|BIrZ6>DTg;&6 z9_HXmB&aA_d$B(QAPEYvJbYSa6%s}AlUoZWYg3hl*l=p#@>VRgMvv2+9;RSdbP1<| z?QR8cqgTa4&^yxbJ%H7sdW0XNiD@-m9LM^8# z0~_Fy8vT~Wll1$X)V6iqROq1P6*VL0CvpFms=OcoC_ROwTNpr5M zo;38-*XVM!*`Btt`30E@S9SSP=XO!7!^O9)Dk?j=s7A*wtl8At2@NLo^ezSW&r=r_ zKDNtuf@=U$pE<(#Ctf~jR#g)QPpiWVw7v;4s9mjK3{!2KiTHZL^N(#H@Dvh$J_L+G zH3r{3+I2&VwB@CAh&K%{9Yud6RAi1qEU*QjP$E2~^6&cWjfd95Z(NlNVXmXJMm z;=d#XE=t{aba?~#QD1rSs_Lj)pFU_s1ejdaX!2vF^eYXct`kzy_>>h9kV7 zf7{4W8a=vZj%Tu_ngc(YQL`{-jVKV*;Yz&d4l*nTmB@g;C@t1FJQDLuo${; zlYF^Ho=G5Gt_h-f&8}qBl2u0sRLKfd7Uh%IVmAx@=zoUfL*llS z?Nj4=nNx3nW_7}#oe|38=#Ebf+&!!S1%o06W znzDLEnbNL{dBWlCTe|C#2DctBr5F2S=@WKkNKG?Ig)u3vrH+M#XqhD)C^bH0DSZJ|r%1n|FM+riM%c3(U;fgf2qv;zj}_0y`(k3T*1Lr z@@uI7Inc3+{|zl#tzXOV-yJl7IIC?nLb{Sim2D&mF-Y0wnhc^pv)ASt?LVsA9VA{L zru37M8w}oM>fyT2;OcIEdwGRo5m^#3~5nE#$>vf{pblP4(HmoheCjd@MPk zONKu&`FF)g81|nIzm(Ga|IVeNo2$6BvxKL$i|apa zgzwQ|RS*ga3LOg69m>ERN{|Uk5( z@T7zN|MaVcrpPH`h@gyr&N99IIQr|~k11(}iHd@vho#|VOG41|c+Dv{%+j2hJNT^5 z?{&XF3L&~bh`cLxXH;`em?DnO++THmUZ-hu{5D^|12SVwEeZzvedLxQE|!Aq)XbH& z3s)ehcv1JwtM;Fw%SyNxG-@XGWLjHi++QKnYi+{aja(_UzNzN4l%?7&|6(0t|z7S42TuNo~l){4@<(@nZV>H6J)(1N|rSI!80G?OqvpXEI3}~ z5NVa@W(wGibqjWN)rQ;H-L+>5ChMjB^ z)}bH&ds|NI~1z$#~wR48l^5Xi3wETaFoH$)t5|I6L}FO;EF2i8~Z*Ds+H^CYg!9)K7c z8XAdkNCGCLvY7BXn3Z%0NRyVEbQlYp951`^;)+cx)32&l9Y}`X5(h!>vZ5%dzaguC zF}atv*1ETUEzHv6xBR!XneS8se{2JeKCcD-^tpVY&jAiI)5L=J{HU`_SlutKT!xp& za$CNc*?;Y~50CA+9Nh2AH{Y$fgwBt9?Psr6`0eeYbZwVjuySvHzA)tq)!%RN?iAlE z+Kgh~W@G zGa$5t(I-$GVa?#oU{Ar;*VSa1VS1>5#31-!2ar^7-?1{Nlo*xhmD1(SA51~wr^~*6 zqXE%0SLIo?RE7L2zFWS|kw?$J@RBeP4aN-H!vM4k)Pyj=e2yFNfb63N`UM)oy&LS# zgMC6dW(pS%ARxyUoG9cVUUDN`$vn-1;Rfm)@^@j}mxKz#IILDaL;005UgO z$bLri;~tXE#j34luFMpqj^i249!rbFF>rt`@Ea8Lb28M<93R35Lq2uG(k`E8?;x^E z{9rs#FPJ#lBY*c7)Xf1_aQ^-%ln`U_-=3el{0xOO?zOpZ`t6^ek)Y}h$YTDn+MLj9d7TCCH_0zJm)iC&(Q7-+?9{$ zTi<{!zuc~GaKL~()Th$gr}XYP+uumQ3++6|bH#!`70@Mc71Ey+2o*51%QcG9pLXT| z;XfS>VbA&OQFMRvLJ+)jzyn2${`<|hbCB3EeQ?~XdhiqTcerowpcqK(*Tf75rIGIL zUxlSjDvM3;XB3{XM5cj@=rHA*TR{@AwXkklSV@45`W6T`6^lZFUV*4l z&j3VVWY5e3)nJkiroB3!ytu+qJpOME152wfxv6T(W{(lW+|$0#k2SWq9L8E`!8q0x z&Zcr5JFP9u9eIHjEJ1a=5p$fGK`GpiuDTL9`~=D%zv5T!%yEUI^9e{2CwI+ znsW|?+_}%v_HB`7D+*0oxHZF*50Yr?Rm%$BSKQPHVPZ4Y5Lx$youg-2A7akcC|E`< zA~qX%&DESIo{FCL? z-)&=1+Jnm~w$@W;F>8BqX$h69H1a_`yExG<&a%5Ib=9kSHGYPG38m3p=P^uKzRbNH z%ET$Pa_I^k7g7J?>ihNaoDm5@#JuU0O&gS{S{aNh|~*{j*_*ejGwy@9Y6`^|=U? zwaNS}$!tH4$cMDQm&+h>qY6Q4KQ+SktNyLeln-pn*szC-?xjF%6c9ay*GcGP1;4z; z)xit3mm1OLNr5IV%zkIH7}heIvLV=u-~(3sQR`3fZELl8^f1>n_BVS_IH20PG%}(CUqn!|?)1j^GBNF3)7g#pT(I!zy(*@}Zp}yfeqoP%@6@)CkkDX(b`Mxs!WX~9q(awxZ5sqlw#F{(mF`&JcfsUiOpb4a zdBRF=ZcN=-$hBT=LDCOcs+|E!NZmm73k1a+L}ONRYu+XOMLYR zX*%6CoLCW1s2EckdDQeyN3pn_;iq^^m24b$&W-gF{LxV&^6jF@6qbwCJ(-Y=5!G6n zGB7J0z)fH6yR}fG+f)Yn-4TncEbTZG2W}X^KTCmV&T2peS*}jVY>TeCK=jgve z?WB--B?5+ePl7XiNr%Ri1syz1?q=67qt}@r(%3E#$G`{S zFHN{Zum(uk!1SFXK}QXcN3g=Z_ZK+njl8@KjJPLBYlk(#8acU5eSZEvL(&pL6E-s0 z03~iKpZ<+*!V}OD#+afMVkf2c4Tq(*Rgo;y7}gT+h<-dR_Z`wiRlO^NIQG>&1G0f6 z6fQMt$xWE$c_LpDKv@Gt(=)o$`V)I2Mg>Wg(oI0-9?9u?Y4JCrRoCdvjW$Xw;5Hn+ zu7L$6^p~4fAB>K@l_0;X6a$KG9h-`~RfnVLB?p9kOl_PnGGl|Rzx_nb^8L{U_zYZ) zmx)c2ble3-sLl+E;*4d7Z#F>EU->l1m3l$U9mXO&%(R?@qv+UEta>In!Pol03WBGowMm==>R6Y9;rQUwD`dgM=PDDiIX9R zJ?3sq#{@0NC{V7p$N~jj5ii*kb^ZHu{37=YGL@&zT|USm?N|8Ml1l1V^0RlVpqb!N zKTO3-_=?^^_AmBf->CozC70ZKl4E>~E7^BGi`swzeNTn4-;|pOn-SXR<|qf&KMBZg zy1-p;LC@FA-5tQarNLKJkbd2^Hcf9<&+ajL!sSC^<>#)^`pj4I2piToJuU}ji5~lB z8740(!iPHM#bCiQq@8uLWs$SAm$l_*g@@*WvWg=f?vtm?GOK_FL`S_);#`_%P3)A> z`G=O>dsGDW%duA`&XwWHcA}|*%JIZJv$Jr>c5vo0H~j1g)8l4QR-g6H@(8&*WEIZ8 zAzyXI*==!ag+870&(Z{+O}`xO<~>p-l`lsqUFV(x;|%6SesGzTgSP@>ETL_o5ecS~ z3a0Br)SU7~ALF&AcXbTnWhZny*4CItLvJbh?FVbVv;;AxjdZ}kXowR$o!lWK@7b9b z;>?S~ACLcRMUT|>Z2kMkc#-~LEn$I=hsqo&-5_SbU4z$oE+6eG!B(r>N>ro!?A~vY z-@l|fr;!&k+}xmPoN;da_ln9Z&QQJ?4F?;{g9va)gBGNNQic1l;1z^JpGIbZo^Q!$ z{^0*qF13x%iAp(8>f}bun{L=-a0v3E&V$$gGyDyTrVV}Dh}oEkuweSNVoVP=xhsin zXAL?)h0ik5wPVLG#gvsf@iPc2P&;6U#^n@`xkA?Bt;Q~qu9idXuLL&v})0g0{k7ja2BF6%u6)LUks?4x`g zTe>EG0rOQ!H!Ii)^G(tG+N)jwm>-klNP1_AAT}im+QV6~mr)M8u;IFlDxooEu^rQQ zW4@o9fT6#x+aND!m+i2F?BLtC(n5@_lh5t0KiViR;Rf03-O1`&TH~X#*mAurR5i4Z z_xyk_UNF_89NHVj0tEsTq``{@y9YY`oYKp!y*S2k5TuQFnpxn0QJ?8V?%${-*kt2w z3jiHR1=~Se@Q&JIES>mY(IUMebw$&ss)xn(O4I@}`W({Prz~#EwiqSF7)9+gqT{=r z`R`l4*?saAKURe6GE~j{XF?B~Q`s2i<_z9K{d%9;Ded+cG;I4fA!ub+OUBNqr zd@o{Ma;9Cn_;P=&4y@8wgu7cQA0X|%`DyFQA=_kEDn>7h{iZ%OzS8g(-;jv6@i}$6 z0`(U4$;ca_C0-^P?;*aoWC@6Ss`O=nFPA9MeIZfZus#aLqL?}1iHmV$7MNxRQnT<1 z`#e|ofUk7T&FrrH{-%{Y(vnLTw``VMwNuVIE;DWflNsWM!7y-mkb<}b-BQ&@VMzaY z{1Xe~6Wgg~dFJ3}m8zeJ_10U8PfQD`R{CM;nV5=d%^&=5CH|(A1CydOFKKi3eT5(R zKI6M_)d|=aFJ$cLs4eO~7AZF+XGe8!6;(Y2yMkFHGLv&+yebMWAdjS11O>poEa#sD zlLZ!4PeI^|{y#VTs|vwU1Tqq2EV(mX!z>E2{tsQ>7+h(%WgT?Pj-3uWwr!nQ9jD`* z*yz}{ZQHhO+jcs}mzg`?Ox-(os?J+=s?M+Xspo90z1Ci-lsFno6a`ug2Urx!M-=lB zqOP_=u0(Sl%F30sfXd^&iQ0iFIdm^*m0fkJf+HXgzAQ3-&v$+zb$4Lw6QuZ?7{DF- zdQyrjFYkjO(WX?HO~YO)$T1xR>9A?<=EuM)T| z`}7)_bIDM_rLQwHs0mK-W2xB>mO291oHP|ly%T`#vT{5kZ9DQyMQfZ(&<4(@(Uzq2 z5B2jlm}TU?w)d|y3?4#I-ira!z)kr5Dy{6n zUvbmNMT*t;p;@cJkb2Fe(Hl$C$E5q!8|Ff%+a;dFtILMej(}ZOdd0YU@`+iZ@rq^9 zfP*#~T_;N2#xt~bbLLcjSBTHU?j^&g{5|WqnA+e?K{hwcj|XRmpwDckm!E&SKeKT? zkjPziDb;|Xjc6>#@SfWEEzzgX6k^7=6XX{hGCPkm>*OLnZz?g4fx-A*s)ReNh`ET< zo2m*OsxQn7@cTqFD(X0glq16NQ2}6wER1T|qas!42ox~O7KfLmq^zEY#W!>=t>wnT z^TYBN(&iOrCi!Iw7t$&j8B1A?g=ui6e3-Lf52bz!$!6+MV|gj1r;I8}F{OX7i$5RqDqc)3 zS_ip2VOj!<)hq&2A$P7~*!UNa#l^d#!j;;P=mtFEclZY1ksfbej?MP7a&Z#m4N&Hj z-}sAflHVtMD#H@+7661qQ9O{xBz-F@Xj~Bv^>VJom3@RU&xP{bgk4canu88DUI`|e zOsZ-X-+K0cgZE76MhD~m#z$mR&^`1rOgnV}Mu@p= z+_B-C$iZPz3Nbs8N6>O3lQ9Js^BrT3)T(Fb0);Csi5M)g=XGkR=n$elToVYkI0ukgUUPZImJN5nbJ{~_DI z(VS3hih)Y}%GT9LD>4JH}F5WV<_~%C)#D zv96H)v!a=((&i-JY4-@7pd{ioIm_jS=`{E#&7CslpFAZ7E0zf`aP11$0);}@PuRT9LG@15zaW&jr$utOH(xdL{V%v^7_X=hem?i=X_P#j#FH`JaCX>f zJH&_^oY*C;&BG!2)dYSE`_ihW=91i4(1lg25wa7~j@tL-_8=U+m=wH#4L2aAbpV`I z9^eKPWt*CElF)C0UzYt&#Q`(+oUW6t=c5h(^~&k|lhYIRm9_rZRii*^1vh;L;en#( zqxO?(>|?M0!`_jr&MDX|;VMyIsJQRRJDT6KAvNrkHcpP2S^052l$YfLdBT^UFHj@l z7o)_Z`cRb|SLe$J)I}-omMi2|aH$^re5RU3$T>m2j&=9Vd1F57blR*_z$xT0q{y;Gk~_D_F1a%x znRs;6ru6Kkq@hwrWfMfhSDc?_PkvB9^de^oJ8yM8j>=%SwcGpQN?8N3-AP zlWh7eUFkvFO#8YY+?LFp3sS>&Ur|Jt#Mv{TZ!5RHr=}Zn2n>JKP%8rxs#Rc2X-Pe> z^_?1qhTA1DTcFU@{O=P#pay&F1^K*k__Qc8UyHS;Wv;DTBbmh3^%RIm-!?{kEd&#_IHz)I*_->h zqqbwCrEfc4#maoe34Xug*~*Y`0s?#Q^R4h1an3ym7}8fir%%OCPs=N0a9|sqsgL3u zFUg;gwMxb#Z199U{-)&{4=XMuDuk^>q!h{h7JSF;l<*8rf~|7}a)F&clvP;hamsG? zJ-T517-HN?dFb~2Ur4&J6E1hyUxT>HuZR49A?TJy4tn$|_D1&qP3-swFDXF2O}38# zjknNJNI3g|6C4GFVLO0U1v6ht;yb+0rK~xSK;Rw+YsG=kQ6ZhmC^ZnG z%i55cIX70W!8II9tY-GMutE`dDWajcBHNA(=mF%wWvb;l2-e<&T2xTEmg4~CM+nVs z^DZ?s)g@46@+x&RLhR_mPhY$cu*plOdm969f0Ss(jilJkdC|JeG#GNcU6C02jN)qC zxdp5_5HSOgRM8AWJme7~yN6k)3j~+5n-AnARtUgGvGHr;bLE1$;o&EBr`?=piA1Mj zUYGN+D!=(JYCjK`3}*fFq!X|IwLSQ2Y*+eako3PN@c((Z!WMe=_DXujM#5i%I|n;Q z0|#rnf1GiKs^+gXG2{>J~Rr2I%6foKdBA`rm{!&9b2bj7Y zSqk9KNY*jH?S;ftE)3}){h@=u1j*8bR<9d<`$2Fk(%8hLGb1J8A*##s9ibcF9aU6p z(1eLEsmE~N(3I(xsX06sUMY|)k8}?XyE42s905CR0$NY4d&5{ufJsbIs{4%5KPH$c z5EPUI%nHVZIS?bq{O>j^sNs5G57w%!W_Jb#1r`d!s_z{Z>X&1ZGXv3fr#BE{Oil5c zaZ~jgCX?a`%^Jof`!{+WEUf-+i#O{yg_^jAkB=Ly1&?xd03`%HL*=%)`;QzF#$ayLR1`k|N+N1X zy0(+j`1o34&XJ<%CDW8!V#O_R%t5QIyd^QiYQEZ;hL-2(!|w>S#F*8X!OdsiVVh4J zMZ7-B-dxKb9G)=Vkz~rUwhPPfQ@VEpM^J(tP#-+`IG z%5V}|=;#x*YE`rW6SgYc*WGt}rT#sEYtllRV(iaCEy;Ti#ADd~KMCT)o#fP=97z&p z@N-V9lw{_!2151?|J35_PTOQA%o6*H!f5F?(h0rTx=m7~`F94w67Q_0K=HOoWJMj8 z>oBBfHd4CKm?v09Or83UJeQBvJLaA;hcU|RMb2@veHnwO^T|E`4%D*@J<*6EE?3?q zpFm(q_MlSk+d?uM60-zfJu&NEb@k=6U&wWU80X9RRt@$DKM&$pRDYzNhW=b=R0Z{_ zw%eGeS$LFJv6!b*LMkG;$Fz|@-+&h!^~9DD#$$it;!t@?&iWqKHxa`uW$)9bEDBSL z+z3$4dUy#;uzB{cLU?CEOtT$rTxm4bhN&2GOZl^{HiaS@XFd5H$=D2y(Ly!KiYa@l zzE3ef61|PTJ9&*Qr9yhb#JG_~=hkW2%>Gpx1sGgO| zTcbpqhO>8~$MNNF)2xwiEuH5Wi>HJ&QM+6dsN`D@%#p+$I58N1r zKaM|d@2A5hNqcNORdajL2RTg~8v%b)P#TeLBwow`iQRmhSNWjUk9HplJtWbqLh8U! zzS-~{^2@v=m-`*cml!g*0RunF@i{Dvrf*p%P4^hNH#ymC^_*i^EY87~!XB z<>eK4gIK9Z_|S= z3WXKq4G_P_C{hrCdPXntipoqV&2s+y7YY{?t`2Y6SDtwIdj2=v<^K$6q>TRvY7w%6 zu)Pe(>GccqRLf=TNWLzN&>z_pF33n8f~$k8D5w&OghxG4PZW#`Wl&H~#(GYPuAP@i zAe!Nn`k~)Ng&4+2o7j#_Vt_^&CsIWdtq1I~3>zhiW^2VS6zihDzQy?|_PP`IqL8*+ zN>e^WpnV(bb%?Z8!KO{~)ehJ@U$XaI$Vv)B5M2GG7h9H^5vm$bmq8*BOfLk_BmN^Z z$P=Xtq9bN7TL(r5gFGX@fd_657>z`)o8`TS=XjYUh3=F`SN_#XE~slrY*)~^R&0rA zJnZ3FqwFi57MoZTqk1GYlqrnUr)~6I>Meij<+fCvldn%G2JAQ>U&OEUHdZP=az)={ zbuQ(A_nmysjofjcC{(H(0PR0>+2Q*vi_R{e^z3IS(*0(3vVU`kiP39(8M!?n^u}XF z;bCcY173$TE~a|-?$yMViOhlz$yKANm

3u78le%4DSZtpH9Tx8!?ZG(v7J%PSa^q22JetBUA&_tLxZ?$_c*QI84 zb$)_egG4#3FX){V9~Yl4Pb)0-U`7wt3Ldumz{5gL?)ZY@yBZ}*YYm7RRVFtFjgjLt z8}9N+k+aqGR_m**itqYuN7_KOqrNn9n=-PLJ1r3gXf=Cm*`L!9j>=zeWdDpb@(TY$ z7Uh90!5;5fW;c9It}cOM(}KNG4SXm2YxF4b(5qT-@eKZ<0FO`5yxS4ZvvfA*eHBxn zyjZdF?dVYY-oE*bpUFkMJz)-L9%Z?N*o4Kj=0NzRgq56MNPs_tTT1w7B=Hr1gy+%2 z$I2uRO@7+T+d$P{mYAmqbYF8i*fd>E_~<<5ir>GrAek>*LY>UHwuA_cd8Pz~2QbHC zg-5dAy4|)^2${jmD=>we4qfkel@9%$2=S6ZA`=slhRV5+w`TVEUK%-OdPnow>u`c~ zITyZyo{reRrwQgRkBr58s%LO|eq(@1JemM|(idIpXp<3L?4F2WMhM(V|gKX$4ZF0JQN5B2{H%>(Z9cwGGA5i|NM&+eyJsTl%-14g{4R_swjZ6?7l74j%jkoxmDq>Q zX?Sq0&Z!01=ITuDhD}7F*lqYGP5G-=8H|mNOn%S=<%yge^(klmiLsLW8dVxD9UEtI zWm4mh<`zYPHb9qs-Ylgrzni*3PG-#BqR9e{XH9a;>AZHwWet$2ZdWqL$Kw8Lds+U{ zr?aF;hMU(sF8!n4LIOvPgoU4=TR}~)+@80JvD53ZVT(Y|yEjEOyXRQJjz7nY7tqOZ z-yEcB=MiBS_K5EW(1lTqCNN8wI!iz(w8=S7X*}p;(5!8`-E_*n(E&t&LGTvk68zS1 zj!1d&tW9V)h{x|^r3p;#RMM5>W5q!iHa*TvCsvY((wcCgYr#JIt3GllNAYFA=# zxAlqCcmfMaOEls*b%ZB~X!>)EYb8jJE6NuJtY8f!w|SuK$1-*F)TA#zGZ*`D>rNd* zCdPbrj60ZkQO-XysoiJmn%6D+YqCE4d2}#zhh}sL?bzb5sr!UHJH!I)r>3G>b{82p zI30`wVL_6B9C*`P{(?tSZe2I!XLaw3^we?z3UDm!=6C*q;Darc5*4`P4rhn-zCQD; zP*p=gX1ew?z}ayqJ_UZ3^MU5eij$@?a!zzuf&N|xQ7|foK_<{PmrU+VcXFdp_#{lFZtN_ z)x(-N=pBw?J1<>1+@xW6QUkpSsK~uU^An0Kpfvh@ffw%-RC$ zkb6oRCwP&LH?D4!LM@xLim7sG*`$>Wu&c9L2a>7{FR){$9%3wc-0Y2yIvS`{#kU7e zzXl&JP28qS#;ThOaul9_N+y-CgmT&s%w$-`&d`p{Z!&7Bs5A9#dW;l`3}`f+(*o>- zPE~Ml*@Tzx-Iz(%%bkInjsR^qzqjqs8vtETR1H$iaDw;uaYR_N4-ih)PiWokC$=R^ zwZl`l=7MWoec1^lu;(nuyD8siO!50g+onb@RK3dQg25Ze7#5QrPM+E@IgebCLryWY zzI=>#?dRsSQ_Ex_*dxISO_U53< z177IdA@P%w=P2_`**Q#x(WwbWPpM3Cdg0TdG3j}T0}pS4T&$j^YqHBfwvhbYGA~y{ zl`XK9iJ_O>mm*!o~C>zyvLuF zM4Lv2F%J$j5;Y4ZWWuV5G>gp&S{F;JF15IamSy1JqVP6muo^;hAyt9W??cSZfAuI$u3ksh9Eu*XjU-rn=P@lT#LK z#l-v8@9aGcoD`yeeg-faV(pe+I10XMp!6{cOPl6Ak z8Lf1;s6D5b+}`E-CLpTY7Ua<7nA|Dtk(2bh&`$!$e`zb2vaIKPzpCR87!VM;e_xHL z>sea-R}K81wX%u>(Bi)+-Vv&6)@UkNpBa~z=L09T@pSU5y^TLME@x$ZG%AVZ!!V?% zEhrn6ZCZI9po~oxSFkmp8E1a$>$@}XA$!C`i?t7;#5F1shtRt`gG+}a4gN&Ua%Td1 zzhtazH1_7Qq+EG&Z#`zzz2EdyScBG+9D#c3{J6%2rddbYwgC|bKSs!&iZbwof4vDM zEPChI8!GcG_6&cDdGLF+W%CEw1!D<9?iB-V^uI>afRGo8uA%g2$VAkGNc|=eh%A@~ zk_Pc(?@P9w0}F%gRwLtW@@<){n*f_$uP7X?ag4(U5!7i6OQbDap?-uTs)EVkJX#N$ z9lQ;T=jPBV@YKbAiu12;>2WDzVZH@`dGMim6cp0By{#pVNUAtJMm|nOsXcpM`XIkx zWqtLo_+~n~dL7S8S&7YV3>BNefyEHKl$w`LG|w7y$f?O3!81}46O#FTtOk7nt3g^DSD|)YH9?TI43o*>V9qQu ztD2QpZbbFo6!OZkmSp`D6L|bBjQ9Lf6J92<4D%p>V*rs^guseRSf#~Y@jg;1VW zhLp+}u0VQ7>P|TIH7z`Qf~v(d~F6~jU? zct&M-?)d_}qKb%~pU8TW69>(VQsAz$?ww@o?nB+sHf7F6d#Gx(XchJ0iPu?iOZ zr|v1(B5s-}4UTnc3rrCUN*(slNR8vaH}G%ct3es5`u2=9+8QmtMehw68fpIkzXYeQ16YCo1BG~`-I3; zw9CtCC{(h7r0jlxx8Fl`1#fmqde!U3ELn7X{fEn4L3iFQ!y`8QrBGpwNVI@ziWCRM zJ{W#7yE8QZEN_+u2U^ack7aT5HzIb8WIv3G)+gcGWigto2a0CitW^8o@2L=-jq8$B zd&)AhHD}E@34Ev%$9eR}1n8y?CK}Np)?UO+JQ1uR!7|s7o|H9#V;{=;v`HN@w!fr5 zob9x<=U>K5>BS1BL}dcofB}Cp9fzpJASmuLa;=j)Gh306X;h~7Rjb?j*;*}X`w`nL zwBMPa2GAi;6{zec&>>$!<*k|6O1JzqNby;bV*S&w_gR&z)%2HEfm zvtCI!WM1vD#c%lj*v6%@0cLe=@w(zbTV~lw@#>k`fl5%R;Z8JL%GCIKhI-ugTMI$|+!?cAnJ>b(kLgCH<;dNEEF&=(^ zb2hrVtLcHxA>7N(E;TjjaD@&V%9`i#0?2g_%=l$@B(r5S7Op%@$8$LN?+3!MOaw)D zfJ=N+VV3ibC=i3k>I|~AqZsI*E243>g((tjc>lg0xBQGC>z)piZu`q8tO^z6m4P84 zBAUx|dd9HjKDmLmu}oOqn_MQY;A*a0q<;p9WD$fs2EG#6(w9({@!v=D|0|jO7rLRO z{Uwq`MJsMoDf1w-iAlKh=qF4!?-OFE_&-OB-UYUQJa@9RYaRQHprGF=YxF$cc4Ce6_^?VL zJsu1XYnf5YRKdFL*-nYNtcFAmglvaQ3xAOFC3>u-iL}Nc3%{q#j$Sg%JJtCZHvg@X z*Ss_d+%8z0JtrrgGMc<@S8T+5z02#6i|@{pO6p@Eq@>lw1kz081f!lr*H-qH`gfs_ z?AGU&)5ntN#T&fk(8`LKnBo}*oQz?PerKa56>|M$hT8YwrH#hhHg=fd2XAlSs1yK< zQTv-jXeOVWLi9;9>wl!-9)B>Y#q^{mvsqldKPWARG@iVa`krl9KF2b@!zUJ2=)KQc zt2oaf+KQW*bA!Lx7M-C-4%^jjy};I`zu2eAR7fALL@c)hIr4>N{0_j=5=SjFMU~3) zPdiXQiC?5TA_l1E4d}Vq5e}5#bmDV#b}Q@UH7;LSk@_)U)Gr)qP0C#I*S z3G)5Epnu?1$ifp_GKwtfB)aPXpKoqf}_FR~nwmUPa2-H&)~ zr21Bm?gXOXAFB6Y*aJJu5q{Na-MU9XM-Yo#QY)MRcF2eqQSSR|G5c2mp@!Ae#BSSm zSwU-P&S&quol}-sV>!IR!g7dh@MVi5MJe3~XIGN4!(BEH{l50F(|6;s6M2f|=3`Zw zxUF7AI<`N*o(2d|+MN(~GGY1s#%t9d18hS&YkwDQkZqf&POK9-C2z8YPy4jQ^-JjS z5XLVE9zG!KFI&DlF-TnJci;k3#P@LuM8C8ZdaV&Aa^Blyv?m*y`T72oAx_z_uS&9a zIHXvtLGC!y)ivc2*el4b&ZSnE!w9GgNEjRO&MpoXVq!7Pr72BO%7$aWnW&n^4dS>< zae|w#Z_B8Hh1@FfD76Q7e~4r%p6s^C<$D99GAu?*BfS*} zp_PL!QA1(13EP*ZYLKypGm;NEn*Am>`%NRyHCWNf6;;%-v^Yn2f(dnbGy>Ji`pPrc;p&uMeVy|#MI|UO7-GZ^Lg8-(Mx&&FH3Z4Kl<2Qt5bE>4s6P9~Sjs z^FO~GZbN$jKbL>Qx9*^&h2OA)qLw?~Rz#wE{mU%mcQG_YATbEYf#^SG=hk*6^e&bb zHjWk+^may8U#k!d>1EWEjO>74Yp(wMe-&DV`+um={(f>^O&IEs#~ET_{eX$l3z8H< z{=P!wpFI;TfYJ>DD|`#>Ga~(E{*C6WW!pq202jL49Hs$QvDhGLuDPabdGS(K(NIyb zp`By;v1PxNMy6N&@tz=Of9Z7Dag_PK$^Nh)*L6elU1lcK0nN~+vd0zj2=|=T#k+^k z4+@88_;**29|D2?wY(o3JRM8(@U|W#Ca!yEPagsz7EkZClpiLRmeIA4-&CML0=itDW!%ZEX=j6at+Y~zn2bMhWHe$i){BDm=5xFuJ;wRi%R$7w|4UFAg~Yd?x=6=blXEEkV05uOq$rVO)N7>q5NAbZ&kLlj!NJjb21TNiM8Yc&T~vJVQGnTOB)V!?^4~?8}lMt znAi58)-X?g-u$q~5Wnr_U{h+ov|QVoV38mUZNLKf@_cJJ7i@tS)fsB5=+{_pLTDG^ zZaIiI>F!V1rv`6!h&QqBEC}}>+rprPFi&bHXpr(I%Y`uYChi>(tJR5n>-{AXmSAV3OVKO8SF?~mEyTSZD3$~YH2finK z<6`n#iDKPoQuU&_g)GzJ%;%QVmn({r8#%Q88}SUsVJo=? zp>74mH0)ch_Dy6ZN8C^3Far$=yoh1D%I?Gm8&WnBb>S>FC$uPxT+I4Y=cnPtu$o48mTHfpnr*%Qx5< zQzFhMM?%s}b?5fEKbP4#Nj&T88t_KvXV4LothpNA)*o#AR#q@zo3x9`pNC8i$CKgT zB`4{wEW!*LwxqgT z4EGPCQ_Jd${ZvYo;tV%`8)EE-gKFI+(P?Qbsf5wFAcz~)5BSGbgp2jl4km>p1+Z7F&RRJ2*BHa|>FKG6 z?#;fGE;OKrmEx%WT4GaOSW>0+9w3LrDLpNtHY@$5yiiqXYN4g7P*-pEcQ&we0X^&t z2j}bzBP+mwu^r$kquF16VWw;D#1^<1STnOdp6NHTrh8+%49_*W&#jR0>O?NealdbT zRTjb))H^0LO&o1B$5tDa>zEoN-?pOIdA!ay%J!p!SAp#}PA8U0WvR7=l!>(Cg>UKV zVCdi}SGA`hd3frnhTg$$=u7Be>mTSGqSb{J3pxu_eLLLUoWqDPA$&Gl_^6VKax{=Z zM6HyQ?$y#5ut69#vfmZnj$p)KToC;b4uZ5(+(@fCFb(xIgZIr10M+8WzVQ0rEb}nu z7Twc}ho(cSB_vW!6&ImlXmNiF80)}xm^QI5)S`R@b1GdNd{*!f9aGhow3ZqN{KZ@s zHFoP7WOUaca%({_#Tie93P8_Ae%S-y!5{)A&I%g%=GA=?HK}rpO(DR#s$4r(+G{Xs zLsZ14(HRA;tn4{(n0sm`T?~rR0c_%HYZK6ikyeaL0j<3^-V)4<-_6*-zbgFX)0b&- z=II<$5grSl7X!IGG7Ws70<$*l%pnFIgnzQ$N)+W#X|YjuEwEzLG-=#6b!XtLI^Abh z2ircLq5@TxagBRdGbT28_=P*dab{9L)0}jbvKQJy2Z_77i3w!{F}Y};8J+Xa|9VU4{st%g!|dTa&;#s zm6sz!+1Vj-fT;ndH%t?jg3qwzf`;h7hHSSQPmi5Ee|`WA%}8oIale6m2I8AIH#m3i z75-JLL<}{x#l^Mg9t{~*&`yFkun|oGL-_JwvZCJiPVHobcFRKc*&b8!SlFpv!GZnd z&`1RUta&`aNZ5ecG9!>!0&ff|O5Rnra-%7_n!L)-nCVO2Ha~hmFj6@m7!f!n?be(V zDr%ZxtWNY$^Nm3pVL2zOTSoldM$kFg^ZPCGm8S?J#n_!3=N(rSe(062T;$NgOr<83 zFR7iKTv!qV-Z+UzXAZ?)ULMa`+GwO*6CWy*5AL^LX@-s@5miId#^u;h9rBSAof;+Q zSTyw$f^9<0JA+$V8b9OT?qylW0tm*k%ws4b2}8t6`>WvIL*aQ_5nI#Yu$cE64vk0r zlEFSHyS#Nj%e64qB-`inVpTCTp9}m^Os_+Tx{sj;cK^;4i_9S+=Q$6r`#`${Mzj>qT%*HP-07FguoxCU0lYwG~BAi&+$8 zu76jg{PvshHPm1yNJ?dvjob{}FD*d$fKLlrl+;Ny3>&{EGgcKBS?Vp^56=`SN{~7r zONE()&H6^qz1YBJ%*`0o{!Ox`6TyOYcgEkDI>I@$XEa6S5L1GYy^{}3j#M=|)Q%8% z+-sBXQH_wVU7em-;Ui)f+g|hB7LD+=0EU|^O7fINx)>0?)iN@wpJ7Is98X1!QeJ1T zRkk!)Z?hIk4csr@^e4P8Y_NFb6mVQ1T`#+>3@D{P@u3;QsiikpPrHyW=ri}GNZ8MA zSO}ki=88&0oqJ{pgd7?B$w*H|95E^2=BnXFwMq-TI5ABFUSRJ>2Z_$(-%^y07BSEr zP&+;2w|&(tC3d*%CAVB{?J?}7w~%e^19aBA2&L{DgReCkpQvr?23L=b+5`(*VYi6n%FOt?I<9`G zL=LWVeOVF(FJ>*^h$KNE%~%RDDU=KmdxoseunWUJU%0U_{oyo6X|5s{T;2jp)MOzJ7gVbvpsYAjT0#cl6=HC2wftM# zjDE>Y5DpE{zL{Ui);w8)IG&CFP~zy`<|+ z2VqC{C@WZs-ljCiib;O%%ojqw zO(HaFY#7OfJ$O@cV7r@R6^dX}yvP@|?!>b+-|Bc3ydGK$m>ZO>8znGDP{8&F9>oPu z%gdK8?e? zRQZ_M9`w0aWTu-kxtIue0t;G0sqTHkrd8}qz_BCdDYFTyOdfoDo2xcIdVXhzh5i!|J2{1yZO1W^=N!kFrAbNnFk=-4wdr2qPR8$f*%e zlW^~5Djpieryxooq(cxItszllAH!wdt+ByZmNa<#^R&DVIaoKbu9TTWa;)SFd+67z z#^@*9OTh@y0DTeQK%#X`vCAq9B-b4vYQ1TR)vzqhD-XK-gH<>AUC7FF5i7{9-#U}W zI+wxtAga>?b+pB(^Mu#oNEQdd`98V`;cPya4>Ws?z^Dh=|=p{YY+AsikwHGc0wF-2?RMlJw-rUCCL+_R>&0O_z5$@ z+_D+zkqb0i=^j<{ao|!;i-BwF7Kbwp= zc4&}UR?;0jeYr`5-%Jd1`hNFuQ4d<*MI7gxwIvvA9>Qho*!dq8iy`7P-hi)MN5=hN zuMMhoT{ejG?6=4n zyvRAB%iM(a6xBNnjVa9&eM9-RXX4fXda+g;O5VYwIigPDh?bzZao%#Z(Nd@Msk)Rk zSy%7~6*`UCFe2WZa_}Zq2q|R3X$(!b^faq{= znQDdOxA|S448|}0C!}jIfh32NS|lqdj@=`%G{ptGo@yb?DZ%x5huK~binDL*enK|O zyO=l2Lns=O8Suw(7X(i;I=Maf!ClgC4`)TtEr`tXT*me^Dp#b83Ad8W#~G&1sNFXe zmqjazIX?$fei7%pzWOM_94k*2nG^yEsyXnt$O>ts>(6}kQtF@7)*_q1Z!Cpe`$OD~ zNNGUb0<9htL%t{iiOqc)e#ajd1Upif2a4PRQTs!}4?=L3Cs;kPdVi337rhGnfXcWd z3Gi-YB^zNp8sN6Cu9+D$jjJQORsgNQSnCn5c=Tzf%hNFBOoi-744A<-pj`;`%vEx^ z&^;xwCd)iNX;pWL>ey*vIoOfUMdaq?CL#P4u%GQq=6yg^n}yWbP;?@8wUouin% zcJKNp(R~Vf1@JCu^C$GsYiCpDE~#I)&L?J`5tYK96K`C-hf%ghZX_48HQXb)8|j?9r;YSJJUbL6VW zLhu9SEHs)en5!w2tI3zBLT;96*s6DYfMuB z^`ZlK!fd8|hjl%!0z!Ub5IoRg4X(`(cNN_|BVE^C<(JF`l4h|jyQhL;-pS5_*hwP& zC}+q2S%t3rcq8$eeURG|ixJB0mY>!7!8#$xdBGbUeMd8f&1nTbC0NGBGl31^$JM@V zWOp>Q!#2D_+OpBCME1)j&y|9%DH!0~mjR3$ZM?@`j1^}?f;xkCLChKk6=7E{fD zEz*Sq^vDd8YhYftf*rprNP?vZYHmEE$*M@QVj};TYgKEt)n5~t%pEElbdIYcEz0?I zCL=>EM%Zw$pzv&Y5{N{mdI4Mm(sHH^8Qt@GC-}7IEi0Z~c zw)7|$XRYY=3&nEg$Ax1w#7AgXg(^Y{H-=dcDqP|c6skpkuu3L*PQ$P4aW>}cgJ@uDnHmktZ6~UJAUU8JV0ppM1m=qi5&jvqUb5Px;UH z#80F-D0d;&>jIf9`IzRposQ;FlY(g!MD{GL5!oV@V(zdwyb(`aR!v8R+&!!aC-b46 z6dew+BHmcFMxKx|tL;fG=dAh@p-h7!nMX}bO|8A{l9zx1h?L%4HfsS+xKvBdu#%G* zcD39-Qi3{~;R>N`cvrj?^2AuCp?pw@A&a)Xe)qO(2}r8!5Etp?+VH_n#~U3o73ya0o)j0-elgsuvcYLH=3SrdY*uW*QTBC43B%VoRJ zKb@w_8EXKXkY7kaTXOq5q2I2RohV$a*8hG}Tea+wQ8#FB$rC5^OP+oD+4a=;>>Qb~ z$(N2%I{)ZH`)XQ*o<_FORt;UUC42SszOPcFe(BT5XH6@#->mBaSUwyBY~VGG#>ad9 zyi9!l*`cYi=APJFCWm4i>dH)kG`=S2SC4Dz>qL?OWcRUck`HjA&ZyWB8*5n0xo{R( zy8_#DnweO&T19#bs;|l~xIkJX@3qrC|_s0t3@%XA_SNp>+W-DQIotT8Ot7-~cO99kssd5nps6u4>DVZiY0+aq+!$ zhM<6Tb#FcwKbyMV&jH*n!|DQ=w+dfu@fzVJ?}4SGj8~WtI903U7FpMTxm?sSJg^Gj z5qrguo9~=3F{QuLxZGEJaI3~84&znN1Ez>gRhuYM! zn`1>g$>924Ab;tnXvyI$!5&EEcOXW-C%do8QDk?3PTec{Cu9|1Pv#p2C;M;wS_|AG z<&}HC86-TD#V1vR<_ zbwKESizN6gp8aMZ?}-*q_(~k#^{Tu5eEq>gnBa4iabn3Ny!j$jj&dvGtBYwsqUG zXsud>Rkm&0wr$(CZQHhO+qSJ$w*6|~eeOB;eEUVr@ngla!PO;3z1!^CUvn8&}LN#$BIK{q|eHEf};&42|J99`dL59RRXT zg=3u*#WY6DDvl{8dQ&x@A1T5z7P_OQn1@afg2ps<%vrdQ;$C20lR*uN$G(#1I~iZ3 zd*dD~w=r=CJ31{oT$tdU8*FSWr=_Zz5A*W6EBk5Ztjp>Iabt!HcqOE;IWHV1)L?y~ zL3@=eq=5d~+vMgh8q8S|aFKL+)!MFmo)z^;-f7FZlaTn3Mq7odPI?0Ycx%A4C}#I# zI>$y&fU}T=ugK88=?ItcFX6WYv>`!;yeQa^J-jOVMY`!R7KQ(gogQz8Qp4MGPP;{k zbTkJau~f(dCmHwxeCbOFE!|<)z!+ToFp!coZt5v8zYSa8`o6&OIn8yLwB=!%B2F4P z->vRQ62db|jjH)aD#i@rF#t!A2UwPj%Y zF#h*c5YNa?(yhOqVi^>T+I?)Acl2!8v&W@71ggPJwSu48eBOz>T-Vq~AiKl%gc6;V z86x6tW-KWBh{h|XQ{(1qB7Bn$m3@*nFWBV517+y99-|S$$>x)r5m4K)5qwk({(ap4_#%tCvx^@boQrq=%qHr z_&>RHb`(;xG=&O}R*YIbiGNR1=G@+n7Rz+_G#)5U#l1MRN_2!;&Q@l(-kNB8&QJJ0 z-Q6{J_(C2qPBz}69<)A*-35Bkh+QGNs&>E;I4U{ zuh{-}nVj+iQBiNJ2|W+0P1zs7t#jWsQE zH^ft~x&z8*eiRBKEw0CS)eC<7VNe!p@ItMj-iE=>2hY5SlrQgcZTyusFdw2?%rE(L zX3LpCy$Y(-6=qq6%a?$?464+X;#h2Hj8NQY)?`YEF1lffwGJP#i!~@Wv=JZnzB*eF zbxSIQ*6Jpwpz$TP8#s-|jsI_0F@D`6sGgTJg1E_51lS!fp8|#i>_=0! zkM8A5V6HhP4M?r9b2>H!n4`USbRX#%AcWZ?4F7emP`GTtEPPws@CJ+tMj=P+`*t_mFJ~m^p_;h zb83V&f~t}s4k|G9pI4?Jdx$mI^+bw~i7P#3FY=xG{)cce0!+mHU(>v_KM&T=V{30? zYh>?eX5>JlXKUeTV`EAEKR-!Ol8%l^N>h$a&MZ(!P?3YoHw(KPy9aBYrV+W1y|%US zk~0X=(2rUbpl;YSYF_G62H`SVZu_D+s8hGzCZNh~(@ZZtx!KZ!V& zM*mhrdMRkx!2hTr2Uhy)gZ!zQRTb4ObboFwReVyBRbXOPQgg&lRuC3wL0a`%lAmN> zfI3$BR*QooQXgX6sMnAZT5)f+ENhF$_oygEW>BB6?BqtAM>78=vWKe4CvVtmt5i@5=T~ME~xZHe84V|BAo_HK=rio z?@^*>Q@R5EdpBdJ`%>G(Hw0$MjF|-mKD?$nZ;{s%v#i@p43fy4_n1Vp{T^@*=wGU zs~4}klV;&);U#<|EWNQ9KE!WH1iqsntq=q^(AQR0AUCEBQyf%v&Y52M5uLG>>)A)Z z<%r-psoEKMW6!_cs9fD1UV`NL7WHOi!Ii$1v*7Mo7a%Ix|mCRFt0i=h1~b( z(0>QVx|Sabjh2u|Jpl^AkmBSs<*7u+vJVg90pn@nSBUE(+a1c`)3A^VLP7XGRO`i= z0&Qi=sFXPCsUvmOJ3?9|R*I_sC0ZNeTLVk;=ZKedRk2MgN2@-dtnyz@D)%e@`gMD) zx)>Ad8d3QL9C!Riw-^)JBaq%-`X>P~y#Kk8fU@J*wB65WzZxI-H*oqsJye}+K2)j~ zQF~{eES?xRs0&fz?Bu&R^P!(#r0ES*x+*u`l&$MLB~eT>ehi~nqffdapj5st4;Z$y z+zG|R2Km=N1ahgkD%g5I;yACL1&jBei}feA$@C}I;s4|m{MU+&pOWt9MGTtZH9L|4 z0!9jm!$Ky2*wR}iB_=5XaHGk|XD~Bo~0U3YXHiyxS+Nd_4F046&OiOkY^mtoD z(N+;awfC_pu*9HQGbg2EpjRQ9)YjDaixI~XJ9y+UWP9vU#oyjOw0#WXc-EbV*t$@H6%*cl{ zI>7sj?Mxm50lHR7>32NdZnUpld9oH)20?Q)YhakZFRR)rf8f}e#3Go45M6QIv;o;SmM=OKV{9zHT)`~y!aDn;!MZ3bO zjd@aGWs>lHGxl;oDBiv}MB89UC|Zq>Y!25`X>2ZkC!c4IQG6Lx*_oXzPglhR_|*OJ z^oD%HjS$dMiJRpZ>mryCkPy)p-}qAY>b9K)F`3@7Z9V2xJDI4nXyH3iv_6&6A!vm^ zl2|;kA^2X)Qy^sGizN#fqJ?ILDM6 zV)%?q+)47=K(V!Q`Jn9p6m>r?|6qPqWUz#RGxI^pFbEf*?0aMC66i&Xn_&`myO^1?3gQ z@XN~OGfO6MnS#2Z`X3EfE@=L@@U*#3u9D#gx38b)zfFh!2e*Gg#Aj)5q-W^%?+lQC z;}s-3Aq~g}TN!uM#4iifX^Ni>i}0Mw0vRU9nMdbmi<1l%spc|uk$a<-Ez0@w%R8~o z!*8&+kL{tLxV+t@+lRXcKy!~a!X6ov8fYGq9{4csC>BAKX&MA@N%&ccW0yep1*yd^HpLuOvu8nEEdbUW>Ib(qReUM1wr?u}lt zm?q@c*!ad3<2}r3PU=Zk8x^rgHzdfsDTp$3QxzXdCGrpIi!W!|3>DpVTU+gClb(;} zPKe-{AJ2e(`=V-P0iZ}D_L9xfS*HH?&Rs-jt9dbp18Lp~`4U@1M#BqJ!16d_PJa0k zXr;Y;NJQn}67WtPiEFqm^ri?2ZE1gB0jG-x;LM^CLe}G(?03uk_31r%<}N+~|MzQ; zNH}zqgaiP9!TtYz?fjKBgL$jE1k>1 zO7_?oJJ+l5?=F1BvDj>1e{NrI^{}j!aC;n*02G(mL-j1&ctFiqyaWXEn7t^{r3fbnV^{zzh3d{Bab5nb2^CtMx zK(K1~;^`LoDgi1(`~g!Xz@^NU;uYkT4{eCFmksd8fH|_&_dc8s zkpigkk13L^9-TNGlC3peuwI!j127@5r_xBkOSA7ekS5J8_pfJ&m%Qj>+l=U)eez!z zP9I9zI)lVmG+-|oo!yZbK%1ny9)Q;Kx8PUHx8zszbr>;!TqQ>^UXr6*Y%8LDcI|&* zv2P=Hy8wBhJfFOz_&(d#L_hy%Lpiv6f3tr@L9ufWX0da_Ul@3bjF7adkNDW8RdfEF z!GCV{kK5;O3ai0^5#!X54nW({1)&tdtXGy~&nm^sy3mCcmj0-rhFJh5TX~#!~;8%!Zr{TAd2<)A;7sA017uZolPN}M*M#ee2 zGg~QFkG}nN^{8)WLOiaUdwDx!n+h}JT#e^s5=v7O5F^3yFO&pJd!wQo942Tmb1NLz zZt=OZN2r!XJ+GN^n%sPnZC!$8as6;gI7bw|iQDmVdPPb90CgS&V6`WV*mwF8SWDAc zX7$;zPJTpqQ@i#tG4kP%(&C>xTj19lILzkKz4~xogmnE@dj*DkJSJzFKQq?h;Tm(BV;H}Qv8_d`S6=qWhh^lQ?HR4oLFUsk;{jaKDm))1F#q; z9>6-2JvQnTgZOwW7F=74a5ZoRPaNv9Vu@`sXolYkzVad*9S=mXiE^2tX{iZ!#e7#sjr&u!_)>K3uecV&d z_MXM5INbQ-z%-w#^W!QAqIfX+sELt9SgCYKO`0+op~&E;W@CbG##PK>7Z8(XYGI-s zBW8StMWkX0F&-uyE}35P_nAQ8--rygiIo~Wm!ng24s57jo@ z1Ac!Wy;&dF%_D9+YD3{CLxbJqfkI3erP&Wbgq_SQ_80; z&Oz7fFa;AqcrekEV2puG-k;NWuj&pC=-=(CcE!CHkU~Kj_TQsCJ->VZF7zE{L zMRN+yR~p6UKNYsm#uJ;t#BYy}$MCl*L@tuGZ&Ml52h&T}5yKG{w`!z9W`PHL%iUJB zxB;Lk`#YB&6e~wUES~X<37Y+&qEW@iJk`FP+J<(`tdJ)qsald6{2t2MhZKC&_v89~ zbf%l%rz#?+PC9R1X`wlG6#JRPx0Th=LPr%UP*0Ky8J{!_Zses|11|DdO&LMBZct~+ zY1YU*e5i;W>-^(WS0W=`D`wckIbxcHBUx!&^jN1qY$+=oB8HZ{Hb>uDDH>AHr%b^r zW!hl6&72{tk7t5Pb$KgjO7(dbmMZNeLL@FkN5((#tc_sekm?!`cVT7 zZ$|RFT@s?UL8yQ_>xw48Ht!vV(8W`RxEN&fvz#FzOP>yF24%qF%U9f>ier?w%aN%1 zm0&n%BJV)Tw2l1DBuX7q=PclzUj5Z&hGA^G;hC@=q$W__LEF&jtBPXma^OIn*;aR4 z7sa&#(Sv$U7sZuK4Crl|8mX_C52QegsX!Op4K*wD$O>{k>O>Mf!1aSF?UtjY@4H#! zC2C*rE{mfiS9&c5kCEXD9`1LdZlaGF$GrMG+DbOvzyZ~EME_^$?q0z2KuuoaDE8!* zz>0eH)nRo??O60vLE&hblHa)14bA2sn}803apgpwFnG5c8%LC3=h>bFpzC2k6!ywL z`G0~qRVBG2kAF3YaRe=*7w?ZL+E54QA%_@bn{6|ePX%D!mrE+7p4nEwMTS7!`P8i3 z8vO94eZ^sFMz+tglnep_dnUGKn?-$E<0BEEW@D&zhqe>(3h&K@*^R>TDC0h>rBnLq z_8?ShZ{H1vSenvLnfUDZ9ihsHWceXen+6392A)A=H3P{kAr{o!pqIR23c8Xg!!`mx zGldOObp%wxBlUdF;Kn#N1pC+YZdK(wg8`eK(~X)r2M=LcXr~Sg4_Ks@_}8}_zmY|P zN)3Q@8`a)G_QbJUz>ogaMK9NC_ZNpBR25(%nXpgua8J!K8sdyI**%lCTCtS4iAQ?F zJgB@0cDU`$ao7D#G3 zLadl4mmP97Z?;O9T+NwSIB2Bmi;g86aXV~_)jVDphES!|VY;lO`<&ffUE5t{(>Yz0 zj;bJaVsVDWj>wa25iwJv;)oXV7`AL}?7=tU5$NCzSPqaULzJqo!JQzoIk4U!f?21l zx+Ew@U}pd)BPgEsKZ?It)#i64yWHtr)gE5emj0{}jj*aRaHul4zX%Am!u!@1L(4B7 ziyBRWI<3pHK4%?Q{34dqMmQ?DY#i`Z6$lSN={>d1R9jlZFmsSlQ$9qx*Ne=;n7*oC zw3aw))mBkW8B}7tL~q|$j~sB4jJduGZ}rRTiSv3ertGIO9jY=Nu#$}An4i}VILL>J zj-akz$WI@u&8V;jngW8WjLNR3wc7=9b$3;@QBRb)(6bOH3L2LLf9+}6GT5p2u+-|| zauyd+ZbND1xL~h2(^4BvzdL-|DU;Oojkn_|d#+2c&M#qK^Wfn^v|?Qo2A@+(M>cQV9AZ{mf63qjv2asNuCs;X+LD$tWs+n-N?@-mM0~Y~G&v ziLPhfxRY*h4r8_?8uWC^=m`z%;nyV$E!B2 z?(}eKR>MpKbH}FcINUr5YiQg2CsjihvMu=8&%`I@dB*Pbocl`WSvb=e5G zh41B_l%8_|ymU>kw_*{<+Hlu2Zb#bjS5OX>awf$T4cwQJPrYX>vVIa1&Dcykjy-gX z;00q(w(rm>%aH7Lk<>4uPY;Z81{%Kyi5bI*Zg}~Qdg|VoKRm`O-+{k-vCX?vyth)6 z86vR0sh!!^06RK3PmU=mR5@q2e&3UBMqq>#@DUF6|^m~l4z53p~*!A zy{I-w#psU~ht+hg6M?3+TlBm4yYa1w4C_+SRk3QMKq)@c9ypwbEOLX|Bd5ip=9hJ==0DuwrA3wGK z1W?_~R$k`6QT%r`nWXye@~>)Avc4l>3kzOVRCi(k0C0l1wu+P=2uNU26gwFgRo#lD z<2TxBN=E~%Y}uonSyglLI=HfshJ=-uZ;%w7(uIK4rNTQmR|!|iXO)j%$+78M8$-i{ z@tTmkz5Vg@=l0042hNTs$+hRp**QS<;7*1v&=nBa0&|d)0R%uZeUx) z0gUwvVzu$S_(1|8LFk}1f;@>sPgn5|8~7%BAJMUSc0An;8Xf6By9ZBlqx<(O-fS;c=QKQ;e6S85AhPSDPpHdw#4|c{oR}=6 zQROf-HsF}Lcr>1G9gc3=D&|0%jBwOBd2jbmlSE}JcgOGYuTF|l|Fe$Y)r4X!h*_2v zw#G-ayHCCrL~@~1~sKVmbG6GRM--o$)v6& zvCR@sp;{N1Rxl%Z#cR1Bx;=hsXW<~$&pTm(o-99~F^xh3ZYzd7ydTR z6tS+R(^IeEKA#-bVT|9r5_er0)x}?L#h9{I6Vob1MroGHg;N;%@1cI(o z9Z7am#jsG^U9_8`L;*Lw z+$SED%*|j0i6~DXY@KnT!FRuirk6Z(?Nl4-eTIFvhkc_<}!FaVl zSth1MhNq^^6{lVPNu3_B(F_Ql4YWhG(FYM#2#DcK0Mi3r28dQQPqnf zV|*vLi8xb8wUww0p1ev0f|P!6VK9*!mIZd@KfP+xC z!Z$l!^MbkZN|HQ-;m!^4is1?EVP4QI#(*)PvTzO?gGF>Si7h0Y!m_wlzZvm`?1ZIq z4zi&v-USexM9j7o?><*CB2&ZcY2p6Y_+0vcBx85t9DbejSDXMcD;qr`aJ ztGtn)LUpm?S_X+#3VkZ`Fl7rVqOn!eu%$3(eV%igftRp4Aux5zVWgsQ4p*G@0MK1> zcEcTqB!)^i?Y`?{!bFGDt!hE>Lq!sqk~o(tAeX9Ux8!H0zv0qYi(XsT=ZY7o(GzlPeqgR4Dv<=9)az~_Rwbq zy}7;Q;x+l6P%6p>$koH1l|%TBYqt5(@AR2N)R=qTBT>w={V~`3aBrMvy*Y&h+sH~U zJb^kvA3){1J0j#aA!a+HCJ|6Q0j*l4MHhh=H|Jt3w3AJpDK?FIO&rEXs#JlGsZbR| zK}UTqw!Kgd(bvw(B)L#A219N2J~>tmZPI^z1Z3hHQS4@?p5d%{@kjo=)Pn^ElfV{^ z9C>QV3W|XGM4Vubj6|q<)cXK-??HD@aUC09+}U4cSg~l3o({l2s92IKgTOlcqSX5$ z9Ds5TUQm^w5(j%?lM0+2f#lHC|E4o(An9HfXUpeeglO zR0m#RQr9hqxotZx?Mvv)p)Pi90*9l^!97awL_70DW1rYFDDa4vtqUV?OiFS?ir@qU zO#CRFt@%v<8MB*_h&_Pd8jtfTv!}%w<+G3W0Wq^aw02gwKs62MJ=r5M1OC}F-1A$< z=x*gMHI|-u?-1_I|Y{T36hEb=5W>)=4HrI+r7yH`G&YJt1g zeL0n6ijY0;jua(tk*l}vo#x}Z;N8oES!ZvQwE>+1=BH%OszhHrHivW%_~^+GzP&I% zIJQ8gxZ{C$!B_4WmeSW8JUdJHOSJFZ)-Q5eNcvcl(-X77Jn{wlzb~AQbo^noKi;qA zKi;qZKh5W#tIEI3)&6}^sZx1&!B~R(QjTwm?{phW?t=yiViim#s_?ZyCqdmG6q7W{ z5Ek#H%d0GkYN%_ZP_E!K^$>?>5*>Lx?y5C>ZPZC&AU%v@_#rpk8ToA3Npm1W|Ai^|2PR~9#5J_hfHJxP6`HRv z4%T^>G@=3TVlWNX`KRkKqGrgy8s!J8ZWsQ;X~SXa(~a(j!CnobMv!F8MT)3$j_ZdG zfgzKqaSrb{P|i~dXUql9)QvJ9KxZo30?Ra{8s{~TQoP`6%ilnyf_H;T^gXM60Hh#x zhMA~J){WN9s?Kh=$jaUbOp?BkSpxGMoN|zozpz09_wWk!(a6c)P;eIMA|E4upy#OE zaAc~~_O9a-BURd#_Uz{SXIwnvWhViEbr@`&N}L%n6=jqmxbtyP<~13Umkv9cd!EH7 zH?X8JG#6nk7+P1PQ8a6dMy;k7trrVHY^y%2;mwGhL>84)hG&hRBLg#3S(F_xUDA4R zHBP-fafoowO;3UDsV01vs9w!^=;NRiECW7yzchDkH9&1YeTh8-c<5*FJq~d*H(>}p zjaY-)U8k>v%9XD+7M2Y$)gB;uOpRmU*G(}R)jtkz+FGeWfo;`M!PNhX418(sKBpBI z9kwpv7eMNYU3nRQu)d_RR_V*kCe|RADp-XLYg?IL@}9=>3Lx^BqpvAdkZyr#W0h%7 z+^jmI~UV*PEcPGM%Q>DsY{H z7) zilj40Re_vd+Fe^Zaa(7!a%s5|ZmBHNUaqWHw|%y9xW;~Ts@N7=ZCR2R*xc$DQOt_r zpqIwfWQZ~e1!(gxMpw`Ng=QXSzM9DZrLh!64@~&HUa4*yH0HiIibIiVln&yS&J<)q zD{}2u1-4bgr6C6)s1xIyq}<3P`0MI#swiS*ndCi0v67;dd@)l;dMe^H88-1*BSTd; z7vf0T!ZvQ15;Yu$D9+Njk&}AGm78W0<3P243QhSD-6i?u(+SW}4Th2juge!tNoCYw z$sLO{Mh;hg`b1T!+R6@?`M~h8VOH6=0+@^Ct>HZI+Q%thiN^EIVr}~-ExVaruq%Jj z9oqhjc7gt8J1oO&O; z$6Jis-P68Xyk6ZsKz?h?7q%da{tLQVexo$pErur=>^i&|{MzRWop#}p%IG@eOi!JF z@CMbz5X$H-0g8}shJ7!WFf%k#=rbX_L~DeChu|4(RBwP|YIks=pZmCPLOhf7=~^t_ zvEd8JTDs}v@M)nKOjTpUlP@UOn9=6Uqo~_SLUU3TjB=G1Hn{f;pj0q-){fVvyw~Cs|+dd zh&6l1Q+iWK_pjHJ8t|~+GIxuc?D}s5>o_KPE6wI8+27k&XyA>lIz-Ud@c4WoH1#YL zeGWLrBP@O;EPg3yG=EckOT5#t?r!6&P^+rwQ@S3 z6r*Gmt}Xdk1tt~a@D(U#Gd>w;_J%`vs9-6l{EleK*;N`}6JA5j-61P6N!ooeVw`vg zkP=QHv@_Zmx_S(4BG*5)X-wH*Q7KvIL%K*m5u@DSCc1DaRbrt!P>`%X2&=XE_1qPf zbuoLM7x4bqBlKpDZZBQau(~N><_p-7Yfsh=xPv6s6ch*zbYxq=V|C*}rBTuqAq`CD zr?;0zgsI7^uMA{wWL_`62&=~p9ziYPl$b>qikI52jb&s48UA=KcyV@u;+(A_(z6hO z$2USb#3Qi86`{>3_Jv@WLs-u#RLCQ9XSSYDQaY0>c|C7Ys8d3+3!*jeQdYm&p#V6i z+2!K!xIM+T@{ZWWWAn$}sMKMi@vOiU>jkb`uo=V91A~Tj@jS4n

UI_$yS)T(PCn0Ykj`X8nMhh7zybDyp8P;kwx!W<%FB=s*Da3|M9sVjdi zfy=~9tPzj}*Ac}v+|AD8yqa2W8-={d`gWjjc1WrSo>~BjW-;qtN@iBQnhqU{^NRq7 zRBb(4FVo)|(lNl%SVb^j3XoPZ#m-1iz25DK(&C(khgux=q6ua~u4%%h8N*y#_c~tl zI!5SGPCOa+G1G12A=rSXX8*SMjFP~_;sUAwb+Y;ekaHwN+;yXHjUW1DUWwe|%Zfupi?r&J=5{4&LXg=eu#xbY zxv)*ZzEY*L$xlybeieBNNM$}GTTL*S9~bI%cQQy^8SGE{%PVj}#bhf#RpIJ^GY@FD zgRGbU?yWR2IWsQwFjWC|ZHOZq(Ig+w>ST37pg~*QI?W_Ucff$6DN@pQ8X--0g`!R{ zOWuDuxKxu*eMNX#mj%~1d|l8SVo)$Jfyk3VD-T#-9&m^?aDQXZw-sFZx3XC?e+^wX zH}UyF++Z3C-_W^Yd#UR_D~G3@)ktltG=5k-+p#?t#Sq>~O?`7-Lm?1E>I9{Gm&YW1w{{pi1Lp%&qsOi1!*ERMr8Ilbby~L1=Hp@5N@yCV$3PwVWz-Q@j7pa_c^}{UpQU8=k7naxq1%W{-C}dK5v`C zrRdmoeAp=DeHgEK{Q<~+zMZ(fPr3bIpSh=sZOGY)Z~iz}^O@dlaoX{CD*1p`^O0W2 zDL5<{zy7e-)c_GS?1gDVo zJfA)*7yJu;UU=h=T*xb$U^|KTppY#0BwkCGXav2m@KG4|qt_EKGn;rD^8M(zgVB*$ zWoTssyFWYOMNI8>$c#ko`5Wz15Ib;MCF46Ci{V0^J2Yoc| z1+gG>uQ@8_LV2D(iji9x?EV2z$*a5-WNsM~RwbpUSzZbb;NLt}yN=^vT`?byyh*d( z>7rn!sN8%eeK05U0gaKk#l~-mtlgWe6D)raogzJSJ9E;P9zQgwtI|FwdwUA8{~)|c zJ**XE`(^yWx#Ax`3wpr@>NApsk^5B*G^6Ef0l<6d%gD!WivfU!qUESVl=~`cgtTn` z3(hMFB5H~I0Vi`W1anTiB}Z7fo9`Yj*3JLert-2_fQ(9J`9*#tCQRBD+cEAU zH=0HpEl^3rv&Pe6 z#%-POgt}?Vo1v6=JO~CL<>Xg${Hx9CfDOl`zZq?(&;#Me6QWc>N?CZfpu`!<%c+v! zriv-IS5kF;4Z(P~G~0rOBbnF2L5o-PPVpRuIpr7dc6mM_iU<{0gK#NQ|3WV%$O!Hu zlgpyamK?83Cui{8b`gI-ahHI@9A=)z!cL#{%i+!D&$x|!!E0bYsO5L3pdhrLaG~h} zfPL?9Z7<}r;BN@BcO1-}dtv7g*WEI;&srLB0$iYwP+FE~5df#HzjPsRc2I(dWM`g$darppe?2R;xhWKS;>qI|n()pC zIDX=T=EmZ&&$8BOX5DcR;%{s3~q7tj*%xx3ti zxgNK%h3AD@rTaxFo2pe+ms8NiknCyFDRBgv)z+W8uYH*{$@U<2kPD5 zccq|QGKoP}mDoP!iJ=&K1 zRnR!3*Kx%-Cc(py_Xz57{zKT%%-#(JA!)QYmj^UX>}RC*1Jrb*XdW|iVYYirdI@$4%}c4fPTkPPFgTkha{wa zq3M9&b<4t~m{r>bB(uE9{j$V~h0@rP1x4EXUh{T~6-O}T`Fgli&GbU6D^5SFX$Z0( zP@x`X@pWrr_hiZo>=Hn-8xHTy4%P1Vn zM*|`XFYIJA8Tx*BFqzi!nm0%2hT(rA>Nw(d>1s*^L%rL-wlk0B_FbA@UcF3gKAchZ z*RakKy4XpnKuiJ~Bs?D451O@Aj|bL6VfC@1FWU3e=KZ%zD8k4*3e4>#>>19l(>vok zRlpBtG2YD_f(#RPz18V*RIp3nuyd72x-(BqP0_59DRg&a@_A$o~ z988f{0I5#oN$B#~J5#3*iyD1rN;;iydAFp-v8g!k`T9mYxe`<;^jjLk0xH zh^=jQt!`SpYLo5T*zs{Ucgn)fi^vV;nhRct!g(dho$|Vh($Vt??26`qZDyE)>+qB6 zocnF5uCN&F#p)Ooi-EwlzUz{C_1I1O@VO-ItvlmccBJFESVlarDI0HmKc4&zHh$Gu zZTDLESyk0ejhk-VBv?u`9WvD(Vs`T`#iuosFj+}Nb0m8*CXiUw8j?{%m^2c27xDn_xZXId|8O_RaOH z;6`|6PUVu4&N=b@uqK`}g5!9zsN5<{=Qpx25@L{?R8&p9X8ej5_XCO6=GUcd&%n2> zTW^az$c}Ksi}Q@0;uU3$bE3q=u8Q6|FlM=Z9II#cYHT+h=TCI1Bc$+ zUj^IfuPYd4x9fB6#UoYB_8}B?$62d9y`X6!hvKWHpTFviQfkM97~ay+wJUlJ3tA4JC7dRP?Oa?0eezOy@d zpK%+Ht*8qablFG$1keAV#invu@azsTe??LZ(QJmS>qv)_#o`t0kQLqx??18jPQ(Q$ z&*2l~4WYiL%)ba(?b88__1Pmk3cwyI`nYkDC2Ece0 zimFYrr@lXe2+TXeho+f7iq2V~>Ph6Rtx?MgX;=iKs$f39(=|Z24j>z|{cRHCGfWY@ zUYd)>kZ5vHgI)q<0o^UJ09}4I#J#gqBY`GmaP{Txr-RsgT!Qz+#^{dVmMw3=?3u*A zfGs-4TuKiwLh8eAQ0%raMg=C%I0Yb6?DnHQq^*rd?D?Si+C#z72d7;p;MxYd)Prr9 z7*Y|8vvC?yW(2$J5n;))N~Aj!rh_gbrv1N zwCxVOFjO_vzf%rf=1e%uB4MG6fCN&*R!CBChR;#uaI$WawJl^L5q!Xk#$C)HePYJz zpd5CegFb-Nfnyeb%ba<7XPwJoR~@s-I)4Uoyqq}VbhtCIR#LJjQP#GK!E>l z<~^YhjN{bhwfMWav9Sf9qGS=~=bC*i&2w2nYEFcwXGFO9=1d>=hgu`_CYnn{1w4Rv zd5O4|=h4A6kBo>=_cqfzIJ@~x8qxEGwC5(@ut#aD@2R%v_{tsdR1<3`67e(@FYBG2n-yMGafKUvCtaZ<{ww2;O{0lL@Bb$6I%nmpF@j}tKocTEW zuX|Qy@UqJD;+Z`eG_TWID5K9e6bXvG9`|T!8#lu1Mv3MMNB+2Fh|l(Zjp;B4M7GWj zT`2}$Q;mT3H~K3dTHKxH^fLW z!_XYqAmnF;A78o9$|7b76R+An*zg~5@E>oOQ+A3PUcER}C^+C;>WfrAQHPL~dDe^U z&w$2rH@ojUm z>aZ~&fUS$U(EJ?odf@!Df4m{xQrrOL3NMHL(Q>Br&iEJu_W<{Bhx1vKiglajej%@_ zLr_jbRWm1!;yX+Kb4^97w>3X{w_7Gl$KqGg5q5-EXgA(l^OLR{bsP->Z9IkM%_0u> z4OPLw2(D|NVkaEwXv6Xswy%SX$xVir(*`g*_Y(8C(t_RZbiWE`jPjZ^$7IS9kn(;c zcqpv~wDX&EbT_MXjzWu8^Kpf(Q5`Rq%&ljXXBsN=R=YP)FK0s65eqe~}W~(~axl zDrTjM4ngel9erdjV;KugNv2+l(}yTWS`Xl!B-SX_LB<1NUc!+eKSXH&$x#mqHTa2^ zcEuE__n$%e!aP=|8n3fVgk`FM@)qapw8cs0Ot8ZUSV6m54yArnLs$_6U zNOg7^G;v)WCVi6WWINye@}@kxD6<<1LbrZf33oNuR?MB&$|@=K7SQ-vb8ib z&~r5URzwnVH88UMizxEXDQuR4lmgN(crO8cR@w?(K?FhP&weTVYk&y}YPfvuNc&Ks zq>-^}_+U%tX3_?5-U%pG^`mbm2(_m`I2t4l8n0g6f+hRVR6Dl2CfAxm|ny(wERPFPR5QD%hnTYbRpDn~kw-2i4x<4!u^xLNhH zQ<{~}WnMH@fUMj7O0qZFUUfH8CbMj&L^ef2bW|NwH%bHRK`gslb6(W8I7$!8G7RH& zMx>kYUn-~1of(LotlNvEN|OsT)kPp#_&L&;q{?fvr-ZD`^Mk{K$2kT5eOIOYBl}H_ zUX)xjLdo=!NNou3!~Un%mKB5&{)dfXe1ZT2mpNp8^j|3j#Swxm&=)7Ct1l=yW4f+) zyys$q)hJdwyQ+d~m!kv%OQj2XS=`yE`VJX-X9uunaMM4{*mwJUodXCrg@SNnK0||W zXQb|0PHSY=7~Oj0GSolA??Q+aEiU0xR(J*oT)KumT;oV78h-f^%a7LXt zn8f1D?X^>rnQ56G-JD~c-P}Dt$n}Q!xBK&9Ko^7|jZu+m(FcvMf_LoLcJ&sjM8@GV zj?xvSp8Z+?TafNF@{(l5DW4N7HtuSmnx`>vzxoerVNZxxB$}Y4S|){cp<{`f52j3`jqIczk=o{1=wkzZZkQZRh;640NeO zXlgDk@rI=BO+m*5#>V~xK+G2m(Sur(q$eQo6C{)Xu8&1O0LG;sqYq#bK(%NR-e|wk z$X_lpx711>;wMZuU0N(!YFD<-8muq%y~8r#y|&z=-D~B>v_)dxMn}u z@@NL@d{{yX2{T3gnsBt!(aA|_sJv{l4@shHzGJKO3`?SGvTsT9sQUOGAl2RJRDQ?= zu~Bsj?P;KNOYLo-Y!}^H2i?fNNC(}>zi>kCRNZnz?o`}*LHeldy`y;Z?SY~2RNf*4 zk1o;%+HbC;0+}=atDZPw9_T=71K=u^gPC$MM?&VN^g!k7_elP{;D7-iY?a01J z1?|*_*4@QK4bMFTyIV46;Ucb*&C=M)?mh$hAipdMm&|Lirc2mBeyHzyVNI2QfjohG z>g?+Ii2&oGxJvGV0eXNuL1DwYYVL+OW6IP(en{^c_{m%{`|%*Y1Z0uUQ8{yjZPz9Q zbQ9eM^40X(TrsCz*C`ZJ8)DeDWZ4@g3xoh?H!U!`&r6dnxPW9M{?so~IMw!hzf6>X zTm5Yv0+NmJ64!eV$cyAEv1{d*1NG4_T@vO>wq;Yo1(3qm&F9CL#}~&}*9+~3=$8iA zV0dHcF1Kssw*u^KP{RJ;-x~o)w`Ny+vwr6IR@eLe#bi=X791!NrFc$DFGDgzR3fR;*+%z*Zs*^%F>a9CX8V%PjxSNRge5wsfvo1+$4&u;j}tVP zZw_Hl+8jwHwfrVdYJr-7m6m%2Bu(lO_ECBz%)2^-pwt=uek-O^`a$znGQLynQ|ih7 zDRD$~>X1~E7*uh_OQ|E^Bme5|hjsW{*iS=nk%-?T5=&`Y{z0Wl)qtur*JEVAFHa@? zd0)=f(b68#Wv!!Ow^cl)?r<9EcNi?&dtd?NrXRS8a_1UR!LQzna|c!%i`yc51rZ)= zXD5gbqHc^$liOsr5uws95PLXq&Rp4ltIyE#)7-TV75oJV9)6XPIp&Z3(4GA*yV1|= za#Y(R?1+jv8oEdU^{N97x7YGjfwH?G-L6hg;Sc@?_^DijmLWAI5)p2>VZjpj^ak_W zr$EFkyG%U*JAR7}4%RbawM?phbrs@e_i~3oai|bIW@6g2J6DbVkvLzx6E-@4PeDoW zp1wNCpP)YcJq{cp?8|>9vU#vAns`0Sh`P$cAlUbQs{04&^&hmdg=Rzj!Fw3AG_{0# zX=!6~W6^qbJ?R}JP|UOkbX)RfyKbpwI{f|a&#_Y(=sBed3(}q*ml2M&S+zd@$HZ%8 z{a~AAzt+Mw`U9Vkf&K&Lh&@DFakL_FHj8MJRWWc# zaU&2S11hZ&D!mIghfHxeu@j$BOY!kd6uoxvzyZuTcPO;v?Q?teieKaSu|q)8%uX=#m=DofH@9`2w#Eg& zs#@S>U#Zg31F+BU4zuwdECJL^i1rsiC=rW0N2BiO7641K(a{o25~K1;65GC_+>De` zQ)-zKPY$Z;xf56brs6$haoy5Saw0euap$49q0LC_sN-by6a;~)&F#vwwTDR8>p%7> z+2mtVSc00zaE`44b^G&3Z9?w(!iN0&$&7L(ZTNbE^hu5Sk&n-Dr4EPozyQcdV^Q<@RBCTn= z)^{$Ss-3~O5W)6zQ_*EM=P=ZMy1hsTn4Q_NLbnAdpchX5+-?TadK)!|SXk8K4KI$` zO(1t6mX0`fHf25RqMcf)3`&y5c!H`Z_9S7{lrs9XH{@`*DmPCAamf0mrKYVE)2>_b zeZQvOQCI9q^MXY=v;4m(d#C8igKd4gJIRV|r(@f;ZQHidv2CYg+qP}nX2ovZdTcq&Q@Ck{PlifhoWx^?bc zIA)!jB2R78{kVfP9EkwsI%N1~w@|q7+1A_8tUu`7(F*JCeosZxFnbTL<}{NaU}tPx zlZc^aGsu23XzFj!3l=C@*m?)}7i5n~dwZ)o6sV)=MC$C99O4@tSRdR+{N|Df~|qV!c%`2*ZlGv{G8m&kcetzfnOv-;V(*|7X?0;R_?AHb<8%uu*sj3 zICBS36*M&i^QbcDWGO@b^5wC=c6=sl0GNb}K(3Gh@ePRRkZ>-Z^2*w4k1{7q8V(!m zIKh7Gm7jbvA*g2k9luN!Rlx&kbR}UG)qzZIJmeu9-YXFl?96^9tB?i37;1FJk9zGA z_L5^@YxA(rPsOrX!vaBQN?FgzulTurXmq;P?c(1d;i5P`d;B8WMsTC$A~>2!)vsH- zyqtqZ^|rWZY6yB*5;J!NvuwOfRj0RPU1NCcVS|%_VdZ4}$WI%x?tm^za-%5pybz`$xFrGK=h0VjM)g;HC)*P6@KZ|p9bZqUAV=Vc<;eo0 z{gek>I!{YdSchgqGaq6E<%)fLUlOCi!44wC@G8Ns0r1p7kj1+Fz9s>#(N>;r#%Q@8 zJ;n;EMF>yBEF$eleI+io?;L`?tYQe(TY{e(y`ciNruE*Tez(NgkKVamM&xIwX^FcR zV;i?hS_Q4X`x;5&x4tKnyXGc?2(8#XxE^>`j{7|QvQtD?x+a<(O_Nj@`U!emde2nt z+E3j2%9Cdc?zVt^EBe^7G11K=I%;-#jM{De2vK68FDpvCsL&hLt-RTh8OH4rqLVnb zvV1xoc2VNKX91i=^I%>xQD@ZGr)x6e$VZ-s>hrN#vCtRvX&iCFsYLGyP)roFR1$1F zqW=_Uq)k`@(+=^OK3CA@<>FwT*jT0B5S@67H5}TT&kZ1zv)&VW=r@-<4Ara z=%uKV@p~Dz7M6hZtLXifyFv&Q%h7|)qhAhzDqsR3E(U9735pOb*(8(}9MQ!)r4#rR zTV&qXDUgJ~Fr~|-j33;)D{(L1>RfGld}0pgsTPC~UousjT3d?7Wg?2Wy)AkCzVw%MaXvs^t z3w&-=GjOIogt|Si9jNyhB_4n>3{&nrK;8q?4k&jrm6wKeVMuDON(%QqN2%?tb}CT~ zNE(E}bSe=HNE(JkbuuZ2rVJvUdzuHsyAB~*dX(~oqWwj3=cNwgq281o2jj|N-*H!e zaL@5MarC1k!*Sz?cE*)1dQp-pRN^<4L!$nLM_rJmB+@)f;1P&A&!{A0JCFF9n9RWc zfnIh%-VhmK#-1{prUfjH6m`BE^K8X6dLds$=$7}cu-YPYMkL%~)<)T#(X{_H?kaE6 zMY+8psm`{YtTQ$+vmvrrAc`w{g8 zEK>hov^tahK-^H=!@!9AyIn*H6+2H`io0O(QQ_OGDmh)+k^0Zpm{R(M7>^Ju!)2bR zu?y1typu=io?P4MnnHR1nzZV5@tRGWKCAXw{P2`QM!!p<1WuC;hv_6P1$pDs9J%yq z>C985jsstB>*)@sEINxzf+pIcv?}`r_W`HENsX}@?3~6&UUt!Kp-adI8N2o-@|twC z&X_eKJFKRWD%?v9+XSp9Yh&eTP3m-p@c?hO~M^aM7HGn*h?g0nXyQ#}507GtDEj;jze?)bZ@g zK@p`n(xyb^1AOCbzM6X`mt0Gl4gqbajE@Hx>lZHIL=bY$6xjgDdXe@9NQ?A}@Ql%9 zA4p#i4{y&w>)P!#vpdE~-=90@=Gq;grBC5KuzV+FM_s`A4A%kqq`}X6|J34FQDe_} zy$di3_yp>TJ&wb1X??cNj#&+HV$cQ4kv`HObK+0WwKP{!HC9?yS7Uxg^V7{dgQ$C) zH7_7z(#~Cll$Ixx%*9qA%P4{KGYBECch*&c*MO8Js3?4r$6rOd2)ofcr;-pSLq6X( z*2YjMMX~igB!A`=%}$`7%>g(^V{iT;dO?EzMbO)T_HEX&#Yuz+ZQIO76+CViG10dL zD~f2VYSaQNQ!SL`gXT@(#mabDEOGlu*?yXy7vikUW;-W{Gzw&DJ|T&{RBY~2I(b-= z28m-bz$S12g+GNPdtG!csfbM;OkXAl^LA~Kb~-dcF6~^vBUtaMxVuwQC#F<*CUWAJ zR5mO+j38Qeg1zq$8FqHzX$Pmxq$W@&R`V!X6HMH4kcF@sIwjb^8RjzY1cGC5h6;ih z3R|BoI6)mZGN>s%DWKt)`j^_3C`eHDaf4=Dck_zwde9GD-<3KGr~^Cf6mpF3mvnyl zh`1^tjxO+17izROj{gZL$W)XQ!lqEl4E0VI%EI~yeOp$Wy_jrond*s*N6J+m+=Q!#{Z07@DQ}nCoZ5IgcPxRHUln40o7kK-Le70arZ{^b+=GyT2sXeR$oNZx%huW46 zn;vaBJ~x%|qiJASn!?I3D`5i_Q`Gs(uReyfOs{0zWJnZ8!0#e3 zv)G}VpCk3V+#D~>9hmZtIPTAiV&c7=$~V_NDdEjxyTiS#ppPmT_&6{cg1?QGzUE3k z2WM=>G=aiFF6$HT3WZc3RYz26jHUv4l%kagGvS35|Hh6L*{vAd5mSR{;z|EG=+*Le z^VVdV5YC>t8{vpWnZ?n`#0mRs5e^^lIg+!W3I+;vXi-mxEKE#s8d1gyi79RY^Jc?toS9%kg{PT^ zl&Ri6-XE!09#1qzRQU;c`60=bA|spvX9yu73pBbwd|DG zmaw`2Q$XsPWI_gHou}FSmj6Y7Q&+Tf;i#t=wX##V(RpXhMg;siWP8*)*?hnYQD9ua z+%A8y1M1|l6@?&}>bPR5pW_L3wn(KHr2DEk|CFfnlpu=p?4Z`49DYgxWLvb(&a8K= z4>sdR5ZVP z7G%JrsDld5Ra^*OF(aFv-o>3hDW(~DUAfXw02SxV_h(Y-=RLHjs1|A2>)CctD#Y1@ zjqmJs2Uquw<%E2HenaU7Bz@5=|2WNhc^YFgd_)FL?Y>> zG>N2k0{f)KvXOZGGBa^;;bPWd*%WWbj8bxzGakx;Dca;9C)F68W*~bO;{;eKlqQK> zsZ{e4vzEyox3_KKey^i1YH`LxZ3k}zb-sNM#?8B`Jh)E3=*7942k`9!36JoWK+X$G zV|^6RO+BSr;bvy|UFn>DOTWBLAzDk6PA{o7QHU15<1<<)s6cIYUVE&%D|W@-I3jqq zhUaFc2$60Q6p|k)T*|of6=qz;gd#XfzO!MJX@0do_N5|)(Ix3n4XB1vV`{D^tn(Bd4}fcj`TC5YvB!XtD4o9ul~IsudoV}w)g!wF60}P{a^d>*8gz1 zb^NBc{4@9`qRH`pxlOhXMF0CpE-O(}7KtBu_zSqRel1)}Ny$ce%|YEpr54azL_(y@ z^b6v(fm%>~<;upTS?FDgM~?uWSw81OZisOm1)`#1uHab8bn0cYRcd-#SGVhDYVSOq zNxvKXP(K}R5Ix$^J{iyn%AN=`bQtPaZs8^5PKxS8SGU2@Z(E?%D$X(zTFwmx?Ebs} z_U!<#(VDWmE`@m`O;wlH_B~H6SF2VsB^y7lkkRI}EUaY?LDw@cwNqATEOK64=<^~x>n+DCuNz9G%02n*}$53i)hbviA2jc5?5N-LuGAeRCFMK zVFKgBOEEn@MISuv8Omgha_4I%=lT#yKtsj(28CI;wPOafMA?+?f~B!dCAo2w?~5Y0 zCdGPmp;D%*v(9lPb5*^O60)^+t&-n;>Z&9Y0lRR+>bO&^eoas_<3a}`^sI7Y8Kul- z9+5%0$Y$A%Y1v5VEUUs{RJ(bpM|Fn&!L_DW<+}4c6IF<9RqCD=^TS>{B8OVSu=>>e`J35s0PTQ&`lX`Pgt-oQG_dkhY#ur&n0w4VymtMA2pz;Cb$`F0t_H=BKOdJ7e0r+K1J5hQv zuKCgj%m70U{7YmxG?=NHdI~Xf1s5t(!g3Bguk6SRqREV?ia(unx_0d39{CsV>PXe3 z^_pgnG;O>|=AOHZL0De<;mf!VN$&(g0r2(_Q)U3^)P2{Ks)plK-nL`*?JLG)krU>y_PtzqoPgv&YE1rA3wPM^Rv(_oNFmnl1RLWbjLw48)=`W*4Bt zz-XK4F37j9uxy6a-s;z=xi+`9XrWf%T*}hqBK|aZRe4(cCGg?IdEDtY5g3MXclv(Q zdHjuSXno4IzViIwo$mgz7!6oDa!|1DkbXi36r}(X_3~5{!#oRsaM_84yZzF;s2xgM|6i9s1t|~sHo?sUjUFk z3gv8Wp4J~A)pGD1Zy;8Pj_nwM4Jx{W5Ik1M6CnJb-^7{#%xD69IvP8*9Tz_^CNEUH z89QiKvuEt9*&Fwb!d<8q&3@!)v*)~#uD~~Dt|(4sFN`PiXGjCgu5eFgFX^3gbQJXY z8<-W$>|R04=zT`aqPPV*!a8+z`jD1jTd23Z9?2S}_aDt>&-etGJ~4urpP{m5&q#Tg zp9I4nls5A>thrkQm6$U6nKfk|AKAdKC0poA`TbFzU~uU8p6h9QHk>vhA?jMSzhu@- zT59`Q_S&om-Se0X^AuyKG72Ul+AB!S_JibiP+~)Bq`@0;3C+RPN6~(8mwWj47s>Yv`o{CLt?cFnan#Z z6%h~eMW5G^1yzU*gswq!We7IJK&G^nBm^yIcH8&UFP*Gx9Dxv_Np`YZIsjcyi8H1I z?g2MZ_phA(p@kUMvoUd?S*VBJ9y?{7* zG8WZ1NyP;6UF9AXwL_tHGI!rk!+MT%S= zJ>tpFIjPad!t$y$lA(%N+^fa?B6QhHxj1s{7;348gLo2kn^7!)BLq(FuC;%>z5~91 zMRQVQNMyM*`!{7Y2-d;AaH_n3B7koLNQoPn0WoYRxQN96iz#8sc*=TWhXtZpub{Q` zg{hw2n?%ssktCt%DEuKU*~uh=j)xnSF;6fPF2H8}da+-;)nLTB)#i)%03*M`ij9X< z>j-g3Zc)K>Q5lBhvP^%xis0aybsu8s2^uTXMYTP(+PB&+J}OB@@W93KkkK16sHf% znMT*S%4X72dPV+GxRp@y z@GuWs`Ca=Icp3Rljs#DFPdv=)7KI=ga=*>EhsKzo4gg7EtnDChanjL1n@4sbUL$;{*c>>jOlP#)JaX0kOx4bxmEV-_56f3lOK+iBSa0DWU>_Ug^ z18oNB+hC^W^gAS)_lY+BSWjd!^V)CV+A=zv;9gF3Gz6dIxi@98PJUYC5-y0q&Ha6V zzs%1^E($rNz8LXV1#G1yy`u8x`lBPKNb(XGD$ekZ%7`IFQ> zI6)PYwfuGqQq#LKJR`beD5OROXPgw?KG9eL_3fo##munOF=a#v z!S5#dJXcazBF&b(OtG6aCuO%98<=(&NHNIsnj2{Dx>zSBjBJ{TZueQe)nV3xxUCQ~ z69CM4fCy^GeHd1YgXvKeqDiO0ZBuiqJ;*yWSQTc208`~wYq`(|f}sYA z@ly5D8csx=*U-AJ{WB@*)+1+0ea%SK*rx7--Ff^$M4{kA5lQl@KprQWb=y@G$C(t1 zLN}@0zg#xpT9P{jl_t?RrDtno3lgB4U6py`n%R2}ZD?O)l#B{JpS7D7x@dw5_e!Ab z8GanD?{cvj?{5D&vMr++XG_#U1~SOn#(+`{`jI`Nd#@wVEbUyMO8Ul?vPP2?u?T7G zrVeQ`!c(&7q`;q9n7v7mc?RN z1D>RfT}Rr4*+Q1A>#Sj*&mMS7JqeIGZAzb6&hf1Xq}-*{+8 z+J8WzmA=Ja|C>ZXiq^98-ySblLrYao9g(bu)&TzT9%Z3puo*2c&zg+CPC43NKIDk9m%{WT!hnyk9RleVMrw=)XM>3}k{z z|5WrS*va;K11#AO=tw35gP}#3jO1fYv;qjY0r_*0=X7-BlMT_vQm1NzdC?&)x%vLW z!SasgjwyI{#fD1ixKx&wdE}qUQO^B}ImIS$eYoRwAze1ucBF_5x2gI@f*k8{*Wdw=@m4PVE|)hD!1=}3 z?8F$Ltk$Yl!f(z9R`+d!X?;b@J2FvVO_2#kwZ~GZRiXnL;4F5yiHCIPBu07G7owLl zB~blv9l-76>BgXyXTtn~9Sw!PUd#tkoy!}tAjYlNP|e~c$>6%qJaI#O{Fhd+(Di8d zTjAKpm8R{v;5uGr;JgjoDf%ZsH$`2PnE0nJ)1VAwo~BHU%RUtSUf1$7pn=zyECHAv zIJm(ZFQ{|sle2N43Qn`FQJoU+SHSs<+=4FId9q^jfQh8&INeVO<3qGN(vb_~*XZ0Y zGHN^l%1Z3KFDSpc7GW0#8!qvvqCbY1`>Dj$V$v{FGvTx5pT_Q3 zjFWq)@d7e7MGp#9N(e2EB8vX2x`#vmH)7G~ccw8&9^xh6v5zZ6w%w!s>kI`QE5MLP z`0=Cc8`Sn+SZ#*ih(=q-f8uQaC-|R*zEZpzYZx`Df$Jt#-n zES!);*({x)Ms*d_zExW0S^`=4Iu|Z?<8V7_#V!KI>ShDX47$c*6QdkgFdyasX68u5+rw$uIe)JhHY)M5kBLhLps+~DAIrAL}- zrTTyKPq^``!QGWd&S~6?29*%9!>=JAHxV!Uxi>&P3UbkK>r52vUeQ68-= z8>nS=%ZC?s6BucRl8-bE!bZKzi_JkbNSug{50ig($1k(z8yOe)lr9!{S05P`h-ScV z|7PN(!xzhNES@L{F*;EcN#Ju~3KyR%QRKfcX#6683d$t^=F=DpB<~AmsmvK=sqESc zd{!wUNiUl-f95GN*50Yq>cM=L%(EvJ&vRhUm%`wkF37NCO%0NARHiJ$Fub{Ulq-gi zb@GXzjgG{8<7sTOIBuh5K)2@289xi=QQvinE8TR#uTguhoz{ZkoYtawPZo$B@YNCe zexD*I%QvUGgn^3&YKhM~y%J0=o?2j*&kHii7KaGm6F%c*J;sR^e;D-UCsxlJIt9zb zMBE?=WFzPB1Wh}=2FDgdaBvgm10T$ts^i;t2>vMr$!IPMqnpxP?3irsSH*h>YFcO> zB=DO_4hoD1X(vSmUt$Hzqc@o{GGVJL^l7f9RKtULX~ME-=qN5<53M+j2K42c9ggX_ znQB_O&g=l{9n@!zo&er)1M%)@DbM}d+9G7Am9|V^lrAHhhHU6e@3nS;Xfl%>GoeC# zaj&SlMx5hH(1iJki}3`A*`axH zR#_SHJQ;YBjFkq>%qBZ{aN8Gaf~$>GV}OiFzt~zkdsr;YG!|@(e$r094aOx;f5z1I z9gwRV(B|j1c6UbO=8Ddhj0nSESWBJcLDE{mR@RV!$s3dQsU+!flm=CI#|;k4nPj*6 zP$Sh^ri^ea&YRiw`V+IW3E!mqx}sdLPD05{*Sk>em($(zfXw%;4JmAlrLP=NSYagbG5ma^bF>5Lqmm`^|5gjHjn^9`8n); z6(cb;i0K^nhKpT)+;T&vDs!WT$3v0aNGKDi_iRb8XJq`r>e_tcXlTP5%V>JM)TOw& zL}ZExLD!~A2m>t=ucXahgAls6LG%6Z(T~&QOd)?{IB4pFiGfVx(@f!3?cROZ)Uu|@ z*!xL|Xd1fwJ^RM=!8j5469_t0VI>?2; z5Ki?wi4`A54+vukZAxLu^$aN-L!BnDo0gm43@U||5ibO_f$t3n2gElJtr&zOY2+OE z?2bg@`|-Gh2dr~aso9#=xI_Eqh0YdBWo#4TQfYzi$xWlHW5(`}8=MojGEz^Oikd1F znuF}K##tW1B?%b-Ml6rM3~rup$;@9XSW&KAyAqnRjVpOj_egD@{*y=#15Fs&hV>gT z7O+Se*%aI5w9K)|9|(|&;iVnw!^&7Fg@eIJu9|w1BWUMgH3j9=8%VcUl)!Zrp@8@G zRgv>-PIf4aE}Fu?mgTw^4tJ#;sF&tociBm7p`gW0>ykz3EQsaJDUBlDCAhFcO z0@D8eV;~22mt1NL>aA1o2RDHT`t?)LlGANUs;#7=ne_}BIC1ppoh|eGI!XsP?3c>t zStvTbOAW8th*#Y9MxPY2R^YqfYKCq^<$BlJ%4V5`M%rM_-dw7ZT0D=w1e%7_y>;YY zlQomOArd!oyM0U}`{g%(ZdA#8$F==^if>Rk9{rezy6sR^>H!ANZmevkh^niUGPg;6 zH8mdcjY!wG3}Jeu*M?52YI$XlFN|KwE1N6>k12lZFNgq1ypq`}unGLLsg((-bGq7t zT}?B39rb*nN{2R=36)yWXhdtqRDYt*pIBX_?YTh3=gPrm%hIr$q}@;ekoemLXf`vB z!bCn3G#Z59stx1_4P?*JC*XbTnGQxi+IRy*fS*SYw8h--1o9TI8cJwTMSn1o=FqV? zk_sh1<_ko|Fikm)74zsVz2JMj*K8$p6Ox-XV$j}0azIwX5?euM zIY5}7rW)wP&dkvlW~ogI+mR8C;g%HcuvgjL(L&#)*tM?@HyT!Ijn;P&jy^t1^(?53pAi#{aGv#o7;1|qDcsqm@`xZUo%TC>O}Z25x9 zP*^tgZ@*yyCcQFr9S-hc9OtIiq0dq)quGX-rw#gV@7B>h&M zS0i>MmR6i5Nw3P@JUca56>y-#nY88I!MS*UP=3mqHH{Nn9 zTC@VHiErjclBp1&pXyU%(r1_wK~XUzNq1iek5ZF7l+eKt^F9D9h+zv@5Ydb(60%oB z!8O9*rHT^b;Zf%tUzPF%uG&{@_Ds*i?M?jLhzsFX)2o{{ud0RF8RF^)oMT(l$R0jh z>MuEA3oUGF)8GhQ^BKUru?yBhNFKcpMcx-e zXZeHGK8P#O9k?Y*ar0->WEEE(qG76yzGt(;3UI2wbxFU=gb4ij?BEu7E+9n@IIjhs zo2~{}|6-tUCCV~&D{$NnjYf4#qe9Oy=CG1HRowCv`B4Rj>j7K2w%NoGv5{_is4dG0 zWm5l3Cp5@HNU67cOl?eyJxn$IuDDM`(!C1aJtyyw%z{~|&W&!@275n>Sne}dP|>k$ z{HaeKXZU6K)*^n7npt$mfL3>H+-4VD>V&LzIcddW|K{($KU&BF#q?_8u}K|w4@_hU zR&G6>Oz-5)j>^J53sukM#VThFs%zcxl^>j^!p%W5S3!N+@%X5^4}*1q1`p?O0IyA1 z1(IyQ2N{>w2ES6x{2zV98leEs*#6{V{SG&Qo=q8+c{KNo6*Oq>^c+4gyh=3!T}EHc zdp&&nuAqUggIS$E@=9lWtpz=_j+RT{7IiNs=}dknbl9!{N{PFDwZkUHuzjlJu9ds! z_-i5En4*sy& zcBQkgsN>unhrw&PKSJ0Fdc3`uua4!odzSa{rH1=cBShKs-q^e^hDo@_QjX{^zU9n_ zvO6AJVePlb*~5&_xUf6Q*aNb+*jqjL@37u(a39Yg(~9_@W&}EaB)k$VZU{(|Qjqyr zB>nSV!UFsA!BF^)_Vhu;m<{!QUKOG+`S~?KVJ!}h8ctHWyO2zGg%BT6nW|^7kGr$e zm+{9jBic=d7{1eI5|+$?vY)O>agmEfy?_W0(}_+>qZ^48%G5nNz973(EdH(gjXklR z;9pRRm{JAWZmrX`?gJuh;|VcX>jlR}?*Eqtr5CgWOcy8{*)3umEpEb6Lsy;si>cnhj@vUC1>8)Ip$X-Zg5Amz+ z`(3EX$+PT@CXAh4t4I9Ivt6UgHr^4=_}mI!t&fpXh}sbyaU(bt$ZG)qj!yp$qH2#` z-9OE?{GkOn1FFLFIx#X{$={H%a6&b0;o3SBX-hq0Co{CC#!|b1vjPl|~%k}LN zDy}!xoUw{(%GC)HRZNqUwa736Sj8Cym}3_C1dC&%VH(w#QP4<5q{7X$MC!-x?& zRf}28(**z*hBNUP>sAbls?@n<3JxFtiBH@~YOeW4Bw@F=5zd@fj7T#PHV3-ZX&RWQ z(o@E#E{cy_gzO$jZW7hrJD^M6Zvv=1!>GWY_Rm1WWSrncN`IuK+>ein=_H_v-*?e8 z%sE+mAZVLu@B8Z{wm_9_Vy5)5O>NC^KBu<|igSQeNoH5}?k;Uav#|`>R}$CudO2KT zC#exjD##YKsh9&xY~ZUA_}85A)h< zd*#UA|5Od)bwqrDB8}*FKzzm`^@YRm{B4@)J%Gu(o0M~RA@3DA%@&52FCUnwBo{9Q zAV%#AC(D7Iqlz|$kc6zVvYIzVtvb?ZsjJtn*337--laG*33T2w7g;fn40V+kL~|Il zC#p4(kUse9->A967486YI4n2x3=}XK<`1$mmZm5yC{~{e#9RzoEtN?8D|PG<)?qxU zFN9djf+4OiJ-<#OzPHy*vd^U(u)c@9B7?AEgA3Xe0SL-k)zhR0(G)~|F8n}Tu@Mis zj3%=3Wax4618CZESfN4pHnps2?=0=HHM`z8E56ysZYDw0af$|BR3ZJ6bn$}>5E3L; z4RCNUplPk~bz+($li|p>{~5(knxx0+ddXReoFb1=WdOs-s_K zSo{UK9M6hQXY07>k(03n*IJHOfUz;JTFBSL2C=$FWE6(4Ng6viOJu}5^<#B8KGs{E zIUHz}6uqt<17K_FdofAvC&`9WhcYbKBmgkP zX)Y?0x~rU4)di_9XWzS2z@z01HMZBXWoB;=`mGbtc|=#_x*(3yVev!vF!*5ANQqR! zb5e(DM}jvQY8>Qo44DS4-mL2G)BFf@G@eP*J$6BiD|PtXl5C99D%Q3+wPBmQ(4^^( zm|XXcbxmGs$HF!#ia(hveKYTU**_{4^gxVHt2fn27ld`@taip zsXUY#_V965VVv~nA#%J*M;Z#@m^*JU&_~gKdx*^sctdBT4#$Q8BGc6d0>g|qjL}Dp z#=9!iLcF#cfnrpJ3n0k7%_|+%sp%uL0@&eo(A6jJH!7vc*?Hmi*KedPLf$@feL6;6Vx{8I!a1&FA5Gfq81#4VBt3_@2s{s9lSbA zSy3sqq1!i2a%3Y-(Gw-VB&^e{x$aa)m+d{RDHfsYtBzkAGYiexl-Zd%!h!f)M-^~6|#L0MGEHL!}~^$6*M^S(BG z&2GM)soSnTamE8Ni9rqft0grnILb`KZPp3E=LSaw{LXX`@FxSI7x@?)5-?g##IkS% z$0%h!m5SY@^;6%vlj$bjvG^Y@w&UYIWj0}Pa>nR9>?tvVY0Qiq(;01v19T#=6%!B} zJ!&M;dS&6l?3Qz%@}$F<{#G(`9WHL6F31niUGj?Lu+%6?P}8mDQ8%EQAI@G{*A+O(jPdAisAM?2aY$SCf*`s zy%=h7h)kn3bjh<`fNTznb-o?uMfCZR%$5Ss7y3q&x5>5pl}T+30I0-28Vj&wQXuB@ z1SSq;XBN2*b`^yJM9s^UexRDmhUpS#<6HXLQ3MGDAeFkj*3ZZlTq_N5z5LtV43VvA zM#Fb5lz!)e;Qv!D{2xO7e@O*vxf95YU!i}vNWW8IAAiR!v?r0x3q&CAOIv~wvQXQG zGtssX!arsJZYP8xdtF+3BvxepA$!>8$#tsr`0?T`hIadhl)hkZroTG?4h0#7icC$Z zra(`wI5T3u3(p5gt+jVed>blpBJ@uT$mEtvG6L|h6Voq0vHNV7RH%;I-Mrc%i znYI;X>5*nr7Xb+G>Rl^7(sW>9{!F!ifncsekS`-v{CyNiGmTpGAuauY$|iRL|GFKv zV#V6Vy;Kaod=vJ)`=!}3^19bD37_gJb4zD`5bVzpPjhav33b@aqh$e}nfDuIaN9 zdG~4&dfVX?UZmQFuzvnj9vadh`19RB`^`jtqdP)vSVoZv7s+YmMPqi|Mii%EUnNLZ|FbwhNZ{&JMNQ#5iFR zN9)UXI)G~h^{vF~G5@#kS1!*PJ0lX6xdg%UVdv9^`*o{nyQzuK$N6y1&x*cg+y^(i zxqxb;4$^&Z3{&IG1bdw!00x?|*RTEf$Z>|Mkrs;m^hh{kFQov?KufuZ6iYg=X@&}Y zweg!wAXWj$GAp+@eWZRD00RfI+e}rgzcchSV}ihiHqWo77J`3AB2p}X+?`W?9jAa6>Md(0@J@XGec zwqGaevV?Y8LfJ(a041D>Bc6(f1PMnzRz|W%=K-hLI$lslOI5oK=a;dSHsC(1nebP z4VF6OKDD^RFCnM1k~iZ6r@Xd$?JQtp=G4`MS_+~nj1FxG8^$oZN-V8i@kEbY(N!I3 zVxX*8!7P~cjp(W}j)i9f#CM}0HCX>i9a;I zI5hwTb}7D?GR4mMjHQPT9?@+*F5XIisz~FOTn`k1+h&Vlh|E>JWl4&N-*`n3 z_|Jfoj+FlNJ!mS9SL#q_6ne^%IC54{(E@!c3}{L1vw;vkvLRV}I9gZyX=F)cP}lox zIP{@TD{fi(u)LPAaR8DaN?=U5PIg{5k4OlnFwMvtH1MD~wuN&BUqB6vmNN@) zuqa#57Z0+A1GiK!At`sF!68OnHtbL4bjnQ9zth4SRcK!Z^Tq;Q0mGALZF&K{E4t<* z$-#Y?ZI{QGlcwOYK~}OLiaiZBkHAI5Ns`dVEb8wVq($}vFm|wkpz=1b%L`_<3S^}w zxNkNIP98#*coG$vw!+CdD=AnhB_^SC_q2)9c(<{}G%c56{w9u+{Zsm0NPcM(RzzA; zFi}YEtuuQ`DNW%)4!L0D+$q;yWkn)MO=rn2GSy!HqLqp20D#*t;o`ThNeAQA{uz^2 zOBsE()!Ma`bb8G1au4qZubaxySaA8i4MqkcLIiQoow;xjM@tA zRC*cS0z0i)E4}P#T=ZxLU%^o&L=obn@u_e`yPbeU3lmyMvih7)nYt3DcA}k7yTy;~ zWI1BG3!w~}oa84GXu?QN>rP^;LapbNYem~k4xN}kNaeROGanUMx`mSKJm4%Z(#!-x z7|;2TWOjZji)6Pr+l71zX$3#IQoR7bb?$uO6&JLH9_-zjo8t`E%^e=pV@%C*y`_gM zs@2=lS)m;Mj88A|vOHzIw2nt1@!)<~J`Ujy z?!RhJ{>xtf{~9O>+c-J=??(T7F_%+RMgF{kxr-kLCT~$GGsD5*;Z~)Zv#zVh9R!FT4>wYT z%)t>QLw4JrvOTZVuhbp3Ie&M4lK2j?=?!PObWrT_Ks-sh@%05D;>O?91d0+}#NCtx z4ij_R}uO1Me%=|H>@aZ&GLfHBBl@}VxV#|C)(l!iUnXZT48Qh{6}5e$C5r++<3*l6dEjfEVfpNL_P&djrxyB4<^R9`*6a+AwyBPI&KxbU7>Hek(6M7?+}&N zkLn*ezKxJ=GbDQTzLp?X2zH&mG5}2k<(a5Ze_VPf@DnsUC?x==eU`s=i%M^$feRK3 z#EG08=R4$8-z20ar6LH5iYPTOiS#bX6q6|=`8@4u;9^rNoxLY&6T;*U!Fa6I@oDn zR0fzBRp^06I_4CNt9gN7(|mNTuD093C=((YO?z=lLHAoV-J#c75=?LxbB?U^>~LOn znT;36(bWY1-&BQ${^f6Q>&~;Ep+&616MSq&EoT9{m()jka`l-r3K-0O;rHCX9u|;g zr)cr}Qxrsm7Gb2HDw;uce-o)?$(S%piKr|e{hgPs|>CW-z4}1+S zVgU^qk+L0G0K+KKP%pENu)yy=f^i;nt?V$~>EZw#M1wTQy%6B;}_dR zv$kD&inS=yo3RZ4Sl+9m3>WI0spi6CEC53t6{wM>V^(?EokbWTTrPRNgrQZ64%1Cx z(?5@hHEf8r&IUDamhoa5StOPjwidZiMaQOS%TyKz&K#kZI_1$I=7a>=N{qeuq2bLJ zNV-lz$pH_Cmj4i^+^x$9t!gZcBB){@uPkrxqTDD{ffy+{NRW_dLEvrlJLc%Rp35NB zU@$tDZyh1mrplQ;Vk|sUe^b4ouw-HtgE?zce_q^66S$4v%c0pM{yYyserwkMVt#UE zPG-DCjh+5)T;ImQHgs^>{yWP|l5}FUQu3)O6}!un$(S6656^JFk^4!Mc7mtZl{_(~ zDNPz#R43%o0TC7pHo=C6 zd;rrSBV?=VT#+5*Dx}R)j^?>a_NeE^UU6FstdgOg)0nLWKAS4HsyWx6q#WD{5X>6Z z1&vWd=2vt1sfV~Ce(NsCjGK-SI`u7rf$k4~z<$HQe$qHRzl|K@{gQgXXpl9%C2;CV zhtL-2zb9Iq>)|}%^ku5ax*|+<24Q5_;`3?0q&sTB79}3$dFRJse9C1t|LR-$)HxVt zjSj%nT>rU{sZLvDItG65$VDSITw@2G-HadgE8iO(?XVV~O){j$4E#P=POSb;zhz58 zfsr-WL^xi}lhY7m5B}pDXZN5#VT(*fn7T$I!V)=W*wRvYG2<4EGE_l<%OCCB#{&HX zPhqf-Cz!uU;2r%KSf@{A#&s^I8UMTraqBoBq7`)LRz-LG12A33z^QL6J|O`aGYM%z zY9g;DW5DtSF7rvBd@sARpOcsLJNV}(yUQ(YO~&uAk9SJ!1KoYLFHq9w=I7YoAqnrE znR~o+oL_N=cR6Z5ztWQKbypaC!kO=N)qTH)Y>v7$M{C2oevx0?9+(Le>-7F09^_9P zG$keTyXs-FQ{hulXHtoVp~tkzQv{4~!EBGso9WzC?pDQ zCvci&$+oUFd$4%RnCQnYtuomZ(<3R)NID4@m{;MjY82Z(gZ=C2z@*$?Lh4)2c=~;8 z{>Bacuyrt{b=SAHqII;17|^e-jl-`PUhvzZBN;v@ zMM4A)>?^R;D6|=ohhOiEyD{AE06)tORYT1Rh4G>_zqpuoPfbm*c)NRhfZF*|W4U9U z!=h86u`oazOm`o#Za}#&{Kc&O)?OS@ZvMS`{`DY&a19j@xFq4}T=mw-i$~Uke)ZLB zI^`E5Q(wGDZ5z@zFp51YHZ=TzBcm)zci@E)7IFKB+KCaL{-C>zSQ_P~X0TC8jPYm+ zt`>dl9$m0XRKPREggpbq09_IVq5Y<`F$YB74%4Cn*q#PSmQzliiiBR!B^Z%1c&u4o z==iMQsvGM28Fp3#Rfxu{H<%H-prRz@)hL2XTwXT?MkFp46cg=Sl{MW?@>tSY)8Go> z99)B}eway!%AY{0F{Pf}#0Y6BENZlJyU3~t=CVY7z}Yv-?@!%{_Y_%G$IpKqm^2W- zaPIFxY5kT2vi;|Q5puS+Gj@>uC;ZKkNXFJi&cWQq=^qkX#s816cM6jSNu1YKDvwLHZ9-LEcsv3{5+>C)FE&S)gMxPn)xJJc(oe zQ7-w}(kel}J#+lYW-R6(lm^6K5TK(v zil)jK*%%>8Q>M`mjOrkm;vg#u$BuCzQmEmhyNqF)Sbi4MU1~;~?NCv^PN(*kjzo zieYH<%1nglKdx2Ys%xr1orN94o-$_?rY38<__md@+lhqBVExIe2}nR>GY?yR#SEIW zJy#QUlljR<-Nv?-Vmgh9*`Kkt+rHr@p~lj2-55=)%&|=VfemCcafE`8`3K4-^IW%n zgnnYY_U`jNW(+EV()J2|5znj1d&e6<`)s2T5DVmI5h-XAz@B8r0b9jX?3Lf$9 z>#0F_1Po`pWq50ro*qwMa-m<)ggcRz`24^mVNj+>X!K$yqyMBjNG2m$w!s+&q5SPD zFDcH8SO$xLgw-4P!_!Dy>|Yr4+YF9D6h0*@@S?3-tP)kCU!jf7fF&;pkB_H+5h>Ib zM$~itUXJLH|JJ+td;K}uIoX>SIomnXi<^AgH(MAfINE(LQ|Et{oXM)X@;Is(zSCE| zt@w>59fz4hk-ffsXg7sWhKM#DmqK;Y^Lnhe>)c=de!Y7BGwJC8y-K%+Gd#zi?%QTF@6+jj*zs+DVDyGkO_#f?52>PZ zq9#&Rm!~N?=nl!Ewg5ro3DQM7T0r%OsM#hY&ysWf^pMly8!j@5r(B!r=hV3^%W*IM<=4c$2?X zyWjY=bUxWtwma5 zen9e(%Y@!pavKm4u|11b+S^P2W}~gF<$@^KiWhu z87TiOMFv){K0{vyb*2r2}hPe(sVfuY&+#^l}zQayX3E;o~UnrXvt26^r?P zORa6a*@zg`Qr>neeoyV0nKNc@U7dzW%sMD&r*;cwj<{3+o?}9;vDgEs37$@1TZGdM+r_shfPhO}J6hv9*TLwRY3QfgJqA z6+d_E?SpS@=?tX3s56e?gF8tw_Tb8pahbsAB096_+VUii+vyjlE>PXq_$p*o_8)rr zIy-EWLlnDh0y_tOdgJXX5k8MOF8S?t1oy2zyE}4sO!C)@;zKJ_3U4;DgmQg*p1FpI z43Qb+vT-PsFRK3MQDZ+cio+X?^K``w)L)}&%vnq^@%(p*wP3HQ=r;N&; zZxTgf^Gp-ZIS3h2)?dK%NtLjB`dT95{90L?ZgKgfo1XYXuJMSX;F=ttA-XrAU`FIp zN^m>cW4L~<j(jk ziw=)3uYAJcs!5lcz?jAZM%DdEK7`MbJWV^~TYz{r@<*ZSnw$~!Jj z(cLj8qCQf5K61AH{tSGH$L*XE^b&{(y*Nd7eS?qL%*E;HvB&ds!fA;^TxunW*{L@l zZZ$t{(UqGPtpE^rjaiUfzgH5JSz%u9;9&cL#Q5%+Ait+JxTB7~l+`cX77(k6&%)!?w_D%buVjeb(dHZ#J?hP*3#Zzqk#1c`GlA7Y&AS&8JM#9!GRE$9&)(mlR zFW@5BzQ?PQ*{s46lZxH%Th}h#BiA_ixm`C8ls~L)ZP0I^B&KEKJGl-;*CU@j7*B@c z&{65(%rWL}KwY7k4zgYzo|Sfd_n z@l6hp;UDc|;iEy!M>X-$3~~vwLC^0C3ycD}mlB+VdZZFu-vSWXUTQH`UNJlh3AO@s zs7KKRtDgas%WV0Oy1t$0p&uB%u7Z3NqgB2b6mJgL+w`Myg0{E&uA3Jl;T}g!er&1y`M={Z4zlAmqV~UjwaamKYBp^#4 z{M@9}v*&TW%rB#h7rc}#>P$)0j#IGatD@?93{e`y)VXN)MvPKZ;&X&a0(DV48e2Kf zbszaL^(Of_QhCv>bA@wqoJ47d156UOsmR}J8MPTAOBSkn8|sEBl75#fP3O%l=g9o2 z^67%AzTi|bO&6onqQH$>N1dQLbQuYQQ^_*#J`icJ)@jV1zR)0{-8IA+#}b>4S$Adu zmu=UQ2~+$$HJqze0`(`=?hDXsFt`2<1CODWE07dG>hfwwml|y-H>xQ-p&czHXi%Mz zx(xXqLL)r$_6Xf zwX)Koi&8Bk)#2fy8~ef0=J1J6nw_)M+j(>ne#s?QJ8>#J1*}bY0##gaW4eIxIdAZn z^Y~#B+SIg3(+Q~A2<$w8!tR{Ow~nf<=9@&b3SK^$R}+C%8Co5i6Kjvb#Ux+iQKKyq zpQ0;-qr&lV0DQ|#E)7{@xj)zN_6|u$+DMKSlocsy4FvBG_JLFO1SR0-lknK&jT_NgN zU90XhnDhs8M=2MKJFeo>U789MD+5_r)rfbde%-DB{pYD2hS^^xdtTX{LtZk#Qd6{h z9l4#UOnN^goV=xP%5P3%r-2FdV>ntMw;TV0$9IOEvT zbv!+sMCc4^bqBW?#O>Vo#!%D~Rl6aphjU{t_cGSnS|a^zA$e6uF{;wR5W)kExJf?R z_R@lvOIpgb4)u1d86)fibwx?Fg_UC7iBB0(cIapl@yzI=C3c!r=62L22(kIGFCPE( z43Muv4s8n>H!E@iqGlW7*4>39X(!$_n&ldq#kh`=F<5dlwalisP2rf>?pI%)+yKj#-FpUWS$j(nkS!>$F-lge!$r2`%o~xS zRwEtu>Ij5;C#lL&Hq{?YF6Y)vU1wo^mJ+6s{favzB{u(-s8`qNhH`(Hq1RSYo2xgS z>6|;*zg1O1eUdYXimvSo-v`1oP@QFpoqKrs3VyK-kJujz5sgnA!mJT^T>EooUn@%# z-Zuu<{U`gbsPQedZF#D}z6sEsdMkR5X{ldes6E`sjW$oX`YnrZ==DB))Qh;-D{_~9 z;oS%90z_Z&s%-__Nb+#RjYxJpajr()NoH>_Y+)Q) zJcy>s$?c5)>KN8VC9r^xPZyB62=KfY zs~}ofj>j}&Rk!Ola1+QJJS;UMNIi%NzQfrZzc*K#CaU}ZNu}f$&AbERN<^ zqz5G4F*Sc17O71GR6JDs4>Byb+_TKENyvNiC8|BKSng9-aB-?5OO4oP#%TaVA#1=h zD4Aty^5v9BcmUZ5BK;#({fdlY9pQ4#s**sasfZb-TjUzo_ANPKM0y0@;VxQd6j_HA zD)lh0)+-5U2b*WG(9#o%keO^J@)fH$7fic zhdb#baW>tGe(mv)Z{3ZQvnz z%S07S*f#S9lkAVw$i1-o)04>Ja|g_FOcK%RlRHL49FD6l<@&9pI0(M`NMT&L!=(lJ zFoz?rSE+RP=E(&w{JWQTZF;*y6>Rd5TdUh3u(}Cuv0iIkVU6-r#a%>z+B{oYzWvD) zN$lP)jr34o9FD#0-xSljYv5c#AXBx@Ca~J`r|*K=erc~()Fv8o;^`4G8yI`sVZ>aN zihqg&F|g_Lk+1XXpj0twtU9KH%$v zpzuyVkuux^WE`YF@x^wm4zgv#*dXtyC-3V-Xsf8!|SZbs? zjymp04={8C_u3Ca0P-wZP@J&`9i;^xXx+~M(mRO`lH|n-*sq;cUOP_Pjzd!NheR>{o&MAGbFPKbH*QVl#vtFk+-#dD^pYJ<* z{!C6c(DQM^=i&A|7){2~kGAR$12avJx+@H8V#1GckneX!ksI?+?$<}vjJ>o+d0@(q zxoZux8+$7cw-|eC4>L1$Q}25*b<^)_V)Dn`W<}wH)k1*-K|pDK8?s9T$FT}g1y>>~ zMPmcIW4-~ehA9Tyileq~Rm@&CL5jM74px61B<)F^ZGoukU#fPq@o>5l?}mCKi!gg<>cm^5q3#^@?|}I>mM$0);|?V4yiE4#)`Ep~ImtHG?1BT@c*%(&EzM*ufmo z`LG5{Z|Vs6V!Z-hh~&U;No7E98KMZfi4G76W1-pz4hrI=g-U{Xz-Yrp81V+9;_&xn z1wT-7A@3nJp@yp6OU0hn2;RGJI0Ii$8tp zS}p6iQLgmYx9l|5gLq?O!QTIZr>ukTJ*}S&NWX=|=FARP#!S{G6^{@Bdn(CvuME^q z7dzj&%P2?3(7j!0mDhwt*W+JfJ!2ie{m?om%c0U+*l@ zuzT{@mZWZ6onf+*6Dgk=(hv@3gB^Ca%j z?WdQ!h1}BvM6ypbu=uZLjXLVO+or|kz@{cN<2>8lIp{mO0+=**B3a-a0hI6x>2}Q}Zb@r+ftq#GG z+SfYxERT{~^YRw&GRoO|DmK(pevs$)lf%#Y&R?>Vqd2K*hytcwD!B|Q)Fw;>QY<-4 zBaM8zB4#d&N+WV`72z_C-o%CA&&(O2Fqh5&;lHC-$k6OmCe$70s}|T ze#Mm`@D)ca-8wAiWJs8U(Mv5p5UKwjlQE3EJk(k>1>%N{FFO@ekS%dy+|nr~yUdbq z0kTYJJ9H2Ka0prRNU(h!R*k$tMb20%#BvZe3xO$59DInRQ>?|b@@7K(#v;eFd*huH z&B88!)O#i=r09BiA9gHa;uCPngKbl^jMsy$IcvI2s>m zMnX47PEKb#*N)dq$IeBrm9A4K#|DXAqmltKCk&=o_DzkQ|LpYsT`Jzb+(a~sm9X<=r=wt z^p=V)Zrn9moy@(o>YEj)C_~_{c(p0)9l^h{GriteJrhFwTH9EC;K0H%oAV8?BI-=k z8fWaSxdm8K@IvwTjr@FSWB41iabreugAR66(~9ml;Pb*gy@&td_(pzoOV1PNx3B&Z+x4^Qbe0SI2BMqlP1a^m{#~ykPg(y`_5pRt2CW%3ipBoeb z-tUwHaqUD1b3o2Bv|m7-pOsqc0>=%7loDT?6@*HnBis*#q~=M$a~^&ZNEhVjD-=0G zsxIWG*FTC=O)G&xwCjmvO8{VnWRI&I2Hq9Uf#5$7I+>AA+jHnku4SPIY~ZXzA=#4b zk|8Z8*fT>~NopMX-w4VF;oB3^Ov$Gm+?G)TB=!1nox)H^HpTicNnjFd{eu8VY~TO6 zAAa*m7ex9BDT^1|iu87ebd@FSB-pQpBqp&c){jeKO}yKL2Z4Vh^1_EMr0?6m;lXnu zRfgiJ&4Na3v&0)w@o_m7PQ!#b{Xfci5$u zO5VMNf0bVOqi(xf{f%OzA^!1$;r~DJ|Gz~4pOu4bp9_aV8?8tToY6Y7tGbC1;*i3o#j)nK%$a$t;>p^DQ9ag@GgkljDkhq8kT6 z2D7XNH~ySwk=`hh%|MV4k{lIlkp1iQXTdzZj+O3@SuUs3)!G&B@!w-9&nNj<-k*7z zqOhH|J8mHvc4halO}z@xurB`jXqc9D`6(Ed<@qU?RK{h8AyC+s(fP|*XHddb%!`>Y zP1_2zA>Sy{=#X{evZ)YD)p z@a)i%kgryR_(*qkKO!77M!ADKrANJhZU7RaRX;IKVDmu2e+ZWVmknwMZQ=@`!a=r) zj@k%qqxI6@K;~gJ$F)GeO8j7L)g8qZ;=>ZaeGBf?9OVW|i*^Gy2*1O5fW$<)>;9pP zjdG_(h>zk}8rK79K=%a30FOxMM|faMI3VbLyG`&R6!0QVcn#k#q61-4ECIzyasVuJ z1z8}2Hg3N-xbTt{*MoeQ7e^lKtvSk{!4Zs~#zA|4={+*o(BBoIF7vH4kSgRGi%j-6 ztR`)A2U3~xBeXn%LRpWB8lTUGO1L{^2T}R;7E~GZ22vR`IPE2>T*@K0eEddJIeFig zP@hE=R7^%S99%{<*r+6fbbRSWTX`u=6qnDgVoivK$GC#CKbzbbkI$q+tkb$8xqddv z>l@M%n^6H=SaLR)R$iU(;R4Se8SyHRsiPC4C&$F+XPRjX%^dG9>)% z|7&4HgjVRuf_SWSnN-}|m>pGwEJ>##t7#rvGU#`Rvime@5K}oJckF%{1Gl}C<%89iWLSsZuVo8{8?=C71aGufj&$1jU6T4gfuFe%5J{5C?vV{ZTalV57OE(1O@yDXJ*2yM^->`ab zKhSnyBs6xT^mOI&5R__T!S56{k~80Z%)4wGxLGAU$lRIZ)kHtI&1E#J?(*U zBONbg7PTsAC5`K5b_Ba#lf=1-J`WL}<`@02Q8%PmGiwnm9+B#pkM9oTac((A!Bl{;}A=)WccrNxg4x`e&bnKGfdpp z8Ud8VM&r+Pl)hvB7qColroSbpIem|cDNiv zUQxZ}_~Y%+!UzL!CVvlhiuQ(l9*r8z>lg!NCgh55zrpN7WMqE1Z&IMhpk~QIzCjLy z_V)?)FblSl3&tei{}LkMK zN|>$!1WEL9uTf6gp1;m_&k{ffW{KJb3%>l= zk@v)nHrkOl87L!miY{<9SvB%di`tuypNvG>C^VY!k9CIT)eU!S%*WGqAZ%vz?1<5q z=N-1+hi-wTX9{$rQDoo6p3MKw8T+A&@7;5BULt7|a!!YBmee;P7o@!CMWWmVhS3Au@u!S0|A?FdTp`3u4L*8Jd3GRUU#Iyxs zD{_02RVSn+-jvc?j%j{>>VCfUC3X$IBzN!vxiadLwy$S9 z4NfgkDWD8dMcROxfzvS#?o+K7DyD$gTI)p{ zGMO)UZGfUds+5jh>j=X$qSlMVDNHei`S4xQR&sno{I&!UgeKP{uE87LbYgMB2;|LO zgbmGro^Hsuktl)=r_J;o&f$`@X8m$q9wJDu$BV|!!sgJNQM!)VV~eFhJfgb)Ynmb z473XATO{U}?rs!O+mA0pZ}PJq=8DF}1%|I*p1{Luz)nmT0zG{l7QNz#FE#4|!B>s^ zhUNZLbk3GTT1h#A@!q%!$^OZO0g_Odwzn5_Ovch8z!>_d09Yvo(Fbn4cwl^T4|p!d zqfJW}a^e@tp3)pxOuQjiHu+WR%So@!Qi#--Gi*u|>};WeVK)@;BK75l8s1Wez#%kk zXPA47j*@XF{$_SQ&>03T+I^0cXu|=B<*;$kky;^@6N@EAnmnabMUB0(LynY~f=h}3 z!}=hy3(r8$4Y`8qkvpwnNb96#nq`}{2&wrFjrtA`#{ui`SODi0VSqOd`aW_i(6i!k z;%bb19bwEaS;{*B-@xz(%~db3J3ID+98ab8HJ8~R&7wAO_N@7=M)~-obxP{xEOB-n zO1?6>?>T)C+IF?&+AN=`Lx(L%pvPtr-S7mDw?*a>#WVwKi)In+cObs3V4A_C=aY6* zky_+D1@(Jja_lSiPXX3#1Otwag&LeuQlZ3M_82*#VKu4H(>Y2lcfVHfNA`?bXYNpH zpuDhif>57uM?Pxfo9OIFBKRYg07f9FG=Xjyz7d@uh(<8#@_oN`Q|wT*hkJA1Kx%YO zJ$G3mmJqsdM4-W|b|`5Kn*z9IMF+}IX|!vo@f(5UOvIUDV|PHsXt9U$tz(t|xgc7{ zAWUhp>4}5U%6qo<`%GoKWD4XC;UOU6H6e2B^_+-nII$nA5U$c2u!RfZ)*d{+`}uJH z#ECiY%Ukm&1)sOq_T(Ubz_oz$+b14u^$O?6Ju31GYklQ#xS_UQTo`Ob zzu{keBP8WFbm|IIzcoS~l&*lI|NZ(BuH~OwPw7{(ysNqtkn3dpS4cN_WzqISNjFx% zyk&3Ytm`GZ9lA#qpHxEf-A`Ui0oE+uO@qB_e$$f8DgKCV;gVl}D};Z?<*E@AzhtDQ z?vs85e9`3v)5{ZgyO7Q}2JG3fD`SE;*`A&H^o*3~x(jDo_5tYt4z9KNk7$opvEsW4 zUY!QU=7L;PBsJ-#W{=ZFW>o&eV(cMs-f_8YX!wT?@OE~2a%W`|&*0IUhW*l0{xjyU)lU<_8QhvZQ#a?EgltH#$# zu}ItlO!++b55`8N4ypuxaqd_`Z~t%dd_t+bv^cS#$vMN3>ezXe1x7LKz5$-O{nbL_ zF;1Ze>YulYu+kaMs?JL7v7%!g3g~*mrI85ADNfy^AtK(1$c7nC@pBJH$NuEIEbSc} zwB6gs3mmUBr^+n%E9+ed{zICSu>t2`Jl%meRZ{(j$O=c4R2~if2-hpi%R%W<8J*vn zlie9zO1~SbU35$u^o~q<<9F*NG0_4qPY)iRQEBhoyq|}>^D`6W^(MEFukCVO=NL}A zE}ewt+9Q-F>TLH)D?MI={=DvJMs?Zdh`yN3Q~6GttocoUs@_<9EIp$6R;l~ln*C46 zig7Mnj=?uhckO$$LifM-z9z2!VMn0s>}Ue85w$h`4?}|g3rC4o(v=1hMBy#W%-l#R z_E`f@4l4^r;>A)d>kD`^eBnDY$ULW;tQPvJ@Pza{0e>hg=qQ8`Z2Ufsxu3H*pJ66f zo=3=kLF1gQF2yg^rHa6`{|pI&{I)*ITs5FTk*1Z0tC;aVQ1MBH53U##Y4z8)35jdL zVhzdM%jKfv)$H1L)QHTJ#?A1y=y0_k%3JE{HVD)FHi~uBB|L|F_St1F(rTu@8Y!%f zgYP_#quRRj+&s0n2tC%kr!d43_N{YE{)%q`rhF+oeM-(56x+a_$Z2gFfEeSPihHH4 z;<<%1n+@K8Uzi>8hd?okf1x145T@he5_Xu|L0N)tg(*>N+?jiFh~e-FwjY8x<)7^q zB9DA?5bE;we2OVnC)Ft2A^?$#6M&n0dW0IE$+~0i!BAV0De;~>r(vq-c>EU{GTOUbgVT4c;J=-D{|%=4pRxKU`~F{p zwIMYifWW&kTpfL@NB>wIrjZPGTSp|N3ZbH()LnC_ROq10rg&4ch~5Xz-y4fWzEMG7 z*$&U$U^bnT4t)Rg_YTScJQ7DV1~W!8rj4imq@}MH7pB)$p%-Id-Lo9+EX9l77KmMG zPb))a`&$F@N)bt|YXEAX@2!TXO87Dd!bewa_VM@20%lS zeL~@EjY^m=A~=S-Q2VwRAApT!Bk#zBViA1edU7~tXhL}xJym6PfCmdmv&|%82*o*K z6k1aX4FQe9#*};cZd%d`XyUWQx~a8G(iSVpA9%ejj$oRtAF|}Sey8@uosN}Bg9W~e z%3wL~{Y(4;o9@l*zvHL(9Y4nZeXo6Ey==e1t@O(O_xoQ_@d*=h0}KeFHG~!fkV)$P z)d<{p!32G9DvE>}#nusV8X1dJ{)=L^?mlSLBxv40@Pjcr6w!VOY#~VJWZq_T8jW4! z*Vz4VReY}9$v+D0dt?M-9|Yk6t3%Vj_rf#Lc`A^rR$kkPO}-M9@5~hi9Cq}Q#W#;(+KKAk_REJYaKavGImT&DxH#AFjsi(75cn%jCGq*Ljeu9^R-c1p>ZHY4Jx*eE}*9|A>7 zu(@h&y_DVl9&l@RerLfBj}V4n08UtbG#hCmv!O?5dK#t48cKN%S0~Zt@H>U#Sc6rb zb0vWqG(FLg5=@xM%l{tLTcXaS&r8?}5>CoqAs`S52gM)+bEEFRB7H z&7&MmVFM77E8Vf2oZy^*LQlU>T~@efBKGwV3>pj%5J#AUIn8`A1B0G( zr)s;@s@oLNO?_z@L)dj?`%-U;T6COvFOcX|sWKj|Y#c@uqur!;lbmt5=B)`b>Xs6G zsY%)db7bZyI1d_Rn0oFb?6F6 zK9qc?0r>spUot-W;;fEJuC_zq>3L8|`rLHya4KYTi;>iR+lN_iR7Qju!#thua7@1G z?%`PV5hFDSJ2ba>A&Yaiy7cZczUnn!brPA1(=c~OeqmThSV-kN%@Hp|pbrQV=?N#PKJ({EE<~jr_LS0-JZfpBI_-kdUg|zROT#NO&qi< zfLu|1^z?ELAItJ&PScG%1^@6k74NQ0Q^_54z9O7xmbQSzoKEf+VK&!Q@aXmf6bIE9IUc+b8u?6 zK6cWabvs*ExRzd)B-$>Rh3sF-2TI@;{5dBRV3EEe=$ma zLHt)8<1Ju%h(3(I8sL`U)0@L^hu8t(C-98*Ua2rf zUJ{w@4o8VSP%4EdqfDfS4k%F3LH!TPzPcY%yHKBhC|Cp~22A?96s_@A3fS?Hw4+x2 zZEOF4>~Ss16U%G3hNO{8fkSq-TkUVa{+_5rxaoX8%?+LD6? zS`2Zu078p_VXgte@=ch7-nQfYc;q*43YLg~{2SrYDxo=>MGQJA{wYXG;8Pt3&dMo^ zRBo7X<(cOK<`8$@6X*~X;uG27{#Y%>FS~1Egvz=7`B0Zu0HysZ(*VN5Z`?9 z8T6Gz2lY|5>zFY51sG57#oc-3*UDDz5e(tSR9J5}5%dT@?erxmvU+klUXuY7U;R@> z4}uaI+uZy+e2ceq&VHEp`zl5f;UUf@b#j!auDth6mZ0L<(lf2t_l8_M)1l6d(8G!}z@&$(*b5UN0>C zhRq17STV~nH27wWgw>Vt|7RIGWE|;b{Qq5s{xfL*U>yGk)A+vyELv$!>K|q3KLVCg zoUA2=h-8^B5-Wz1QESje(jCjWdejcxV705SN-qfSBY=;(g)0hC;DUFQ<8{58#hv>4 z_V)$EK7<#S6W0TmTXHZDdp3>%Kw!~7NH(BYzWH>J$F@scdeq@ffdbW;Z~v)94kP+o z)2x;1a|l_%f_1? zMjrH9t{ee$o4zNahu?+h#2IrET2ryONE#E4SgdH|6EI!iDaGwh-;)EB7F~ZKV!@Zd zGn5J1X99+3m!tRHcO@#SQM#e_8W=y6Z+q(LmAoGIypPK z{0C!4_`jY>{@=6aHyu#k(DFM|{xd_W*(f8cqxjkiHH?`OA|hy4Vd+&6LW&8lYsCR6 z(jq7-*GO4o-7tjfBjHb0R+#6J9<*1$NExs>T~Dd8{Ex6JJbcj!w>8kCWiprW9pfBsHu56LJROz}if&z((1x6|%frM6)3^x)yv)N{Ct<$zfxwNM##v&PpT$>=9R*||c zce#Kr5HvARnh9B-sIB6P!$`?{nm$KglR4sQbtjX^KOY$7e6@s~dMN>Ly=3>}kNnpN z+8g-di46>zy3M(lPqC%D>L{7ECK~O6!{t`SN5`w_GBvXs-tpE(XRHQ4OGlF#BQ^e z8;8p!!7~cjES~-{xJC+GUE>(0OQ1q=h3A#Ci=T;Pd2||?u5)SSqg0Lbt)33qk5($A zMJtvenn(~Rzk%XS1)jRc;4_OsW8wrBQ)7SSdDL1fu!@~ExeV7sZ*#avgzIY-6WDRY z=p9)EWxgGbdl1cJS*z>eO@?Z3m*I?}74{W9!G-jOf3;qPxvccsFUr!l#4Xjz;5F~z z1Olv7q{hS+vD|x}Lht3F z-!cEnK)7x7{ zGU;8>IS+7h;5Q_>9`SxLC-n$3h+5mjb<@3Q?P&*Nw9c+jcayxsCeT|+-KlHC;plpZ z1u&?O%NWX)fgEFof|G*C9*vPehK6_!4$z-_&G3^d$df9-GTgk|1L#E#Iz-Q$ZS=f; z{;4p+xljf4U3ip8`9l0czAmhJpFfB0d2~Zl*80*3e22{e?2S8k=E5C$u#)ETCJmT- ztR>73unwVVcnCAPdzxf9Uadq|Mp8TvyBW578MZqKn^d-M_Mp5vx=8Aip+|Oj;0*h+ zC^guwH(0uKp3Lr_`u{Wktn5IQ9e!i~T9N-P1mNGCXa79AG+y;pR#3mXM|uNy$CzkR zDjXU?06!#Utd&VhY)Ldkkjq@HW$w~EdPf=H@$D*IrQ3_7=SjEfGmB0OB-s~1SQ;6( z3^SW^uO_ZP`K5Y}y8%ob^647<_|sk2UNfA}S=YSB-5%YKe^&Is?V<7EQBg zSQ-}3@Og<+Coa+x)**6%>Oc_Xxrr$zA`%!ThA6v=E7oA$h&2Fc3=2ft)Qz^psSF8+ z4}Y;|RRi>dwT8aJMxw&ezsL4&fXo*@9Ay4pMnp~I z(s)J(F+6>-`9XL_%RO-n_FE$jGT(rt@La>mL7*IlTP`HBzrQSy{RR`s{*tWbihk%? zfBBEdd?*k0+@ytsJjL`CE<5}tw=o&^axJb(Pq)F+ikK4|ky@u)!Ah;V#OJjn?<8_x zby7~hC2}|JZ>l2MJtE~eFP`TG&bideA>J<3vERJSNnBQGHzPBWUAIheNO+Q&2_vPO zSm%bL^3V{r@=|;dd}RSEn;TI;++5Mj+ITWd?X$${7o@o}RX!AN0Tf~LUV-S^jm{?PcN z;SY8hyQAa!w#^L5W|Gp@vSLI+h-@+Ee)Dr`k>)IRN0xI&Xvu5>lGn?d+X?lMqgS}Y z1ITdvPW`bd@`bByRxWiU?WMZiC*gSS{q|c-^oM8FiL{B*wkzx-RFo+WJ=c*j^VoJ- z$Sj?fW!Z#y>r6(DDXC@Il<)u~wN0C0uK0zKCU;^UKo~EQ8LQ_KYK!yA6jDmqeI`8U zGO?r&XVlnQJ=o~J&Xpm#F0@{`u$kL1y5zK(@5B;XuBK{{+G;;JLO5oHp67tLP>JNk z(hja#3D)OJ-a&HPE;G@ssY|#XUdvX>eKdZq6Q`(fvwt}GJdr+T9;@R#d$Bg;k$SNp z1a@T^BQA9xmb&Zb%JzP(7IKAcX+5)^^J0u#$MmhryqxWFtr)GB44HY8B?oIxU1z0q zMgM@@vh3<7<*v>AH+sTw1HWIb7ER8a$n?~hD zqH1{M`8wu|-@euCNo~L1tf_{e?;7v7jyJ1xohr#F*zj zNc~1^2X9dIM~DmtuNm_4B*G($N{J&sOKTsh>Wn@f_2Wrq12Om>{lNUkE8}O6&~e>Uit1#U-1*w z(?L3;B_OIjL?68CHk3?KG^O_?1z?Pw1-)r-=)Gq*p*gu;O4KT~#0{n@C7yVra{NQ8 zgA9$*=3f~vJcjotZ3&gY9|>I@1brFa0j!$`+7G0B@^2RA@bhM%E7K$G$G6?n#X93E zbTtOJ?3PhZna_HI;N$ibhR)OZR&Z7F#6ktydv_eM+v>NrmNmSgkI-RZf2+E?;kRpl zdH%Gc1Sy0zN3geoD=N)|bLk47u8us}2Sv1m)E&IU$`Oj3d|9}LU3^Lz(Ha-Mec1Dx zK1xqv2E8(&5?2U*pZx_s3kI#t5P>VPM_|1?hJlPXa;)hbOE5HZU-$u$JII;yJI;l= zN>Vtd@}9Ha_=(wDRnY^lW;c^3m$|aH$G)j^2SoJTYB2#him-8%U>s%%)|vj! zU>vgSj@4hZQvLk}{FBl24v8o989m~vt5|2$+i?Pr+3Xzr|(+*S2JFZ4UWaS&ms5;L) z{us|sNS0H1!|cB>T93!Il748oZ`Q`IH`UI`WUbV&V|f=sIT=vX~YzJO8|NI%)kC-SF-XuufA2 zr~D#U$?0HHfj&1gIHLz7|E(YAInzF7jxD2keJV*lI7$`3Z4~92zmKoKDbit`{wUM= z>*L=LErMP4r5S@5le@b*dh3L9&gq-6-!Q(n`}Hp^(BDgBEH&6~G77=J70voLCBuKU zK>xg_|Gzavl_sP?;v?!;7s+L+@8^6YB`t^)q?s^0buzO+^6#)DG@GAw1ts6&^y@`O zKjv_`Ol+s?v_b4}RkD>uV2PCN!ELYX7f!S8*PZdWH%k`Ek=viU=_R!@Qhw~adwhL; zb$xaGc`x-j8!e0l=7?UuY+Z=CUcb%4rC-184v0ndE||p#=7EYc};@{hk48iQjgCKV>ZgcTu`ytTXHw#H1^HFcj&}lfT$AA`U z$Gv)Cpckr#d&cPU139N?NNA4L01{p5-D;3F*bXf-Aw3WVWF!nEWF&MXRL9CdMyS`U zz&2_5}*0KsUMd z`mO=pq1})1eFbK<(3nnubQcHxz?7R{L-l#2Oc!le2Ba?&7PD?rjFy|aP=CxFugRfR8Ezp*)G%?t~%5)SLr}8yO zyz{kF9LL@Iu)i4R$S7W1-q)bmce7L}=o{wsLIqMhl&5g9QHMq`iLXMj@n-#;hj?*XBa<*A#cDkj`yHUX@>&ZUPU!xM z|MlG>%#oR$;43UBuN@+cdgTMF_Hf28oaOEOG%l;WzJ**-V@w!Y3pM(1$JJq6-Y5cX z%P!jc;fU{mN!e~P_e0_-se<5HLc~bG@rkzrQS>mWu?HKbzIyxe=CUFV>;u;obYW;u zvBNu4uqVi>tfU+otawkcBs$e-{%B7zogmI$f51Zm;wLAT^$O_{JY1&vd!uFAm-^L$ zs>=Ll#?-WqRsREAeM`xck)DCWl3VDz(vX%P$4P`RK3>k6^BU7lpbW%@c_AvKeYu$f zUJ?WH;8gA}h!(^SCwXAMX(hiFb8-(Tqg-~1+9(lQ*i1Y)&$^q`M3L*`9Q^4o$!@+!xNvfOJOZ*W$ubnBU;Zh8~i zbBAD>KwTsLUp~R(JZu_o_9~bB4$fItB4hV$Q<%Y*+(Cv!+LL4N z>APBG+o#d~RGs(QO1*AO7Q7W>{ivwr7J;nhUIzBcwm2bFkZJfu<~Gk0B19sh#8F-U z9Pg!YVj@n~7tQd&vojr>+cW!|IIt4gk26VNG=&6P=j!F6eS;``@7RXSOeHd!Vm1gf zVf93nA0sP!r^C&u86SHK9cv;!eUvfwZje(@Oe46U*4{+Aw}pW$Nz}KZWBWg<16DJ6 zm?zUeoEPOqEC;-M?Lc437Qb_veL^gHWOmJ@t}kuK`Ex|C=Gh{|{|v$Ovf+K7t00i2 zF0V_a{FDxmh#9ZBIJ`Cve^@V?BAU)vxgbhKV!DSx(avmLAfU zUWgyfc`{#Z)}20fgDGVwTw<8K$9@l)Tw}4)`6=VE4?rETW*G1tvt;RqCKZ}vdc@YH zthA6>KMUAs#4Ipu_)@bNkvY-li~myT;EA8bcbC8{FI8eTpd zi))Cw7UMt3?0^VFx{-Iv_0>dbIg>46>Jb`#+WyXPq}joSC-;$8Uvw>^w|3+%79X!o z<>atPbhUD!teVs`dW$uGI<~!Bh=K2MvUAoz>(`741g&AC5;X8Xge1b{;ESg8dhya< z8XOGx-rBQolQL33CkXskByP7+JfT%3PI7{Xm&cVaID7$uil5NY2buZ zI;k6m?v#T$O1+^ps5$9wd4xEigFRZb1#LQQukmRp>Lyjhnlv^DkxWu;?crsnh8OM8 zOjlia=Gum`8br4l39>n?zBARf190A)w(u}yxE95CFGBX%)7^}PbwYgaSZS!)T;w)e z^UjL<*(|1IS*&u$+4e{Ga6z_bq)FiLLEQA|_DDUfl!^+Rx8J@7Ek>$F0^Upeo6f!} z^CHFbeLd>lDp0uQy|W|!1u*RIWOXEjHp1MFi(Y4Br4RvRuE&jYHW^3Ie)=&XLdu=h zA2NH3WOK))^Xqz)^fFZfp3zgbk(!ZC-czVS%eEWXpcmBY`Y16LBMpE2`yCQ+09x2^q#faBm>)27y+S?N`KE2NrOMy)|hc- zPB}N~hy&Cw9am0M*Wtf-^l0bZcipw>*F(m6oqA`N|KQn=66;>L^ZCQp$>XKn3`({S zX&+3wY#=u$k+QzRagkSY>U=Z;JpsSW2|sK4yjfNn+HRB!(B>I5p=Rqnl~&0vom zS*Q8_h4qEYKiK!li@x-r8iuVHh~9+OAJp;$KRHkXyOnU=bF&@9T@B`Jgm-ZI-WU5P z(}(dBVA1hr02J()`9QtdH+TiR`66LaLJAZZy(Wz8n$V0=Zjyh>u-;NH?K83OLa`S| zXm_x;q0B)v%^sPS(vFL-C}P-^+OCVkY>DGskwIP+@_EO=oMJoAMXO3W%sEC2+sh!Q zYL3iX%3!BzS6L;MhV!LWvMsZOjA)t9dCI`bwSZMlIYWEJzWK%T!lWBE`D15KuO|m( zK3z1_0Fm3a0m74FH8=UID(q?8t^zt4vA_mp^o>d)!*OXtJ=f6pP4LTA;TuJAA6m$b zQ-~^a!OD*Ox`O6anNC|bc)iGYqMy56ar}?ac$dk1Jn5xJjbvf!jW0Qu>3dPV7}pi^ zI=QaoBeT>a+w6`ixF+)JFzHTN3h~6Un2pZ}ld8*%5eG%u=0-Rs^-T~CO@$Usd1Yqx zC3HTy8_AX90V-KNQ?n_I8PrclDU0cQDWBr*XoNyhgYM2U7eeR(SOIAEubZ7RMw~pI zY}a7O`BYex5iSWnkA+OmD>EvJV2jjLztL2%;`l-kOpx=bQwdF^2fj?pG9c*!;Hs1E z5;#}+-<3d2EFW(ro_{nEm`EoFC-URzwR(({*zY!P668gNFzFa=BSyauGBc-K?_be< z*3>05^2&6*5vOFtx+|x)ytb;>B(W3b_wfcTKF6IHe?gv_niueM1d6$-k~IU#u2mn- z7k4W;=A+?ksmpV|wr*Hj+{lv|7wjBz;Y!~tAd{zzXpZmFPl+na$laG6tB^nK_>!OR{_ae=M0$uDa&h9| z3NXp*zy4dFF(trPXX>lZ2=~>y692E8!~f5s?H?NN|Ix2f#+dq0&@@}@a|2q9u z(X&DQ>OXQecAIZyx!PS=)Y_?7p`Jp#ktG&EfDw;Gw4xJIUa)Ps^U^ls4g@R-3-&|a zNfmyQ7z}qWBmjWRM4%qi_}APnCrmGgC*?EW)bGB8!?BPY$F@@&npB06HV9DUkl&>x1((LioY271Bly8{W!^ddzs0MuAF5IKR*D%FYzrSuGA)FWa%()3*#Q=nhq1&2>nria&G`$IW>Q)+Zo1<274M-D36~6Dg`~jjBv|4wvBiN zd6cUQhN|&~_c~ZpaBGMEhF8HWSEyDr0}F9x-*-b?fz-YLrLX@)KU)7@^M)CNzjuzi zey~t9=PCm2e9Z8Lt z;S!3H)11oDS(;$TOwopgoirmEh`rIs97Q9GgT?ddH|H(Af~WFmAs zFH8yXSkuRxTAO;l6Yv4|4&`fER%#u*Yo>(6_7?fu6M04Phca>9CB4h}T3HqslYFyq zqtCwW=C5(psZXOluRcFx)2~!J%6}!lhe)Tu51q>E>!bt*$2uISAJ5oqa=acFu!^>rp@n?)?JrZ1Zk*skPm zLr6RzN-r06Lku{@vLGk=?CECCmZxpXSI@IQdhcp*D7gjRL>GEoN0 z&gM#=F445p!qvu3RdB-lt=6UZ>6>w_a=nQq6F;nEHsF_GXt?HAn9JUL%1GpR#qwF= zLH+EEh0Fch;R0tDAWs@%`;cCU(H^2SaWh-Ke=`N~vaB3__BV$#d_jlEafN&*EVFaI zRRf|vT*}0_HagCyGID5e{bU z<}f!ZmoT3Bn}X+n{?8yDgj&&wfz-f|eg$IrSL(}T1ff)(gfteR8r{hG$W$PE41|_z z;TOx&IZ-~@5Lc3vLc|v)mq}MxVE;a?0enJJl9av(RvYvpawX9_{?ej_&R5*l2p&?o zCeEG3wwkmvJg&Z44y~J5M$1*|YuKNXLkZ7D5ignw#tugW9xxB#lon|~dy6k2i4O;m zxGKKSD}54HynYb;w^KMPSL=k_uY^AE6{P>y0qXiM%3i6;3*@K;qm5S9_vfqrk9_O zH-ut;Qye$`15XnV2FhuOQJ_(OV0dU0S`vjhlc_QE0i0j8%_v;h5}^Einf<3Ly}>;! zGVw;Te?gY}E_L<9jA$n+=1&W$8`an4@3p{I=@0{_$)hHF{AHX$1OQyNU_%v$N9WsM zEyP5k+x|#9-Wk{i+=tnOkz~6J4>7W|3DZj{TGgfV4yJ%e)xMPT&RDZw9uGl2}i?}G&@i}`c{c}#ktLPu3^Y&Q599!bXO0!nR%qph z^I2t<*~YQ%r0xFkn%Bs88&no4%bsJ45DCP5pNV4LCO<-j*~MqrAau05>FHTLB39pE z-v|qKTr0^1D>LobQJXUgZg9j&?7DnHBdqcPugN$6xpDgqbby`jYjz#=%f3M3{~|%F z*_)b~TiKhL{*M&>#R)?DG_Txhsw)5&TAV1VpqIp~Nsqum!*%(gshlUUz$n0f-;vPWMb!UvofpTMlZ?ZUU07*9;8w05^XPCyB@)&FEA7(b= zJ8a+7YK7P6Sf>(r)#d)uI*9p`{Ej=d60X$zebc#Kh;{Rbg}oxSU+;{=D>Bf%;3lmY+=gL6TCaZ!W1u z6;7-ZWmcp{IZJ4!$0kgD4tLE<9abgECnY+_)Fpl0Dql^p$Wt#yVZ)B#*)pJJdD++O zjFZ3X;8mo51h2&1VxiDR5xf9eRwUzGBR>~2zN>l=2Q$1e>nQc$t|N(K_8Rz2ggKH| zX)C$$`CJ%wsVI%$B~I}X=kc6=&uaV85>c+OI*ZmWOduSpcA6evj6Sau^v^JqmPJHyw#sJFvqXbht zxcMh&D1nxMl=%JpCc~yf@5~F-!iZHWvrJbvVPN@}rIHbX$J=;5)ieorcf=xviBAKE zN8)%BL(Xpo@ouc^eHJUy?vDG1g6BwLV|tS*@2H%osudICpYlH==6v}I7%;ArjuO%+ zAXqbm`!r7W{%yzk`6c;&hxzsm0_)p1;s5^y`d{ugzjh98X7(m#|5}@x(7tF#=zjwY z+*y5OiO6gXgCtQx!b6eZvDgj4K;|r=B#bTl)gyi-(Al~#udV%<^-d+o6RWlxXw&8^ z>WxuH{VrC^Pgh%OXIH({*7jVtWX)&?eC%D@GD@dI*1rGK>$TIpll`*IIXU3*g8!}I z2byQYuMl27&)JZA@7u^=KNteF+l=6J^mpljdi0*6T}~MP>Rk^Q|N31-n9qt`1(?s8 zT{Z9krQ59F74&zt0bH1E)!Vk<0NU61U=K7r<=Z+;ecj!#_@I2D?;+!GFxaw2ic`B_ z!+wg5i9(Da0ub4LRD(DWS%@mkyCQ+{-)l^61t6darICzhXNZo6*lL~%(YD~0Sy%ga zg&}S%ZofldGDp6R-KZ0q7l#OyBbuEWHG~b23#5p=kVbxKeFe=6q6dI*gK#8pvJh#2 z4M*^hc&1mbkX#yZr*Z&jhY;|fBX1yJ>qtcE9_z1aPyb zjV{=afG#-fjxIPDp~@Fgt@@r3FF0^S;}4)!dyg52?hpsc#C+roFk-!<5USpNX~ORi z+ujv)t6-w^s>X&!Rrdx9XwWw6VG!%o!!Xk;2jdZ|g@F>_AZA%>*{3VT>OHo}iILAp zY?EO3RmW{GXd1ulHfrE4-H_?mbyo1^_V2_%RGKTQIqa83mbsiG%)*O%MH!@$QPsJW zSFF#<%&{q$0ZmwTdtA80KlM0t9dI`jhWv=KFJJ4&%Cg_epqS6IVl6jWPzy^IeyG_@ z@5UGK&UHu1e^*nFg(dSa8;N#1qEPXtjHNt5u)pIP04~WLfNJWp>UTyh+EkA$j8b;f zA;&$Qj^i997zBjos)og_$!q6LF!LvGuUX*ew8kQDnJ=leVw*c`6)Y20MoYBPcg2Pw z{2Z)V8OMQjwib;g;MZS~cT}1NF!(ao;-M2+L{lhU%rZ)y&L#M}mRk^%yC3W3-2MF0 zVbpZpYpPLRqfo|@k6O&cm8?bHGKI%h=t*cSdHd(+w(ep19Wx?G45_19aU`1sQOo0& z@WY^)w~Y9<5ffQPDGtU&KtBEkv9@8W%6=w0 za|#-_+pE~lJKd?s&aIJ?caih08!uU&A*x@+m^X1hZ+UPg=lsLpt_~bVk;)G{=q|g5 zn&01qHQoa=mT+1zr8Eg`kxVxa?-ZycNi{`R6GvKE|K1-mQ}7+gtP> zT^$7}y%N{rLzZ_}3ZHDMHL8xcpFCr;k~pJrkm%s7(t=Kw-o0Q#F_(0JcHxKNp`&jx zE5(pm8eLlJ^#*sF23PXaiJ_@`NdZnd2CS0s9tzKbFid#i+mCGp1GyQ;n_l`z9$NAU zvbg9m7K%eXPeFqWNMl2@KGk@o_!F?$3rZ}N|23w!j{ zACX#MX_;bYk9f$f&NGvSGlg@OvMQf09>bEW(uLW?lPS7dB!d-86{6cOHpc3pR0am; z2>fuBhVE3U!a{)un{101^ks7ntQwD_bjEK(cS~nw1ye(J)3p#5xE{fU{36$bl{0jJ zi`xr*b1Y;%(&rMm^#ZYQ04q;Ld{V(R>C(8wBRbGMqiIue)lMhJWX`OzO%(3e1fZDR z`mFboh%}CabUoWl@MDCP&g~JqER{Uvy`o^nIVBz`YZJPgAHT2n_vITUua9+IcJ#5s zyN4|gw1vmKp@m*Q+bVMQW&F90&UmvqXRUB~Ne8VpX9%q|qEcVtMEAL7dhU;>#v8G> zwD*8ErmZsWMYjbq;B_hO1`AJt>);hF(@BOqqg|4wcSXfwBPoQf^;CgUp} z9zN`mEFOTbFjGiNuq}`1!KY=HzJy8f+t*(;PdGR&F-th!tR#EVY^`eI+ssXs++vcB z9Q|_FIJW59oF~YKA$kV5lIGaY*3*-==ui70InfWe+$^Fq#9Or$zL@iKrA7W9lu`U( z4^j}$Fnyw)Qp(bY2eg5)jqKX!uMqa~>&`!A($wZPRUW`5G%$YEU=IM07q5k>jp(}- z8wi`bqjifd{d?YsRcCMq)`r9u@GG^XsM&!!JUPPCIP!q0jj*bcG1p_J#Ez3|AWaZ5 zom4a@!p&%leFQ6jbtCzWJ+`jk;ztN?J+WW{q2rB^+${Q7y@M*=S^-ONIH<>uT6h{C zr@rAX{NKiwm!0dqn$!(CEz9f1b-a$H#Sd5j9KBXApE-&DAzYe9nbMRCp zIt7gzI(aJeP;1^}leP^l>h??4gqb#lvxa2v&S%LvdihXtGPxx9SbdEU#`*!mTgYC> z=iTA+0?yrfLLf`iQGI!O8}4=w#12vq@4M+eFwg;$CYXTN7ICyGYX=T^-EQ*Yaw%fM zd1oXDvQ=EcIDtDLT%H!ctIC4`4Kl9LW(Zd9)cpg1F-Oe9EQObpY(`9>RP7Yq7cREw zsIr&#T{e+CgQ2`o7($8EV&9b;R;~%{WNb~7ezH+t{YNsT@sH^NbY}+lG3(0|_71V> zAqMYlMw`2mocNGXL0SbMY!gBK7`Ueh!!WT|R-i4?(Y>n@=?vOalM>scSdkb<6o*&a zX^M%Dn(RzqgYbq!fb~kkS$; zg`5pW@b01O-R}MAzy++vL`b~|bPRvHCav`=;f?fB?rJakX5xAuSw3s0^BftXDdX1? zU&9xo=855BWyBXv!>54bua(ktIhsx#)OuS&@>zs>*Nf)FGVL?2!BW;erp=PX$d!0W zX+M9_8@KXttGptFMTK45a*w7R3{xu%GjEcQmQp&+N_jY)nV^FJicQD(7O(oPSbc8Rj3jv}7>XB1xBJr@K*)(yxYi8|XUo#M&UF=h4=<5_?Wi^MTvWuc{N?-PvvbPO zBpYjmbzn-Qh?K37VZzqGURA!W7}Dtca&dO+hh)c~6&};C%+sfywZ)wJs{?0ZW})(C z5S@eA^>}|n1clAn1iDYy;L+p&m}|{{uDfsk^vno+xhX!~mP0nIa@Oor{xd12ueETsPJAUO_tZqeCu5khxw#V7$|&+1JW zBBZZlu?U+GAs=chH)kYu>8LjId0j;S(`5}cWP1{_RK10Bl7}kA zs)ePvi!(t62VQkmP;hnTONhdvxQm6aUJ#pAmWV5T_PZxhW0oo=1eQQZ1z!|fq_5KFtP)fE=J&R zIyw?!z7I0GsNE9`Vol#y2uDmx!yK>$+mOmhqft%BFs#xWX{NPFby?8~{Syf3AGYZbqH7qPon4F)RTXRLel^ zKB93vnH`V_3zIC-z?JsrY%N{trz1nUkw=mvkx&Ojn-RwMsXe45E`S%F z$zQY`tD;aOSd)Ec=ny)Gmao`~zWZ)lQf}r;; z99rfhO-?h;iCg1b7y3)zwg8UVTNLAD93wP@bMEU4!O@!aT^j^{a++h#+%KP^vC}z`hnH`te9WzY)a!>1!ysSc`nxlCIAt;Ra z;G7UUIwc`n#DGc8XdDx%NF;}G0xfg^O#v>g9G+*xJhi5NZ&~}sx5*d69}zkaHA?y_ z0}}CVuXqTZfaroK<5|cOb90#Hkx(DI8cWPSZDW7rnKBN%a)e&mFp9N(Z2bj2d(|Ek zm55LA)nLRb`Y+N+y%Yslxc)#Km4czBNOka06Ca=RvAdXRJ^qqVX|NW)@=3yjK#ssx zFs$?QqTqi%u8Ri&!TS4kT*v#>PvQBmPeaVU;K~0Wc#Hk>n@r5p@hesTlRohuO3i=f z>{_*dHc{H>ONNP#;yh^;3tN7`lIQ~}ekiq+#xZg6g*T{x+RaO;)chQx3<#Q;qB1iT zAJqs*LX5Lmh*76Xa`NR)zx0^S+sO0%b9crXm^}vGNVFFe8i7I}rJ2$|W~3#oJqQRL zMagR+j%>mXtVe?d}9 z5Y`>wvxj1-+NHLq^$bS_#}>u%E;`86b2E@bQzgyUY^UEEE5~}DyORqaw;a;4_er;L zKWFo8EW&i}NaYFg@cV$@*??1c5r{LFrOo#&#(<4#D!g`**caPs>r9ng;r6nJSU(BZ zlP>`;#vSSLD&lRG*d3iz$lu9lsjXv<0_a?xXd`V1msIKH_D2k;Rf2mB%` zuf}0q>#|D0hL~SMX>}88pLlMnR0F7T-kYq!`N4ZqbCmYktJB5SpORF$vn)S1 zS&zpmtFypu@sHamco_pq zsciCJ61s6fLE)&SS^pnd@z4CT(pU{}M&HE74lU4KhOw_ng{k)T=49N zgwzq?oh*#tm&ob;5pKr@mg*MLbrE_Q9Z=qaN(Onlh#CBv+%e9eGUguy0NR|||fl1pzv@gbYyf!w2IZ}B#a(RMkw%1 zYW*@egioD8d3d|ztP(1RQdUbf^Dpki#GS47o1a6ej?7zWL@BSG_19cOp2kUsN`LA@%c z8B~HH$MGg$w7H*72d;0ocwl0Z$^ANo2mP4`go@GRU;_>UP6jReiHKH@1Iz}R*oMc; zidV7GT53_Rh%D<~+IYex#G@>OhIPtDmSHk+mP?I~K3tSOv%jifQ)r%*q#HHH|Z6q<&INap=;!r z`ZKNgDgVY`rh-IJI2AP&E0)^n&%%=6Koh%p`F^S4#$Y^p&=lV$RPRhCfGk_G9q~5* zoha_yUg9!MY7qFc%O+e}K7~V$qmuW@*iCZ(>o(IqwqlV*Lo$Y(nk$n2K&L4no2ofLZ% zbq`13q55!A9q}2VkdZQ;kp$4il9HaGk)dCW)r`@CP>YVqS*%#IY%2WHG|c>oSM*7?MYi z;Y@x5WP{sX->ra$M`F$@qw9a;)+s9=kXKJD93aK1+G!ls7np!EUS4HVv!fZkP``+o zicxmHprWa&(o!#BTnnIsBTF6~EFi70$;$G`VO8aFGq2EIveiHr@Ul@aiB3S70N@f>YOIvItw~W=&e|6^Dtr`*H#yGJC;RN+SJZJMtm?7|&B%a0v|5jULL_g1{U7sbEOv5*y;BClfmxu_%_2JuLpe}j(uiIalzGvHV#Q_7lnIaAEZ zn8guUhM=Tc4Z+9)`-O}Y%ak~$q36N8)bEBFaC(|AsYrDfawe63Wem}GwMr)~ig&=g zT_@u0_dB95mEqi5(kjOt?fsjQ)-+Z-Q}S!NO6iLXAoPC}YQnY-CN}?i{iqw+y8Wx& zRjaP!vZ0FfIUQvJj9br`#}KBH0!ZOQR_RL1IMsKe$>z2IiOK2HsQ{9A2Bu`(Y&{RC zSYHEx8H3*tr$Xh&!w`CIM;vxFZZ)yO^|b7H>R9L4VkCCf_}`|l^R|}mejn@@_=7Tq zekouI4D|Bp_G&Cz9hWu5}LmZn8D8*x@Pn7zb$bePIQ`3 ze)n|J&8Cf~PDM#OEw@lUt%208CpW_NGL>#{FMo`S&Xz#uz==PJG9Ehh>Q1K~mp=*v zOP=@#SQwBTL|x%>Ju1zr57b-UWaphwcA-}PNY3gbyl`$u_XmwI5~P&cxd=x5RxPwv z-UQ#mh%~PS*kznJ=X~gGr%O=0TeJOnF77hQh(jejy$R67MzgG?7J08KgGb<(E}=vw^o4piz+5caoguWCy;Uod{6BqHaQ{8iC5&?UM1dhnE>5x0o&reNp^ zSxtz>L2$^6$<^Tp3hQdWkRJPMk=@fod25aVi8|Z77CWU0le&~lwT=sxZEsN+rW2N% zM`)05xH2kh>m0?aHs9!*o~skmqY9BR^JjONjSQ+D?WyyR=K5s!P&O$OwzU^lck-3n zLxmEl7}W46(BIS)lImJz7t-LER%pJc71~JEhaq&4BIDhwZkX1m8lvUd*Mdj$?>30h@28mQANJT?)^FClkPinKlK=(Qfr8! z&AZeYVvXf3sGhjpYH*Exlk%KrVes^G&1)fh0`(Y9aX@XvxQ%^^WxX0s>5x^3%xgdG z-1qYS^KXS{cVkm!=~sF>{<`S?cheN}Ki~hcvNAA(OlUc)*4F5k$hv6h5O+{Tvtd-8 z!J34v>~b>7;PuCYpq^CBwXp318Hf(yUcH10-(+IAK;noc#+bA&RMj|E*3zEg( zwUf1|t?0EhR%J}a$;@hx!+NB`Zx!|Aq_cIAMHW9plXy_OO@yq5kTfVzJ+x?yT6+{v z&h16t+px_4F7Au5g+Yejc-`XvIpx0Q4Q04nCxYqEePnw5_MZ!c5}|>Wrmq5_1LA)< z_xit4Ac$KzySV-beCMBkM5(IP*OUyFe;FD^8>}jts^T<&KZQQR0$B)wyi!A2@^Pa< zc4Dwe$D*C;uQV!H{P2x_!1(KQn{_ZaM^@Pbf!|xt%G95u(Flca6pb}|W#KwF_BK?O z8Ox3mLowmqIOZEjLtz|j2So_stUQ?(Zo_lMar(Lbr^|By7oPRm^uX{32nG{Ld}_BC zoQ`m0(3LrdT?h#HDWm>=emLBW2rI)c5Uj|V>|C;$OS%JZ+08vYvbC_ZLKb4@CJj>z zUeFq{{cd)&G+r!B5B=WTF#sjhTG~P#yK4a`*Eb{=(QWo{w_er|9DI+t5KBd)`zD;F zAl%ra=L7>!ss_5jd{T1QT^guEb0@3H1M|T~!hu4=PT*`#>MWqKn`X7q8iF1E+SAT} z6=Sx7?!3L%$LJeAU33MISh`{-)_Bbl39Ku!aI#31(OGk|;Ia0HdnpnUaT~wWPaBS| za-?rGl@Zi*1?`j}E1sh@`Ljp zua*W^&XsYTMCr@N$saqZ{9}eZ%bpbE4GLFl8oq~}6ydhI67Mv3TU#Pcz}<_@p;wfp2+6s%N|IOUenw3w5;IbJZLF2BccngSC_lRw4I zEe<6)QxNcBJEW5;Q?)Iq7Sz?@Ixh)Od}enJ*sfU3dPIEe3Co}7o{;Y>CQt=`j0*4= z{6&}(IwN{UziMLb}^0cUnxNJMkF!_!ab0Lt)rkM90r<-BR@?(RCZa;Sx7 zo8DtTvkWE$SsXJNub#ykQlsAz>r{lRlljp^S)Yywa6cpqW0*#m=wlK*pTYn0ubO_j z&4K;eeSOFO_U-HQ&B57%(d%noozcbK$j0nH?*1{p{?8BwYI%9;s-geg8kf~)dB`%i zT9?nFI1|XEOIDsp8cr#bBcJ6+4P6!$Ge}B59GLPs@Nrm&z^oymp#q_i+!CwBT~}uT z1=~|m#1KOhcv_f&2g2*#{@KJl=XRh-&O9v5+$H>+bGhMt*=*j~>CF^)9_)PqU8U%f zadd$8r;aj~l1!pX6s;tCPlA#ZP8(*Cs!1BQmI5PJB8_5Csz@EymRgi5(no<$(xi-f zN?Ij~icMN2i~5zcN)n|=ohD-9jGoNN8+%%0To zjSStH!(4yWrYaiUy-}E+tZ|$7iV-*en!yUf>N^_2V9!!Qb~=rrH)~Bb_&8=S-eeD^ z&b)DW{~DuCZ8+9U!+Q#f6$nL`>~Z$*uZ1jLxiM&8Oi$kA16hHwLlIelfx~3kYtwsh zit>z2@-Nq+j2MH1583O4J35=+_+PGT@vkW{CwC<=f(QI8pTRE^ueA0lcbuCP2RD3w zAh#(G@?RTb0`@Sl{~m|^-6d`M_AAtI-$;3Qcyc%*+e|5Lp{b%@rKw_g#Y`#8W73#> z4gJ?^1)cV-iB`)#Wz#AkxoI_=S}SMLlvjW<`r#H^D<^(tVjsj;2?KL~p~>=O3BNT~3aW@_7Q=eQ>!bQD280eS_(Q9?p{4 zZERLe+p-jV2rpiirqObEKDAoaqKy|hy4u`ea~W=H{cGERch*i>+*4Sa0RKTMt;%fC zX6v?7bk=62=>#*zL<%Vz^1P9po*bYaf%+j7fdIW2?tLP$kvm&dO!Fn-GfUFLm!7l~ zFVTpnv_(-#)r4eh?PfeW-9%TTs~%!sQftm;R6*w$r)i&YM$E(^?=qRI;rhc72GgvK zpEYyjzj{34!CH%3T!p@-;7V*K;?gsIdolvlZx228*jSTRzM{xiA&n4ZGQyEaF|tP1 zKZovgvnQ64m*6QVk%Q|zJG0Fqv{;E&?4vn!2Y8aBd^uk2v)-3od@Hc?E5Kp8j2f=H$JMxbiW7~qVEbGhAzq#itMa<9JL53oA}k}Sw%sDo0;SoYIHg8am$7LI znX?xV$@=q~t%Jds9`2;rykTz8_F(@*fAsPS_O-Ldnr_1caoiZLb2xu4=oQ15%BtHU zH`5QIB}vtS4wVJ=?r5}|A`<8n^TyErP7T5(ajat;HoufOaS=MBHTWUx5OkFyr6t=2 zN>%>mWg4QF^Db*1iZ4rm-}-VIFO0XzS9D9v6#b!Lv-G&l} zRPku%heDcNd^^N*yis<6>z|*;wy?_7kjaz?CoT0nFWHV(G=6C$n zN8vXY@vfWDt)|HgSK02QX*&mc$AB&Yn!UDQLB3Z95VZ zlEN#el4+`1nlmGDiM^q9S;`Rgh0acCu%QH3A4%pfOXN0HMKMnR4aGNE=dznk&6o&L zfvUeI`#BsLXZ|)I(^*V}ivg;{V-_~Vg8x+d?zV3)fS5-Oge_p$b0^NAo$X>9c0=Uy z5XrlJ6U%#%Ke2U3Ws#d_?{L}K&dIaUn%~eZc(#?i&MV}@yNLxBUtf0;b@r!)fiteO zBD3(3Vl&{~ZEfX5ytp2q0iIpuV?wX`Wu16*v$*0>LDuJMa6@&>>u|}e;+W8f5zIf% z!b(ol#7!43$CB|GTbVg)QyJ?M##CO<8?Nf+a-g;6eqStkDUZwdHB9cp!vv+MMGw+w$yf6WTN{ zFwK!rNig;YXPY5rUO{HgGHKVX9?sgx2`fkVczF6q>R#D#ni%_bjP>TeC0x0O8Qc6+ zlq?rt+^>UMt}c?%?OZFLeU3MVvetz?G!8cMIWIgjxnEMcNyBld6(wt>qsW$Jsn29@ zgK{dGxP7oTA=_kaI$%-1%o^@#Y)jCFVQx z>1SPSQ23{;W%hq`c)?r@(yLU!LiVauAVT`7XewyYm+f+@dnc{p_2CwhagaBf!NBK4 zlTc#*H`3lQI?`xc7w*`$ZQHi(q+{FYBpp^Nww-irvtx8@8y(xu%|82_@tw23eeRz- zYP>aS)Q_sM-nG^{=Unpv6b)PtyZN>t_?3CYt$*bp*m6jX^7pQY+biO~A0+VGwymH@ zrtq=C!-ch1*p$}@`2AeY1cbu~PnhO+FzW!vJ@l@<{U*BXY`gDDmbX5r`ICx; zZ(f6@L5G30FGoP(4MwnSp%RK%2f9&!D_}ywh$3=^RxwSbsitU?1!O92Oh{b;hEeZ^ zWdp-lQEn>{gvjaKkI)adOU$akP>s&T!tIEXYrMvVaVTIK1cA|7z@CC-*DO_ILIwz0WiNE+KVQiH`RxtcvdXXH+= zvSwMsoZ?pD_{C*bSYE8Vb@`;pz*qoy-1i#G3Iir`W|JS$l>ihnyOJASq#6|pv*>GZ z?FvvAsGJ>Of3SvDD(&>W`;Hzbd0b0Vwd|SsmxON_r9Uy83^pv2=8PRTHdlt(7k~-5 zyjhQVX~)9yhh6^tlBGTGt*kLDU_b9sNM}RNk2m+-7w;dTN947>#vc>WFdQlkLk=Xk zLlz47!3b-D6D?GDeK>i-_W3VaG?HNhb?6td2;{46p#JZ(XmhWxKDC3f9n%-ch{@8? z(bCSG$gLU6n8<3&w&D z_*`DKA-MG1Xmy%tXD*N%RM0@S!RWNpFPdXkP(T|Q2X-Yppo{x{%awAX%8~C-KAjbw zq{w3WpVFgDO%i4jfC3MdCKhg7tY6kN7`?5V1|;HIWtDHn zarrw6A=aheR*BkF7$xgLQ?puZhP}m=-(1H!6ECmZJc5jmOJ<-E$(_Q2F`pEF-#8a{ zAh!t~Y*f^m)hR-ek10;8M^E;j|W=w(_wN?0} z|Nb~JtL|_27jKRRW8#Acw7>gdMEP^8?sy>~C8AE0X=+<5hSTrcC};$?_fNsrhmbcg z2rz6ay{oV@f<$zv4N!XH2;a@0S%jT4!ElM*o$#BV1wvgjp^O4`Qg_O^cVsWy-9=Jt ze8L`4&5mSY7a5aJFym(a4{-mpc>1nzTQT@`NRs#E2PyjRr`_fMvlVChUrnIJjoto> zuAyb%grI+iarmmLN@?P;()p9L2`j? z(gx2(D!NWPKuUrMSEmkuf;0DW&P2Xv9WF&PsY8}S7oVXY5P&5V7wr|B#^8_o`WXiC zjv#w0l`C*u4E}ILh_#t=BdAsMvjJI>3)L(1j1cXbZJtVvS}admFN{Z8F9JODEMeK+ zZ=7`8;To`t#t8ZB>@_n970{`n2ORfhdh;i(<&WxI0}F0GB>BEk%?s=%K1dbsVkc2J zky=b@3em}P!_;dgFjZt_a9~hYRO8SbQHHkGl$e*Z@RTc}(I#vlgb@;1D)K_R1{gN@ zmmJ=$8l?JiR_k(H6wx^+{v0SZil-+Q6QVx#a&lTNWhN6c6CtZJbj@xL)+(;7B@6T` zw*FQ&Ye)*?OymA}*i8oLowXsNdMLEbqen$}^R306WhPi_qKTHKzS|~m=IP?HY`Urz z^kpT7&5~a!U1P?(^SRJ|Rr3)dJcGHFwE`DMVY|lp;$qBrRqC(jH+2-*a+_AZ3LEVN zuM_A82^Im1Mb}_D>c47`I}fK9ujVu=h4W+ zhE6YtcLf=cOuJ+wGh3GIYyK z5zFEZJvQhVE5T3w8^#6os{GtB{nf&BI}2-#oM5&ukD}soDQ`cjDc$ytxgaykaUODM zP^TT2{d`nd7n6|nv5qcl5H)aVqzY3XT{i3|*dNwWv`aD}V^mg*7b(|O5?4_IC#KqD zYmIEbhtJI8fP;H1{+2W-b8N*&KAwaKmt67l6W=-YUCRW?LrP}LeV3FLOMM>=3dR6y z0Hl$5+=SYrPkfMzKS?%D`C2Z2Z0M;coN>hUi`aAi$?cjg-83DW?gE# z{0;o#KqQ2AQ;a$CIk)$(XO7rkVkpyzAFaFi)wYOiV~G;fc4HK(u$hM|ck{KT_YcLBnC{cdE@pt;XR~0Fw zyg*J94EsJ^)ftiOqhHi7rEq#O{b=*S2I&1DC;fDdI8-!&EizIm2~R-PR$<7l0`@Kn zv@JDAp;^s0Nu(X66RLu+5t&$39sxQvx+vwB~OLB)~nJ} zsz?G#kmnYsgg$_WS-}q>@z-N_USY=>5nhF`V|s%8Tel>}X_l9u??p8$F9ZZ7L`UH7 z@?dv-*#+HJ)4X5P5H7~*mV_+;_%0|4dw8I7cP#=p$K7Pfb7XoXs2fafYK%;uL>#da64$OK+G&Kt7+gM5=?w8U^f(;^9htXUL} zvf0Sw>y6klozh^RuWTC7xwN3{f*E!6>;P9ghwn9l(_+PD;Ig5J>3!QKV5T)RQDA65zKi%mYPj z$iYE8){N!SyY&$i>&o%H3K%^4s`;iOgQof#Dj||y3+X^8Xu3YB z`Q_QV<;#k4LfiIgo(vz7Px0oLFj_UYnk)jo>G{)B+V*FW#awoCoI0!bB6yQ)!)@S8#li-?JD7Vndad$QMnWvRurz~GIrY@8f9&R6);{=#89RJSOH5!Mu<=;3j!+QOB--2~ zoRHA%yIml^r}-s&)QznkXS|ww;sYonqS7TSA`m;+`fIL@Pstd}DVmZU( z5cIV^|9-7cvHyo8PQ=B<*!#a)U3&jP2rp(Z=wP&O)2<>dz&wv;)VF+dD@Cj_3Tfb|VK-Wk3Sc9OW*2tF0v%t@!0 zU6GD@J1K}%75>A_CYmId-u~KBpQE*{ETuxP;J~U(bz@as&v#APK2Zo|bF$JATF)R~ z!_+JNtz(RKYyP80-y>wO0x<0(LC@KO*GJ2R|Jz|ToTBifbGPx&;}PEekIf!b1i9tD zUs*PxLa0doxg0I4Bl|uzE&>{JGYCz;))4cd;M&XhBmg~c{R^z&5Tm2WC+l${I-Cl| z4A|?%|;s&8P8K9 zoy)ro#+V*8#y%TMEy6K&I>HV&GbZfhDuo&ohgV2tUK`Q3rWMlpAR}N=NK28FM(3tK)ksMN>EFApm0kPU`s&{0^uHT#9Z|4<4#CzlfhvmOH6s zLE-?MJO@&6f5b?#!GrE(M$Op+fjrb~=!dt$cZMMlL6odSXla-xf_Xx`f^jGwam9GH zIpAq+&29(Br(pO#fxhk?%?FelNtquJgHxQuIwK6yom2nStsL?-KjVu1v1=^~Q zS#ivwYSI~Rc#N6iEyXvkQd-kgVARRZF|Q959izJ^6ieQ~Whqhpo?C1-eLbN3u-*c% zp4K6@Zr1VNSN%)QnAmCl+qU~(pcy_jo1hzCLCWiECsY6XVD)us^xs_p{~3`&l>}@- zzfz_`EUjq6x&~Nsnn_AM?N#UqCuC`3+A7X5r*O{|xE8G5*>3ZAqBtUqb%82zrwDIH zz;Gtl&(BxGZ)A56tDppd)xxn?*ocPp{3&|($+EWUeH3){A<@Z>ghL_B`UYwO5)Ic* zGNs~dqI9f)TkG;l^V6YFP5Y$d3wXG zrAoNI{!r+LBYGt)=tnJ=@69}~A=6J5g2m-+xx!Z(2p+8x2++`;tu%FiXJ}5Uxw09B zF-%yU)*bQw1-|+T0 z55>D&JlS`Kd#AM^H!VgqEhXV86%Ld>G`?tiB%EyXOpBdr@%%=$%n{EP&s9et1#STf zX@ZFg)T^x>anh!3;peC&diFAVO+X5j4CF$eZCNv>=AGc}mpEq1Q65!$;P`44XL+>s zBlEcz;bpOi<9#<|CeQrt$co9@n&bxJ zwvJIg(LpvV+tNu$(dff^7i$!oG`DGBr zK9=uJ7l}7V>S~9Bcz`s7{0LSZbj&=nJ$dg8?_(4)Of3ExbU|*8_?`kS(cq%)H#pls zSviwEeMfKd$2fcX6(bZtACboFmf2{9db=nZBFWyj#}-iZqIn1< zv==k{_s=n4G`Y|Z5S#R{@aK7?BnM4e5CsMHJv=UOZceMpPkg}P{qrV_HdM9CrOTNk z{jqbw(rPhxi|lqG*}+RVj|R%rkOkcoxovBv8fQF32pwMX71-+_N25NrCqfJg2#ui| zd|bIxFC`SZ2Wt3OsTRcuZGX?D(@I3OFpm)eD8)uS<|vpf<~)$y82l`T++ALHNr@9< z5I>HGCe!@!C$1=O>NgGxXD+#tA*)nYKJOM`l@YQF#!$-mmz22goaHKvhqVZTu5QM! zO=(e@K8R&EMpZY_I+>P@r+U9|`Mq1BG%R#H?Scm3njTnI>OBa}Ye0eIxK#2DFz#ZE z^p0>WJ|mh#RM#5pS$rg4uVFTNi+SpjoK?kz%*K8=! zu7+EShFrr-qHmM6mU&irW=2$S2mlyB6a<EcPYaLgH%;Pu(`p=o|OH8z}3 zV+V_RmPg`F`9rFrG>-HuV9c2&JrtP$21|oP977!%jx(c7N_bS@VPY572`{S-} zxUNX$N7B)G8BeN>alliEupe% zD67z77BzVO6|QVhr2+|&rmc67FfQ=`rvM9y^$(s=y1 zW;*vLKU=w$rvGA8?yI%73S0V39i!Z`@Ws>n1VCa8|KL0sK|1mw} zGUES?KGB-iTIf>fzbC$_!IQBwY*zzI14tt}VqigOBQng;gNMi`rgwYfktX4BIV@N@ zoTFb8(gxB>XG+g;qX~sx(Qf|nBB8nzfDHn;hPWPVw%2T`)>M>d9)9xsz#4Jp&<G`W86}@7RV0!-k7WE7E1Da921f?sWD+ghs-qVpLP>YqSquwduxi{d(|vIGYw;VLJwpnfcKqebbZM%yy^A6YdEo zzz%&s58xIa3!9Nu-=ek8DR~FC-yMJl-x3eq*B>jwFFG2)G7`{TSyb(9YPu|J>@DG1 z@_Vj2X2n73{-s%wD&hNEJx`XRnNQrygWnA@@$s0hx%pnUfoHOttStwELA%` zm&WhFvdXf+x5E^qKdM9xYGs3;N_@4dg==Uftq^~M+YrjkW{mP1k9I}Q6!=vHmj||a zqK@w>3bsgnLP+>9o7ChGO5@HYo2e4m#}S$aQRAyohwZ5}erc>`aimMD<$GAZpzq_U2(9Tb!-lLa@^}#F|mQCrM+U-6&(7dV7Pn z;Q>dSf0AeIFSsoSU}sRkwxM7iXi;G#=lv(_?{kNZ5K zvZS+w=IEM$ch-zu<+>?1%*mc~+m@tQ%CS6ApMln>!QjC0K5g{$+< zyxJY7o$vcEIu=4vkoiMh6m4~_>fA--$ZR#JG!;G#!Xp#S`fA^zOh|DM&H0Mn%1o57 z=g#HW^M{&$sK z$&gcYvKCg*tX}GGV;xd$bNvb7;`+r@yi`LE{isH;{tMG?g4uXn6jBipp+H`x;2XV) zfcmkg+v&Xqn(N=n(GKm~o7n>-ZQT^bk}DLCJ4nkjD!QTA+WAYv7eYDtNYIS3FQS4w2?8pi1Fva?dUT}P27=x2=Hxaqx z6Zt;Zq#Y&sA;YwwZk7e;ymjno*h19gAyRoZP1E)|91Te-0(YXW#7NU=h_q10W86o= zTcWGTtC~;H|9P@)gnl!8QF~Q1dS4u8wvdU;J&=|NKDyU#NLi1ts*adgb@{ z#du5u>rFn8C;-0J%Sn{qrW0A3vp%j>5;4o?2VV!60+QQQ<<3#fH9h$da^F9Kdxg|| zWVjh+O?mt2@9LB4OCiP@kj{aO*b+fZU;1aS1Jkx}m`40{`+^ug67Trn5oneiaqWTM z&@hCO+Rn8R)__BqOH)mtN@^~78xE!An>K~!Et!rtFOhWS8L9^)JlgraVki-I!oy21 zB8zHj>WA?!46^q@uR-KaOxih}Ye4VXFA2a11B1E)o50zqNm8QS{ETjf!eCW$3aSSy zgXh>@7yG5RA&U7iCREd=OlCzLI}_q_8e7QkuNdxNshGDw*UDW$=m>5LH9y=bCy%it zrh1%g(wHs7vCK-z1%JIY@%tkm9U?e4Q>3`fMEgmJ$Bpmv4>K1;aW|d0_HPB<`rhf< zAUegUp3yl~8xaNeA^qgpp~$;s4qRx=sWwj!LeO!eh% z7#2rJ5wC#q2>(C1RcKl4q`a?me);QS`}b+RtGSD{v7NQg*An<=YA=?mHOG_p+*{OuN+W8GQbLFjNMp@U(ujg!GX| zug!~ZsCTB~EIuJ-Svpz~k^ELFcx{KCtR7=c+8jBG^|Cp?re~8#9~IMCDWVRFmvvgq z`W1anEzSYVf6iwxI+ZhE`Y#=Sm$hCgI6j>TY4zP9wOEw=($wA({m-NElh-6S_VE6Bj9;(_sgP zxvqe?&Tu4z9#qbV!;1qBX*)j(j&dm7nNU8k#Xq@~W-_ zY6bnJi@RC~^NDJ86{p6jtVy-PD3k#+$#(U@JgTMuO;h~v6BHU|e~YpP<({ixfbE>w zP4%c~b8`Dt+*3u;=gGG#W>KMiG|H)IPgZ8teShqGY>0 zm>7S>%>BHMAO2?aD~sgYcU!S5USh9EmrIrE^N??lX>vBUuGipLN^aMRj5+(eBa9dB z*XUSE?#{W9o*vhXj5!Cp8~XekgB=}SNLZK0yY7tNFLx0byA}tR+Max{wzhY%+MXyF z{mUW^4|e$sd{ZModj~&{b{*TE_!vL9uzqe0eqQVnwLXP0e#A$9_74hqgikWgEKpFk zipR^LcMMQ4)=g1_$`!Ynwaa;Uju0}g%u)PkGXu!I7_g2}l(g-;1$Wy54Y7A6#n#P$ zhPb<0fTt!B2hIToKG+@~RxCZasL2|)7kPTRN01^ON$B_9D>c)^`v3E;J{7r#U z2-j&Ogj@q?0IykOC7fMrvA0F!DePSxF?_ZGSHM#?Ne2H zI>1vQ$%h$G3*p*Q>}?Ra24~k@tkW3Cg>aoh@?isPLAZ_~L0)@=zvdF_bOd(e?ShH< zS^;C>uaU%j?SM+~*Ggi(Ho%`ayA9mheW2i@(3PaMyof1vw=nb+wWNqC4d&n}Xw+25 zqBcKLXd=F#Ba zo%=;SI092QYJunEwUIpzpq^;0VLk8QgrryGfhExVQrq5K^cG01@rN~SJN%2{+Z0?` zQz^);fSx%A?a^j5uj%NdN(v{4z+9ANc_X;MD)4GDC$vCA)F+HUL$ucP9tLm+3Malm zFz_6bD=N?$RIkV$Lzqs5Z356s)F-|`Bxqk?02^pl05LI)6}THHBnVa@H>d;XH8{V6 z_Qa&C7)2m0=mIz{bftOZdTkB^r4v)26b!%Qwlk;_vR6h=gTu0LHdlQI^qF%%i|OLisMFY=*BUiigHGYKbO9ed{@qI zne9Taw223lCs+P2_TsKFV@FC40l2@?HqkY6tOnZGzrcZir@E5lA1?tstGC2#9PJo9 z{~+v&w?z3v!W=9N6Q~L*g0wY|dvi4gV|VZ>;0yP2zQ0BFf^&3ZlIZ&CymPSMQ#p0x z4Fah<6Zd=ZIvx0j_@LHv2jPe1$s3mcI2r1bS?twKivVe;&>l*eZ~K?0NFj_oIdiyh zpwzExKK=r{7>whj)5+W`U=IHp*$e8CRGv`x6dC084&lxr89!;{;|)lm71~Epi{~x~=wSz)gBd4Q zmfp7W&zH&)YeUsFMV!!=9c%+XxaE)4?s@eZX!DJeqTlxiU3Ns7x&jU+>4~=8J_*Ni z=eo$1-Lis$h5LzWqlp?1Rm>^)_ztr_;{O6=o}Cc=H(b`mCqyf6FNB!1JhaQ-t%V40r(oKSIbkZBud35Ije$ zgTF?eia<@zjF@L48y`|i_NvE&ac_iM@2FX%KwJ-lUQT_S2df{u{!*fy$BKMQ$* zWL}zxGF$YKa7G2o++(*A)l+jJ?|QcQ$TG`XS?LeHoUp%j3b);5iMzR-(j9{D0J?bH z&z~GbvaWtt^C7WEBSw3loo;-JIXFvN?{|N*M~N}rS@u4yX!w_dO)^G1E8kfj4BTKh zcD1_=cho~gyT|8Dd4-xCM*R)Z-(}}m6$b9);lvnRuhC`Gi9Rii#U6C_gG`K>+ZltQ z(C}H!pi{n}AZ@@@)%7O#0>m~Zj2-q?C)12Zj5+> zzdw&ojccPV$Ej!->IXb=fwHC9t9V^)$q&Iz`vx`te@y0jbA_OpHg~ z-U|B4jbp0}(xG_3k?{SIfC2#WdcYY{6ob^n|6P8tX?ZG=omE#Mw zOu-f4Wjmna#mbN7DdgSzgsKU$TKYI3!qZ_Rp$+9l4Wh*JyUC|=Key6%f$9eImOi-G zp_HnHSuFDp!(KS4}Uxipiy}p+&^~Ov&5swr6t0NfOcZi;aV=xUP;h z#lnoD^iA#n1A`%3zY(1&J^)@7waAlke~;mh&^(^%d}^ z;-rjL81;i*SgPn5OhbC{487wC-r!&18Cg5_G&fmV)o(X2GS3P!EQ4Sh|y`y zic_vE`kp5z!KPY?V|Q z2PJS6m<3b?Hz6ZM#>1)G`~!3*BO8j2!snWlse@LRM6lIzv2#=(a4D4JqY9_q7stfk z$KA8TIi-(kIH-1nR#z-@C>3>;1s@$N6QjU29nBhmW6)322w&ujs4XY?F;On9iBaU0 zsR?PxrM{GSeyQSqTTVNgL~;qMeS!#~ZO#O{>Qa+gqheJFN$(km4|9Vxoeo`HR<@CF`VA4pLG|O*RJ= ze?!luz&b|xcg)tBAfrAh3u8bSqn3(JED_&*MP41=6^st9LbkjDo#5=<&6!iOallxP zLzP@PoGytZsK9Q)2_oK*S10@VejbhuQ%HTYZzQrLPJY^0Zr0J$KAX?gI0r}-7MZB1~rDIR=ZFg z{h<5=S%gEl&DY&VrfPgWnI37r&_;#^sldWOtdq=Ryk`N}#Vw!kFbF|iw-V;2iki2V z0-F4*Ey&hc)*VFUT(=?7fmTd^b)0$&-5T|5yM+X_H--@p^~)<%1qQ+Mg_@d3WK4(z zw$HX#01J1-Jd6zlmJ*+M$Y4*)**t=5gRK#$E1{s4SPY0ZxRKwOh;+ z)epxf_@hjvrG^-NP%tK(X%ZbRP;>-RGhu_fJuh+N7!Vbjvvu-AFFd^&t40Jdu=5qR z5tvQZso0}>Ch5W$z#Ina@`n1&_^q_zL;x-%+oDWo=BQgX%XNfYLwWw>RI5q+u<T9b@zkCfL8tc*t6!E_GjsLw=f~;>Djea?s;`f$ zKw7=!j;w*X7AzIOd6Y1LAIEHdb<$lxOW~fQk}c1bMn&-7d>T|TgC9xn&`@}T_1TH| zGh$WT%=$xPd6oIim^6;MTe4YBSc`ucshocnHfm2YjlyS~+TbA7=Veiwzyb{#9UN6~ zeoZE)K+e)CNSstRN<>UD}9$FP1623~Y z!`Dxd)AtawE#`d-MzOp&FI*ltIvrk|>pXnP8Jc2S5YL_a5q#7>bVE5{WCy>Yh#H=A zmk5vy(Rckhi!NmEWOn4CJ|0X~uv<9gm4?GT#k1$E`Q&9X4ptbpHT43sM@GZ(F>YZM z_8G#4w;^bj>v_;mR!4;P3Vxm=X9CsHzCCHX#>7FF8pC3P{n({Ekw&xrgD#z>3N^`OsJREN}jB(cQA5rFBk z<d%~G=F9d@}4i8gaSsVL8;G-Hrmel`9v=Pr;fZk+4FOJ9DAuK`pne^9wR%5ubt zleDd!tH<<_m?Sg^8roi=3@E3Eq+Tx0qk0n3iHVKL<9j8?0RR*JBy*u6$eXUIdN zpJx0#98<2d=o_x7@h7f3e9wtvpGM$BzdFnZF zz#45ux_NYjColtY9j9MYr{dz>OICD|r|?QCn?Rw)b<{xLfcq*LeKbt69fO8J-u?C# z{4V!InM@0uR;&x32gV&eOqs0j8oFw7e#s$uQH8jtlH9zaLOtIC!lsdzZoqJUw7UVFET0zVZ+B?v^`HWvFKpY@}PMs2aoF2DGUc z17qLtsg!qg+{Rd~wt(YD9Z#xR8oE0t#EEPC!+kUIOjnVNX}Bke1mX?Kfr?p&gRJ<`TxF*2MlC=715nG|0>7VeB|lTV z!%WIkwG!4+c=+PrYKC7k6a&q_{ z(t^(6rplJg0$(zci8?_6Bv_X}cHj=UBrX zOWpV!L52*6`47YDI+HJvl97zO8w!1qJMY+t$A27iiR8be2FxLamge}sVU#;UDt1Gw z-6O<&Fq!yq{0z9cn`4qa9+oP9%S)fVj8pgiwIDc8yQE_sDf|15jWhYfsOWozfI{@` z>}89(PrgR3LvjZVuh(&jVtMCM`BcN=B|)8|qELbAo?aDus8Hd{^HZUXzUN1XER(7= z*GnK#af5SAv@d^OuJK{rc7dTwL;45iQ?Sq}GX4Wm=qVOua!YNH*mO`RAk=@cj}=LT z4HHut&esY0;-NvTcJ1s`)9(Fa-^o+^!k%Vmg{%{w?A_4^$%zwogTQt$7NUpiq%e3)HV zL?L{Q8XXhWhDH=cpEiJ+jGcQiC#qyYA@DHj_cLUE@#CLJy^QO0 zf}kyE+(8qEOaoWp4TFNZs`IftQHAG0F{%89&WA&sM@hFgsy(II#n2 zameuj+}yC)J6zLPgu%vF+))53V^)5Mxt$g-{2Ylz{NU#+C~bJAepWAtpetJaZ#5!d zorsy+2(7T2A*VYGt!N*xk3D=>$eodF-C=AW2>wu)dqAYx1FH_VR_Zr>sJ zr!4PnA$puHv+OSqOx!MWiYo!3h&1!GvsAz5Iqd>`0;(5~HF@VWp_qaPN=+&-$9{^? zK&YhviEsW!CZvYJ6Vwt;2u^QAJ=6sfizu9l{h&YLP8$(kp36?4>CCUd?MUN!peLlT z{lsKI=jR_Z)6_SFrM&QWcfh@Nq>jMs<3iJ-%=GhDSM>WOF(k_p$I*irx2ur1V8Na> zv=dqbt-ZebHg;;0E8y#t4(N^XTmd%Mr|!Rwy~GvIL7{&WZ$wV5G3DxO*Oru?pZ;&BpcUF$r54t;Del4dl~DRa ztbO>QV+^eBp|IDkAIPY`@G8~8_uja)FMDwt&W$5OtdUcJ16)QA&PNVC#o%vqu+^9G zbXoq_);AedVvNYSj40luQmf*6D5Sd8Da9*huSN}K>g{%T18VJcD7&0+i{M{g1Z5gO z>dNhHgR0d#J8UFVD(z9?Er*Xa+*f{>ZD3&#poOs zQA<~}7@C6xECOt;?$A`vmI1n8pYrt>pY&#u7&R<|xQMzY0t67x{%>pZf;L2TTEwmEf;Hf4Tkq&Sfx{}4HUkZuiN1TYG_lGL8*U5EIlw2*oXl2 zG+u-yee9eQBzALR`x%TDJNAR>)r79aFVf$x1@8Dj9E`SRSc-}C^mg3{RFzCpJ>QPQ zwgbBPHt+?G4!EH^azi4I$eWn=pV2G^7wzMW4wO^;FCJfX(~$Vw>U1YAE+|`PDtpv2 zg4=#Hi#W<(*Z?e>15aMT^%uq|?bSAV@&DQc4W=C_Fh7!uadI`(*+4g@i$ziX84$M( z+LSUr?<-Ue@*L6IoSC>{jJ5)JDhssKio}M&@Dcg8o^BOX3W7O2(7TxoD}T=ohJWDW zzn&6f`~jl$c4-Xx1I3~~)rjO3EaxJ1NA&^L&iH50>9XNA$OG<~X-&WJ1110DW?;+8 zj|d$9!~_zHPO_rGD9-^x6F_-nf0nYH4Cte0T>Pv(u=;WCUh@bgpC8UErD&5*i>Fv?{b?O9SeD_nxLufcgUpZR<~A%2(}tTf#&U z%63>1eM%0{FjrA-aC&^mmm(`;!e8yE+ph~5mWh97K)^0~w$-Lrx{)KNlqdWV!IrTQ z;URUgxv?1G89HHx)oNz^FNtX+*iLs0fx9HB@%dk>^vDl|Y3xBejusm;l%<-Kb3M?a zcLRk;XLLYQLowJ_Nbe5@o0m&vp(fI;pH6vfya~kdT&q!5UJBtTHMF5i0Wn_rIM~C( zBCu1T?Cc1yH!xoD2fft(nw4G(NIM!~Uh#S6yEjOjqNJ3M_6_q7;N8+x12LjSqD4Q! zX}_ZyZbFy&;^|hjkifR^UA)W7RjQF_SYxWy?dpD?k5*JK4pmOKh^Jm)3TZpDX|n5v z29Y7h82bFi`xA%eD#CQQOa**T_PhD<<{B~suj5DM`;`?N-tXw@vPvo=TW1fpOl4Lt zp>-#&R+i^Mff&6pXZok5?Srj=u%A#PZ$FO4^$1FqiFgP7=f*|w=oQ+ZZd+|E2cn{U zZ_!Hv?8HKNSY6P19;YSbMI9qQ+Th`4{vIfR>X2kFQ<*``2;|+kV&fKSaeDNqYkl^q z6$jJmAo4K(Im7+6i04~>&zbA{J2%_z_t{)cDuM2ohtn`7v%r!*(s`qzBAwD1Ocn4z zMkS@45^^nSQ~>ffbGjFNy9w)uj`R?D4bJx_bB|cCHV`+QNaJZ8_^@gd@;j_TV!bH9 z4k^@S2a6T>evdCZS|8V58z$aszjS1Dzw{~U z2bxEu3hbv`oDC|2D^sFK^cQ@Pgxx|Np%jH;;)&;KiJ`>>9orA40TDv%mfzvBgond< zw>HP?)qm3RH=2Mnc%JaPNlR^0`z8fKd;>z==JICg&EWMn28|TI zlq0@JTT>+;2FuZhDw^P&41aqP$8p2@%dA`(Kx0BNj$DDSM-NYvDq2U#^?xWk$KXzY zHR~r6+qP}nwrxyo+qP}n$%K>qW81dv%p`C2-rc%&w|3vE{nY)vyHB6S^E<<{>k}An zf83YR4+04w@_}`w3Mrfs?XUZ0Vvp&Xo}mO-_!N2z=tWqKS*EX~oiT*wfv zGsjb@0>(i(9c61~+E5H=+}Dz1qH)5O8@Sx~>H3=_ws^lMk63NX^c+1!Q`<^aX>e0Y zlZ}}bSUqEST-2;)H7M5%njPw~@G*TPvEJH7rw+1v`Gg!1%II~(jvpP^#Df+M~ zn5zhX8V$}NPZQ=O`bm+BU9hzS@_a~KlY%~QVz9J9OE-+U9qJl29pKi8oW7(*v=oN(L+yE1b!qiur?eMdovA~q9H3njH9 zG7oi6RIv!%tG-K7kWFo81BTG)luJzCWW>9m%-l{)au)V?*w`S^vxSE!RX7~m`RAU{ zkm-Qm>)Y1(s5a@yy}p%QND*zePIBX0!9xT>d)zBK>+Yp9Jg=RI*3$#aC@jv#r(2D@CHNb^GsL=u0Xorb0y;yS?SQQM2KEkmpauN>MtK-SzTc*(AV z1R`^9f31QUM0w*rk8_~o=&g!RvRtLwNOHoTjS`t^Y(katG$fcY$7hz>ZRrqIqID8! zoDzsN!EdUKa&bG{V!pK4Jtw z)b3W7)Isoe2Xt?OaDPB_N`fyQY(a1s`B#w;{k<8dMY_Sq_FYZaaYh?Bj2b;) zmZRG7vULg854{?b9&?Yfi`24f*dsZtSL^@|`8#3HZ)n#jbQYA3*AKM9{R1_tG4gBK z%Vu$pQs><$`|L8yi_dBZ`I}IAm$b6kdskp<9ifcRB(u+;cN~MCzJs42i+>1;UVTCN zz&h*qO-7NwLX`GZRN?abN$6W8tYBmRCuT7suArmdPwL!hIU_q9<4)U_xkR%zs*j>0&@EmV>< zUgz|Q$X>_aLfB~7H|d_)0}PL%>~J(S3rx}rbSN>9ABY`$CLSPjITDZ1Iqf%h^C|AP z2U1LIs6_S>QH=9u9w?nV@{rzyQ#2_i7+9JoUv02Z2py6}<;W9LjHQ>vfp6p<$qdMI zjrEq;GWK6Qk)c$!9|Z7n&86qKEW0_FBz1xCGS8$7*2Amvc|gb(%wwJ}g95tGo(18$ zTrYPpCioSKxvu;?V7;5ixb*Ye=N4_pq^_?RIj8{X-7>ZAXLcFKGV)<`8%B_&Jl925 z3>$DgjEUw_8*pP8r|v=+vN3uIA>r@rq>+yx!N z>Coh|3|Wm#Uf77=hu@IZc05Y*OL`s2iF~Dc4*?D~TJrOL9=cbSI2{()(c2MHK@3v# zEK9Q%IVwsza8h@r8B2VQHfan)rfP?;A!P&@<2k082dP|C%oI!I#R;#lygd9EPcb3_ zLbQ{2#2>m51;6pH#amu5j!QCH?-pf5UO=jqMOu}gvUWDzW6Tk*DQ2yxAZ6$5+%%OCPp?V>S zF0ic=n@nn|O=pb}*}X8k#&R>56CaO(ouS!1ahtH6DaN>rW>0sFZ9?{{xF=Yb>}QN^ zV)h!F6HJ$oof*ei^(x-IRhx+Z#Pv5!+xuu{4dfoYO<{W!emq+t?(NoL!$TF z56=XML!w@B{JqwDq-{ciBb-AMpJJaR`y_?C{IQ=Y`)|mdN#hMSz>`?#_^0CxD153J z-8g-slVyxtkGmL=A50WP!Sw*|L)&ho_j|9F#~pDtz5oNt>){;WV2@PX5H1YUhb3kd zXGg}AdSt8&X8WLwc-Uvz{Tf)pIk0!YG^JPSkA__6X7%nd6?hnj!{>?rws`NYlyE+dxH< z(JVPKHEQwiA`06I3%+GCu*r9k^pu8bEEo-f@H$ypVe19Bu`3-Bl8?Z4z^I~$a0L=K zd#60x{6^!P{=z~S>iH`4^DJd7&~sdpmeolJXjDd72zOvJ3d_x9%Bf1l@}NcSGBjr^ zQY)5lR~&om+Bw&h1x62X9&~d{a!XYOwIeeJG{w{}H5MMQVy^j`tx4Nim>YxY`Ax74 z|4DT^t7^Vwhc@Al<&aVJ2%A`y_{t%5D*ir^lahyEWW~?ICaBU)Onj|y3Q$C^* zXq&FvEZ$96g|HpO&BL+LonkNlIiz21t{wtFTu47zd^2dR6=->5q5Wh|P(YhoQ*sc6 zO-e$;j_u9wt{gqkO8zvP{Gfw||NaP*RVCMB9PD+++X*+{r7~&0C*%^8J{Qi@G4*$L z6}GRGVy*aaW+%LzM9=^DuXO&SqCMJ0De(CRK5i(QLMx2oI0vDAFBJb9`eTy4h`<}X zcKFTy(KEijjeoH6TQ49u3x|3BL>pLo9Is`Y@uW(jKBTIe?5KuzD3MSSmriE`S&+b? zE5;HBX@Xj1oOqO(TXc_{hFILFrtGI0XsG@;MS()`k2}dwyNpZOol;^&o(1=cTQuca zu^XA5Kd8^!TH6EfZQd5i1Vl%l!1`}cCFA~ka9>#30bgN0Zv^2|yld+|6o^IIUIfb2zV8y>8FEUhDVPDMj}EbbZ01Z+uw{wFz;S_MW&+hft3{{ar*Ea`R6z z<{m^b37y`$Bxgxo4we&cto>07a)H``!D`Twh})RiQQ7+j-kU}V-jLR&YfR3W4j4as zP#W!mUgM0*DeIVKS>f&E1S#Z%qsoNrQ4@u z#2Dvh}hcV{EOEwu61*0RY%kQ zHoS*w`e>kh@zBT{bkSW+o0@o61e9B(a~bU2N{>iI##wT!0FgL&kosa24*5%M248+V z=0uEKdLNy)3aX;0?#`Pho5>}-{b)go>e85I_KNv|hlqcooC7ey1&%!poIe*KACZ{S zm>Z~&JmK>WkA_1owb_f)SxkK{o#r0Jg}p`THDnjG&A(NideV_{`mWn{Y5vBVUyYUb ze0JEyE6QCJmnKR2bIihA1*Z_{Ly>p12f$s%3XbGOw~`trVlWdc6YVYg7S`*L?@eJ^ zHuSbHaa6D)CbGYjKz{q`n+LcBKjs)YK=O)hV8*~JPrL8TUP}=lE&Jsz{Iy^b&5GFp z(pin4wbj3Y_IA2(#B3#DD-yD9WVyv_EtBkgXr9aV*8^tWfbu=u>*$)wAUF{SSl9HB#(}u8`gNPgj?ceBKG3eoUnplRJMlA%J@Z#fbZ-5Wk(oAC_1tk&bjzDfvKxJuwoZlVJu&p} zLI@-OG>_OzlX22xRUh>IxtZGvYr;fZ)SlGXycm8+uoYHGGi$X)@o?BSS=e2T0(y%8 z`XZZ>5o zRC2w}?4GiLN?)HQ3C}n?=q`NZXMC6Oyyr3AoM^rd0z3JIxCUoVR%O9)SQ;hCF)K!r zDDwy^4SVAWO3FY8tyYP zQ@822m%4EG_g#kdnJ8Vm`1vg&@X<}|GU&wO7QL|EY+3ie0JmLq;d^A(%IRB?KMpLV zTf4IkqcqX#E*O}_(0MDTQex8tltqAf{KX~c0`6< z(_1l*0AQduU%(&b6u~0g7wbjALe z;l|@H-4)zdvo*Fed%f?!-wzc^db+l9O;Fj%}>g~f-VSVJ1dpZHMoL^a}eo0SYN>v2vScgdd&JEOOK z9!lQV-)z83P-+>y@s3n;d@bwbnO^~Z9p8>xL9`+|>HMHgh=PK>Rd0*$&(Q;`qqoZ8bE5x+)W%HpFHR|T=!ooCzDx`vx65Ny07b<65qw{-2`F2otL5QR) zHWDl?cEPBn#*_OmbhNfYT?$C8BXhPMKP=x#siVsA_+2{>qFGT()Om&EnXm!PBETTd zatO6eBf4e^CGGWm7a6N4N5O!*LW!9#?R@F_mL1MHcvXg+Z4WaiuckAVYxCEOpj#A% zweMt)r|g8QtGG^gA(Y2`N3YA0aiu;|`lm5~kAidU|Vvr|f z=`{jE32!WN%ld-xKP0p(`mP>n$*-wFc$1F7$9?p%ss#J93GyjHc7BuN2l-360{`S1b0k6LW)JHvPoJ-pcfdZy;=YQ( zFGL+spjwv}U+ zz!OF6j1IHD2QInQ-LUf+Kd1IDTvY3eQQEV6M!hePOe=!YAb-%(x zf>HZ3Lx;i#u67H#dgT-iI8XAIE1l`K3o5I2 ze5qF}Jk26r7;c(3RfC@=73fNgBA?@l34Kn3ou004KnOrRboof?vx=EXw$#kxly{L=D> zWtOSN(guk^ZkrZ4FcgyD{DVtK_&yAsv5Cu~MJY$gTv;}PVZb@*hAPF{TDcO1`Xiv6 zitmSlGNvfZ8B!GA;VB=s5!xAYsklpNW_v-qSZ)0gwai~vXbIl3yh>j?1KcyP^clXW zBIK(_;qFq5O=*VHHvL(r+gUhg`k*X60B=V}LVVjTYfp&wPmB+hpYdB<_RV1^@{k0} z)&&Sv#;jG3*9nC$0k}OBF)J*FP1`tS7rupxHxMjOpAL2WKV?ra1B)nR8Ak${>tI$0SCSJe3it z;2{T1JPJH_b9@SrteOMVdb`pKqR6;7r1t_67dz$A+W2ZRhzAjUwG@x7*W|&AX|+Ob zi&ha=Ux0?JMz^st$yO^Sz{Pu1UY{UtcI)$tP8dUcO4l<4tD2?$S4NOaIn)5x{n>`Zt;FKYZ8^J)#mF10V0Zhd-x{S)D4UH$Ka7G(HSwA+YY?06M2{8BcLkg8p| z9&r9y22A1KoRTT*l_|Y~u!Y=Rupc`=*Cm99r^(2}@0eE1xdK(G-jS!Au<#EFI2*eRT7$iyWYKMe;eIGz4E*Sb`K^MY6*~YjKMg z`NQtHI&$B`-@52}nWXOf$3>Y|hBNx5<*jq^PwGAAr66WUJ6T2 z_*e2wd{btZF-obwSYiPBD-$`?ZvI`UlKM8%#(4h21MSypBlAV)&0{bL{Cv5On(Ema zUe_aU`RFT{0kRnjU8C*sj!$cArdFEw^?kYf&D_9#(ap$XydDv&Zp84$^2!gD+85h& zTE)IO*Xw7QUfOfJY~!6P5UX|rv8}7WjaSds{4>}&#f-(X;D66u5@`iMUvi|~cni6D zBdK}3jYW2KQr6>|7My3W#;4s2eK{Rhv9fRd30!ZVSHauG)w;utasG%bg7gWn&*R0r z?P5jS9-%1B^>VcJ3y71gf;7U}9mvqdg{PWzKADNxjNikb6mw6%67&*6bIUbu0sm%b z0LRemn_|7~Zf8_*@tJIY8g;h7cL(rZbC&MX6yslQmd}4hlVmqNi?0j{K3*o)ZDJ zJ9K)w;u--p1pvJYbGKqu2n{fRhLx#0x1+=qK@FaTw%nKO0^}E)mb!BAwEEZYD)&&1 z5oWtEimLq*21_49Na0B&&f^iFGTVF=sPBQkopNBvE*s9ph#*}Edpr=D(FHplT5W{1 z8TI+rb9z7!_OQ#vNuVEIddox`d_(w~5_K7ET$4Pdxe?Jcv>}KtDAk6o#u&$lZ3EhR zm7y@|3ejKKs7uBdat=(RfB?C}5RCR@rRX;pQ>lMb1@1yMlV0o@1EXH#nQMl+u@^~M zYsPlaS!l*~j3r!I-*5}`f`PGi_*rd+y2(3@EDht|U+-W5CqKS23_~xFGHb>js0A-s z946b}E;wZ}hDiRl%GlS=NMAH%(M&xM3ll~tea_0*{vvppG+zY&UPFsKB7YM2jg5PQ z1_Gk`pNoad-vI2Z)UCue10Bj0BPK*;c6UY#2$#_Iy<5sSX8X4Dk&?e_pA9-78M!Ggccg> z48=jKh_%A-dDO!Aj=JuV$wE77MXaDGGUW;4VxXJ~lLy-AA`;ULW*}-HpAK0B`ag3!nN$H4HHLCEZ?E7%=WPyZx$Ile|&-ejq9*W43Ii9E zT%JNvXz@Ign3*)jN<$DJ4#@ExKg&1j=>S@rXa4C`WONx^6QS6Xsx36!7weSh&ouEae|QO= zE5H~$OYnK$2j@u?i;ImCT%gSi6LamG)3 z-U49IW5jhHR?4CWbP-m~^G9gQq2h{Bc*T-I?~2IlR5}G)FM_p7@l?A<{{B1t{EScB zM8TYwIZ;kbdCvD#K>n3k>!f-&kjxSl4HYAWhl841gY9EvXIg?A#G8s zAW>D}8PHk(d5qLyAM?!-zVyF%eDO#I3d7Hd?{vvqLyFYTi|DCssx}zGnR|M$kV!^T z_q>090u?_NJ4*eDH-t376bCN`3@!z9vu4QTB?m2$>*py(&2uR=sgs%t3#{Jf3$w+LkSuk;_zd2YkHAVQz z?CoKOz>u7#`e!AP50(PZ>!-geLi+5`hF7=#Bi(+0sT=3_7X0qJXd-^$7f(gv4HDGX ztge$l{6bPW!>F@F8s8&^{M0O1q)t=hnIT!bg1NG0va0&me@9>@or_m~V?GYQ;cfq4 z9s4KX;a@rytGpqNqlBtQkts_rzf_i`UCXAlK#r6HL691h0xdil4Aq-v!aT_22rf?^ z`l&{vUx4s8z)#gNHqUG&iiSbcp%5=l zZH4FF)lw(x$K!L)srBpv0P4_E_V$PKq5>b6O=cvn_LXFn#g7(Cr_4X?3>kukzUJ<@ zjD_BTIazJSVi=#0XnAf?Cv{}?soGgyP%FNwQ{6*rw1;EE;25L zH)RjNm%k3LC=Mr6{`41Y^Zz#lr9&6J0{r(_^FsWukc)rrTmNFo{%g!zRsTsw2A9^c z0uKEVq#H%t0@g{r8;T72iAFuTM^im)mcO#)E%bQiV0*f zU7R23;yjK7x{0Gj2hNCz3yVwH{6&{fzIELqoUNYwcYOT|!HG{}hE72??UtsS7|*Vn zh_h@j1+Vo`?Q%$uR&u8qcd>QYQyU=ytWdzUDqnK{RFrx`o1MDTnJqY-Ybr0aX+SPwVLXv_G(TvT^b7pWKsEWsxYKus(&mth(VbbE6RjVx1#vu}{MmNo6R z+wR;ckf=o#KCI4cf)P?0m72I(nHiR{sib%{No^%@3@@=}ZMjz;{fJiN!jTU4?xc+B z(kz%K&HpZR@+D8J+1#H~MTq|ssd}$8lwk{%zPFgpLS0*TT4kd#=xCj+v5W?89XcufncZV*g_L-*={$_E9>lo{5(`r&C2nKWVGNf$ zQ*@gxhE9f~v_WGhHKd$S8)GLj;qI=UU<@;fFBni(@b^ z%AvI|h1SdL(MqdmSCs9TkND$(BbU)k=EHaeh4tM8Cf|{iC*8urP5A~%H#H5@9gOYH z++$NRUeVJ}^L?12sx`%ewel7QWg;1T83jD|O`8GhaIjZo{+$#JGHZ$xlAxu?cE~#9 z5Hz(z(UpvoDV4@-;H+CFxzz;*Nt9>HEK6)?1r%~`i^iFidW7U{{#%THH-sOeIf#1S zX)>aSKtLq_KSTJhO}^zvN_T{#jVOsi_ybzfx-q3FwZ-K${0Fs7 zn{}6Mr;Zzk;NQ>BVF&_M?gP$)nD==IM;jiJIDW1e-uHqT{?o651J1nWF4D8>GPAJo zoSv6W=jp$>JA6N1j-UN^z94rA`D^;SkaQz=tw5WRcrp56kh(F&*xH&``;950^=Or8 zpBp>!hy2hXG;vMu1W}P%h8nV!B9rTG-;u2{veYg)gLe+ z**A~y;NJKy`vxo!*BJ>4Qm$=N6i}_@<)+ZfWOkRt{`9&}vUG!#d~eM?W1c$OEFspx z(=%P~o^%;yR<+GpjN~~FDm`Y=T56GeYfxCrT#CJ$tYOWa$;e_YT_w@V&r@fen0(|6 zuBoDW*0((*Fs#Q6von1sGl{Zs1KqHA&oDLzmwb**{ATN@1CW0T{)t(?&k0B~)ruQ& z<*S#}hG5{J@V!)1R>^oi+-e*rS|J<%<~=^00`l=~fhrN??xxcdVe^Hk7?yBrgsOs|kt7T}DGh(LL#=dQC$XLgP< z9#c4)RO$dn_UCybb;#V}v0ZqCk4>1kdP3Pxm04AOW2(pOmy_G^^gx?hw)w_5od~*) zhIRVwZ%K9AR-zH zHElB^KGuUEjEduGGP%52IPJ+JSI=>?;GzhwlNgCopFkUHG~1dM%tEXaiO=!U zpp+B65wz-!*d@t>g9*S=a#cI8=%f;-(mw0i!YiyaIPR=xB_bv^iU+`nqm)WXgwsQ? zoT$KDn3*DHzE*=T5nHW!gEbRX`lF;!K}B$>2(!5BWEgV&AWth|?OM7rsFJZjn3prxc6g=m~_YS~F_#OI6JzrxA9~klc+h9|x7;L{urU z;e&LjFfL|P+FmlVD?(cd@K$$ZXcYrK>0z&!lE zPiJew*5$Jj%recMO;8IDl2%X`%4cFW(pOsF#kMy;tW+Yazy?(c!C1=%U@BywU?dw5 zwM4ZB?N+-UlX-y>4~e4OFqLqH`0#~M;*3GK8_;rB1H%(VF`oA^*Z76iw=l`#Q~ z0b0NDnHYljjLnxEndqYi`Uijnna@G0&%o|qYB;eta#-r zeB=Utlu<#z7lDCSzJPNPLQnrRocUBx5(3kl8rV zCv;1O97iaw#ck}rqDxu3Np)FxLqA14kj-tKQ(`rHx>EOqJU!qSB%1+OM*~;i@lLP4 z&G98KcfSqyyjcOiag%vuxY*Ad@d%OYG2XFCXbrA&EjrBK;kd;*{q~XuRy}HUskAM* zuz@n@j$pWU8$%hA(_%SQRs`F#cXEBcAv(hG*d!~imK-Lpx=?-_wz*Ps%B>ZIY$rl- z$b?=s0E*SuuLna!K7r|)@r1(Zo+bcOpK0BnHb`Qte_EK1)HyxI*Bo5tx-3!Ja;!(ZG%elJz>dq3H?rj z#+7e)f_(`$SI_}D3__IpbF9OmeY=~BiFi$IJg}unIZ0DixIB%c&z*U#Q)ZPX1 z;KH$65JSV>kNP9e z1cejh-{~8x@>+eY$Gk>I2=m7dX_iT17sK5^v)I*dI&A)=)UVJaONW)0Kp+#TEiV2p zJ#^+nI3!i#w$suIi>f#Fdwo{6x^n?-Ua8DKjbx{G#hQg%%XW?X8m+Y1$aT<{Ld?;T2*U>1w~B1X?DtsD%syS`Wu_ASfAOO`T=pG?v{xm*#!5HAF3-W}JC_Grd!#!U|0o zc?RHpeD$jilmbMaA41CoV3v%RTFJ@WXo%ayu#}`d{DKrE z6f>1G{B8+2`F=K=gO-_a)bCTq5D_q4%4C{+q*!M6vx*o`uc5-O7umwtPw)3K_=HW9 zEubq{Ey3;8-or%$>B+?P*Row_&fC+P7q^8Pv17BcV$hx}F}v$6(9dXW8M?>nunFM; z=AcbSSwY^x)7j2xAhHa5MkGv5KfNCsS4)Tg#IZC@xpM}0?l1C+&}K9dQFFlVePk*- zrVzQF#-K$n?lnQG|F{Obw`DFlvfSEt)AH|Zq>Bk?ic`jOCDNY3GM8U<42$$PhQvvY zytl#v*D*j9F^DDtB)EiDu-Xj4y;1oN37ATP>X7qYxK%Q{U^T83QWoYPQx(_a(dMQ- zBpy5EfYZULX!nS3b9yq(TlL;1isDrw91c0;lI9Y>;+T#tm%yR1j3%3R#81G5xni$4 z)hFx(zoXe+D34s6ZiYV#uix*8+_OwG`Urawly851C)o4v+s~o+zer>Z2xYKR&IO8R zNQA^pl-!4M%X26+eF4o$Dr+|n4hdfnIT=*~4xfieBnnKy0Gtt-HKbbDaW*(*Di*~ACQ~_h%b>dq4o1Qz|XIw6OV3| zHOLgYH4?v37U!GI9{1}W1@q&XKL78G6INcZ9m-erz(PZ@z)C~4z|vhFFl*>#v{kA> z2kuZ{+46$@kbsx~cd#7P+dSwnrqs)(A5K5+e~_z@G8WFaA5bfM7z`moi%1r6f`XNU z%0kVu=?-WCpMdGkI)HJoPC`+_bWj^g{igG&*khN*KJTd5gP*q49G1ZD9e}{@9j*xr z3m`XVZE+9}4!*!%&-jTsc3g!sTvo^d_fxK~x5+5eFVZMyk=|h82CKI0noAsz#1ieC ze(?ZqpD+~(V#7{1^72@1%(*)5j+1t97Hv#e{k@z96{o^7+u*LXbo+?HrK`7SL%l9v z-BkJ}e>v74=^=>jBl8}hXIClWE8)M>*???w@+wQ(VB zZ_=Fpm?G6$z zoyT_D5^1ycr8wu+Gg zjkvkt@~BUKeaYrw{Jdo#!6biwAmW`$KndLQAXpC>*^sDlDE8$52eC#`Sx;NKaPGcJ z61SW<9PHnFYRkV}vE>F%G9E?bGj=CKWfI5W;VSybDP7o)D#Z}Xsq^g|mh#Rl!Akmm zKz(S++IsrEk4hrnng4*m^aoLU-@W4L zl^uTR`PL0qU@t=x68+^C9$*4{z5i4zSPJ?aZv8aKu3xzX(Uw@Zl)S+?|DfnI3~&sS z;B1Rtsp5O0kK-T6j!)bi8m%3x-ASl`VcY1(c_@FrMF*tG>XNbr3az^U7uQ7m$nIz6 z0humvY2u3}J(Inb9V9=2p=79=EMz@gl z%AT3O*>B;&)wP`*=+5+!mjyVCIbc~!i9fPKQQgMmNAMx$gS=DhaQe z{%_pUC?TDzm2WYT`W6$3|C5*q+t`~}|5t{On4OE$ziprDwkkMksD9Vvrc$fIHEq(h zZS$JRid}_|L+o^@KZYa=YK5q4?I)aM(rnxguFFVRK0&_%{O$=PdFT|e@B}{6xeq+9 zr;Jm;B`M&YXL?RH0l!{6r^nVlP7L}!;SEvQ&|cJd74Jf$7}R`9_pQ-(Di~F1s~Od5 zDt4*yhYJZYBw$H|bt6PXq$6HJIkSNP-cU|&f)OoDsC3qv z{h~1FI*W$e$S~?CY@5mXq4~_Di`w%G@u_9skqW0@`*|l`?>T#F53oOq-{f3K7e zwe)H1s{cB;fH5Ynm*j39b)ePLX2HkmwB@XRzdB;G1NSsyDBTFHz{#88`x}=N)!LbB z@2yPIVBV{$6aV2QmUA7W+$9xE=35n|(lPV{`RnMy2SLJukCvw|zsxgcy z-VSQCN&cEkvc`Tc z+S3w7hz*^t5~4rC8~?Kb?k-Dz(`2y3A9$?@Wy|-BAk^1cHyu$AA3yC z@N`2>-1*n?vVRJVG84^ajWlRU&3%BhkPAo^tg^7TlRX9rKerS(S#2}_Z^rj1vUyYY z?(Bgis*KZ4R)pjI{5Sxki-#7oDL4K2^I@AM5o|ep<<_(NhRW7e?z2y9g~=kBX%U&W z{VN*tYu9R#&`?nw5{gQcRlP)Bz``S;;bZx{3Glu%9BK0YhFq4gn-@$%4ykS0Bjgmw z+TKsnwp;P%O%_rDnGqe*kD)dvB*!D<_tc3Dq76qZHz4a*%mf-8aO3^fS=dS9M@FNT z7nx@&@Vp{{cbt~eQIu|dzc>|Wzrl#rRUsRxN!BDC&R?-6FT!enW}I`(UqK>myMG~N zc?~d1Ovubpc+_HDQkV`tvv02p#m9`a-9D3VZwa|*;B5{@#vUiqrTgcmZw~ToaP|sm z#7XXoJO%_gp#_h#9j5S_r{H*0#O!&S;R;ZqylQ2pm|DnX5MkxdpN8K5U}0bsOOZ{^ zBcnEM>6H@^Ato$%WH~DC(!WW05A(BAqRfpk+>$F;A&ek}ws0&mp*7uD*lhMVl`B z{eDFoSv;wG7Q`vYEy{Kv5u9z(z;BRSdR|}_*qH9^f56Zd#EtHkJ zz(|}7Mn{xna{dtsa%zvA!5_3JJBFK}BQ;PsEU;%bb(e3h)}ifL>bv)0ifOmLGwsK} zb|{&1R>2+wJB$pcq+5BYAF&7EYQQQXm(r)`m~qF_ZXO^ut(@BJ^b9%~E*mIEWY+YF z);AGC?6(xF7Ogm<9q*}bDAXxjvX;$uPH0jSHj+YgHyu=mon$ZZCr2vpkNMly1IJ^k z9|2!PWj9OQZl@l0H`Hzem`!V4-fW6xtSXaRMwpy89r7N5Mh;bHYq472=Z1`Dt01BL zXKlLuFd-Tx|7@}qv`?30h(O4SzjaY)VIXEBXe->cWP1#^rR25Ts?Rptx`(|ae=Qhs z(pkeYJrvEVQcgU(t~#E?wl5 z!r1AK!i2k1%;6QjwrtuXw6Wdf;;})^V-+CUg+jX^*pMnttm}3Pgdmw(_;ZWEjbjBL zy##Xvaw{js55%xCrF-+V>blrF)lL?hF3CNNH?}2_z#E#SFEBWMY{4Otw3hfmLYI6a zg?+16CWCzHmQ7v)>9d5-H00)9!H~aSai4><+Sl5n^&ZyV>J?wa$rvSEgXFg$D5qj2 z`Eo*)>c>jO3EC?}N!Kn(AF)y@`Nr=#SJ*zx{h>-Z+)lJm->~-6pycUQ?(Nk<>*^{^ ztx-x}9>EVNz&iE(y2+%abw~N%n5<`1gjQGHd3M!AiLOvlG5(?=>(`WVS{mk-M}rJ$ zA;0gJ*BQiKh3TUa_FFIeeeuo+%CZ*FT9fg2bd{)280wJ_;wID~QLBXB81TEXQlqT7 zTdcqJRd{uOK>l3{o_d5|b-ral1oMBr3$gsR2=>knW+vY#dj>@(dj~To7f&@8OB?5Z zuKHHZNCVUtv@dvCo{4M1DEf{hN+xkfU?MB2An;&9eOz%x81h)aH6+QzrMVl^JS$&} zTzm_g916)ZWNSEI(z0eKqIR;rl=V%QoOOL)QR`pHosTKTt_gZ*t2ZByhmW2YzZ<_B zj^^~bUN@xQ+vG_#u$vfw#Mun7DMV_*-S_0;yb3U^#~|~m z0o~&FxT7aP?N06|;hz+t31$cH!hB@pJQX2oqu~S(?*G8@3Fub>Q!vu(56ARDQlNZA zmZy1T-Y(yziTS|Jf8|EeA20&j`R$GBgTe&%bFO?B?U9CaB*flGvEP#vRX3o{5LF4x z1XkaSF-`)ld)P3jeP=izD1Sd8XlI`V+Am&#`W0onde>H8&m87+IO!`e0@O@RYmpL0 zY|*2;PFC3N?feQEJ+0o3s{~)Ynxtw@XKQp24jH}FXu})cvQQMflf>v;oS_gyp%4Pa ztE7_&I}))ApDjW)M|?eRR+bHkjRW$^8|*U8LFeuKFO`$r6(LN8-EymBhNj-pMy9o= zXINon6Ax=!179-L!u}GSQggePBwmE-2wbZH3eA>e#+*kCs>IZ}o;hn-W+YM4>#Gf^ zzQ(S(92>SUksKx;#Fed9%Z!u;vtX^&DY-~$(;HF>nqX4zsBypkHeP!>{#8u+Q@a@b!M5+tEc@upW*)fXARS`Z8IB8KqgV` zXpNZ{uhmmAK7`G=6H4WewVpoRd3?KcEXLV zgxVb{h-MmSD6zG=gx_q({&%wJ6UQ|nT+8xC!x5}M^CZUJ+-M}wvmFiXq)*mKYKorF zXVwN{x(oqwu8vAFtR>>lRb|sdKQ#;;xt%E4#VT?pJQ5LeCPJ$7*dFkmQipc|OFer|s@(8`HLJ+qP{R)3$Bf*0gQgwx)a9cy+bA_aApR z-iudps^Y5?RZ-`BS?SDQ5|BANPM3~w$t;CkWEkLXnVmyjl!>+O7?y*Suu!bA`5YGK zSFslM&e-!5Da<>HzDyQLi$s|^wg`yl%NDej-|-^W6ilw%Q8WWfxbgR(xvs*@n~JXM z9{Ul4nac2iadlZWs%%}SfT*;$Khxghw9#4Lb|

1;yx#JZ=mA7O&IlleT}%fR+XszZUgsl3ayRJ>;>~1w!3%EjFH%wTFJFFZ<67sWxGH^Ocf3}$s6yV* zfR^5E>+wG9G&fgZFk?>>Es<=hT~Fjt;2MRbr6aK4w96e%Rwg}{Zn?uT{5g8MS|?EM zqV*N5JGoz!s=57GzTk2OCa4D!!S71y)>ou;byT~ULVwutMu)nM8k|jk1HDVCxVPG?Np!@7L+p3l9DP>5ShbLWMp9p zn7?Pzb8B5!;D~au0m{gPt;%*?V9hPQcAB?;If!+M*aAkg7GuLA+hlcVPB+3Gv374f zBr%eTwV@m78emS;?^M3%y61rOHlGAD4^8Nx*hxyCThUY@v#P}v0}iEKdr(#ghI+w% znr(_<<Q!SXp~=go81iS>0kIE{${2nb!zP8xlF3Nl zKHuIgpV5j6n0BIZf>udeyutmM9?)l`B<3g8t#kq}!1y)Z(y4C5zPbT&4#! zw0PW!5CwXF5uIeCvidq^E_8WM6Um#1f-Hqi5vcA;aYBBfdw9<%!y}C4UwETZ$CeyJ zaHm9NN}KR=qnD*&aPlsgtN!Fi7jsG8E?nJzJ2txSBA8MqdT1iob_v6^gu8z$p0{j_ zt=KX^R8d#+PZLwPD&c7}UKCt@LxZksb#2;~DgBBfyUHvIrKfHUifnukv7AusrZ0mV zap(y;gi|2??VW_eCt>3rHR(ZV!koljlN=UFe?&@NGNspWuEknxw-)u9L*z4)*o{nl zddjyTe?``I-MiVg6VN9!G=;QTBGKqgjUC_M8dtQW zN$h#BN!;pUZNwE96OV>MOzbNitf#crRJ;X@9b8jPA6-Ll@zys&_X#AJv8X3*^e$vR zPCwJ`nz9JvXJ2&Bd*UKp3ZH)m#0_UN&E-Z1uzK=ue8frosSFe7v5eGB41cK;fJ={%v{jd*sF z*=+`g?bnXvN%ggtL*w#Ysh0FRJeUV2;n$jPkK*)_hGDt4bE!F7wcv#vpD-H((?Pe`0ubrhm| z5+lv3@-eh<7^aohV8Ub!yHXA-nc)yi$%5U<)3Y5duAZc*+#Lm7qV_><@Av*)(3~cL z*0>C|A@az$Lt~J1k9l6ER)FQ^@!s8MIz63o0dmu^yo_PjBtfr z`e3vwX7YTr3cm3*tNyZz*_Jfd$@j%kZ zYHlq3-nHZ5r`2!6dSki-0a1cUA|p4{EAC9aaa2&|Gkbj81an8Kf>Dq7B(!R8w;}Oq zju+^^9d48`iCzH^CH;ISSaLCovG2J$h8|8*-e7$=0ifrR*D%uD;xlTR_7SUME|$t| z=u?V8!ax*KD~jn&&}t9)V89UUUQtwF)!S!Rzn)m5G6(Uv`xRV1c0|cW^iAMIw_qLp z04n9gm>VT?TJkjvH zvZF2dC+21LHY<#ZX~}j=NS7g&<&1Ab z?O z3m;5Vve2Ku8*Z5bl9a??rfEN*qa0zVvP7opItsI_-{7^7yG{d7!<*{A`B4f=Wh)wP#c^j zJ7*xkqNkLW4ilA*)M2M{JxDO`SDA}i5r(l1Q{6Mi&;uPRY6D`qeT&Z`nywVHsUk&@5!ka%5SZ=`E*}$lI`> z9ZYd}>VR6JsAQsMfJJ)ire?r-g5Lpsf582@OG*7x>X`)3t=Tnjob%H13ZAxbV`;rp z{a7Gb^X;35Z<$23PgJS43|5kAZsl0nY&n1VSX$+v6(qJPCaLq&YGU@x(tN2nB!e`~ zFndZl=;ydG@@BVmo79B2I*TQDS`c8DApbPy%XBeXF7kFwo>QRGylTr_4P8g13{p;< z<=;%DJ=p}=5t+kosn`xhoqE3HK41x1F{)&5&Tn`ZBR!v1XS{uV z(<{r~I@`s~+RfgOkOPKzS&0<7d=-eQXZxLdZLwba+neLkHGaZG67rx?pU_9pyFy0a1KX?TW zz_~Z1H^|C%eq!%F3SHy2-Sqr>pk!Beb%hx)FqjrFFj)9MD_=(wd%zS(Kr|GfZCQ)X+&~5 zFA55k2CP`l{mcspY`)!#3y`N_J&>W}HdmWH02=`U3q{3IxlKW5Vc!>_>F6pO;RSo^ zatEsQnhRt5Wn3)P#{frks&v~DumDYnwLR1p(1^7!ZvLz;phz>5uO_5RGh-wk7@mkl z{a{tcP-cKt%IqD0jK!-0Zo7vIx3ezWEMcw-%@NbYvGb-v)JblQqv3l@mWQ0^xInjivm;A%0PUzyoy<0x z7Z}3y#F%O-f3r|@^z>QH$mByglv3z<9NJaS?K({(ig=>_ON}F=t;^2^MVLh#aTmx(w%7sM~@dvdk;2DOk*(%tFzeeVaW8lWWjLfkeKK#q=A}~RG@)7xNSu% z4_(@g zOG%i_&6jycK@_J)C0)!9Zbg-FCJsFm4n;SaQ_+lkQlhKwgubl~1{z1tjv+@zt8~>8 zt%iQfu~J2mg(PC#QY{lx49zbo4o2o0+Tqfc6pzivC_3%n#Nt{qmWjoNNm8S$?B*)9 z7+454-BZ{%HpSz`X4JuAi{q(X^&5G2FgYu>LNd#oD`zm)KTRAvs?w3mVaQBL#b|9XtqqBky?lTD>*4*C)O!+`1i+ zuc2l5_bN1bf8uu?~lQZfdQ|UQ8GP|X;AlZ1*QB(hAyx*FwO>6=!a(y3Zzz111=?h-SK})?x zokO0=yu6-y=utWsJmkPd00 z1SEgfsZS#OXeOuZplLk|e$f5ZZVJ&B#} zE_g6?&+M!BE65Kr%Fjv^#p^Bw4MbruJ}e((fT19?8DnwZh9<=DbdXCEhvAl26b@%3 z$sbvB@}SJ0NgV4L#R5ccPX`2@!Dv@23PWBT>VY_LuOpb^x;#N@gksiZSe7;OZ{%zD!PZc)JoT7D#F66B$KuR^xzHb_;zo|MJOw((o^v%o@2$4aCz)&6f1q8k+R$ z0KzZeEt$7k4#sNz>x&BTY^no|C?8PG`&1BLr~Qx}o|l#?k#&<30Z^ zq@;ON=)nltB^}liYMsgLg3^@Q!^I^}hkU7VBk9%m?uzjuW<^GxTs=c(jl5nexRR1u zuPl@u&s(q#tXb|A+OrSlsR>Tka+B?Qo{`p;kYE-T(Cjf|6qc70VBpp+wY|j?%X)#si@BZUzV-XGtz;R z{vP=l?A)>URu#Z^e2u?0m_H};%Olmx@`;Lbm<{Y13gj6~?3QZ&84me5`)1fCYZ&+N z79uyI(;NS~uMfPUEf(8-m#MBlLqn^#SH@fL5%ga8mZfBL22$+>9$!ILA3pa$=(hvT z$;CF4|C6D9yT1!am&*mS69NHu-3i4j$rBag*_nr^p%9WoI5|T&k8dKQFVVBy9y0sH z(6RT!!Pj500Iv`6!3!qF^7Y8x74hxF^0{uadPpAlkB;awnv8*v)JiV^T75oXV2mFiRt{37~ zAxwkJk_b#ZlI99$W-@1u>EPq#;tk;&!d#R6j^J8Ju*Hp278m#yo!qczqg`ni>}!HAk5!3DGe^wPhTtbt>O+piuZ#)A zx9N%klgPNRFS_*0Ijbq6>>Gvc_D8s&8GT5W`qOfS9&Vf&@AA@Zogg759MC>z5|rKD zWhSuAjc&>LFHfpXAUo(eYYr7jC3Sg2u-K8Iz4Ck`kY!BqFKNye6vslZnFk=4dq54& zT2qO@Olm31z&<`fB6RX)OW3X1O^FT-J9Y0QV^s4QWH3nB%aked9hoUuZ@+UR*i607#a{eu6z6uGkA@kpMpCq6gX zLZ@2LB(PYj=5P*X4U;suC7f3OrCx%czp=joP%vHz&@}Y_=l|_rg_oI%PcA@VgA96{K23-V5WCyOO4 zT(xU@oW=FD>1BG{-PQ98SY2S7f4aBHKOF@_k%D+OJp_C}7_B56FDfmq7h}LXU;XZ= z+-Cs02G{*vP*_|WiVpS?xA|zISS3U_-+i!72$+ahu&Dyw|b4Bl}k6<;1(wGy3TpJmOW6FmLbh#2HA1rNPqx1 zcvQ%DU$MG7LhryfSxW4VJA`;|iKYI69674H_q(o+i}5MS zN@|Ugli)ZfssSu-PQ3s#x%01RLF_U#IgC};d%=@im;lpT#4-g}_O z9?wYbgvNx&GhgV(K44#mM=gz++^XE9ac#z$C0t|#$(Jrdc|F#e!-k#prtFnbD5JtY zi{}Elw!}o}4V9iBG1qB0kQK2XQcu845JXXbI`5NzCyS{Ro@KO%Kn)=7VcJR%G#j>N zS2!#gpLe6G)!M2)n9fQH+Ofh}=@95HZO}lEs%$t$i`DRR-nKCUMaQmtc9G0#F>NO3 z*s)OqC(f)RLV2JTF3nqo;Oj18AL6c8ruEMG2p6H9D@R}uPq-?1CMha{jMm@R7ALA)L5>)kyqpD@@=-lw&V z+^1>&<|d8xS~LSWCkxtJmRhHaySCj+wnh(SWMF*h!Bsgg=!qP#G=v$@YzZt%xyVzS zaEn`3E(Z}&I>0UZv~XXf@&Ha`566+6%Q_Hd6|j*u1X9}mzT&-ZAEwAIOo3B?08t#&b=i~0VQadOrua>Q~`0yr>!y)i{ zLm8)Q;3xqzkeM2pzFwxRpFR%$z zDD7|TtUv7M+Pp$Gml^vSeF$OnE&|E5aH!^JG{$l0JAn7!lyDz_OajD3OpsvHE-4WG zfA0viEi30Ch0^|cQ+7-ihms*n%K4B6*@*$|GU7B;44Lod?Y5WA)po_dm)GxEfp{Rr7Whhd_RSY6zxGCF`oeIZ_{k2{`WsNWp~J47jMbVR1%Vr(<1ucA+3 zqCs(i^E6q&rghbYct~oH3GnC)HuM@8CZ*Ap;`=MCYEQ41&dS8riSF;U)FOYYp;rFeiGNs^(Ta1Dzyc^djTxC6DJChJqKHTt`NFZH%9?fh zUBun7oU1Jtw39Xdekxs{JP$xV%Fb>{0b$N~*E~<#0~~H4FVEgy5cUDMxE#11xLOi} zdDydY^acbLhESLxfr{-%69P7qp|&))ZA2*0K4R_y)wsn4OI1wTNuT>r6h0cAd-LTp z7^z&a;Yu5g15Drt^MAailhMZ+gpNz)eU~6UM=|%|dgw5iE64OTbI6Pb{;t=RCmsi{ z%vVtxraEcs=V^LIw%}7;mE|%!nN$tS-kqNGv=BSlccd`gKE)pgn{lu5U~2Kx6}$)p zhZVLf$)#fXIc0`?hI&_0qdOg`!yA0mRy zMAVDT$vx4a4(mkC?F5B@E+j=qSm%k6@?`|$tXkia%&;d&I{B^jxw1=q5A3q?|eyV}L*-F}4I!a=TueZj#~>f;=ar|EVx+WXJD zSMXg(E7lb2Bx~xE_`s{)pGW-y+rg0>Ay>a;X;O4<{GWvA!rkS}lZJT^NpyvRX?h$d z?R7uPWyLY2ZW1Q89Yj4#$Mmy772}Ftqt1f__1IB!mSSbf5|EpSSEFHS_@nf1p`8WQNMng1F$tUtm6B!26{S#Fm^+ zFYlP1EFNgBp)K)q)Qc=C(1c${cC28C)3xijs1n)B5$n-;Q@sE0+?7N|0nVO z2eE<`{{g>Y+UdOBfm()E9MKfE3S)rpJxH)xU}60yKPYI#f~#C=Lnmts>jUN!ONN*@ z<1~}>lQ1{TEF^<8!q(O4Si9RP^TjvI?-h6#$dY1nPyM8Aq`uD~w=ioMr$JMDs<%HG z)|wr@#z-MDE07Qxo|2qCX*^jq5Byq-0k1uuE@a+Zv7Eo%CO>2Y7CY6bK%e|$mS=Xv zvr(W|xZQCyj;=Lk$Z9Vph|iuY{`Y%d%i~S55$8~lOZ1`8%u@j_cqiTiN#K$-J-f_K zY6UNn0l84fOUlW_Nuq;V1;`vOBIOFSr=c@>Qt4H>6N~GO;^uPDm~%k*`50LaZTgjP z0h@JXqDAB{0n}t~mb)a_NTUjDTZM!>yE84r-T9k~kVCvt^RL#uIDsQ&=E(Fa(_8}s z*B-i#kp^^zs&_X`&jG*T*vIwi4>leTBoBYN6{JR{0ZndnjQKrlS1!-9VAt?db3_B0 zL*_r?6Bc;$7J-N~wegdQf8e2Be=7cgJzHnHow^zI4e?1bG8^@-UY3oou+0hZBajDX zlR%3jZWjv1>+7RUxy5LeFZ~TityJW$@LlD1zq#i(Q)ZrkVAOeZgO4Dm80HZiu>jwI zDg$56RH;(g^h#gh^DYhHCt0i$rG=69Z_;ny{b^;6{Yd%VxYkVDBEbSX1sH|uiHA~L zQyn(k)%^Y<4FZ;F_+R8VAW>sy?FvZLDE@Py>|$^IPgJt#e?O4D}lFy z&sepugPZB2RmF(NLCJrncOS1)eA*Cu4}xHj>(|#CBZtz0UD`Q{kJ#_c3vAV<_{Q2m`8?oOVS54u~I?4Th z@cPa{`vK0A^+7C2_$R8*QvftXl1p;%V$MNr6#iydStHX4+?MO=?)m40xDiwTa8FDz z2MoaweY9K<>|;X_6V{-h*So^%(g1zZ(?a}ZcxpT=b!JSdySSUheIGxuPlzJ!k5I zx!4QH=BPEW=lQna0St8R^pK6xLsT9UkZ}M2E5!$VEr--@ns@;}HC``W;^#V>dZ-zB zdpkqTDa9~(r**lzXHq~iVN}pv?wrO2J`Bl1qC9AQhjJ(DAfV- zzw*H7M4Dbv)`>)g=Ep?l5N;8?Z(+QbFlh>>$!9*}>CSm2s+v{(9T*#DNUUnR9=FLj z^tyeXLG?kOG#N+^BBCl89T|^}H{%?XM0JM)qO=&%HfAFRpoyKS!az-P>ED9Sln4sN z(m?uglxIV_piu@Hzt{Ii+Ds7$UdL|;} ztgS`OnT9KS<@)}zw)w`TB0tq4xsB*I1@ap=4Wr*NN4LZb=SYtfoVHcrQc9eGGf^$L zOQ}AMnTwJe8Ae6}s9~6@lsti7!eHKX25DYo}ImJUnCP_$(rS4+-`FoJY zc;_$ePSldVx=!CpaBHWjBc}K6W6YYJwPllQTFVeItWIaMy>OB^Sr)D>#OE@9Y09rh@BWVq5Ft4{KgV}^LoMYL2#a_&k7++t1Gj#_ZcR!lTsj%R-4~6(o;vY zRcIa@9$~yPEpmFDScO+bA`=$ z0#MczG-YPJ!bM3qp5ZMW;jZk=N%l}Qeixh}W|erT{p`oh0(wu^H+nF3;6C(}O@oa7 z2)vL#2B%v6K*Aksl@Fyn^^E0#MRooK&t_QbLqjMVWlJCq#ViFPUrg*-^n=foTfcJn za)c$TP<<+Cg?n1D>AndY>@5aQ*mzupREJ;?RyHU@_j{{8Cd{F8#Hrx+EN2GQ>K|wb z-h%2|#Q1)!mJxL@1>oy4{Sz!szMk?#c3=%GkydAk?HtW$-EFMxU97EXT^VTAZLH-1%YQ%+h#LHj&pjsSBv&d&rzps$#^xrf$>|sG zqanqqDP?IKrKD-c=qe6@{}QnV{LnXmh4c3ZGT>ERUY<#hftG=m*+@@SL{UjXP8Q@Z zU&&<*Px1qNvI&}a3Jxy{UbFi?UvQ}0I+>*`3O*LLne}r%E9>WA!Tw^wZNXqbz#?H+)nJ3LC^*pf z;@rfv)S8>zq~r|k{!xNNy`&nw_)Mj5iv@b7Ww8aB@dDT~9XN(LysT2I82+?Ipn{~} z-}R04ffA%)tNwB~TO(KCJb)c|1gPYHh0y-@yZPsR{ByVeaXZOMI{;t@luz50>Lyss zF!u28r3}uQRYGv#0zN+y(xi#g1@6W=9n(p4Hk!5&J^YbK z6HTN`m5G9AjDZf_vUZQfgJ#Q0i%nsp#V?Dsx2DY#UxIfX+mMk!;q^;^TawJj(RlO{lcscUKKS3^W*v>^*tqUj}aau*!9L7ieIyi z**^`sO*sr}w=5yQQ0-Qof5~(0;o7clT3~UpA^=yII~dpEy{0TgvFRjkKy0=W?tbfH zZFdgoRFXBqQP7d6-FU@7R-xshuD)*ZQM%Mr$fhzXq*Ta+y`%{o@7zR>ffOg6igI2( zpb>~M?2sk*{1J?s=$1u*>1c-3Wt|0?2y7fm@X*Rx@U{shc%61g6YpkwUNk|h5rS;g z#uV%g`$Ss^H&FN$G~%O0I+Ycg!g1|p62~3;LuM;@F$<@=m9USKxrC^nT?YCTjC@wb zK|8Udf@;!PZa2L8DPj(4CnDR>Q`94le`=sYg|x1Bk)0=w?T zP{q&iHN_Vg#@xK*Zo?4O+%xG257jWJG9*uArnXoPZhm-#a1$7|Gh>du{4Fg93XfA| za_ljwhW&Gb8)Qm#NoZO8l($*g(C~x+Y@(v`IOXEQ%C9&y!^11Sf0qGJ?q=6_0Jcg2 z*ogl(YblvHS{PVcc$zr=8*BN*Pf3CZd=IKLN|^gYhea1a03ASRdV4t*D9A6aFVGbu z)o6YCVbIVCjz1NMuqza91KNmj$E?Jn=b|+EHgbWjYVXezC=*B%XcL&z7t>cGkZbSk znfkUmtw=$MsHL|)qCD)0%f)Bn=i({{X={pzZjxZ8gleGs5@v^N(BIwv<84slcmHQ! zXMsLnTH87zr?!(S(yQJ)X*+I=@A3DTlbSZ_79qr#Z0)x;NtU^v@Tqxq&LnJM+W{Cn zGVJp{WM6+Qgb`BOMNs=+YEMpX93N|kbpiyigJ{25BD2<2Sjwo-KWV)};PQaDXsUmK z{`>wJ3KMh&0`_hVz|j8!viJ|oY-DZVPKD=1T0 zOjJaDC+~pNEt;3I5+GNUSN>IO)e&vXH)?wE+Q;qQ7isAN!;#KYNS$Gt?fdccX)QSUV*&mG^* zECar5INBP(B~T}`{DaFV?Lty7YeZM?RBBr-soLe{C2S+&t%gU|8TiVJMY)RQ$(hwefTdXmp)~=wT)rYwAj~HM!%78J~ z`vsS+7%DYh|01l-KWsXzA-{cNNBsXr-~WYMvelsManulf8behzqm6J8pX07pV~jl1 zLXB{cCm=>SaY!1f)LW8PiQSpGG^-giG)&D*C~)@ZfieTwL%#jcmcU5?g@z12B4;P% zSAjgHCfJn!UK0RZkw>qhtdO?CRJo+7$wjL8@znYDbhFdb`L*+6_VxCF2|5>qpM0?A zm=#8V-d9TG&Kxj8_$&>Y8@=lcIwNdP8bBv@YYnPb-V3}*T_={Or(fIq39aqFBBBs; zQE043L{DH(Fz&AgV~u8xx=L85qMzC8>c0Z*4E+FgiHw2LCbGLMshlUHAIjg!AIe|K zpV}+yj}6)ZW{c7$kte1Pn2gwaEvanC9}K26w82ockBgylCyPP3O=7RS+vVOB@nj%8 z#3P7{yar*P8S$1^{+!nv3d&2}@CL>kV1SCS>xznx`kdA~;vhdnCVZ0!j3B6X7YFMt zdFcaWr*g-xjjA`eq0If`77p{7RFSefx+vl%3}Qz_aOmld6qTw zsRt=1ZMA1RUQHJ_leYbC1G8QT3>CJd`9u8WLKZBG@m&I^h^nyJlho-XF3+L)S<~KR z73*oEPR8~6bdg!Twbi&}`vxlcRaJ*8mqFa6{P(M@+32RshH6+a9c${5U>=Hz)2SFZ z%xPVl(IQKm@I{I;3YEslV<SVVe&BWfWstU1nDDHfRhEy_1;GuybFy_`liUn2jIbvALH_jyT zbs|C=XrsYH8wRA)b4G7_=L2{P2nsfgj6y_ICCDMk(wO5(t$7SiO9CVZn2mp_VKbSw zcMS(oWhI~1{i)*XiQ3eq8I#6TCB494BuZR%CR(VemulaKW0AOII2BvPcsf>b|JWXD zN`gOHk{Gbbbm-Wcj*wNUpL8p>tr^v_ntlM9np9Mk)d=ljN;W>Z3{Ys$2|1qE^Gmj+ z%68$R*^;GCfdv)$^t8;O)C6Sjx~eEr{%{Q2TLy^eQE#3UVX#WR;$)U5#f?JyvTulL zvu&+2D)CP#N>dY-6qu~KF)VQJ$D~){64`LsCbAecQ(RS>+?F-#07Yc|ztCKR2;UT%B(OyKwMwE-%P4Ymu+2^nk0#9h!78Eu9+ z2}zv_MG7pfRdgsarrJhPU^ZBba2mP+lvQh&+6sAQ^Sa-iHLLD}mp7TGDBU?KTB3xy zoU9j7CZNw~&^(ohk{<4V{r)+2gx<_>U|{2{g}E|z?#qudT|GJqb^oVe2(_Dlh$5}4ahzwnvstjl4N~Y@Tv8SP z$u6e%$F?{OJO?-Q2iTINZR5mTLU(kpFgVpqvlp1U2qY2lj@36W-yIJgzPn$a;odW` ze2)g_S{OtnV_VVRdPe;J)IU>D$AHNdP^zkY!V;1x;70O~<1*mo2Tqq1;=R5&dY0jAO?2vITbvy^sxp!9?DMz90tj?hbb;3vQ1?Dg|~IQDtv zu?b!yYd2L)R_ziOH3cY8Da(%*aXa4QzGT?3n+6>pNtVB?-(fRfB@bA19|(A z_4WF=RV|cW(dJ1K9&u>&FL@xQqCJ2Spq3f&F+Zar)?9RMypDP9DCT9Y|hNZXA`66gH zsrHadt2Z+oqa2N$+k=F_@b}@4Y!%OV8X<0lKw@ndPrIDIwVuh>#vV3iiRH}QV&A>UAK0czP;g>5Oc)-!y=$$Wm`-hi>D8@2*oSjFgVg#0sXUZ)|j zfKoHP=Nsbc0Y6fFjDBRV48C$dpCKCA&s>c$X^=JP@~#6@FIrMZ2@x33)_)ff$1uQmfNd|*`{n~JcHfQr!!PfSj{(|m zc;!}&_xGnLjNi!2Ey6T=DBr#w&I{XT_!mm?gZ7W&lhc80X~m%X7$zSePp5$HC?*xL zw6;d+#@u1oqkdFQ=``I|3RQuPWc_=c8*zfqux@`p3I!9(0mVUmzqL0z&Wj)7mS;?HZHx_1{cXVH0Z;GXv*;#)Pv~rIfJ6zF%wL z3C$)I_EJR?NV`uWdU+{VZ zVw_b2Ah@iMl%R5BEfVr1Wqm@pExSgz=gc1=q8p$){XV!kb1}F9C&q8^yi0ptSXT*7 z*yEgSw@`up{fm@=Qo-fTJVra@nju@1svvT!)d|{FOc>Nv0KlIwW!Z(`QOd0SimMPH zTKhtsh)$%H?127lqjmF32PSd_=HLS+@Wf!25i3-L^%QJPRR_PCwyhRQ_9_ejEE1;i zb9|l1Ee4aGV@8%hiMPHZ+xM6&CVlns)r`6q&sAIdT2p3f=P@cPefw^!okLON7tBND zvt#A)!)2U>y7Le+a&fZxsfBy9+q|7Uh#7mGYgCzuTOWg*&ALgNZARc2Y$g@52kCA? z^2wn23p|r>th~5&cxZ-2VI5Zos#Xw0oEmJKP0#$Hz@cxE=0QMuj)GkLxSlrgTHQN` zogr&IUAF2!)`w?X4%H1dVwBD315%F2+hPWO^P0+YIiEGzcl1XSJh-E%<%qAbW|NMO z>!ZkwoQx0z-;)z{F`Y{kaa}FOUo@+5e+uFVuen5P<>=GLq(mIRoTr;yXXeCR4G>7d zF&^3>*wXqIH{t-rE94#2 z2pF<>%g6KquDHPD*L!QnzOW0m&#?(%59X#D%q-o@I6X{ccWX~JiderdB=BSu>ZCgz ze(#3C8&C&6j!G!8dbET)S~E2`F%Az*e}5o;hh_A`~u6LBC>R!76I%@s7Y31i4w zPGHSeK;s!2@8A_U2BO$HN*4mE$%969LmRjnwQz_{xpdoi-8t*g7r6R|1!h;@;{MV8 zZ$9OS&{|;?P9`yWG<3TkKeEy5hzIOQik*0KrVALeB?~y$+BlDx7R$++mxJA{cvMOP zcfLWLYloLMx`c3Yg~PGnkuiNb3GJ;>pX*3 z4VY)`iIE7glovQTgybSodRD^w*1NPV-x(HG%A}IHKS9>O_1-n7#!G%hL4Ofq+KF`Q z9J$c%Ibn)~g5#CB5{};&4fo*Kz3U~j*pV@4M=||UWV9ycf$|^dl7u~d!hSx zXF5}!*-jE5qu2pmz5nlI)PK8Kf0a@Hz;3feLQ0@cLd&OHZjq<4Pz)2%Y#gDI^XZ8% z%m_;qIvIsk(LJT#6k3bomn2cRH=w0_((qd<#d#cEtUF#X?o^PUY>q-<_0XEzNUYK1{jNX z6@P;RE&$795FPk#bIJst4Gg+{iN{5c=3KS@vR!7Tx~)YS`@ULNh~+}$d~WKMTWjXn z^PyJLwaa~$J|o8f<;f0Rk2xx$$z^HQFXi!9uX+ueMva)C*i3*4rXq{a!q9Lot9DO|3c0e}S%|*#I?|1Q}stlA-Zr)krg(aE=#P3NROqCrJE5Afl*0C*@ z2omqMHBc}t5V%`iR#NHLiAI4>I6Wtpc*@&#viqRh7v`0Xlt`uyxxU*UeWCfbZtON! zvu4f%!u#j!9go*RA{L_^=aLy|qk339A(+^HJ_g z8~JgTETJjHar0H8LK)hX8k#beA-#FbER~{>$fJ^tE#?-w6T}kLaLFADi;G*i%OnbL zml!#XRP@@ZB~4>*D=nLI2w^3(TO#Ag(b4BF3k@8MGj0^;vPw(hzZtPBzB8e92XCJTmuCp{gP{Rw`SyZiRNSEFL54`)xulIDjf zA3@?5OyEm@uK0&+H3lykPD$!Fb~z?Gg6K$h@#?!27S}t-TdN&pDjTtGe~T!N6?429 z<==h;Ds3)d_3Sa~OuPfc4Qjo~n5f>N5Q8JlsmhUiN)-qRsMTX)9k+$tUFeU_ zf!s18?yqQ1z;be)o&_spw-4z(qA|!GoP%+YFJnqk(B1gOCYaA>$3?9)yVPLyGq2|e z@zKHJW@Xf_pu8Jsxy5WT1B)_pu|{$0?QSHwsL#z)IS*o{UZbe*z+#Y-L15d3j@@+r zR`CyJ{SPq8DX#@PF-7=r3v>!ECVCH4@eh(|zR}~3dJjisaBN81_JFa?l!(~0doyV7 z3@EqN&iKjq4)4p&_$`DnV-t`5-gEb9Rbt>r+U(>TpV@PA@~1|$d48)Rem~GOg_`Ls zUk_o+aup_#l;NBAnS8>W35B~)5>K>3Y<}mv{tOBD<{(q5$$c2dt5A4db9cLCl3-6o zNFlc_QNHi{|8VwB(V=y1x?pVEwr$(lv2EMhv2EM7ZQI6))o@lvGdyc2xET$)DKKZkM=rr5M;tntUwE7r90RV{p_blq)vZjCa z>U|Pzls0~lYA+z;{$&`$eCsEc^Qu2qlJzYZK(gTe`vt65&S}5Zu&|NHNZ@>{bpQoq_FXp<+%Q25AV z$#_UuVFF~mtTJ@rMF-ZtIhrYXZ&qbGxkXgA!MjVzeCW(heDw#|woDH(Y1;%bRP-ND zkP?Wi=FZnE)6l2m!Va+>CDqH?h& zA;aL3w+^laHoU-G+Ir67f#@JTqRJoODESIaSyPaqz!;4OnZ^=s-fQbuAcVAU_ndPl zo9knp$Bdjw(#=L~pmGJ(dG0j=-WX4v?%~mxpOY=r8ZF&8Q+E_9C)|*jGLJ#;m&De@ z=$7MhBHc0B9IfN_6As=ZZj^3|<}=|=Y#&R3UqJrtDLA`SNN0Q`%=Rtr0YxR}N8>!a zEqjnxjQ=}v`8w}lu9p9cW(*?+p+6=6-kQ#J8@ZrW@=N{o$1Qg?9C%DC{`b3FzJNVW zelV%>U+Ph0>6XQrXKqt;@nqheshkWf|3BZs;#iBi6k0HP;EMnPdkNpQLpoeidyv{- z0-e!It)gvVn5~RhqM1VXC}?2usdXG^`QHppwZdOSO|!zC zh$Hy=qPwQTotPV=82sCkSP2+10#FG8`%p#kI>OJ84)_VT{17d%)%c=iAV&WfI@aP|Y*^kr7m+eBsrZXXHlOPCVUb1l_+X4I>S-~fy zIn?}$)aPB@Hr?3)S?2mS!RtZbEZ;?-&oy&YQ{mKJ)YMp%U(%r)n*}B7q65>zw$m)< z%hrRB*Uj|q_s188q|BZbE-5ZD*Ur3y!YC>316GYyTYi4cJ~C{srTWV4I)b9R3xv3X z>R#6G^nef{D6W|zhM-hXUBod+6eWz23!pax40l<5?Y%C4x4V!&EwE#I!97`EH3pMC zDmv`8kP81;28%r-f2;{GG*G@&6LypJ3KGBI1|Sq=Il^>$Z6%Cpbj#LiZq@Zh&FFhY zl(uRyQn(t5r2D^y>?^k1uF7wA?=mMVwB%(t5;w_QBtBJoTyEVPqk0d4VsEyKR&G4C z-X}tDri+z}Ra$~$nt$(8*@3>btfrj~6wAFg;kU=0w3ML2fi%ph+f$ImW;|!wt+;I< z|7^w06RWiT5lck{GyQZ4MN-Iep0?p!<(_6GS5L{fZ0}6INWHkEHgt^cwbAX2${ae<45pA-0kt+I*PZAvOVc^}l>;qzmsvCo*HxzGSOWbz09dV{4LW@Iy`gyQZw>=r<%&xtr zAQJd95;@$`I1b_o+enAOfs?hA-+s_IS1HPn=mly0!ts!B6i=ZiU5YIZuHt8ma<4cb zf8S6n#Q{0re6K!JiLI;TmBQ|jqKr-zsy7C7V>svpz2QUsW%wuaiDV4(aV>^NL{fWT zqE_20z^JN~ACi~xsjtE*-1Wk=#21?!TCTOA9t|Jmr$eq+RD)^qa>Zr2=kGz5Zv@lV zgV}^(9OjetK_I$22$=^JbU3lC8=2U^0#a1de+Kb}feX6e53=VB_P_n!{vYjuf4kWJ zZ5ExaW@U}DjQSPx!q|D}a8T7qxCvsmur#wV?wJ^3t8bLoVuU;z%dy4*k2U80vXNu# zW}2Sf3|mg|2&f{RUkq;oXeJxKknMDDx+lZYRR{cb4UYW>ns zJ*9glptTgQJpuR>ui*i!C?CrGhA52Qk`aH4UmH-m6(7sP2#7^vBPj6V4#H62%gseJ zBdVZaLyJ#S4g@JfHbC$3Uo_ANZWT!t0)&HVGhdOHyJX;(dz>pt>8AYA>9sgi`az@-UD>)EjyepQq zbN|?6zebjXgOe0*lW4^2c6T(gMq;h=sUalpNGt`r*0dO?T7FrtiXl2;+u41U0dn=t z?|N~KQfoFth+kW{yLV-q=v9TcmK{^$%F1}L_AsI>`08M?K>Uf!Ti!qK&$2n4&beQL zSzZ~k#OhX8sf!RK;Z~!sS@MEFxTTW`^7pcffI|E)xF;TV4nf%`G^fJ7%%)>{g!cLL zUp|>Oz2{KO^5OdP=ITSvx#~JI z^qFs^HcE^_U~KIMr)gVbPVOQqe2=f}Zl|b7kvJyXn+?=aDdPo;2nT00q?K;RaT5Lfw5(8KWJ?01}-VQwDQY zS2{b7nAOntXCJP_8us zbXB@(V-q)r2$MLzd=cIVN+jb zeQJp@2TlPw&L^6n^X!V6Xx8Oix5nTisU*yo;*rbOnn3BV7{+I#&&T=D>i|@diPw9RPRsrJY=kZg z9n`kTjM}HNU2W#DVl#OX3fkN1GGv3OPf*_VQ+`lR`O--5#5kSiVn8R zq>^oPgrJ@30{_AK-yFyY+Qf$jZ#cn)5MMf*RsC?giE@$)v0`Ak1BP;YSeG2&k^bGV?1d z6pz^3F!Rs~Qf;#M8# zx&tllWg33annW1z-I{`%<;9ubrhy_v>is+Uq}F)J5F+JPYrQat&}wrtH5*1l0as!v zbxt1iO}?=h2F!LY#(|TGzX*_HLQR%Z>zCHM_-B51GD~S&xFai+&roFF*=v{U%d-is zQ$iY8H_-X(DThFqe{K z{Q8bsqo6*Ft~E;S+Ht(}K6w@?!fKV#(1y&J4NA3@yRRR)2&-4HWJ!k59d1!3az@=$ z`de#gb&gvjM{U}6K*cvKYq?iH5$?Cophg`*z)C1I{fjb0bt8gpBSbh!fc;8@etVLB zTQ#dlheMicX5JQ~37okJ9lZ<|y&TsmX^48sU#%Rux0p^lpM}a9fc=zUr%?D6dpi`K zGBEa(fv*Jo7SiO7k~i#oZV*Qv9<)5Rz&VNKytJA{fcq5D@(;KyH*P5k>^vY={$Gov zjx&&_1<4kylWfQ@T5eHLE?Ktkx{gN=#bo^tb7#p{!j|$7hxo zbT>ku#hWUyCWjYq?2~r>j(T`IgN*d;NgwqQMEy8|vbAzd4;8w5`O$l%{DK(noUzP?O`}0y0-xLO)huQ{W8zr3FMp_)f zxlMwAT7HtdN%^48Bo2F$f;8sk7BLYZAQNPeCB>}GmJt&WYkkgKbroeEk=?aS$2aTC z&R?KrKsD1c@wpJ@qY}V1{?j=zN*6~%d#%W_X=aKJ1v|OX7%_B}sJGVhmvb0V#U3{Y zRJ#f0FZlCmB>M>koxh^UN>%u|)uy9f$emOTavr=xE#zu`xfIF8DBoDy__=Z{Iss;K zN{UAsG*S0ri6`32(c*!!u(F+c$_KGcV886>b}oO-{{R0j+=S7t?LGA_5K5~&oiKh z<@HlWh5kG&KhOU{W!f10u=eSH?6~O6?Ci{b5c*~=2CfG5|9ad1EZhG}klMn;iFCXk zYJdR&V2)SMVQ!r`9Ho9v77?8M)8EQ5IzA1$p7Q+#s^-Rpd`8>C0Dcj?2&_oxdWOR( z!Y)hmIb7P3&~#acWH1?e4L8k~;jiF}JhakReR8s-ki#N1~SR zOK9>1wG>_}7;DCKVZ-}BIDY0Cr#UM>6Q@P0f7#0Z&p+lT`MlD+aN1-;`p)SEdfJk) zj+NZ-&_>QBT8&POahfs8C|b3n6bV2wj?)MH)v!7K?b`_;aYw4*>iy=NK0XG59yxq{ z&jP`cXRn4NeRsE~h@H5>xqQlob{6-60S zNKpu#655n^7Zt21TL^!%D<(f6d}K%&Tgy^go;qpL=52k3hl__N+S}Xx3W3awb*qh? zF=~ARNXT%gzPS&Lsbn48@u)C&_~dW2Q#z)<=$+?F+ONFHx`R^{7}mO8Yjv zAc9#|v3v}Ba%173NHLu8TqV%3bZcrt5@IuU>zSAy0*TOJz`4rZpzAegZ5d)U2ua6r zFib`=%4&g!@Ur4JehPvDw7%&QLe6M`Oq$6rEV{OKvidwtW}iJ!zcT-5guSRbl&Bo> z8#R)?rJ3mocQGb)+NO$22=DG+$2W@DzU>fi*0tV!P}K< z+DvYRO~$M=nGfTG{ZO7QvR2TY4TCb=9g@j%o06B0eTG#*k&+OFRDK>*(#zb-#*wZ}l!QoTk= z;-CARcqTN!D8$KR#=NDB;RdTnne~DCZxbB>L!W{``aOH3p{i)~(j%=REvV&+5J&-t z(vw2WN0?;w@rNV=T1HJ!xe4tUbrDpKGx8Fp^Pb4x`{YE2gydYWCWXQDEBAf5fMN>zw*`i*&dO`q7yu>_D<0R%kY==u^hK9JAaccvWNs^W#xa|$Wt*1L?Nb4<9W*A>!L7$Mt<`+2GTCNq-j*WE_>H%d$)v*(ZZV2qR5>nW~l zT*>dWCP>elK9xzu;UB9O@Pj=0!tu;TKjcw_f%PbZ%RmmJK@=RLv2H@7QE&uc6I|6+ zBu7+bcBAd9{Hm#Xd&uMQ;?*GCNK>U0W(FcH#F|j%P`w-v=66pDY=K(Yyd(c{s<)<{ zHasiT?_p@??w!hO>oJ;$g)9fq;3(zQL%)wJ>C3qd3YiLay}}fxj)x9!);1F5Xv#}4 zp)9|1r2NUQ4oAL(_P(hHWu#1_cpV92L$Q=gLS?JsY0HoIBg|vz77PL;W-@*)WCT2_ zNST}U`)k%)&IeX>W5Lcz%uvs&pfup+ygbgV9ZF)#LiMmU78p5ZboDI#j!+9!j}~;c ztcHDVRcqdz-B_%GPzWt>hLB#wR0S=NzgWVtxm*54PxEG*2(Ay3b}D$kuBOb(2W4jd zz@~!^ZAC>02%pLVT5kb%sg0#~(mdBt9szuHB|{(I+uNg0h3U`-&MoE5&PhL(hiI`+ z**)CW{0UtNvw)-fL2>nOYeY-oQ@89z?%6Yy41_3@n@2UnJqy}<2=pClzoT5XA%Ovd z7ecbplp)ySo4|p03e?AwlL-9+^E9U|>(>ZLP64e0s0ue;1~_vEhi+v3)HZhHv)JR*x9 zNJmaPH2lmr;2u1kLX6%fJXOAV8zn752Q^@HOTgq9p2#5Yua&fDT3t$01%6X+?%@L% z4GBwT&@Lo5f^bC@FjYswnJK%&3~Dr) z6dh~iP7mkj)#K&oh@!Z21}N&EO{)=&3wuoum^k+8+?*s!5hVYFcsb zd|&Eq;4;V0@V8;F_(eeQ{ol9f1FK*Dr007_BeYu3Ir2`{0G8?foTW;;55VTXrEu@t zu-;>1&Z|JJYl^%Hc0nFXv+Eg&4NO;kuIqK$_@8E zBr&zT%cE03NP};TXZlBw=q8vukZang$Expl*bQO51f1@K@i{3=W*7sW@|Gg<<1YyP^Ndpd} z4H8peYUnTf3Rx85f&;uYT8J@Q1mfK~`j@jm&Z_i%?uV}aP&G-p*Wj?=X#ggOTl>3d51qgvndn82rF5Jn_=*wdMksJK0QOuZ zLSau9Oavd=;TAf;()4d!EI?pcNYot$Q^G73Q~M(2Mqz?qYXsNEZ^2)Jl(xXqx>&q# zck2&@6B$~E(qHCV(*UqE@wXc&`? zff5d?;_J@+IcED|LfS%r1YzzX}rhxuQpHFjJyHh2^}H7KrmS% z?hyjsDlV*e>+jRtiV^UOVAFGdQ9b=KYOkz*OhFR)J|lg8(vuEeQmrjNh!eGhVeS+8 zJr5IKg9mg+5ajvh{THjz&`RHJ`{d%>f0~V_92{gilP$V4S~xc;^w&gHCt3KGio_!Z zeL}%IRn4%*EBBJAFGM;BiJx8})s480$a1q3Z+@VV)o^cabbDuTncpx1?)Kmg7#*E$ zuRL@E^Qv-xiC>7uUyyxyqrly_x|a@a9??DFq3aXLDp zthIG^6d$V5uVi#!hPW) z*4o#ns%RQF|#si6)?p5*qV5MefQL-r+_HlVZAMtpVF_3SR&CQ7p$!X1RcDq zy_Pm=y$c~mj5FLd*`i#T{F6;~e=|iKV;LsfaKJqx3#z(7Cv1u*;T!kuQrVDpu7x-d zwX-oCVFlkrf~n{^vF5jD3jwWzoGJ*ZSz>M)j=cA~Y=yPcrSWmD6PF520#jfqLA1Ik z9=>tmZg^pM6%yH`9NHRtpIG1CAAS8DR-l#Zbn1Hgl)CXGI`{oXV&#vqFx378XnM9w za{bur{rBO~yBBb?$ItMH?`L?#^IyXw1A7A_bCdt5bZmYIr1Z`|O71_ziT}`w6?HN) zus8Wn!yOWJCkqu@lmA@!FSWvKWi31GAGJa`*VV)}>`@XOrNtyHitT&41vRf%Als8GtfNL4CJ?2eGfqNP)i`X69awmG&DSEqF})^AaE86 zO9zCsaAxtrP5@*Pno*k^F$rkMY%_al(Pp=0(df5z(Q0>LXtC?&du7p}G6+%k#@Y6D zJnQbW-Dj#m?AEF&%9o+j>r3vzdr22wn$?coHRGV&H!k}U9^jf*?RNyzRDiV&&g3{PcEh2ehArm$6fgEmNEJ(1*no^Gqqj~)gKfx5JMuJcp*$RptcDT zA!1m*6zE)5lT1BFbl_8CyVx=I=DkZ0gH>)OW+@T_8{TDW)Ajs3?KS6xFkXahb0l>W8Qb0T%JCx@ zEU`o+`*v!DT>fUq%sKNFLG3g^vTy06>Ru8jF2Rbw&YF*TbQ_Pl)x~RjP#D);*V)#7sJAQvp!+NAXE-xDIz>h~RYEyqj#@n7kkix8=o!L% zhkAHq#d?ITnQwJZwG~{jX*%s}8e#Wzd9+&E;LMV`Q00h3wpc_tW}Ie(b_b_-I($_a zc3E1tG{8~2gR;W3y~3fZBfCX$LesY)8dVeRfZ3x90R@>SbF;UHUI~k739r{7@YIhv zv_eQbGGXHA`=(rJtb%9!W1%ZwvY7b>{_i3Em$_1%{l|)P9{s;12mVJP{jYvjv6_WG ziYVHbuDpClf{f6DfCK=bB!r~0qkR|&$RIKJ zeP~CA)X^M7ftTlHerKgu+x5BUWwHAqQ_mE~DncSHE! zm`zf7dV7riS3uk#u27dq?%I2h{(%1EpsvuDi0)E9ESN>0S%?pjy;2~4|+kY4OLvYW;Uk&7o;+EW>ANoUdPsP6%>O*Ny z59k~1HMY+W^ck{?{?5M26G z5Wz)|WGE_RWx6t_g)HiZFMB-<4G$RI7!EwX)ANH>W#rGXdH4}k%A z(k=RZKuCD0*Z81N#d@Gs$u+8dPe^u&HtB(Fq#v#1+MvHA-t@53YbjvlHBy6$kdyYZ zSR1$ISSixY!UIwt9I%!4E?8W5_E@Ti8!T1v@LNb7_9|SOw_&h1`>c?5lI~gq+-%+w zXKdai`$mwt60cbe)~`YXsYpEux6MJoNN`LDByk|Y;&Gw@RQ*(fi3B832|8lZWAO}P zLN!4=kVd3Yi44$wtqROvro`ksbqdtFtqR;bB){`6c{5Ll(SnBu3L4Zk6xCVK`V%G+ zMiOQQ?kF)8$Bi)w15L(F=QYF{q6{&o69$<=NK;8;O=u=LQtoI*>tyuP$C$!Rn56ln z0Vh#XgaVowdb_%q7F6w}l{6wCQVI@=gE&Q9T!x?g_1(%VSO4gqP`ZG7dIEj@vRHEx zYh%H2eiP|f9U|$!4n_5I)4ILS6M~?XMcQh572EL#D5N9{}G*`uh5&d zmG+_Yb1V1BrapbNK7DxI&Y3s}0-v#;ySO>NZba^6uhF=12&IN^MZvcvLP5j5wx8o9 z6Xkvm?(SJ2t=UnpZIhdWzZjTQ*I8l=a*^;JO(|nVV8P)CIU=wi)cVXBQ$%B7YhGey z!|*LjD-J475;g6NAgI{ltKG$}AuCcAg`75tzv2<{lvOHhT-awd5{#O3evGuSqg)^P$LTvrb4dHI*JdKs_Ez$<{NKBC%*38rv9(>7zl7Tj>O^4)Yx6a`zjk^U{MbUT`-A39 z<2Qi$@He}(!MkwNo;B6Xbx2~00?1I{+qWPZL$+E8IAxh*b&FZIw*}?dnHxpk)Uj+` zkS9VISeoW>`fJtRY(h~;t|y&BnYj$2OK^R>kE|;o!E`b?wlD|VH4vy`_^S92II3&e z9azm^Z-|(RVBmajk&Zue&7R{d^X73~-;l^~2hK&%Sqy$nw_+?^+=KDz%=G9p5L9-r zFCwo|_!NP?4-nd=mO9Yt;YY*kz}7xEW+)xXxfjBb9}TUXu)kpNbs?!7E}BZq=S_C5 za2Ucs-@%D>`D;A$Hjnm|+S7ceW=-^lu8$?Ud7FCNpW8Ko7hLsAP~Xgle3>+TQf>I+ z`N++)v2Vo0w0O+3k#EF=w-^;(m6>zTn4_9b-op31`b}tpUVNYf)Wh~C;BtH;t_Lb& zDi!Hi6v7<0NZ|K)6py3b95j!)JD^*A&=gw(%sgjvoFpOf>g9fN)HLa9g!3uYM$ZA# zSjn$Px42FMs5Ylw4ySVtyzbz<9tIsIu%)!UDlSn@f z*R$tTs12K!^YM#KI(tQ_p2lGC%GJiqA3k|7a*5_57e0Az6YS~^pr_Y?%dE&p%{%+3 zM#V5V88DwgzK=6<>F8k;GCztkYUbsl6vDn!GHTY)hs_IhGo`G#&%DnY(MeYGF|W9_ z<+wW&PvhYE4d*)w{dXU~Pto+`x$s7TPn_mH zE8lEx(wi@r*fnYhNai;%xjrFUev15zYLgLVM;#1c)4t3KU7w@1C^+7T)a8KZ<*>Qh2t%pzI43BQldX z+cX^Z(25~jsc_q5H6k~YVcUe;QQfFt4)IL5uT^q}3nwDiO1dI^|KReJc!yn0tgaa# zu341#A*Wcvs9W9@4To>1EUy`z4LYT4-bMT&?K1H|z0uei;+y2_vU>x?5e3I*V<`F2eB^TY6 zMtky5TuvRY=#is5-z+NsOCi23Z&U^KN0XUiHbdH|`i*7gyeNESS=mrWda;_XqG3lk zvf56;Yl7okE?ua51UDZI>!dEmREf*#>a++MwgsKmIl-7E2d{uL;f`xdJUKyQr^vY? zL1r7Cz8UkADY0w)V8`0QuBDA#Yb%rXdK&G;l-ZVe4i&GN?Hc%RI?y&n#e0~EFqGSWCm77#dS z7-|<#FcK>KNO$CcW=jsurHB{`<46+53~D+T5zN*VtOfPbuBf!@= z?c%8c>NHc>akwt$V0t+4RL$)#ePZ|>B|z56od~Biu|xk?a9FW&Lf4gMQ%~crI|G%= zDjyYWqEbcW^aIV$S4mm~OV)efX{(N8j#H%^L@xNamnOtn4$x^s&k-bneZ|_0)j3^2 z072Pm{V8knDOr>}O)XL-17|Bd+u>W)Y>}&={BniG?GJ86c(v0*c&(#hOPIFIS7)I?XZ#o@0{|?+f$#bZ3ouuSNpGZc)RjtS?}S$--#o?q@{sq z*?i8a;aVLvmTea`2#!6aXEd8?Ry=GS*mp|={{HCym}csraol>bzcqbtP11gs*(eF- z<(%%se{J{ntInB*zIAm$Y!CCgi00L)HH;3YAl{oIvr*NbGE;o)!$9!0W z&YCitioa7=yM)#R-yv8>)f(;hX?vJLp~v3UV-E6fOe#&o!1x`$Xf6tOHC7lq{(vFm z-w=ej6Mz7dji%Hj*wh(g5O6+7D6>ch7P(=I0gEFl!&DK30CZ|`3#VX#<3J;xdYAl0 zvKkQ55+nQpK1Jt*3l5TV7`4+3C-cEcq1$ck&8*9M=O*rqBDn_= zuR~aZM1G+Hw^9z_M%h8n;(%@+pC;ObJ&buU-&x5q>fTM_SD1ox7kkTwr?OmFDWyPb z00k+0p5_xhhJFNFC3Z_PmTs$g^AGXD4(*v$;~!xB`j0j=-~TA+gv|{cl}sF5Ol*xz z{n-m(VCZc%gP zT1=l=O5a(Nra!OVz#QI)?Q|_+?>?_Rr9XWPj9q&j0H+lWGL-Zwigx@6IAst-YW^vf^vj9M%_}~1DXHL9%w$KMd&_Hx0j9J&4CdR z)eZCvd5SQH84z%d02CI4FqDHJw1yuLQG)Ump5hcAzgjJrOMkh&pIn*?;^}?CX93*vzBHH@wj0J&EPoaI)=-Lr;=Op!F7BJ z`?#;8)79owm(TjpJUpVm!3Z5^k~JG}A8&i^lhv-IqkG4T>S7K0-Fk*5^I27vbai5w z%vyNXCeF`nbn4<<+NGkgkzIC>7919b-BESN5u9{vv@$@%&~3$x>(A+%p`4qISucc; z?%{J5r649RGh4hwj5I_v9hPZ-^QCt@{9z$_Z8XUUl9D7CF{muE>JE=mMlNeMr2-tb zY9+5jOG|Qj>(XO#Q{|Mz+)9FI1>1p&(8GlcWN}=H%P113GBPKd0e5H3&=`Kj1_3wAmy z@tYzYdB0OQNh9U=p>wRmuRcQ8nY`ILYC?*jHk}D2TZXklr|uLtv8`?uv!!5JF-d+Ta$+Igu^vVQv!oTm8?4SbCd>^EJrDnma0Xup1up# zc!RHPAy=Gi)xUeiq zz4SDPMiLr3IvDO4Up1k>T(HRVaHAzpS*&WNrQf}5$>5uR_)x5S#BzW{b2FPM*xR1l z+S?Kw`kK{5uoQy>&W4_dpm$#;diRJ0IxX2m8s#{0$%`gNqYV)MJb#dp7)zt#;6SXh-Rl+vAiRH zEF`MkmK4(8fjvz0{AOE6z4DD=`?B$6dV}hBeu2Jx_17{HaZd}?8s6{ZEcu-X!zv<; zLyOT*7h-n;u`x&`qNvk!pC+Yfa)vd-pa^}kADX6L#f#&xdWTm`aut0$HffG3L$RDC zZ*MZQFbYFT;W_t7jIwL=+BKcor)3B z(miAg|9*5`_klD0(ygejEA+a5UpwISmWtYmq?$5!k6`JhUjE9f>wA2aIOw?c4WYGJ zU?aWO5k$KRelyAP`Rx7%Js$%_%v=S1smokKsnf?6vxmFX;skIrXoAy+`q;1`ICFp) zbHFHffO2e)N@jb@9ttzs01EB_r;nX${|VE2$H^KnJ$V!Xvb5&?%S1^+R3@Pe7w4D` z>A(*LrHxx~VW?b<;?2VrzA>UvOHJ}hR0>L}%Yjt$57Rdy2(Yl?p&o?P0)E;DGM?ne zXN=8c6rHasy>gtwdnI~B>MT)g$O@^oSBUKF{JZfq?Pt?<3R_(g$SOdHmD-2yTLnO4 z#&b3Q)iPYs0^gNB)zvCo@j`Djxtx?Q^`U`)e|D>6$E466LR2&f}sR98Jl@& zSOpq6n;^@>BzN{ZmaP0F{f4EfSNO@~ddvs#zc=oxY|&1@e#lMDKZ(=-ENS`= zL)Bk)7Pij+JiN32OE+}0>Ttwi(MpPNUy*`T657{4Kv~(JDvl^PGO0qM%O+c;G0r`@ zQ|t{!_YFwbeIFD7-WvcPbczcdstIWz#nsj9I4j*~*7xt%AL`$kYt9bC!x@p4bSpaA zP6`iw3Xgkz4{@P4MtID8bowi!U{Wycnm)M(5 zy}yFiMzTFjO0W+~v$TL&G%dbVm`Avfv|KXcBSLR4lKvH78Jxc_R`JC`x*e6?h`Uk# zd3=M~s=DdqZ*1)@z!X8DzMP;`e^&q~C_D-cmAYbG)j+6K155?PUIfi2RmMEAbS;e! zRlsS=A4}>Fj5&MgK`e(D^R_@j*v5vfVOUs;t))7mO_eB1_kfFrAWTo9`Ah7c(I=o* z*T<}rv=zCCe*AD-1{To*EsJ(zWAxZ8p^}HK@o+a%15Bdi@*M^npG8LA{h|WQkhS7l zXmcX`4wUZXm>$E^Xze7*lN`3S@67Cwn#>c~$w$1n!=_J7hB6B`yJ1#$1rC_)r7G?% zN9e6aTsNT^WMh+E1ku?h+El?w^%VOB(CdzXjhHHn@aBc<7WBMigk zBx4)SSZur8JHu%0KOuzL>{&8o@)_fc(@EAWgDpI^n%5aN^U8fq5u~vU$*d>wo)fog zzQ-QC>>r8CJh{HgsIhkEul9mBEKGyBUa)Rs2wd@Zq-aiC9CXpzid?!KQ5B+=XJkLz7 zY*jHU{SSzI;Er2Dx#so;&PWoKYN$S98C3{8qo`kwKiH~M=~C58=njk(B$KA(`FFtT zyCK4*Sd56!5x9AzQtT@e=cN33SC^YSB2hl8v?4$!Wu?<09fYW6PZOxQr0N7 zT%}cpK(Dm2(~N#$p?7mG|G&ng^2`GK-u&TVAt>6EI3Z(3 z!H~sIKOQql0$5R9$b?2tHH)c(ZxNdia5l+MOu9|>a}+!N)Ud+;KjY;e6VhVk zb=4o?$n8`#MIjJlBvf#OV&o#21AqwiQbW)t7&;f)_MlF477|iPME+rNpNC;|T@;@m z4<2kk0Uq`xCe%=qM$aD_&ShictX!rYe~&jPLy$O>Ed_>}y^^42zYVAx%9e_~yeR5S zMcD`>CYSP3o@|H_Q&VMFo=OO_3&egK47mvh>7WIyWY(fR>Nb|xT(N<2h!sceK9?bu zZNAc=4+)F0gWzCMm0Z5~pzsi;(7bv`J}K5@&z_ZbYg>2KiT7$#s(8QwjxYz7S4N67 znV7UVOX51L+(~;Ta;2yNc7SHW{Ges}RlwQlL(Lhqo5&7_1H}hGMp70R$|no1*T5VW zFGuiYW?9^Kri`ePrI_sIV{Ia#g_$G+OKEpAX6k0nu+QkzyD@a2*t&+6I~YAgs$h4w zZCHRESBrRalnpeyjl(Rmv-Ma;OBziL4U}65y{5=|o1c5g^B}EVMNtFg1;$p!VGSjv zbeECFsLqOqKek6c_RIv-_`Fa3^@XnmK>kg3iPsB;Nab->fmIlHNfCF#L;Kx5AbrxQ ziY>;#Lx)oN(oDYJi-7>1CCmcScO)g9Xf!7p{SM zn?0ZA?c+F|LmNOfp0htji8y&VgY%=yILkj&1Y&O%%I=(Y`lQ9%wnx+XvkM# z3`@0Z^XcmVQ7k5k8VU_vb=gBiB=<u+*0a4{^TfbF~EvXQ6!d z*pHyTqskCN`fO)S%g_Xd$s>+Y&);6VrqsZ{s_%=9#~C^GGE(-(_*uMR4ALd`s4lciu^aYdzHSde|}zBUQu4vo-Y=p%w*oAy@n`EBh^7# z0wM8WRESmDVqF+FR?Vb6Feq$gTg5(M0~X#s)Sz|Gugw!5+qSI>3{?~kU9)V$9C{W^ zq_+XBM8Zt=(FoOt!ppK-jadgbQGs{mVOQMQ@Ej%*>Ojerri`l!6WgvDKD%BE>*Y$D z%ARQk$~VF)X=@esmg(u1_V#+4c<#krRG13P=gR!)P9ps@!e8)h=p8)wf%dW)26JIH z?gz?6-H$woX>{nrG|W@qhm;r*=q}TBzVoD$gE#j_eyZ@i8bljTVj9T{EDXPC22gSPDNdzmt{<> za_vlV8CAlb4o92p4j{au`Ha0xgqjQctZ$?KAB|91~{738Nt=S}9J#V-3#W|2;>yYy<9? z`5CM~(Ef`Z@EIvRL5{cA5)r+IiQ4R4H^N#9FjiIfDi z5nHaQ39gGkqflu10|8N`wOC+}DJFn{unPnQwC%+}K|xW~{LahULvmnuX}@0m?9f}i z2)XbwmAgl2|MAi3&V7mfy61H=%}GCDpG{vpO6PaIHjR2xpbYClAQ#Ajn1?Um9|8#T zM+hX43&4PJU>c%CAVm-+2oZt_qzJ}BpXUcFbIS4=M{y1KzLVft?44_fLangg>AOdqaRGm{ZtO{tuIe-eICaei)!#cnUvm#U#)&_Ur9fC!$ zB3KdHf^a|{;tG30U>Dv3ss}VA9;!xY72JZWhdh7_<0iZgXv03h3-cmm6SnqWgL1$h zVhg)McoF6Ss0TJA9|}Z(7rYEugS}%IB1VW6;sJ{fcE>S*4yz^X@qa}-;12T>^oG9!9*RZa7yN*!M?XLh z(0hT@2d@=?EIWPJk!Gt-Iyq`$75+l|4-9hi5 zw;Cf?_+KC|T>Ee_Jp7-(UKsbaM|ALg0^eb7T}F8DzXJ4SvBi1C$UzSLZuwtwejEft z@}ls8kU&xgW=EH$?`n3=%E5g_4&yHEf zwLmXB%#QvN0+ z26F(i5GBNlTnpIQ85i;N*%5DsePr?6YFF{n219gz^EzVW>p~-cyx$m@ZhAE zEI%vgEh)gHY-Q~sK$7Y@(HA2su(E}%j#3(x_D9ClRBPc64Ak7Bq8qtZzy8v;r z$OaaPbTnCUC~_L=9z4oQ84-ig0FI%khamAyHLqNRUDu7wrV2Jmj6e#ifSaJPxR+X^ zz}o!&hlk4*`dwF}Mm`kG^jexdNQ|8M1OX+>$qL>3NZ+~|d%i@EW=*|G$! zws`^^sNyqC%cklLtq3xvE%ieFz5G8z&x%aAb~Xk1j}H1;bFftL{2h!G$E(|YcFjCIR`TPo-k?G3l-#1j2_xJoewhlYC z+%*K|;mFWXEHbE3LgsUKd)C38MsEDOuAOhGB~w02Yo&b;qYdlKI_|J+`DdFYle9rl z8tQ6XWbqABiGfPWMTg2k3f3B=hiO_U&H{=k;)`gMG0VAv{_Eq`q4TmMm6S=PlI>EX z?~vtj4|kg$rM8p@u;cswCi0~r78XvSox!qByL`55kRRnl*2ar3Wc|6OtXa-)B1ghj zQQ$&pnUOPpgwx7t5vy%dY=}evC+=v7sPDPpR<-js(xmLm(%7RsA+bU1%^rHeM5&5% z7aqz?o4V=dh@+Ss22uHBLNb$@tR!_K=ODp5zZBc(5yQJIVl$bz z`x&zICt{3n(py0hgSaT+;zsTy9s9Y;Aj7h@q90X^qlfd1YO0}wt^;0#@qvI!xZ*w# z)0)mxqEgq-Rp%Klv(vj_tIl-SPA}q&swsZJW!`B#h6g5F0#A76ZmFTu&s)2>ON?F1 zq;{#&I8XY5zQtL}=2BS(3d&T)Ttj(91`75z`Pdo{$wI=a#8UnnR;fpt9nT?69r;O= zcyTmxtrJB4lfLmjEOC`1m6RyO*2Uy1hv+KDPiCNG^Nn;lm%ol)Eo%Zyrd|h_VbD}bbCLpI_o_>pnN8gUA zU3N84FqvdPdn7Om%I|`SUT$lA?qyuCUn03x+}WQu zY%`lkJf1O_X0r-p&bRluRSP02#rl0|yzPAWf1)8^?}4%}$(*f_xCbuJG^M}=ucV|#6?onbz<{klO z{Yp-;xJsk0oT;KurXd-NGyQCEh*RPD1ak)4TFh|GchwGr8!=*R{lF-r5f0FB(P^qQ zl$d==^_fmb2I2EmkqhWz=wcXV-@-S2PKPZ1VsHy0n0z8>uO2^&UDY9sqjIR?VKxcd zzI4dQAOmU1VhbjEmNqG(wGlCQIqX78tk-)!HlMo_;`hk$qS;)TW(*x`+X^nA7!mNs@ zrIpV5*+Byq3^fzO&e-(G4ShrZ*hpb(X8ZKm^+-zw``}oP$PJ@?YoaIg*5wgnB8>=3 zX8Y_|E8!-r*6k5sVQ2JJvwc1yIE+;z!{*pvoKae)x{(omA~bY0{e6BSiAZY3Ia9;d zSQKGehPt_tL19{Y`_kC)hzbV#)>x_tO|yMUA{DIGp^-*mWvtezkq2Sx-*rPH>O?G< z^q)qNK5Bb9OV7#7|35C9hYef*@u_f(Ry)CEe1ve=Q`_6FC#}q=B{o^JFLIbtjblvO zk04<)5c_{GqnQ8sqhtaj(m@0k+n(@LODv=H{{JjX4<*ak;?1WD(is1_q-HUZpG;MB zAYIH5WB%uoRDn{eNHI;alqpr-jG=JOP`q%oVC^5*1o3!^MACT2c(Jz8QF-qg+uB8_ z3fktjxzj;qx?1WsObK2kml=3hTzU{!{7l z_DEWFeaD+j;pB=sa}!N{6E*#OnpI=R6C-7-?80P?#xqUx<<^BqHRCtxdatBa?s3a( zqb8X>{_>?@;WL4~K;>jLs|NE-vyPE6r~FxAi-uXu>RNLz(*{^3bui3I;K*k6&dJjY zWfry0{!=eyJchQ7srHSjmW?Pa>rD;s@I@G5l@+I|nlnv3E%n-kGOdfS@`|;Gikc6) zI(n706e=rJDizhn){2HRHM3=hNGlzyBQ39bB`m!MVdn;LNH_!P9$5NrI0jl7m#Tn_ zQ_bk@EBABn<-Nyt+}3TURqy5gr*_=h?T3MnDymO=nw0H#hLdaZ;sZ9)RC{h2Z`tRf zO}e$HlMVswsa4q7sQOwhmk?^6d4YvL+ERejMk_lopcB7t1>1E zGCq^F6-t*CPnic#nETD>i~%yvG4qRLp4>l&y!CMI*phyan-#;EP`f&C z_s?dAyFqpKYJDr$j-f&|PR+jcgae{}%V zy8pUi(KkcrS1I1a z=oY*}l24IBl25z`B43FC2W@0Gkd>iybHhm03tAy`OGX39$B+Pt2eyIa6HI^-yO^gN zJ({CkV3vSq;b+`4W#`{#b1#S+=2r%Q#lz%4`GeNL@(E8!_3{(Kb`BnqcD@dQcKJ3* zmt41iXZ+`1*UZmE*G}(*XJf9+XVed-8_>=~*Zj}0XXOv58!L8+4h0!fZ&^Cht-@^l ztx69hp0Z|mo}y{et$ZIcZ%sNPZ~kt<_kvHf8wGdboB3BrfXRLI!1O68;K-5r=FXkK zPI{WydM+8UJExn>TaHKKJ+6w_TP<7WorNp<8KpD*St*miTWUB&XSo@^J68pQ{v)w!H+3Euh;BxN{aCvAPxH>rs*_sN?k z{#2wR`;`2Oe|Gr5y+M102Kb!X1Lz(q2Xs!{0o4zS1KYQ+f}O8JY&i64Mh9tI zZ30DWLurCUYooH7s7s_<+_QR1v_oxMv_oi{w?nC0+B4hR-!;7}%(dM+_Su^&_W7rl zP=^2-5>Ejhskf?*%zKD;Bx^a=qnAh18lgJMR#w_p)>?V?=+hiGR~V?r1Ezj9x6L*$ zO>;<6ATQYE9p>Y4?VGbjtxyBGBS(%KxAp|om!G-X_qEepZUV~2x-!gdmq+u0;!x-< z$f{GQfi}RZe)Z**aI%@4Im{xMgLT`Ron6PCoozdmy}qgf>g?$F_fn*k?&c~+1z31p z7InXStxyF^dkW5#r^;FXpPDX9Mh?FVeX_dZOoZy1&vUOozFwoCb)A;*PpsR+>b1S^ z;LZ$J1Jb)*Y7lgK0?(>{5@ZbeT>}zt*(_Okk|TGjs% zbqx2O*DEr7hKBC&R(|!a3eNsj3K3W#w!==RcCV!X5IdKV8z>AK{*ek;bwn^J4t+Uy zv?JgUsL*E|!2F}IF*Sv}uBys8Mmcy_A>PqjHYh?(*k!~Fa8aiEsE}?lmUClDCuy%; zt>XzFl}AlRQsvL;jbj))H42)H4ObP{o|v;|wur$}6}C2ZIH3I_!#z0_S6%aR>(#{T zJvx=-vC1~qKc!T;;&uw|+;uvDTGnM5OQ{#WsOs#OHk4EX-Yz?-C$ZRSnX2B4xk%}p zs@`9vg0+I#n7UcwT${cyZ<*;HSgCSVpT3xUj@p=Pb?v$$EJNj7egy8EUX0YfIiGBG zn^42SY49BjY<5m76R>%a+JAYIG5*IRsh%dQd_{Sh-8uV+wrR57-|FdH@5w{k5YBbW zn1eIBHZu!v#b0|0_qIv5y(748a|_;MWj&n>fHQ&n5TzgOR$Noj9LIGjRl~Ifat?7N z|5)&3|Cr!HxtNXO$b zteV4PlEt_45^HMfTFTJo)wrhFvwmg0tMwdbTmP}@3h^=Piv6+6hUjgiIne8TeUkfz ztDpO!bBz1WtB3o^Yq0D3qpvF{*$a5GYdH2C%+Z)<_tzt1P)#TLuy?QHBbE7zjcDz* z9qt=26>I;Zraspb!1}UZ8kV#7!!;D_8kVl_h%*Gw4XS$w>=|x{<|FtP_=8|;Y&+fJ zOLuFHC#?BKW*6*@%1y)PFCIXr2kwFHAozvuDEMvp*7;NF-So?OYwHW0XDEAb_;q`K z_=V??;LD{W{tIr44Sq)p$jWt@*JF!jCi4jzddCZ>{{_M?v_nT1^a?L!5bW3CZ9Gu; z%T5o;dqR&>2XRd-9E9a=KTx}y*$xIb;WZ^5#n^G!`)?yo-NCiB}2`gse-(CBPImnX+O))U1&K8EH0@qD{8>ZxSQ)J>q; zyZp=Kwy}5heQ1Z%Tj3h0i`JDw2d^W|2D0kNWkpB(^*5ZqI_=p69i6#iAGc2&n9O+>mdR>5pv5tA)ZSh|s?PqKz5$PNMCn{DXKB};jp{nh8+@~Sr9 z>6rMw(JGp6wCbN0>i>6qK>XW8NXgpF;G4?xFYJm;1*>nw3f{ZP<)U%;=UBPCtfx(_ zZB9t&cYHLaMOn&qoUiw)cCxdS$GT>7&vYLhFYyi7bACjoGI_3GZI<}dP2^ItOPQ=_ScBEk{s$X`3AW zmUw^PBf7jXV=0}MI#P8R@R+e{J53)ZNm*VgEJjAzOfY`{G@HPZGQ$FNzt>l01q*tI zwI=a@QwfX4kvksdA-TZJwrv|E_A+#jK%8MgDy)D9=e zr<6Wq>zGOSZ?`O|It2)5IC`vkXgxnpca}r4<5(*>r1YtCesAYXENEv{SnT9qEFI12-q_)b`YLDbB`cMJx+DZPuVJ`4l0k)(=6M(Egh zL1#L4zRTyoVW^SVLzIU|Rb63-VYOjQrEUQn0mcoi3S3WE{|a1%uWelAd^3OUzm=h^ z{}GHTX=7vIWc$AfK>sZdRX+QNW$>33Zo8YM4h4mx0?l70D_?wm8n0jC6fyFUh~$6C zE$1cbjOwu-f6{PY`-RCkV)Ix$P9uOMPWpb={({HD+o?<0YzmT)Bs zVYfU0n9(*l%%c2-<023Z35MszLW7{qf*=?vZZw7Jk9MZb0_cOGZR!QY?CWcw>p9xi z#)eP*HnarjJD@YK5boi>wxY+;NBzWLJCBPU#z%WIDmjj)?;T`2PtwyZj!2%N+B4#$ z+C#}mxWUx%f*LmJh-`=`Um@Dl>U!mV9D4?*z`!#Q^<~-0Lam|P;^xfNl#NTvJBkY) zB2`_wRD(9LR9JNQ#WL9!RcSujFey3sM^fFiM1ADd z_RilEyxR1P=N;` zbR(ZR@{YY+;XPZ4b7~MWt=0qDN-7t~wSROY7=M29ZT>0#6#zrNCPfveTyDRYxqxq!(JHpL|&^_O<*Dsk3p*to_QJ9!Drbto2p<>R%!)RDqT_G2icjI`2t9?@&PlEY1gAR-(-c?BE1kc{w|Ix8&j3 zM4sVIeyC76WcHY_N>sRyoE7U9xQ#xcSM9L5mu}>&;K7pugzC)lw2a1&M(aAxeqD?q zuKn~0{o_HrAa)oRLO0S^e=S9B$ z`vgyPhN1{h7lJ5MJ0NkgZiv%wT9>X)nj`b+&$9#foTC($p#1XFJ7I+@R4yTo60fPb z`RM-Sl9A)?;_ayVhxDHD?c&;+I%qqNBzw#8PMrTZY!z$D7@Eg}F3)zU>pQxip8l;YiLOY=H$Vqriz_@!&-d zgYm%c4 zufmZ8Jw_*vDnD>7-R4L-F%_*LuU|j3rU8bI9aplK*kz8x_sw#>Tx5&uWxEe9|U*t;8Fv7q$>n06wGh9B|pUL&@$kTOVeHw~OlR zBly@UMWs#%ic7@t7dLN1%#a9~f(gPFhU~{#=Ac}jiA_XDz(Y$avCs*nc_MB;r?3&! zXojd4|D_7WGHK)-wLw$B@~+1f62Qlsd>HmOO3EDQfQ^K6Qh-o9+%Fq^?Uf1$M;h!Xc8QKsJJ2tg@D>Tu@@&e>KwK3_ z7A|Yj&bR+ @UVyy^aZ7I6G-yM+Fumg`?O-~Vt&iDhIJzf;-&n>?gwA+x}X%+-H6 zw<)hpmB;D%cMc@?RvrobZ^$Sq){-hdfj8z@O@d=F>jmP6N*%F26DIdteuPU~xmw~g zUkd5b;})C4RqA@`H>>}I%9o9EN}nM-mD(6a5#El_Nu`FFmaazAGfdc2jfIM{m#$IoPx;tmJ= z4p%<{BeW*;to6Xijt`)Su9U7{J(F(pMy|PT7;!9-HE5V$2Yp+ zR65DlOFFFqL(rKrDRY=5Brv!FQx8;e!^}cPQY;k|G9A~AK_I~ZO;^IkY;(=u? z&A4rOr`18oM#rz6qxWva)rc>nUrR==?tG)rowG822mLE>Byj2m)dT5i)dRFu}i)k`hjR7^1fc>@Z znB=nj{!QuSlL;%6Q%6Xd7_QI8ZO^zlVKOJnm^Kz+efgI7bANYfAgfbjfeG*-B#y^_ z6RUi=@b8*@SCx?Otg!z~Z1{hExc~d9R+f;(Rzl{o@#dO$MC70Q1udul{zCv8X|KeW zJ|rg}Jk)=HSlBGh_}K6`%khc)#wJlcN!?pw+%yqTZ5tbzG$bgo*=oDj7ilrxXwkTE z(~+fzPLz~ncgOwI^~Uqm`Sfs=?fp|14L1}hQ5?|&MUpZ_PM0D@Nmlk-d8lkF*eeGj z1Tu{53i*z_l*bY1)FKFLhGJ)^NWM}<7+Ogwe=Ii}0HtKwA_|LEuIewHsGt0Yz|YG5 zI8LA%n|9t7$9ZfQ6XwmXGKj-AFv!0}y`SLTq6I1+Qxe)VW%vM7e8h}AU#6cc&JORJ z1KN{_i8}xb180!T+fdFyR#RKv4?KRB40{|oJX{>DYCN;;bxrL)Np~W2 zMtPs1m{3JO=BG6Q-8x9fyjnHCy~&H~Ja*?sm6Ock7}=&xV2}XqFg2EP`QCB%oZ6!f z&fsUl>OBiyF`??Vb!+Lc0&%|cd=Yh!E~f^XQmRSqAU$zIi2Nin_AXtjd>i|mpBgV5z~1QAW3eSDJ(w7WZc(W4koMK z+^_4a!oM$FzGqG;vWD+=siSk#F}!O2gnqKgWYQ6nulQiXv8_H+S_z_AKAe}* z1`V5t+@o&6t@%84DTHQED;^H|?zmF86tx>4m#B`fn&+O!kWlX#v0XDIpdTNN-eHO; zBd+M|R}f8a((lc=n;SK4w0o_b($m`lIqLaL)bTq_Iu?$@G1p+j7HH$8$9G>4lQ2r)oi!>W&_#BXCU6{V{e@iJ&8m39SC7WCp;~r^X?{2K$K}<>b+<-1U704LOn>F}E9Fka`hI&Ogf#u=lk?4^5^xVlo zJ6IMn*&^vT#N=H{p$lOew2sj+0|{CWmfrC(NNSq4p>Qk7)>i9mLQ~~(X zLc1hMFp(T}UZI=74Gm7B7>`48UgCu0j%N&RQkw@iPoh>76Wgrh&d)+*jP_WjLq)x@S9{)TRKNu=a9@x;Q985A_0m@#7 zO!p_c!f75RcQi~ZZG^Y@PHPKP%R1Yy2D}rzAwJmX&Br^u(j5MFo_mi|!S@+~NX}pT+LOpcmBnvIqY}xqSauIbic6 z@TeSm2$=PPDt?8T{o2?@qu~K!5W%|$lib=OzHl#t9FZWN<8WIp0liP}dmlaSUn6*1 zG6OF*uKW!EvDt7F(;JFfV3}~L>x$!k2YvYIaBOY(x9hx=9ti-xHUg9@^RK0HK`OaA zXzD8H4RXKXMdTpj^A^b8eduw0`CtO)!O#ylN0d>S`T?<$@D;%NzO@$w*l^*KE%6(~ zonCNHap{Oybn9X+&#EARO*6(on$@$D(t!@#T*4LWm971zEAz(G89Vg^mVme zVHm9HqJq8#B?yAp2FN2}alttGTtO0Ip@Oor){t1N{7x)>2=6slsfa7HVXIw~Kac;` zpJ}S23x|9kj?BNy*ng%hkTG!7v;3dF?7vD^qN0=y)_3We#+_!pBzB5pm%;?5&~Z9% zLPE5iZ%Js9h6D{3XKlzkC5*p`=h~S_xoHW2!AcT6heD*xLlkxN4~T0LMX~rqz#4O7 zw2qVS8>YT&zw*v-xbm{uvhm?`1>aGsz$`&$HQ8|jK7#4c(_QTm2ZfL{$az7@I9=P0F!vmvG#?f}$@K2MGcsP)hhrVkbT?bJ ziF1AI+)UM3ncFiGUk@;Q|0wt+{DjR+mq3H!dGEVgI~H}XPB6a685JZ{X5?K%3r_v{ z2LCi)4O79Ld-Qqr?w0Juoa49*>mD}<1r1_9e|T}LUh&(qy+iV3CfXy%1uYcBClAzr z?|s&>M8;p%2jc+ZlDg`zMOlk~Y<3B;Y{3H29<;PVn%xg`XwV0jYoPoT>Mr6Hc&qND zOM{3nbp?y0MxB^fU9i+bMG7Chdjpx7Zby+f%$&nph z+R`$G;%r>@HhVLT8AY4D9)t2zE8`_)@CG`fr?3@(y$T#d8@-_Qd+ni;G0`jIj5Kj8 z1J?Ae;9RQ$=0?WlE7GgFV8ewcL}7B7nj;|llmj9~K@gHIZnE0GPb^mutBF0*?UL%} z*AHJIpzJ{b;Zn8DkR$q(#5vSd3c?HM8^l=W)DSWI_lRcG`H_2~T4}o>6wj#eh7-eg z=;V?c`oZE7d5L&5)}R5Rxw3jDaFgE<(IGiqeLJo%#ihv(wgWJi$X6?l&X*d{GA7fW zU;=NrYh7J?ciK_zDIxhT9_alRuBo3dDYq_$bmV^v{UK0c2~|I?e*KMCZnnGpH!lo9 zM!&Lv@4b!movHPI^ELh7gAavoe^W~%Sv?1be;;{gDrvbO388zF60g>6&du>_)bz*; z&KFF+${|S6Btc@rSP?Wfx-xG@i~@{Vtc|$}Sw2DOUO={7b6HBq*j%Thfwohn=C1bG z_A|VWGF`T&k5)4~JRhc^e%w8K|G2_Ud-@q2cWTEbe#vs9l%FZ|4rG-RIx~U4J zi>bGj34Ie!h;5b~)#jaB}+6Q@v zgI%4urSDJN=xqUwE&~*+{;DER9H+cFKRFupLt{^mB@Q? z37E6K&N+lipC?UON0CbjK>pSwXzz>)1>M`LB0(Q^;;1wfpn+O}3WGzdbnsRTOj;pS z-dSa93P(jv{dU6?hdz?oskL8dk}V04+uWtO{1dPjG)cPXQm_&$jR#RIe*LT;xv|{d z^qZ1KzHL_g*xtuqB+I;J{oq+|Z(jLo=P^A=zr``Gv&5KSr%VsK70^{|4y{Du;^Wz) zv6-f}WgeO{6l3Sr)jn=JMbfa$PiVsy0X+I!7ENBDSNCB7Wvf8dzbW*Op!%XklV|KX zW13*+92DPx>jeqnvl(N=`lhA<*S8grmwxH19uP!D{K?ti6I@IAW^nY(@b69=inp#3 z2Oo;EVJUZS}eicFGg3}2(K!1>rRXp$Ibvq zK!c?#)1@!8$3@l!7-E%|S3SZjq1AjQEBJ%Nyg)M{Iye4gZsKg(=#}2PjJ*7Fh@mnT z-JU|6GQd}gdSDb10$Ki~K@9=kZRfq6G!OlP<)Fu z5=Mj`L^Fj(DU_uCO90bi-!J*<(U`oi66)(Tb;2I#j6%L+yuggdbpzD}Q=dn?e+9Fg zDIzB*zjwFC_hjWitK9!5gf&r7l%~p8`#c>S1mk%SqB69b4_};hXQt&mkDTl&sGDDfcdG>cP z9fa#%D1={9OWRRZ^m_wNNckx-)ui1b3?ub{_iW7rpm3m|r}Q~{)Mp8c8smjxOt*y# zfN@l(hw03-3#+Ek#%pRwQH*BU&u}z~j^%c3sM=W-W%4V4awg`FYdJip;qZTpXD)vuUO4M!rX+xel@PmsUymt4aL zQcir8x9?U08ba4ufzb0K2bGqG$*>6B9{4YS;lVBemZ`LL9zDi7FZpVhpKhH2a3kL6 z6QTZ{JvD%3wjU`E9M@gh=E~rK7CVi$Ff}lX8?6yg2*&3 z)#!AImwys^Wo~oH0dq@GiAyJ-)PeJAhfGGWB9|aBB5_txc+&&AfDl(+K3f(EYJ7Y* zXfcbyaJgdDNW7gzYqR+hKF&U-N zk1DPl79@CsuMD{Yo|zVeD#0NP^pfxc|6L=*T0k`B_>TE9CzdTXrH2McR5m7h?m6H% zTahgnD`5&-xV!hu7U_Z0R^S|pupt5AQQt5#Wz0 z85>WBTUXvsT~}Si+aE8J%|C8kdHm3j&}DWohpC6tv2E;-S+@>bdgb<0_FTyzKuqFx zT=~)*5h0*SVh6;`q{SHVCv6e6SXV(%{O6A6GLno{`-Kb(=nGnN^dJr9GL~&|)L>Zb zzNeqsb2YvhK_n5Ts=ed_?t*k6{7+h1tR$PA<0 zlEdM^5oVGaoQ4=}i=RoTnua~L`nA+qf4Xt!BwNe= zNMwhL)4WAU=TYJ8c_Am=I+@(0duA1-6*c>If{geYbl640fP2dl@GZ`VMrz;2)C)T7 zmjYed-KRNy#uf~6nUdU}as_R+5{TjGnFm4MD7vvYyK6Q=#thaS_PNlqK8iP#SA8~@ z(qM_{WUjS){q-}%`N1z9`m$5;1H@g$gsJa3jKw7&xshGFWofNk><= zDygYUqJ2?MdP0t@su4CMJuD1Us4&d9Et`AP6e%bK(iD~yVN{^&4jj95)`lJA$aLcM z*msuDzrIz-H*sGxzLWQQz7Z3V{|GJlpSOywo|(Oop@NgWy^YDYm!!Orm5sB}KTT@n zYo)RH;JxcXg=~k;%@y#A z$HI-E73{Id|Ev%9{{;g=b}?~2kSXHuyWI~$3t|L;x3 z&td7%v7JjJ=w5w(z-$X9S#2wGL`dV)V{+0>6(QYT2q!Iq7oqPiRSNvQdh(Ts z5-A_so(5OmihT?HvEX=Fmzy6oULx+S&Sq0@_vfi@dhP>}##TBvu#iuou92M8i(VKp z>ontt+k{I4>`#w~yE1rL#;H$Jl*Xz_mp@d61DW+egoIlSd(*Pv#ug#Hh6NkrUi>s4 z30rh^cHD|Q-(m7CEUP`b8rw7Iv+EDpgty9WM|G!`^L@^<3>n9JeWxpIt`2Da^#Kq= z6~6t1{qbYt+nnehP2Im`)qN}NY5$8!NBhrYivRwm`CkbY|488bM`)d<)jvY(KC5*6 z=A91XmGWb@1AKlk7LtofROh2ooUy$504k~%E=e&<;929@8j6!4TD%+ z?pXR*C}CK{(_WqUXa233gjf|j)EC9S#J4-Tx2FVtGD&f)`oz*==*1Nx9jtK_*+z)u zen}$7oJQ1!vB-Uo&;i^NPe|YS*%vAqeSTktPr)thtgzWsw{q<9+8x3<9MBJ+J#khzPU9 zAU70Oc>z%Ak+Q322oKx*V}{F4HrCeIWr|J!$IHW{R-4}B;`scZW$Q#&`MwZ8KVM{q z6s}J!#Y}<5TphoUviG2G5)Wag7N(!1AYdYQ!-6SOmrCq~_X<@QD;A8t#ioL^+012oHK5TwF0wse006Nv3e9Et(;lOn!(?LEe5*N-^Ax7Q;*h1Li5i`iXnL2BC? zkZoF0b5yumy*Pk#^s2|44U*w zxc!~7-Wy0Mf+wy|D3S>IO@~BU=kEr+XMk{;5Ks%E2>oeFo58i56n88g;FryHcgMq@+lameW{G8K^`^R#XVa1rZ z8e%c)P9|%-7%9{rW}<{V_Ll}$oZysW{D;CKv181b8SMpisX50fLknhwg7_WnO9|>A zF|xP~Jd3NwM8z}S4U=!*CTgbq_0q7~R12$OYF*?yArjbj$n|plmI%C#qUD5h&#xLa zjl|`&&V34}o|2Q z#XtsSl`BJ6j^B?=N~U?yo_R&2h%J&{dkb!qtTQITtVu06hL-sQ3_ba&w(xAwFlOrU;T)Zv>k$+{lmim}2L$v||ia3DJG^g*({B?|>EdPPvR7sV` zk3x#{i^RxsEBDd})ehoIMps`{#k`yq4CDyXDw};eLrzLdvZ5x!Ul#;~Ai8W@D`?|D zpCBiiR>j=HRkuoFRjbPD5V||A$qnw#wUU>&38gG51FtJjW%7Pg5xGCCBe=nYRksxN z8hoj>M&DpzIM7Y|@79nJqxW7PB5JOLCcLKYM$R?RIm#|_ui68@(!01!f?F{tJGad_ z{#iTvhk2{4>(yUlzjwBx-WC51gxw{C?w$)^>}%i@XBQMg0`qUF-DE~Rl#ghriliPa zDWo=Y^;KH8TyC9My{H^gw6wZj?H?LQ!A~t&aej|9ph_&9Ep+ifKVX`MN()KCDB5RE ziP8r4o`hNrx)D#(vi-UoAgN7}=*NwYoO=G#R#ga6vd*Bt5R_e^e^Xwwe;2ZEWmJ=a z`1i-h z%bB|d&!Fx^hqwra2CazwiDUD~x<4nRv~cFZx#HKoBj>5o0H9TC9ODErwW!c8je~5y zj;-(*j(f+e^I>n8elxWx&ZLxGq^rpCk2&Rt*8Rs}ki!2DXYUjwN*HZv zmU+syZQHhO+qP}nwq13~I%V6ot*P#NJEr@_#GQ$G$jFSye8`7C{+%oLUh8XmWQZ$% z4|*FI$Cu4%18Bo_1ux&YhG^#)G;Sdds12#xOnr&u@Y2NkcLPG3`bxP=xWvJFhJ7>gn7D{qUNG-G%@< zT}@-1bjaEYjyX&ghs9Paehjh2BpSMEi4(?JwMO6Si1w_`y)V}GVJ2q1JfdDJ@QG5C zmUKVjU&Rq=i0)Ul{^=IZoJ_hNo%-@fbPgI)y}?<@BdNVHHh3Wm$uhj&UQ(^{D#{Yo zKnKjzQhBP+5&bo0tWC!be<~`H&4XhrOX6P>lhMD@7h^qoaa%SrX(CoGY8SK$R&hQO zVKvigoGpX!fy}YMOxGpl+U0~x|bMxZc5YK}e_1arsTck&3;0~I3_5Tn- zTkk_RF+gG(XAITrNWH5oEf%WwNGXW7&0~4FBMhc<#MW}P$hLPnXl8Ztz|%RNV(-ei z4iihOJ_5HG>6%#g&JW+i14AT`W{6a1+Uj{`tJHgvWzCg`!mXPP5LU2&nV(QUGxzQo zg@Ja{v=-W3s ztWxXD5kG{_erkfFZU+Psr+{ctvtSK)TY(l|w3~VYdZQL5d-LD*}%_AAqmr!wVrU(_jwJ7lK zev%u0!iMvUo%)RLrNFKsZY;bt+NK?t?x-!Q!JPM`e3BP#Ep!(fsm`4eK%6V&?*T2I>cN0deqHnUv2HvcVE zt&8Q$#`f{D^m)DAlT(sR$htdl1)W__K#?k~z0aL}gaZ1e8b!n1^Y+5=@O-{Lywy^+ za&+~y|Be|^m#C|o=t|rpwW75uSX$7}plHCukQpti*+UA6qsi&6w?}y; z-?ObkB&hqGhvk;;mv?UZ5vFlC7v8;GLUVNyY1L}$llg(T44rn5sV7i*h8RR>y^I^> zi>)KLCMVSyZX}${!h@;UwUIGPU!Wj7j@3DKIr3NhpH*ff6%fS*8){! zi{Xu>5dt`YR^rOyiPZ8rcRn?p%AK4O@#c&lcs$P-9rr(PMuMc66yDeZq;`Cy)KKZ~ z5dppi54#~jM%;ummIKF!+A(ff0;XL0JTSnr7l>GhJuqXJ`_MamBaSlW`-9}}h#>#c zEUCS16#fhIzlwq(`k{5V1B&iLi!RPCOwQ9swH|uFd}enx50>O8XfaghA<>$Zo@=x^ z-U+X)7M(aBG2>7ke54<(!kfGdb~3YE|IjQ$M<#G%s{R;4BB00K%>mq=$C+Nd7lvxBTfupeMph*9H>Otg`F%cs zw$*ETtg9Eqdsa0ZU%~MbHtT+Ct8)pM_vkZ9J+eAyk4HZFwXDqvjjmBeUtQL2sOFIQR>^)jx{<*{&{MQ>e%3M# z+-JilTXPX!vXf5gwB-jD00HBiymyVa?K5gL*dnME8bJm=BVB=L%U{13;6HA7sK8A^ z>S}G>oWK$U1;DZU3b>;KJ(tkSihH=Kb8o(F;jK+P~iS-8rc^Wd)MTAiiDk^@FKHbV4L} z{)p>*YDs>7&kgPVM?{;pYsqXHlskH4X(jJw+fmCNc*7fNXKT-T4X7y=UAic{ZbN|` zbn^D%R(37*WBGY=5{Gx)k#VCl z_u%>er>OsLro9w3<+!wzH0_;qgUs~I)YJ^sGL1wH`QDKv-9I`SfXHLCk_!@4Vp6l> za{-iF$CMIO6tm-#HOzC3dq=?k;*x7+oY>0v{d-Ic4*)>%`(pnODSFlhwq{Ip|1&o4 zfAS{(W7r}_?ZOUA1BDNXD|a=+I;+@%^{NrB)no$zX6uSJE?9A+0Sk>y*P2bra+MK7 zZzC!CM3d=&Sp)K~e=sVD_=XNH=v^qNO-S%3Xh9!aFn{-s-8VSzJ>XrJn<;kO0U_^e zwwK?@bjQo)1J?>C-`C8GpSW;ZGDXUD`6E+`Z|yvt@_UJ7uj1JX<(Fv5PURz4if`RK zp7MK2Gv$IAOXaK- zrplQU=2m_erp+u)Om5MP)uXPbMv=^Wp(xu~7Ut3^O3b#H-u&s;qe)C|nVgk#6mQWS z_$d|U*<+=s)}uU?UV*C7rnrU8x-o*$?g7sDl-ci>v{ZT{7 zoYL`Y?ew5hqC{~zd(t{{o)s6%?etC}IyD@??2^ zp5TOcffYtbk-A(5yA>H+m-ty7I5& zWF8m|9lN9R%^DALW-Ye~&hqdMxTZPKhKbDTtad`1e+Axiu6fO~t!Fs9@~=sNSll0Z zMaSBGhp?mPKg)O0wsb)zz*LOcTGD8zcLL5kM*hcO`PNcy&Vxp=ZZu!EEN0d5G3v#B0Y7u)jKpc_Uq9_{_?k(;)#9)BvC zJsTsp^|8WdEINg}R5Um5Lba8-N3kC_L=@;ur0WK{2iu9$kFH=h2?6P|aV^v#YmHp{ zI!n81E<8`@fe}F+MG=8s2gtom6m;Jj%3;P96pW8fU9d%H;fB?guQ=_b;;}kIHW)#7 zfaY_e13z+RsQn}g8SU15eu3%vKA5^TfR_4KwKmBlf7BnAU_dJ3tfxJ`iOszRRBMW zbw8is-C;IzH#W;Xh_5cC4%&gA@UWQMs}BZVlyr|%D~yzhVbn3z4TrcGB&*z-Y7~Qd z#I6{Bk64QDw$q{mF-rI_U~^Z@7Goo4Y&~jL+qwW~F*bmjW zPo0By*<$X4#$csFr!c-Bg|~o#12;6yApj9AopQn=rK_63^jLXdbuJCd-f=nwkcI@x zwUXgC&GnH@8rr-`M7D5k`>w;`k633LVk**(7FoOKIHA>!Wc)0WWlcg4DoF2^-l(w* zGF6pkA<>3R8QCbHZrpkV4?^+4lhDs|1@^epg{nuAIj4sth$IFk-~fM%xFR1$x!-4? z-4R=$X&gGyI?nU%A$z{Uvs~%?9R%X7*|TXJ+RFagfu0VIoBLF_2F1wig)6w@^W$SJ z;ulrI@Q&*4GEkpW!y?{3enqMa!(KBG)ck`XtxnLivF|j-Lm-om{7HJL)jekqI!I>i z%4JWF20Od~)VY!ChmPVt>@C3kk9#cS7_O4r4$4s0aj>kDSd;Lv<~=Ct3jylp?&p97 zJnOFQFP8F1FnU%uw0kvh9i-TIQQvMo>(0{fd+?xkG8(UQ#x;74ix1A-J78z*FSpYW zeOdh9lQS9h-?c%B{_C{VV@X96%nO|f#Mn-)elNrqO;Xnw4;$_4;L(YF{8z%Wf$1r~uK=f3(;)k!JWaI6HR{{T9=8e(rh6_U^-w98PBp&2$ux`VY%Ifzqjxz<^UyPNX0E51r&==5;3>noud;ANd_V$(~k;JPREDw7Thnl_g_v2 zcsj~q-T;_Mbc@{gaY+z&3gUnkK98K^bp5}RwX2ACAIO|(ZaXkvvjf{ox{62iO587J ztpw3qvVgZscdul3Wl9?S77kGk)3#--{)&;1q#&<9z_eJe~Hh_6x_M(nma< zDqre%i@_NLf|eD~d+A*AU(F4s6MH^FEIP;G#^C7Rqm$D2@VdsI&tXXKp5CqY8^=u> zCSJ~A<(qmwf*`AAN8tc)#X+i43tI4a5-lpnZG*6E6tVfCl_?p!&jb+(&)`p*fVhU3 zQizq=v&9i6lJzA(kA09-Yl`|ZHpifIP~)yP#!dP`tbNjFJTjc`a@qz_;DJ=}0+o7W zYj{JVv50cr@&WURk(H;2&odC8iyXcrB^nI>{Flt;B;+D(=-&=8{BMn?|L^Mi{|+Gf z-^;v;)vw7I-B-3TO`DZMRF;C-5Fv$_Bp4MU_6cYTLRE=>A#mSh)w*>&m061w3yRU# zfO9(kls*=(oL%v2AbKHAI&2+7toI%KlWpWBo4BOKbtGr}gZHC5?LpU-&F}l`!VVzz zATd_WCHl-=X7qw{d-kq0wv7m;eEEkV%l6O1L+m2%Y&B>KTh% zzpqb&+iutAl1Y9*7g%X^6kfW74BfSCeput7Govai#g)x&VKFXGYU9KWT9Jj2n>Qp$XWI0#*3y_aLH`DQUo zESSwj(VmL+O+NN-;X?gP%kjTfHj~tgA=pc07@@*bP1CQ!Gme3l3%~YL&!ub*J53fY zvkoUG+aijhxTDq_ISxXSwj+&a46&gR$-fplIm{NV3Kp|1WA<@4`zlzqXK2%9B+EHsB7KaC!O7!j``<7eb4w7u-0B`L zty$7j?Y#bUvhYCN>Mjw3(U;zvfTlV~qY;a7Mp7<`t9)hB zcS8Tk_~A1RjlWp2t|Lzz;qE$bkC9j?6K533Y(3LpK@c`$K4JyAr9P`=^;viTC16%T zvTgl0Wos62Y^I#6=R_{2Uaq*ZmY0<_r?5lQ3EjGq;XCH$#Y8ap_~|_ZZywRoD(V2h z83?ZiK;S8s^f>aD-z_cz#hc;*Jeh=;u~!H~caS#pkdlyU$P!0&L*FP+g{!)=ACn3L zk_}X89bcEYBM%n*I{p*!>lJEdj~4d83VVAce)~|DOuPR9=%LX0WV{j3x~K#(P3`vS1~10Y3qnMlVq&4C$4m4!YNevC>xXD zO-l}?Nb)9n`=hJj;twt1<%6lYr&sY23=nC5X>5m~3SHqbr0lI1jx58&;p0s?`Y7CN zqjUd@F)@!@_k;1JBPx`GpB`-|P|hB8|0F=(2K1L9m@Z`) zqTR#)00>(RLpQ}c0QmqZTSdt>BBiCr%4@{XHh{IXMx}8@XxqSSTnCa#WFb#j^(Ryah?ngB7)x5T zhuGO8CcqhN9)E!dAzwjr50ghPvxhc=5SbmYFt(Ub*evbMA`1RPJ%?B!H&ib@Gb|$L z&|!kMSHSAAuvA)D$cgSF2f^S0$-2xG$`*Z^8H(_MM&@g&h1@*FfxlrUKF)T~_g}bz zP(*HUvA+%Cn%}`Mj{k0BQT&w;Cd5K^HueUN28Pxq|9R#7zo>#a${Vs9{O~+j;H(al zB^0xc6eY~aVObqQ62bfkDTE^UEXWm=@AVE_`iHAy4zHEG$nlbNmcvebmFLwC3J?mv zF!iRUCbQ}3$?5AGz8yb6brIeGiCB+Vl30^ilvtS9DPs2bV)uN)(B???_Y!pZ@#Vb0 zz%WcOhPpk9T=R5c)j^<8W@LDWzT_ha+6N7K4V`g}7fvVCdvSo^9GfukYDAnc$* zvp96tr^~Ly6EzqI%1NUM`X0?GrwantVRxDNf5_eI6}KY84TLne-h}E4S?18O2X}m!rEBDR=H$w?DTB~XyFnJLwP3rctmZ`KF>)h5I zbxIF9g!`suB{do6VR<-HOI^F4%uai>&ivX_Gw1d?3q^0+)i^XdF;X!`e(=Z#CBZY` zz3i=(^lq8077YtjcQlHjaluU@SEuW{SNVU!yU!mroe3haaTm@(rbsQ4^E?BF z(8^cBeM&KeLXF+ppR;eZ(4%gv9uvi@GLM<`3Uq>`yf0yO$tt$;A^31=7odd{8L8*G zie|^mOh;?uIqe)~m^+-hlM9Skhqwu|0_Mo$2{njiET1v|ZL&R%+*XAAgQy_2)kjEK zT)rjLmNUp{Mn^=48z;E}TaxiD;_KTf&2S9Kl_EaivnbV;r_&{L@YTY9s|Hd!Eht8L zFA0eaYV~VnLKNW%>9Eg!gZ@8dd;9P)3dXM|K^X=BfcXD)k^hGD(c&)H5hJST3rY;JyUCt-Mi*nMHV#NOzSd%3A!jrxLU*{+dA$YR8CnfU2SL_vsG_Vhg)rL5*5$<3|M1Gy!2#l~1=|XJ~pgP&z zl!S2#2w-G*_|xO)L0vUI!3IuRALgo^)WgaW6GNfO74oM>tBM6Vj4&b-j~ZH~7$Y0Y z*RxI@0)FCx_~qGe^!f`WR0`vWO|;HlvzhNK6_WHqSg5Kkf<& zW+p+GZK_RtQ?r^Pdc%p0yj=uRT1w0)Ey?i}SXdI~yFcxDx@z!c?^v|rx zCYtO*KPp1c3xWfUaKb{3lqbeh(Qx$boLm?q?@2v9DqL1}QtY{TYA73-d)#kcjmQx& zyBqrc!cPElRK10xrN%-D%147W854Pb!T1r(9K(E%PdNY%$B*k%^Arhp>>T8_cXm)$;yn? z9pzXY5trw*n4Y%6QdPr&ju~7NW2G$6L(>u=9A?jzQ{;o&OR90@mDvf4Mxv!-MlgC3 z6CO%)klusu1O}_m$$9aL`7Q_iDE}nX$hit7Yts)J3mr0K!)Y#TIVStbH%8+V3%+yGG)nMN%B^)19DDX!Osmsw~c315Zn>7Qq|C&|*GQiG4F|UC>DF zbM#_|*zP|Xs^t=_mB&`zLL|ER(;hh9aqag|61PLM*ylruF1aps@t0#(B9>=W^+D_q zZ5n0b`?36od*rYOjfXWWyHhE{cq~D=_CXdP|7L9mbU_pkB%Ct3*8B#PL7_KJjh&Sr zG4soc)jav9^h`kYSf)^FmHbovB}WCZi^BQ1t>UlZb3cL`4^FHizF`PDgVwka6kivz zwnSgWT$5ZzQyYj85s^wxB4(yFyy=cYoe%8fJ0Q3`+=g(S;`|Nj6o2%(bQpZVz#K>r zA)FHdIkBMWG`9+DqsScn#~`bx&n)J;iU{c~0?|7nK`k$4i}Y^C5XH5) zMpA`qfW=U2@b4dURI^eX^;(Q3&6wiVNCjaM%JX=mPo;Gp<%V4R7sWnNxrem><{}T? z7jRqy94;WB7V0T5tP9+p#dp%X1)7WhrUd(;^RtmzbSELzZKs`v3&Fg8%E%LkYcg}c zVgtwwH}|#H(fp#;RJYi?4`xW-@}!O$#})0Qx`mu-HOYh(w@7X*+;t|nIge)MfbaYQ zIEg~+liK{PdQifxj5|-8IoNr{j*Nk)t^H%d2Sl{Pqk?B@{S%V)(U=63=Dg>rm&fpJ zeCP)qJIlPlJ-C=bgTYRD{(!19^8fFyV!8{BV7gOF@py0env(xT+-`0I!H-y~U%hK@D%ip#gDo2i*AN3pmhm4%6dUn#Yv8Y78jp<+g%NZpt_ zO=6;mrlLsMyuF)vEHhVAZbk_)o6W8=Ogt|#geJa;pJ=}A{7P$Yo;l~idk;zCKE)He2 z8|}Z)j|{d)xY?O$?d+N$;oaRDWuNS+Ao)chApL~sG2JP38}Ij8$j9beQ<8KK z2n{Q5k7y{p5l&Nz!(rEuuQJ#>-?z3{!*r&$v9lwA#EOIzD@G)>wAntnO?GGwW_t~9Ws@*ZI&#^ZN54#I9R#zqvfsNZ>GMlrZZ{bb}4v7 z5*VBBq>`NkKa7IsM$ar@yGMF6Id1m%={DcM=(ZM)!Ez`1xgfpig*H)Gqxp%Lq{y_$ zd{?g9T35zVYLB6$e(PeUId8P&;6Z)a1)$^2$Pc{v$Y zb9_>+7^)Ihru)mNz+ zub3N&85RjbG>{tJtOxTbVwdD>4^5Z6ZMd>{N_&rJ*4JqUpiqa#MYI7cxl3|hC3xi? zz^RUh&Bg}PF)x_%Ca4(+=x^mY3m)TbMf2SsE)`wiLTl`49)e%cTI);2bs=%x`E1}B zN%Vh@c4T4AW+6XRr9!;6f;fr3zF&$?qyBRxD*^dX$-58aIhV4gVea{bPHgW=H_h4O zH29rbd=ND?3Ht3(q-;`ElU3u$#<4@X*&1)#HM24%{q-wblfT_8#-oPSgsJK@hEx6W z+uUjz5<_e*bp>sTcRv~j1A5K4cOBhyFd_FNVty8Am!KO+ZEi*H-)y2)q z!RckJ!Dl;Q3##PVyG_YqN>J%xGGQ@9>O^|aGwUtCNy<~!RW7OMNb?|nun!1>#HHl! zmTaB0(b3*GVXcaQ*>pWGJ2ovZKN+g2;OKnr!;0Cdb~owemCNbZ>fTjf>WjdR+)GB; zg!HQtc4V_s{#yR@)~91yfF*w(KPtYW5tTaZR*A_>oj9gAZPZrN#gb*yNh>t)cp(w0 zWl}9N@G919YBw&Ii^xcB8Jpl0;WQCJF7@zAXn*issM6^7F=a+WK7DAkl^Ff}3hzo( zEJ0dIf@)N$vh6aVYR(WCDXEeo8**2S7IN&~qG#7C(Ou79EF;oMR)&%6n|(1RcQy@=J}rOOHRjM|KTbg6saY!aTY;?{ zP;DB{dgkFGxaS0=LRF~pCATIyAbO@X9u(YDV;|ZMPD)LNFkv31#wU!3pE3svxDwIE zMP`cRuQhE-IE>Y%R+nKTY%XVNMs+YrtYg`5IhP%3Ht2HAVQzo~k`5Y)RBO7Ca7+X} zgGfk2MHLoq0VUJF=p544jnh)4r)7tRrY269Lj&GGWTSx9*;^F1o7Q;z>`Pt6j9pQb zHclzdsN$Fh(V0vWH;|K7K{S)7oHLFd-h@gxbDv1PSp4Te$^Hw_KtRym$i77}bFc_C zJfTZepvKhID&!Adln$o3Q(7Xd2t(q9#VFh?U2gUORjRPv%%?OA>sszmLd9DCa!;|- zAD=G_GmdJL>HqtL<2cuA1Sh*Tm#F78d~ZpMHnUd-{n*BN3QK^t_EOky@y?yE-!uFU zoz?Jh1U^(tv(9dEVRNT1pKZHSvgs;ve9od!Yj&kjDlK{p8%`5lRFdXA=rv0apw0?Xm*fJb;guht?WT&T_;QL-&915^a`#P zOuhJ8uHx3H5r#QPqXHZ(jH|`!4;Hijy?x0Qk&@*O#f7Kvfr@&fT%WYR*y4%d><`kU z72LEF_ovddLLIpz@!Xy!Kexuhg0i`X-TxIdSv zay75gh;#*k`>BfKoDm@(eiCiwI36%yZ0MK@UWhPmE+;) z3?iP4!cb-D@GuF(mW7MTh3uR#dJtf))aa|w+7F?`>=~Znf3Eb`aGi7lFz%ia?AGqG z3j8CHTdnv+rHFdpY9=B%MkHq&_|w$GM~Q6B0YL>PwT+SqnHOIEDN~g(1?Z5afzH*x z8B8JUwGQ?}&y8~$O6ppYs%8_8n{-)?Os+Pk0{LQ%eGOH*=xZgCMYd7(XBcdb{fpPd zjkNER3d!59mmHVTDzE`9OeZ0Lxzf=i?z~8n_61t$FwlzfW^K9)>}TF+{v3!%lNF3j zCOrkw>&~_5#3^SLJCrwb?68Hb5!xf^`PpO^>>@y3a0~HP;oNZk>}WB-iOez*{kVc# zQzWt$6NOI828H!*KLl4O)G8IUbg>lw%AzYdYuq@jZQ&`dm8A=?9!o<#)XISzW}~}E z${{B^RwWG==|YH1d9A-dJ$(NdPeFE^RK}G1XAyoA7YIFFh!o*I1ZFz;z7}Gbk zOr3btnTp=B`Ouy$I<-7DwcPB1_luY5LXLA2WF7%)4dD$kNA$3bkqM0iH?1~YQ%XE$ zI>HZ7k^$F}m>0i=)GvD;l3~Z$Mz->ikq;pAHMy|nkPL+>OMA%hSh>9`7u4iU#cC6# zn%$K%=>R(hTghhA10jpdd`|r!X$AYvc*n{8)*gOq3?P5!=8eu<*yPT{8yGE|N#-(4 zJ_6XgqCGN5PpGyzvInl9L@jb>&;ayA5-;{z#cI$J4@T3IJ!$6B2aYZBZSrL{Z=gOG zm-SwB#|xe6C`QTSOXttglgcCS5dZd=)s3K%+I>d%JMMG5zvl&VjwYr>JKLwS-aXh=n!yBCm7B$7~I5AMF$Vb9q?3o)7AmC0}e+n1iSf?8y>Q zc{#AV3{T{RB_!M8LHOcHLpAIk?$r1qH1?DX?JBd>EHCBXIJ}rLUdo@ zgP6d=r_rgr*s2fb3-E>@({1>i7(&j(q2w~~Pd2ggo+Leh1WyjZzOX`HARJFhkL6Zl zNk^bE{k}9IfHW}#GQ;7e2HF$)k_!w~CJrhW{&gAdN*AKyA1@Nm(3-pfvl}+S+p!4e z0>C%W!RpsqKm|al$qE6p->kpkZ4fXm2%KNUf}%hLI#~qH`Z0=oKVsw)epqP`2^tpf z;HMS@$(j_Y&$WeiJcc^d@mK)~Tw&VRBzt#&9^x6XJl6^%;ff$GLhh5Qc0%WV`repY zIiy9eaQ65shSeSUTHoevQ_Qf5B{S{^?F*1^VhG94l&G zR~zmK$xqdC%R}D(NY`-Lr)v9qV1&M5Iv)S&oYZj6Qgi6*4jnvp!Dg`A4dw_VcyMx` z`-G9sU~|Ygtvc?ue@<>z@*r}3?o^D;>A~gl0?6yngLIcux_B?}PXo5c9tj07&(kkU z)G9*CJoGPEYl5AObKnI#CYH$DDXKN2-*y7eXfH_+VNTM8$HskOJvj*)wYX+ zzO@w>e|5pz8;K(|I0C2t>6s7`t+g{;+oZwy?GlaJINY5&lG>)}!W*t3w966AM9l_1q)grt0?Rqstx<3o$^r1I1`_ z9pbYU`#ktP#S%>~>KSAh`k?P9*G5b`!}|H(L`^#*^j0B9%sb?GZo~qX9qs)D= zZ~5Zod^*b4UNnL##9rL%P2XRVEn<--%RyYQJobxQI|eBt*9MMuEcTW+B?ubDRR1G! zI|DLQdY7A(P`MQFX5ha+>y2_}kev+*loNfVta3l*I(=(}w;>}}v4dh_ewnu}1g^`W zlRs^|EjIus%qaT#FZo~OgMbvlzklMFf7^Uy|DBRlHL$iY{&i*j=KzoLmh3Nw^}Do0 zr(EP4a~)Ta#nw1auz00S4@qRzKGg_;bV zuSwnKmVv9?u|?j(!d(T^b|iQ?R@P$Rb!qPRi6}YyZmMVTI#a<>Xkq98dHzhWsx(ro z4aNxJ9OK4jlvt7s@t*8SeYgd?IMHA9?R{9;L~N3&5G=oa{kvRlKK(y<3_|NAvdFfEyaqU}f{N+*Bx1+Z z0!{2uRmElUum5EsqfF>JP@)3>47mXSu>CIN|L?Z5{}@sGU%oRQ3n#3$#GNOqTjdJL z{d6Wy>(M(&X>*)bhy1{R5S&s&3(+ zqPeY8q#)euFV7pV!&J!eL47}`jrDb6YJ0&n@P)6bow_(LIyS#6yUVYtl?{BeO@jbq zS_J|HCQ&d1mtDRh`@-vT{X_O>;515qVPEv#Q9*%E`FfcB-~dE#Y%24+ zKiq<4fed+|lA6KM=nH*eXe(skV#WhJqS~}m#OfchRcm0;yNR12hO(pp;hnUjCKY1t z05E?A1nVhK#38FOX+ZL(ks)t@@LflUtb(+E(OU<|a2EOJC;ZwG$ypp#E$fglBh4aT5-m)iyjK+J$-eD~}y*r{{L{ouTxDgF?n zkpt$H7WjL`?9uWq4FZoprjjCc)*si`(}kESRLDwPC6m0sy0BtmJi=~4pSbSQlDjj0 zquKy+qtJpx{38WM{BuQa?RuVSkGg~RZb0bR(s_s(*3Y6AN{+lG>3}`MfPEC0@l*Zb z+0m@y7yYNkkIq4#9*$qn`!81aC%fmC^xeE1mafbvX+uzB}j;ZdZGI8BT(1DnCgkr9x1)7qmD zppphwYKF)RT zt+{O%w`y@anp#?HdinUU`jzvZ-SJT*LvqR9s4B8%1jUS62Lg+2f^AQ?ct5-@ZfGua zJF|S$4e0{6{wV8B%xxw@8@O{K9WH{$Uanc>VMv7RBb}3*i;F(~Ddy>#H5nm& zF8T2`o00t)DY^2#;^A}7NHbT_TWBy#TW8Hg8;;qksm-Wqx3amxFW#>NeA3{XI{^j` z$p%d3(R#@jy}AQfLN@&zE4I{DLE_Y48X}u%e27~**8vE_uaRRM#P!-XNuESn2|~$J3F@B zc>=MH%VG&YIKXZFX59nicK;WQVXpsdy^s|P+6nLoZgckzUT`vZ7hh3!NNiut)3ul- zi$L(&{7B((ZRNuyov_p7V#GN}D@{@F$1zScT!;b9KhDDnYlKkGc{ESqyv#0t`gKL> zOkumP_%24a0?gQso4|C`3SZYg!^@w&G*zgb)~5?p+ewY9^hOg&a0vd!NLA1RX4e8zlLF_-E}Lts0O>&<}~N5Bj3E&FYZ zpBRq=X{KA|WC*r2PJKDPvQ??{ng${R0);7jJ0ihpxsm)>O&;je1fc%PKaxA{`S%DtUsI)Ysu}ZR#<_11JK^ADY zgsy!dNm4|w%$L`MiAuuTN%e!=hLzR{bexc>&~_t5tttt9cE&SiK&cT*mCESV#MKT- z3{NuEv7^{hMbwCfT1;QH9b}ANIFwMIb^=wc@&av)$h<;awDinM*&cl;IVpY_K1d_M zY%jyrle(T;HKC~vV!2e8s$!9uUL1e;?wHG|7<@2`buN=q zXI(&F^TkHEEmWLmpY9&9#_^i(y7F;<0H`lM2pbDTUr<^Rc+O^884Vyal6IoNrKfcR zD}0X7ynn(#C&ptK$Tj6?q=)54l2QHt)~ zlXmrYkR&)Evcva%;$qk8(YlQ7E^)I&jilvFAV1MUb<2mUE+w`rV7tWR@7D1?Z4^pJ z&zZj`m?q+&!iG38Tgv`&z~m@$;NMoLlcIK>N{&WD?gRNVdGqe;8eZq<<4;70Dn9)B z9*om*r~@I1EV~SL$NGprNO}Vjv-Hk;6e(K{&c6>qEggnV9P$vbs2RENB7r{#vL4;9xJdA zp$~)cy5{B$yk25A5x;=h%nnEJlmXv){FQkZr;opRbO}6AR?B(su3)AhNZYdjO8;eL z=Yc@?h%ha1dL?a-s2|4>L(XhV(V8AH&7ln9P}6@r=`fO^Z9>&(s2*RfJF4h2$TL1i zDAN&zQ)ht736^obBmWY9cdsfPq31&1q_!Mw>haAR+_BH{d_p_TeSqnK!x}l5M2A^` zYy*HQ+kefGEBN4jm;&ft8Jx7i{f{H}ejCovD_p&M{O}Z-ypI76^tMuhGl} zF)uJj7w{lcBxq6-Y$g-|Lx-uOm`_)32yY5bBff+R1i4T6iO!>- zUSKDxHTN}QL3ZPK@TWk?XJ2Wzk?$MX?mP*{A;DV`IJ}}WS4a#$z)rwh63%`EagryN zEUBWxQhzco5Qmd8M7&vd^tM35h%)7>mHinGtN?f}c%(0^=5P=!raq0uYfdwrZu=7=JUw?B&2A?@Bye}DHs__ko?E(cXEArn)=#BA zZ>>E~O)WZ|@40_lbcCz%_PoE;wh3_R34LH2;Q!vS%B@wcQC^3n1`qA0pQl{3}yiid}*EBI>X_#3J zU=HOErGvFr2P)GA;uug7q{LYBQ*N!>ShXo0-p=fE7yTt-PA54%4ocPUG`gyeIFSrz zq(t)#2S1R4p8}^5cw9RXK|Tg!yWZ@)Gn+8!%X`AcsiN+G>WZVEl+5Mzp)!}#=mQyA zDHIFBM=TgD{`@rN77jsrUuOPOhKtJDF`0SWhcl|wk&R8^+LlWvf{Sc#6H&3DXallv z&*86DR}3hm(mj%-J=bAmbV;FeY(eRU>7ddB9}z;R-bZK`RP7J?U8|OPt4~;-Q%&3e zKNjQCBB{Ah_(h!GSuHw7Pf!9hW=EikR&GI0`2wmeJ;Scc>3Ormx3fLxJKLQ8T`W3- zIlAdYgE2B-ASR(;^<(Tj=k<2~M#p0xBL$vnKyU@r6NfTF8L7f5y)t&3uQ`fgUrGum z#n&+^+(^7?=Rdo-#4ZEaBh4Z!)yY_v!TDlU%^%`dP9_w{QqieTJ*ObLc}sgMc>e9< z=Vu3{qQG8l?J8bxt!U3yVbU`=xMa-QX-u6gZ4eL9dZVJ5F8QgYa}oIq;=-99Bq(-E zM@=Po-#rEz-ts|Ciov!KJw;z8O=QqhYZ3tXgW&8V62kz9Ft5_atR4@)6I2%ONWpmI z;sFpC4+WvVwl8$iQo=y~Xv)1vjZODxtu!KzUpx@W<*sN^a6NoF1qtZJ1j}=c?4B7y z4}*Q`)rsCvQN~S1LCwv;*;Lc(!J10?>^J)YruY45qRPIoSK z$?d-{8+e#fQJz{l`zw|DIc4CGr9W3engicNDh(?%J4H*=^lRA4l$Tz%MpX~_SoY*s zx0{hBXlUYDl`J)EY|ya;9-gPKpO>4`Hc}v0TNH8wRq=$Crzit++tfz5zD>Bld*ngh zW!D*})(fAy5a^ zl)mt0MIz=GwbCPjKl6)M1B;4f8SX+v*RKgAC*0?9eYU`9l!-3CM} zGYb!G?jp+>Z|;_Wl*KB{Zq#xMa2DJoBQQyeGzTxB(X?c~2HAlECm3-CLog_+wPzvX z=$oI@GybjxBoxr07VJ`1_F(XYYl>nbZ?@$~oCaVP6P_B)ZYkT5U_*g2{E0P&lU++( ze!l_1=ke$JZHq8DK>mqb<*sUESw0gAJHE9hy(PW%4i>9kDegg1G{!DnoV10lI`k$7 zti{6H4leTP_}SpxU}<6S_qkSRSx{Sz1SaI@v~jjU35EQlk1wIKIAV)7#I5^0?~}x- zHhMVLME9ipXoJ<>j8!?>jPQUoLC>)??{s?7+9zhMLTznsx|i$+tp4oF-h74en5WtT zV)vL<;y`4~&x={{o<5_4ZU$#z=zp|4cMbF`l0+N_Q<#YxAECbG6h9JOEC_s3KGB%k zym5N!84Q+^X)efBh0{~J3*Mly{mlmx^f^SPEY30Vr^14c{~${{QA?UcTkMVY91Pnw zm=|p-+`B#}k$JhU&v6!9GgfC5#&W=@8@Z-doZ4ZtzgAkqkVkMo;j8$URTVWA^`Dlr zb+_|kKIN*P>(+pwAbkKS7B!3F>h}-Jq4qp)8L~w=`~NX(liz}O-Jvj z9`%<2<^d?MSQOQIng5xD3}*9mV%dnhRRIZ)+Zz`uS}%xAgd?T_U1u*RoRvY&|5Prw zNpow%%eb|$?7|8SFST7zJrZCB z_Bbcg1xr@svrTUKD=J-}p!(FMm%JNja(AtXY% zPE)ic-X1Fp&CQ^P96;8;RCtnQUS<{>S3ris(4EP^5=ER-%9HXe>@Jh`&6Koy^v!qB z7c@!LSY=P>RnAA1qNq=T9REuwA2o>jy5Wrlv>8L>TZ7qFmSZ5IBI~yKL)X9oeY3LC zm^re0((&2QroO^gs<-w}QWeY7SwDf+IF110?@P}ouug%x11UFkmWDN575QPUnE^cy z*bK}#_=Q{$Iv=8nt@l{I9|02Bv&Wk*_xvB4J5=(Vo~5t;e@pD&Ne_PbQwT6Y2^7CZ$2S;U;05A<6~Tb6Mz|Me(lK&-NvdMk%mlYeD}!z8)Zsw4&7) z3THC0P#7L6kY*V+e@#2UC0#`^2V@#-fg5hAkODF+IRMJMA?oa5R6<_tzq4XSYco{w=(XpVx6ww`3PRiTAgj-SPI|&5{fE-R9y;owY5$b)%NF z1$&Kx{HEt8$Eu6ZoTeqyQI0FM2P?uj1R;JKBz_#cXi1!W>2TO^%;QB}M{0I27P=yB zB5M}-QU5M$v|KwD+^`NEaV%Ykl0(Z{t?C-}hkL+@$Mk-8zVc z=_nNHJU^9xFkaivOT!p?SI_$so0Es5r|%1GK5H8WTy>Ws=JgY1L?Rvr0b76 zveP04efQYM-F4v(*W_+T1TpeLh~sNRTn~n?HtZxB>2hS{!1Y4UuR||mOKbnsxiL3f zkKJnF@yCE6Xs~nKq9&YBaD*o?cpVN4-XL8!gp5w)0NDHhR;G@xBUrHX^Xn#c`|%&m zdtyC;;#X6HaqR9;eR58I#77lkR)B03k&%{<-LP+^obK z&xACEPyr`>8Ep?t`z2b&mv(z4lOK^=s%wb7Uqk%Tf;fLY?mL!&lcX#p0+vu6n&y!g zS>uPSi)$TQUc$jXwCgSW5^ai8UeVq&5RAs%m}*lffxcI_b%GmC+v`6k$)y?S3>LpH zCXNW20l(lT-SOkoLtDC6XV@d264>*kw?djb@yo=oo2VIrjUx-$SvRYaaY#>6a`2jW z*yD6Rmg(jFHX7{jcnW3-)S*@DAJFKPo}1nEc>F|5kAvOY5){#yQzI1!+#n(mKQ|#P z-(@C+!bbYTU(@hpUhDC}+YbLgu-#6`5B%A7QlmD`O=+`(|Dij=jZOKzlLI#Lb8w%3 z^5MWu#lqpIE90!+=&2!J7&Jln*78X@jWF{x5!pe!7`uji9kP8aGIs*J9#ST|$MxB7 z82HAZ+o1Rgz*gX2pqOyN%lp!dY;A2(Iul{*wJmAeO#la31;^_qq_CZ?Zt1FeH@kC> z#{NxSAM3i*tv4u_@pDRS5%8`nVm_S4C&NLMuZW=wG53o%L2-Vh*Gq#6KSr(e7lwEz zl=JzVF)wOorqh2|D&#Qk>lJ47oYY&=Q;%uMRLuwR*6$}@1n)kAPb><@jR$uY#p|rMD4fB&)!Q)aa zN2LtJ*V&aQQv&+SQt$^rE6*O#Y5S>e? zp)muarHj8I|3Y1qC3hih$hMQ{ULX8TLDX~e4iNj)UN-l0_OMA;7e61M&i;bXywG@v zK(O>;FCPsZtG`kSH>!nehx#koroxav_b3uBxNx?*y-Q_7yuj-c54C>-H*Wc@REZ{+ z-m6u-B{IAQ<;;ysC0_EZ45_>m8q!}q53BupD+-4X_Mp(AlwB3FbX9E2ZDz@xvEYZ} zu}4{yG>%QI%YnpTUdHhO^^U@nu7jBkvu*w_CD2NVqB0nZ?N4_AO*7}LJshtGPj8G< z@Uk_RcA^8%q871JUVUyATcI5wQ=NRlEakYFAwojz1vW5ZBc_(M^BTo1SB$u!N!&G1 z>;0Zh$TQCu#cIx%e{t;V?GAuGK>88Zr3L^X{U3w=Ps6#8-YCbeemPI6tFr__aUgql zPEwU1^&m$G1bN1QkhmI1BS0lCE4bl|6}YD6=m>86Ty^JdG05bO`vSP!b%_Y%Bu5T{ z8jK{eMo1-&b7Z&CH4BpKt*55nP}SIXTkOMA)o6sv{P#zb?_1A4-`Bd^*q04{9%ncJ zl_vOMH}0+CXn%%MBD`R+#*lSBU^|Xp*_uz7vn%)Dh9ET7t}!STw*I_?wfjKagtdu4?_E8<1hx237nuIK2rIE5PsaYd)U`P;zrT+` z_47sr0h0SWMetyHpk7GgLKokHdF>;1lnNMY==|B$e=j)x$ev4{}VOP+)mP z$BY}V-FNs+pLi~xfIigB=#e}jw-Q#zZ?Mxkg$`6-nkMLwp0VPW!#f12?2(?)KIF`< z`y!dVVik1r{l{;x0tIRr6J#js+6V$q1t%ef9!+ipgrupwjI4BPGXeYk=Ennf1N*H= z%ESU0S@}{oq~GSp0>=cDWI>4EZX_7W65R|v8Oke;n9c+zCGJMkh`KJKoV?gcF&2?p zo3k-?iRX2QfwA%ocIaD{rm6L(dX(!LVOz>I)_f!D^~;tX&SXnlVg&1GBPefs&$3N~ zBH{B}7tn?klaed9iba+$A3bvuY7{2AXc z**BleQ7EX2b~z(kSWPmWF@y21-YqO1eg&f@OON^>gW(4;|eKPbbLPs(~noW`6NbcjEimXAd9c|mZs=+#+ zYc_vqq44a2BQ4^`xrjbYTn9hg(vem(w#cq?aOV?5IitP#@!Ia<^3u+BZ43LV7iz9@ zpo~onsXRetz9=!mxQ-R=&?9s2)OM+W3b=O-p4z)mQT?UE{i_~B$`lr7NO$ZJhwmep^e-NJtM}Q?QbVT+H zSW_#~eyW5iu&EA1{=j1^n&2zLT0aC8Bx|YfAARw|$mlx*(6VJ4g02Yps>2T@7%x8l zcfH=e{=?Q&1R^LaM;(qlm@*gXTht_sHCiqsIfe<_83ONQ=_ENRBI5yxa^b08z`ux; zD}FaN8^>UbQ@YGpR>2%BdFaTp45Rcb%$mVmmzQBkS(#f|#HODVRraUtUsdanLcyPf zX}9CZn~d%Emyr~wmBY;H9*?vuNj?kYG0#M!?O0E{99rJ%k+emY*Rl!I2|T>gVXMQo2wRgw^xKpcy07%dyP*r9wTXsxn4a8daoDO_O}O zZ&m-x%iU`YE;(0I{8^M~Qie3olBA5S2n_56t6}aALTjq0Z1M;h9NlCwKD!VpmMXlo zg3eIego?C@5Ea%eSBj|}NmOZK`y7?I}05m#^~aN0&NHg7J$ zno3ifChO1Mo5H6^BvSK<3EHFr3p%ZE5D$cS za(4>IXr~D(k)pJ|ctfwA?dtP)rT!IKy+bi)D||ZL_wT=tW8~=~ZE~oUX%h2tHBr_W z8SjusFgL+v@T>~k z_3G%%>cr(qi9W27WRm5E44|;c>uZEDn=`ceL$mjxBapBqZb;w$ie94 z!DzO#9+;G7^ZQZ+-?we9E^8{FGGZ&7f>PM_c)K7#wRRQ|Z8=;o_f)NTCnCPnBXUQO zC=C<=9tTq&3D;6gw%>~kNjb?Q(pKt0X5g<@?Y>lZTwAu3n+4+os5Ci)He=&V%F`BB+Ay|iLd0vX9YeWTEiDOmIxp59Ynls; z93v=uF$*gu_O5fKZUk*L=lldwIPISSqj7V*=AOqPbO?i>G*9t$i*T3b4CCg}yMlB^ z9A&XzjlwvMogMgp-B8ud9{Rk*Kr&141`Zbj<2A;5vSj?;C-vYj%kc&P*k#&1!C$!e zwhZ_9J}{eE{x+hS!*Cq-{<1vw`|OcD2|lht<$1t6rpbwld;zZv2L)c4#rDF+1@{6A zJ2Ga+RMe)~f4_y*M#aG?oS_j(H{Cd;a0(bbJ%m<}B69>$RxtRr-H0;p;AqQGO+NCQ zEKu*+a)E6Qf!Epw3_h!-2wN)M@QDmUW}Z@lrC`ua7hax-uJ)7ELd?U0gHz}nlMG;0 zm$?=t#@-oo!WEkP@qmm+w#|K@;n*U;*79gGN;keDYrxk)A)J*AOnITZ{SQGy@H88YUz zfMqMr%kU0H3mK9>h|IiDOz+5G^K(G+EGTu1W2}A?5x$W8YKsm((f|hq=wqcAIe59D zpi~GA+8UWWjqvyBV-Im%+ih6`c`7tzu*$ZEtzFAf1iuu}&f-Z#Q^oNydPe3h6Ive5 zF2mA#==k;BqnAK&leGI$Es8bK#y(kvypAl~gD; zYX(@X6uD}pIAEFJAUNWb+G~+ea1>ycb1)ocg+C%Oj{2cA`uw7)3vztps0;M{UYxTY zZECY0ml~#iv1v_5A0_(A^&QJV%-9RWfnNjH0^J0J&21rI2gf$Y3c7w{uB0jWh!{38vq%2@St)TAK zSWXbzlurWDMa}Rt!R-X30?iQ1sH6Qmc#iZ&Hvs7c_!|*Lnz)(;z&=eaKu(7nKBp*8 zYI|N`@tPA7miKcjv9`_}#faR2BsNE$sH(#~kK~#+rgI^4aBFuZT$*55r+q`XyHB$n zXIPi#1tyeAe0N$%)LDGDnQ!lTzdNsMEI+N_rmkyje#R36=z})6xeF4MT{XIopnT67 zzKf_75$JF?R|o={N4w|P5_EMQY@SCuZ($zJnHRTqWFC@Gp1tzPCKPQN4vxzrz(F9C zc4h#!-Zq(%w?_zbX>P~$9H)tb(3Oz|s=pwP<7#DC-pQVSTa3-M^_akz6n9G`MvW^# zzJ6z81~kYICf0r55W!*9N4$4ErUrL-jdxgK5Pm)v12_+)-y4l@GLgQw5%7At=lqlN zrL+4t<(7UQ%XOr}g%6%oM@J z%L?G$7QmwytX(dBU=SZ{!_FE^yQkpY-}cP>ZejQ*xvm$S9NbfCyHsuIIAb2{3%a3{BcEdvO;W!v*HdMcf2-G!Ifn| zyx})gJNhn1DHKWH5LcNV_FK_mD`8P5v4R7AlF$YEio9ZtY7KYnuS?qmLZq-gL)I1A zr__rW|0wAqQVSwf7!ScxG<$gkxCg5In(g?3ZqV?ujU!14mLCFX+=-9yh+ z#r0NZT@qu0d54#=r=GI|2W~ zS0l_-#}TkCl|zPtm?6w&0DluYa&=XNaWTM=5gM^X0M>p)?>ZKb@Ex>=RB{gZmEt9-Ywo5 z!rTr>K-yH8+^l^-A4EXjsNZ;k00nXOs}md=sx`Q|!*Z%*Q`3 zE177>ali2if2)MIT0V-#{J(5k?GAgdnAy zWPC(EEP4I|H|1a)iX*z^78V?wSvb+XvR$p*hI72E z<9c=KP84>?z>b2v#JOFr1?DK=)!e-3bHMIt6A1SDQsep3X$*PXh?Uj)wd*D`(#vMV zhG>7V{&MBZ6n6JkV3uiuct1HPWa?tU#_&t6iy4}%ZsX2m%O;FjHMYy zOKzh!Jxvt7UM(8u<$hTWc5*VE8l%_f6PZ%ymhuNaWADFqDbjt3s21gNYxk8+lI=(H ze2p1CAFC%Rr|X*s8II$oiZC-I?pZ6uV_#&))O%HJFDP85*xhM~UAJUj052;gGF}&R z?=aZKG~KQFRTTWx;T2Yx)ZAnntIrWJO%M3^PP-KfJr*vaH;qk2c%XQINtzo;vJNw=?U@0qvsAHM-N{ z1EP2woY~p3ei=LDx%gcyq|w9CMt#6PriOH}+iCUNmxS6!!R7e*Xyf|wj*f;MR+_5O z#2)7lCeX~!v`L6`iT9q0R*T=8|@V>yX}^)?f$<8ggn=EEF>Evr z*PEXXd(i1y$4UCCfb0-kd3kAG`GB3$*hDKSs~IV(JdLDu(3tKj&l-;+YO;v7b-skK zI*XmXw_P=()r4ksDg9Ca8fI7A@xUM9Y7*;%niUbm+s!Jv=H>9>zfbO(?MnM`ThwD` z3gw5m&mNR0v^6L?=NuE{3e-7pvu4L=o(KkUfWnbb%AIOMbn2evu4<~+uzrWZsXTD<$Kk+%L zzLg2(`r@#`!@Oqv!J%#$_HL5g(&?A+*=q5F5cwYdK%Um;%d5_^!qPi4STO#5M0emD zsgM$=r~hQ4zw`mZGoXV#3SrUoFg}E4o#l7@9P;M zoZjIA#y0mFaW5+bi<{p92QUc`J{B@VSI?BZd%(&UQ~Z^G&|q9Y&gK=QV7CG)1Msty zW?#06>;7LXSoLufy~Td`e-c0ZzaOaT-++UX^8W=2%KSit{{RM+W$ot$5PYyp^b)u} z?F0w}Um;}Y6jJB`rA~^dl!^p`ksf<&_p3K(V{ljD8b8TD0s8S76DU;9I_o8dt>+UYvBKD{P6=^z+Qt9n72Y7bdpUkY)xwy3G z;BuomRJycr1=6_7z$zIK5U#av=C2By|6Z~y| z`p7ob*PQjp6+O!!<6K#W_0`_5`RjJ0wPlzX#o%GfJcyzTroJc@tQm!($lTf#{R^vv zXw%wV#V|O#w&4nvCxxXS46WOz;ArQ9Cu{k{nYfnRg6+63@l`-xh1z?QEPu`;Td|eY znh{-u#rc%eiI&5H@8ABOWGa~9%tjYZ8DTi{I64TV+PLq18c#SB#ZdTZUokqMR-I$? z+sw_@vcVd=2z-Y2SIxt7XU%Bscs_Je@EfIKWaCgao1#FbC_x>cWpxR56cFi@L>n~H zu^4^6pLU7rK|z}^YDIX~(<9y`J`Lu26?Le*f>k&LIfl6JTp;|7a1646(l_)T2zEN; zX3B}<6luEy{NOz-bPS#fC;3KXYJaWp9zwe?nOD$TGk&p+_VMs7yR;dn{QVr;+0KFD$;- zqi(C1pIWez5CDMqfA}2#w@R=|)6)Ul9QE6$O-+kBCZ9wOg}g~QVd)le(KfwN4q~Nx zzTEY~=&X(dw zZt6WMQJtzVHc=Zzk#-_3l-aT{I#C-{5hcWBihOOvWvV?cQ5)rf$B32cFy4q(O~e)o zqM|VEKoT4p&Hx4}#L7WmJh&SNaQFhAjnRG#cz4mb9zHy{as@?|+26)g`4SZxA;eV4 z#5F`AUaFNnil~k_N_9xd5o9Y=kTV__$AtaD$v^rtWS*&egv0&3JTmtNcM1xUMS1y{ z#5^ZdOZ%=o5+@G8C?~KQfy?X$xO({HC08-RJFt!~49KDQ%;Ul*#oMkA?b*IH#oJdD zU18uJ9{BJ%QG3)cvMBn4DFqz<-J*`^Dbu^)iW7GZA))-c;))+>p?*7AJl;GJetWkR zU%})BLOZ%V9qd#<9_;Y&VxmDV5UAJ3yTFQdIPmv3KW;QP5b&|0qRf1#sOPsar7OQ% z#0TMc5K-B8oE7UbQhZ)qRHAmuN?U<*!Xg;!A!!;-*j099mH6L^Q)teT_szq@$&RE zsM0-`t5Vvm)r0w2c^p^@&W!tfH7g>he7xFZH%$|#T0RKXQ<~zikvkvlY~wXGv!9K!(WAG+ zVwwC2LdCxE5Nc zGMO}-gmwmTRKxb5L?$D4-yZ z1p?nAJ9z#vzLN|x?MV%}u0xFvYF<*zTI}v-+Rh=i%~nVS_6FCN?_%(e(O1|U3*1a|+)@uxKeMMM<}9ooIZh3& zNu4`Ih9_!%demsHN4b3m#`{>{%EG{UqSV%ip-=EdSGf)o{dh94n=IZ8w6)$0<|o2M zX^xv~!|qvD0;D58Md6T}a}C4?tu`y+R*`9QG@g~qq$o`g6#Fx>ejp$*0j72n;}i?G_VWX_iiH>EPt zEVC}Pck})@Myqao#V>dd7%T#!3r^#OWS7YT1m4F~D-SZlXAA50>gx`gpKxLQ>Y{*8 zj12>Q;2yD}TW~0T4YCgfxd6v{`ownT#Ac=M->q%+Y1TYfB}vF!>ZoNRGHz9jVtj((vDpLgU!$1(_3eQ{r zNBg06_}vm!SQXk)>M@HIEQGZEw+X*>=k7=}#?4+O!-$j*+={G{_Qb1_(O!*txIgJg zj<1*;Xgh&pv^SkdIGFU(9i(U&qsH5%J0}3aT#e_liEgKuWDO5s4+RpSLMY{6owm&D z3HC<*c)>q}z+nAV@o5(OXYXxAA_Y!{chCCa6CBs#le5^VcmChSh5To?IhP8O5Vh4ITo_Z`?6-&puh z{T9YajT6U8XQ;xAE_@|lErW=bb0y&AB(A_uVm?H#8~fW16W3J=@-~hb?wKN|fkk5F zVblkyS-qxMmP|QDO3R6B%W5$Yp%1QSUI& zotf{^Qtp`GU49IzZ5B&)_4@Xh*>cy(!pdZrtwCI~)Al2QKR`fS( z>RRWgT^XWq{sW2}xVcWa>I;=w?-;DsARtg?b?a#-4nWB??u6sCIT64v>bcgWj$-4p zfFd{ocqRp+u?3vc_)O7xO4&-hGIHZxf(ElbH-x~EhY$_2CNi`4LE>kT^?2-PCCp`ePo4h6Qvk4rDzZ%Rxkt;=l_&<=2F#8&3 zCj7=C)DjvlLHvQtb#D=X6J9&%?$y%Mcx$hMZy+hF$2bG@k#Jm3_UtkXH4m@HTv2Uv zYEI}zKX!yfdtW1*Tv0?tK=1?fuRd`c-#Otf(QBJOVZcCQj9<56pcS~ergzNnvx_F-Huzq^9AwyYGxR_`BKOy`Fzx=YiUV5K2FH(>H+LNy~kMDabH123uALDmo02-6* zRAT`KzBHrM;=s4(F;n6Ivih-8lZh7tN|uz28) zP5sU!=c67pvqTr}FZ_MQVY&$A9jMZALXjgJrKzdNin|geuFGsk$TY6B&b>6hnK@W( zZgm~-U4j>FC0cN1Wdh;C@6CE=>@kq^ZMAlsXt_j4Z#vC$E0}|_eZZhPAg*)UB!urA zoK2t;c4XqU!5?W2?=}F;Bl_ljnN?C}>f&|7tg$$Is*lSP{S;jh2yfvteC*qDnn-1mMQL5NpZF&oGS~{D>s;ApD%U7}Q zrxQ4!bZL^N-)fPTm+Z;(t*38>hVQs{$t@nkitxrgZTxxS{4huU#20%s+sYyR8W__c z;jcAp9V#N9+i8u)j(5Qko$)I`7kwrHLPtP(+42Ezcr06iC=McPh;=xRA!2MGWC~hC zcH?sx@fy-KxhzT&ME(H;xi?#Y$fHYKlYm;LzE4#X^6*1pd8_)KH~v*=aVqF69*a}H z`l3hfqIlgEzc~^39qmz{QW>{5CJdceE4wUoE-9-rD%^b+)t`H zi^BfUKy(X$H9s%-h?&R24=`8#;w)HRD^gN)BW^92^X!W9elAU zmQ3BsQ@S-GzbR5j(4s6tv2+hxhe!KxrwA_PZ^RxMk>XVI?}o~;@c1G)dr#$6-^C_; zy;rIoQPm$Z)Zx$Iu&4>QVe84u+Og}m#FBD?_Z<#F-uelSNOU8vM_-Z~^XXnjq6gmW zY%9G3Ty()#YpSUEFErihynS!m*s!Pq#)Mm)fgqIYDip)BBKX#pUu!<~tDZ=-B{OG! zgx*lt=5>!K)jZ+N^B$9w9cLuf$vwplt*9zii6ynKGohu%l<8@1yJR@pmN@ zV)}W&T;Z}V;fWspL@%WIEs2zuNSp`D4LlZlL_ovE_ve<=O`m%e|J%Deo$ z0?JpLdixqL1-vN{RK8t5V^26dS%7ngP7ebq;g<`hD@r?BdrY@<2-K{_%PRkvhuv}< zBU&QsDd%%X*L&8y*Zc8x>^6WCg(OBI1KnK`k|M&b)_@cSRJC*b z&K?;$u};)joP)F&277BO@jjN_I0}XugFh(f{D=c%kpb8=>V#ALz7gUx3d*fWFV!5> zQalpD$b%Tj3sEBid2@=?b)+dE@Tkh^Z```d-U%x==VyTmj{B^udgF7mq>V2VEA1W^ zrpG*!)kPX^lO!Kn?K&&g@k(>oNT#&E!xxpk0RJ?ofrY~ML)f=|!bOSf&xy_QU%Njt>WG|omk!edLlahSQmRZTQEi7C5 z${CC^R)53^5Jw+4<{UI@(kCoeRH##`LUd=7UE%(mXfY1HLZqHO_Jrg40QN>0rUl_w zTgg?(1I~{3BO_dA2LI+;UUYEj=T>$FL@e;ZeiI|BKzuNP->~>mdf%9_we4qO#|jao znCg<-*+XQ;T00Wwg1;*7;t)>ZmElj=*<x8-H<`61!E`bv{?i>JNzV_SbDpG1>J#GcOu@75PWg=~S(FrP+QmM2 ziZ7Bt+!2fqI0t+>8n66N!d&hV((633J>%}}k6J|2r5#r3JMlMF7^Q%#@~_V=>h(md zXUiGkWoyto-ZYKn6hZ1&M3-Ddg)K@TUZw~se8-;r!Qu3nJO#H^PtBVgqf0=kH5hRD zHmh+pCRBNV^^kD)$P+sv?KMbxSdx2y?7%pA7>>S-iYqt1aFj>PoD4GyZO*VCoTqyC z3-~`{VOH5Vy+uDsviI}+`&OLU&zwHJu)V9Di>Z?{3FALnak7(8eGC}Vn=Z~&SBM~w zR*2q#c{_qUFCa}zpEHk%Zuh%9F93XhRtUFXNjOOeYo7NZ4FVN|IQkfb`WQw_S)=Ri zRKwd1QthG_4x|$CRg`Cf4LjJyR%M`%{}@ZiEohaw6{*2kvhQi7X5vpLCBXJ)+Dr|~ zjtDtQy2=jy+*=l(U#}w#U&XEK2WT;6L21GSK zMSB>Wq{9ce2;$)|s9;ruDeA99NMKAHrYjSpq?#S<3%;H!Sad7eCX1w{t1A10=)=<~ z5|C8r6)Nhac^|o)`>dMx%uMgsr(5RV)*h(?mjBU@Z9a+vCA-Pjz6^M}l2bO1+(q1inYz~d))iIQO(h%3(2!>i8)pS+&-0?)_*TW$MBHeA9=o)RI8(?-5}+Ey|6@v zLBr(rl}@S`A+^{{wKWu?UZEXhF6nK(X1xHkUXugOjtq50DIEKECcNc@vN3bj&`U*+ zTn)K@8iP(`rGR&M@{=YRg$nt@z z&xgueoGUn+9p0siB0Gq~X=I4eZJSy34$F5i+nFSuxJW=nk0v~Yu&(i9=Ly=S1?$6g z{ZFl*HAITR9Mfiu=i)uPh=6XJS>i-o$8z|Ba7dbu!JKV1vRF;TuOvds6f;hycCRds zOP_t+Vl#Or9OYuMoz}dR57l3Xt|7g^Jb3*p-&OF!y9kShtu6@Hn~-~Y3aYWFD!59C z{>yEwexw^ApBAXVEN?6fF7Xp%w_?W3)a033!;524{ubov(gzqv*|X zW9Th$Q?WL^9^y|JbO{#)qmUX0p5e9h#KIE1tx{MJqJ#T@t9for^vc|6oW*WTEhcOs zy$ttWT(cHgljvU}I@>fK;9uZ-Yi7IpH$@-Y5~!!`(O27y5?bkvjdMId+Fsj zO+Q<7I@w1|xn5k%Xo19_N+W3_OH&$`9VbFo(owU-NkkHpUIYSi6BBg&t zp}w--;PpRmYM7lgNZUUfn&}Vu=-*cW|D5LkNbUd3>?DPDIbcQvoZ}c~bWjLHKLAk# zAa<8O@o`9^`2a=R9OHxW(_&A-u?0K8FBCyOP`oyb%xlLM-T%Qm+SnH|qH&~SM5HKQ zj>J<3I&_Jboch>u#Q~9nquRPW$pR5`KIWL985~hGsDDVmhzQ7QI!u89YLUjr616XE zscf{@zRqXT>%{*`%6EnTfBe~x?p zr|qL3(?7#6RTBQBnM`dI0K^H!^bL@T;FfYMd)na-74QON=tw8^8`pjYSJ$a( zjq0mE@599$66Qy4xF|-r8EiEDS$THOPi<2KpusS*egtA3gn>-+Auz_HopyX2>~(hz6tRI-*WaCMQmFJs!oz&@=4p9 z{cc3oF%_>=w3xSIkTIi(FBPNr&kaVeSv)mDnQ=6G}<|t{_u^3`6yaC32Ic>Ur^zVPt)ak*rTK9L8Ar?Of8O08z7~P)b9QT~{Qz}&=Q3$8t z;VVV*IWJ?88}Yqm@${sj?GiJQ-9dPFfqu$UfhTNQASe1+0&FFBZ7g_daBf|PgF|PlM^!jh=4W)4@U`7<) zmMYwJIsB!!^0qlq>p@3Fky;2PgdjnXqIZ`lHYQmUvorA*_G%P#-{1J8Tc^SbI*kE@ z2YgOf#O%kP`;V{!$QfvAw3V8rS{l;<3^}4e$*|a**wiBknOd8yy;a0l!OMv;=5Ia) z!s3|6Vy|F(X zBOSo{gm9PG-pPGS0P&Qz#ANYK1Vg$XSv_~>J##&_Bjw@)N83Jx>?;mJ)jT|vVEu6U zECsIo_{AJklHSP@*ppa7C6{@Rd9!%2ghB}!I*;<@!xN2pBx~_?82kaQC?C8c9)XEL z|HJ@mtc12=RVPXV%}t+*eQ92pvyv!~Hl5m%3wGBSDcXFAh=r|zWrX%pNyIs!WJue~ zG_5F^Jm>;8F068j{LhONW;2fS_Om!oKMTe7f4E5h{{>1?kd^*9HhkunqVcV(v_C+9 zDS!~~O=cts<>lsj$fvYs)Ne{8Kz&-{eE@z@I1;T78e@-iq_H!nrM!N?Q?K)(2rdPm=N|3u& zZI&u+S<8-1pU>+olsM>s_mV;?ND%rpjuv z*UOOwey&D~J#Hi{4U=!CS=JU8+rX)gEXN)v*1BP&8+2~lEqxL^_Y#B{Ku_)aFFe!`QR?=@pGY46eDeQ(!0w+;lz*JN%Ii}7 zKhApEtm{Ko)}47C6_0aN7)g8(5d@%u6jT&K_$`jM%5#+@Wq$h=(_N@EFMz&(IJC<# z9trIX$jzTJ(^d_iE^1iER%9(#%Qw~Z3^>QyoOLW!RfeI9@GD_`;V{P-QB#O)e1Q^RQKi{ovh-sk zwiMzj>9Hp)egkp}^ZCEc`WWc#;F5mEvna%B$z z332${CTy2`-b4h^3cG+SHqHKOicSiEi{oYG|3M zE8cMx7884=<3J2j&*YvdgVyGMG4@X3l||dOa8+#EHY#>fv28n9v2EM7Z95g)wrx9= zn|<(qcklC`bMC`@nDbi?^P8)W(feqv_ttb=40+9YD1;Kg=`5dq_flKx7|!nyrVwPX ztt>Q{nKWcg!ohp0=|&nbqZ!h%)~%|*(CZj04x3mo9O)PMx6Je%`TDoyQJ)BF@Z%#v z#dG6|l=vG$P-6t;?SMQ{u?MlCW*(h(tW@pruwFNCL|B93Gj1uvP`<$7LRB;LJOfm3 zfCZqu`{+RV40HT-Yjt~_93^a(ltXAbB>Vi!&v-%>^;s|!_knvu(-!uDosj$+ElI%r z%>|<1%zH~2n2iP$`8Oe+&KYP|0EPR-$x>Bl=#7T^G%k&0M>{WtQ{nzZ_9~Zqd5u)m z$xB=P8Vi*byaf8kDCcRY{_st#F+xp&W!Sfzagv^yPF!g+JVhCo8dSJUVK$eIa&3hf zrcWqE<=%7ReR*arYjI^{m)Fu68nyh=r}A)(-ky{!5!}wohpo2SIZYHSZocvv?xwar z){v|`;7H+3&Jw9tnS(s;A7T|^u^NBMsC+1yR?|#Z*yiD!3o~DQC+DIH)YKMvg7QxX zI+{fc-L=?S#3|OO=(M7$cBAE7b(wJcL<(dR2qI=k64g};?a6A}4M~=n>OpiJBsE1< zWeW>OkJpTsM{t3ms@#7d+PnhO3{XtlYia zl6xI{kdahQUkiz;F;(3E{$tGaBK(jiB$WYz?RmC)DpuTdsUADp;*`;A}Kvy%)HIQA;A#~fW^AE>qsNQDScW%B2&Uqdat;^JY=jAFY{1VEaG9M zpld=Y`Pw+hGl9|>ob+IFR-kG^KK8?IL z{J7Kve4gv}SSO)pWS0y#Eec&W$p%i$^@q^;h~U&zRYL{q5#S*P8f+2BNci*| zyZRo+>~uv8{>9SuV@Y#CH~#CyYvx%G@V6uEN&wau02H~Ld{^u`AT!o=?@X<%9#MM7 z)Khgm?Rzx1jqd&kjEGtJTyR*bZ@_GFC!Lrt;H0YZC#{&Sf$?ZxIci#hU+{9?37I%5 z7?N^A%?bXivN;Ia58*z(P@V`yi4-CAM8JTMdL&(g*b|8|lI=N-pHdZ=p!E?d(|R!w zqySWC3Zo@W=Oy7KgFm2EMmQjif$+78mRkb8p3~=^p?!4VfRyV}d&?1yeE;!9IzO38J)8%|vLlOj?bnDQJ$NT3h1h-5E2 z#(^~UTG{7z3DfBerX$Zz?o$lus@+&f1guNE!^FhLb2?O;yj+f>p6F0Tiw@`vRc=ib z*3_R@*}>)4B!nWr4aqy1W8l}swB-(b|Cy}Qi?m0B3|oM<>AS8ldM183_Dgq2VeXB} zeM0J&>e@sSt3#07KBU-mcZTtqegGq1L3k270W*(GDOkV~htp1R$ke zdG__sm0^zn9f!krrVISOX#eMoCuD4C>}V|ef616|J=!euf`Ne{gE>2csW^kNih%K_ zEMzXkD}DLLPkeB9RSwh(iGWq_e9Yw^D78#vDv5yoj7{~HG0N`WVZG+L)Z~w5JRzpB%{?4 zht{BJ9J>lnXYFDWw~?u7i}jczDWtTrVjGe;Yy7*wE9)c8$Etfag#-E1q?b&V7w~kE z$#LJ!WNP9x_2=t(bo(dHUR4L|epG1uVAPk{f?Oa0ygW6J@nGk>S_7>Zp7>%Q-ul;W^)WRXK)IgY>`h_K42CgY3}MQUCZ=@42`N z3_`P4>GV-RV|7go-P3Ftm-zI-MBrDnf=CYKAIwQ^OgKG{KXEd%yP&3F!D-Iwb*O;dNpi7P_D znaKr_qpHp)*QX?0Cxmt9Vgmr3&jJ$DT)}Bv-WA*PBqA{DwqQ;jvBnpM*zHK^frglE zW&2j=%1BdIt&RRA97dTm?C$LOt0LjM9m&d1xV7t>XUVC}aj>Qo95EeJo>LDbY<5pU z!mIb7zH$;W9qk-k-Vx2yBUv#W!@6`G{ngQ|_kw0VwN2BF#eEt&lEx3VW0`3T4$iKt zt?M)gIGgpFD~op#dS15FQiB$cG7Me&a$igtQo_gv_flG zvr!sC=5|)RHkWq<*6n6x=XO=g;pFt7*~!FY+*z6c_2e?VEq6i*cE|N9wG3^IIh2T; z=;y~lQS!I^Iws^>zdQhUbEdvilaIS}W*D3lNieZsKv$!cL?4YBW!8RNE$uF#?EX`u zdqOwA%NoPwU17URyk87r%Z)>x!HjZC2$FY-fk_IBV=`UxBt2;?mNSXPL1-uk?VQAt z9yULr3ms;C7xYva@AQk&O3kR6PkE-E`FxhX@TJM}A`2x?MfNnBf)TQb`QXKH4My6P zDP6jB@q;4CF-!k>>L9BPuRlMZv5F&KZzZfPtuT#60f*gqw1|v!q2}EE&efs=Ahn1K;DM6wMd!i#0{Mq3W3Kx}Xl!(k8b~s27#fePmY}&<& z@_a!wi|O$|j=C8`X^f;wlO|>?%m@?{RN&8V%K!>5K37*9L=Uxp*f$#bE!`V~0O1u$ zKR?_Qx$J*&L8de$_EU<9nL=CYc{^p=B(4j%{ zZ~7g&33D|DIMZ$B+kZX>I2^I^}wYtAb#ud_D z=MQq0U6xpKAan#zjI{5!q~vTlU1d65`GR~V`YR(^$>j%tk7cfmla>7s=``S}e#2jC zuv}UYUjn$SdZ8Mo7@6P&T7g1rEA06GN)WH{b|=gxq>+sJUt$XgepgcH1?iP1u)sC+w`3xh zyyTto*xPwxEL&;nwh;7Iv5ZFw4f@EFVEx}8!zY6F;ZU1h#on55)b(UEHW4kl#m5qA zPTGw{vdR6N8Zwngg=5FE;x7tCwi2Jtay?}Rm5IA5@9ohxmIvoIDqh-KE6aJbuSDbi zGxPjuRCn)xu|DJ~eg3s7AtuV=+W4+Uet)AZ{|jyVkMp;PndLWg`|lWwc1+zjw*eD; zsc=aPxy3rOzzr_hhV)?%(a4yT{L4 z$RE$PI{oUfih)m0Zj#pr{xQ~vTy`~u8AqXUXFKbadw7&?+1MU0!ewc=MdSAwvO4JT z_9d`=kA$=GY8`HHmAqhQ+5Tg-L}-#)C{?IY8%Z>Mi$vg$pWX@<-3a*#lw^UYj7NS& zp$Jq4$yr2Nf5mmys%rBx*eh`_L)rG&pSqehzhdwrQTree#`+lgKx8gh{l}ihURI{u zWo3N+rTEE@OJpJaHY}DR{%;M7zvn#v4Tk#1NBXDseh;;8!{RS(6Blr2QC|cC!iOKw z;@*R?_3Ts;c`+8?+I%G;hXs5@_E~RneYD_h{=eQU*1R^Hg%No>ldT z9l`9tMxh!BhVweaSmlz!oDeU1QL>e)aAU(q|>>{~F)fgxQ+jVF1Iw z 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

C?j=Y1zDJ`Q&l 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 diff --git a/app/apktool_2.7.0.jar b/app/apktool_2.7.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..7bd91df2197725c81d4e93c1fd40897ec62601f9 GIT binary patch literal 932338 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%0DgctM#cMKwf0&&ymqah9w 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 z z&PWQ@FNVAHO``|4&uiuEXwc_g?S8&=Vjylo0&l#Ms=#cl60x$jN!UE-Sn+2*g$ZKk zoM{2S#4^fL6X9~`;@^`@dKkyc%XD)GJW@?1Ub2<*mu!+}Y)!I=2bIJk8c5|$l7x(Y zA9=L({1m3Vtx2P}%TOZ4Pje;~Q~@`0vBhi2^kMM~9rR(^)Neu9PrNZKAKGnxlwtqv zel$f~5;! zi=~QNIJ-F>bB2jIC{Ts2X0R zFfSA}58)ytP~c{sB>KELW3#rM@?M`(14YpHH@{Q|v!qlzB*vS`<>3VH@kT52-P?4G z{*UZENixO{#s)dZ1ML% zZMrAx3QVwQvnvLg=v~2smL=^i^1tpl74l5vak_>}p{GBaoyR<@Q9a%@O8-9OE~EDf z@;i9ZZ&*hV6b6nZh&4@K_obqE`T}vC;Dp&WGBzqM!o{?jE2za*oO)musc{qy(*ZwZr`xE>xmm9en}eN zvGDCM_?+HcEJl5DM+oo1Qf+F%Z3g#NS8%UBUBQb12YNZk_#`+9XOCuC6dQyYw_j`K zK^A6=UZysv(t)(dPmA%H*+(o}A&P$^ky~v&5PC<|^$!j(r1&~tff=ey$fKO%L-#<6 zv*beccAzjO_T5NuVX72O<8$@z@&yKaiKC<*(T5F&4N8v9_d*>{M2F-oPA%lH^AVof z;1XV{%o2PPQb1xyWDom%WDWE3ems8M zssB)RE8L3?Z>KU<*-%zgV652d3g<+H=gQr2_-WXZ@3-qOb|e}#p$A)ak}&)`*hOb< z#;=z{<^DXir<5oDwx!$%YoE*3Kw{V?@+5V*HX1DQRAZnp`g{5cL$*jdn*#f%*EFM7 zih89&L*R8_-H>Qe4}%Ys>9zyNwnp-vlgf@N%`!V%A%TiCRp;nT2Gzx_w=Ks8Ew=n0 z7g}ZtiErY~$o#P&JIH-a3bm(lxjc(PtzXWf=3NuZJ z2Lzwx@24fP>Q$}Tx(}lHT(58ugol~i{E}b;c_m9B#X5JEteu4rp7pg9VtMv`M{jHQ zJ!Ya54-?dWvg~VAvtDiBV3!?#N_f$s6ZfXq2AT|nI1pfNOu!5_mB_>qE~l3ISST@1 z>0@~ERqtcCvjg32@TC@WTW4ji<+bczSydlp@EQ_jE8)CRV=7%_V9-^n)VgyW+5L({ zfOfI=pkFJLnCol;ch);Jk;8M3ocT1mw*rwSIRGx8T@#9kQ^RwwiDQ*b7E&5F<|oMJ z4F1ff0khybrBu=<6mFw)HmBI*k|c9A3doaTBoStF41FeSl;@C-ki^2DP2=rrCBF9( zJcm9t7(U?>+S{x_&`pF(Ts~3R`laBG9eh?X&no0>2r%rmn3 zh%#mY5f-nkN&!Tpl$XRu^I7HjK(iGD~AsY=1#%?FK7sEFCUKU?~Zfq z_bA1`;Su^bCqmNJ_&bZSHgR-RHnDd$u{AOgwRLiES2M77{)ZQ@QnPVf7eVlmtE*a3 zG*UJv>}Y~4UXd&N8+?1Dw02ZQCbza1yO+!^%4s-Qe<0yN@bx?A$2&M*VH%s{XwP+8 z_X1{cXM+$^8FGfCxZ||Nm0J6s>C4K?D_@^4b_{}~1q2;ePL0Hq(q955X@0;(Nj zN0tE23#god^^cDkFcg-^eIuY{P@QE4zjiD#Fd67)nVuBj@@JKPZ?F7aAY1ciD0Nn^ zs0^&G-k(@qgW_0N&k6wn`QYe(SStlVk6;RF(Wyq0b z`|nyyw&Rq`W*Z}Ld7FU8m+aiK>+~RDlyN$i3R>x4?vXw=ky|{(sC8qlL8p6*kLj8w zdK|K*6nQF!7<_^M7&P0hRcq!r0o!$Exgt)+kh61NvSEq1n%|{X28Mf%jvC`RQBOKq zp81~2#>_a%$i|cV zkF}yiFDJ1h*u0(F{-y_a{&Gu>?H|%IYnuIv+b53vAEdoyR2=HECLDr8<1{Y8-3jjQ?iSqL-D%uig1fuB zySuvuhY&1bIOpE`&Ds0Toi%5DKl*pC)vMpCryi*yAWt_?$QJSCqiExC(=ksN+pF$F z+js@jL!An_Q*+SH9xI{kyQ5k|H;pzO^<;gcHAo}Zl)=19#fEwe7UJva`Rc0BN(|XB zJk=f*9&AFO@I6dT&_r0MHJfX5KP*pgUfANIN|G_^ryeKtQ#OY~*I1zpZ%#dLcJez8 z+JMBb1e4K6o!ajfSF;wS0v(GkCk^=JZ_`qtzFLbK8O+A{Wb@X~U$t(28Ad{Ujm(gi zk+CT6FMaU8cMj5jD0S}ef2sg4OL`hgES%-iC4ecB$RKKqJvO#|VERa19MkiOo#&}! z5#gb4NFg{3_2tkP;d&-a$87?vU$M z^7PdPep5ik?FdsHk|Ak|W_P=}>rz19;pu}J_$G0oZ%(44B+ODmvouPsSFTc!$)Q{} z%yuiZaZ@u2w}ju>9$DHr)qFdQF?~&3Ptn~RvckT8^-C4;NzP_(6H#w1_u!W#s@Ulx zWKjUokf5FeQ&nZZviDmd#FM7xfZaG!0#+5iqr@aH&ToZm!J zdsbG!?($C}Ek%Vql)PJyG|a-6_rF;s5j#H*MSfHkE7(t;r2nrNP~mS(iI}yW+h1zR zfA-z~ujT%uuq=on`%c%BXe;7?hhV%2p#qw|W2_M+VM4=^B4XjexWIgE42kqk45Lh- z8Ebr|`3+R`V%KNP6fOH4Zg~ z%BEsn>3($tp$e<&rm_Qn5Cj}Hsp909Aci6i>Y*?w&sVpl0nG%z<)$jeBkD(M zw4L)Cgz(5rYyJTdJxkOvyvvF<+wyaU%@g7`U>+II%+Dy!t130Dn9D#9+N@soa;3`{ zxJ}i)r{O@AV5PedQBctH3(21}TsF6qXl?1(U~H8`Pr4l%kxZ}do2X}nrR8;3GC97V zU4!QkDK>|WLV4%&97EVu$?X-0}J*+2K>FW{PRXE)Fy1G zu49h=%;vUh_#6e72^4m2E9rjiU1_$V)o*UHwhWFl3BHYKu@krhOYXC?Z+;O;k9c-1 zbY{;WjS>lp{kfUAACM2S^fX^_bh~h^DXJc*!yJ6XUy5cJAN59wTet^*+-z{kjkALV zE!%TvQ<>69zACu?Fqd`)l$mD^%PK$lR_kQwV{N*Q7tL$i87g^h^e*HXRl_)ar47h3 zK~Yd2g&&S1r_h?Y@+LyDbBGCuq0x(ERNM=c(j1J{lu|E89ZABB=p8|4eGzgCGC z$T|wd>0(u}_(|)Lct|E;HFV3LhshrQJE#+aKCVy~B4<#v-o;|U-`8Kd5ZiZfMKO4V zwbvxr^_J?P1j{>ygf))XY?q8#)&zVY+SD;ft1ErIS3LTJBdhlsD>;|W`|WdCG3y#R zBJV)S))KgU;h*bo+N*Br>jyJ8V;GP8uvYON1bH%fS$%Pi7--|1I?B^Vdg(&aZOF&I zrJ3K7UXf+&ClwyQ-p%X#8R>~~!9ORXEU^l6qmKzVc%wmku`thziYOK}iM-X%GT-Ws z{%Ep4QI&}&C}@yKP>(hw$tu`s@FB6u6AMl>h} zs2^3^SxX3(Hmi6h<}s+QfBhvpz_b-{YiX6LEhxC1s#Ha3S$xyRs26JJQ*(^2;pW=GY3|t};X2M}rNyVQjPkHX(a--`uh3D6B0iXMla%P^a zFVXz@C55Vib$ld29}VT$@a8(L-#+^uYT(8LOc`H3FeBb*C^xyQJ?@KUPpgII=6^tJ z-qIWYV_^u#R&1^@fRVmL7J;M`qZCo8{v6I=?NjU}C)LorAN$i=WpImb%jb;(PZ_;U z9Z(&-)<(whV$FE&ve3w4l}6Ro^=!!dhA{1F-I>{09I+&VHByX6@-I%0LngV3xVZ(e z6p7I)v5KbXX0l7c_Abd~JWV)By2RhX?#D1M;`Qi-XN5Hq_yQnj-Sb(6LAnGP`bl!( z5Z7wsQBy=@e*Z^Eb#raW1D5uN&{prTZM(3pWcCY~RK&Uaz1T=;bi^bgXPN;lB{3oO z-y_bl>RVVt)BveZj!x{~tC5RkL1|+IL~~q+w?-m~;+9q_pD--t!@rU9;re<&QzZli z+fmT$9E#<$$k0I_{cYr&R8Z1g{b+yAAEX)i|3e%6kAHkfEU(pPL1fU*t<_J~@O4d5 z)?BtV;-ctXXgnA=*E6;ed$Ac+SJlyP(tAiZ;*yVQ6TLP}Gn04BJWgG|^*(v$Qr(c= z(B2R$P&mH^J#P=*iC>~xG_BWPKTW=vAF&R_&HgY8+5T7`bR+q(k4T7aF=L8Dak-vM zC3Reb?HbobEm*&aKRwKB2eyMq%c=1vF3eF{Y;1G3sY$*wE#^1en9UU{5LjN~rG)uA z8kal2#|o(m;-p&%YThTImpe!|7%6`vaM2kpsYB!^Ex|P=`{&Ng!P1|9qltRq?ICDC zN`(vZ|7gYjAIimlg9!ievsI~|sVjekxMj(25=M-uDoPh~75nqS(5)i1;)j$3R7%k+ zm&DzLNJ(#xAp2}xYiw+)wvw(Q*OwphexTTM+Wg)`;w^diCw#5*6DZ5x_K;*n5Hvgs z{gs){?RK^4b+XNE=iBA-)9jPgZ4g4u#!Xi+8tQhuy;6S%>UQEycQ6vEH|1VZ@B%71 zsW<7K5p0gclS;oCDqreNNHD{t#0WVzbL~P5Z6n;Oi8vn{+$!y^0hqS2ePyaav_Pc4 z&F6OG)f;~RH$f7SQIJeN4umyumNHjTpdm_zhcxlY6MHQ`HB=n35%x4r(O(XXo7tX_ z0A-e5zax<70oGlqmk;a}(j5X%!5;Yl4rD-i6TThhFZ@|gpeGQMDR-Bw6iyFRybBcc z0(wDQsNUc}0XqXufSuu6a53=i@Lh1*!v}EPs9iO4RlBs=3igObaNR=&kUM)!Aa8Y# zS3wsQmsged+>VC#++(J5v@u=K)lVeUwxm%opIP4On5Rvm9bosKg>HjQy3NRP?FxJDS!4MZ zY`^@h(p$GgCuZ1pYpETc>Q|%%*}eGOVmBxRyIw-a=BLl09Z?QBrZ{s_r{}jOwPt-S zZX168qKpIx=H1^+#AVKmHn0ZU5WBBpVq_MwjVavPk|P<%;!cV{Z@EIda%g)jRKgv9 z#hPdL{H; z3y`YVsX2@0`-(mx_{&Qvy=qa5juWZBbnNB-Lcj&+P@)cACir{MH;$ z;Gm!VsSk(s`*Eb~_}t<^ zDxkwk(X2F!yS2c~RBIK_L3wC%)8QG%gg%F%ICF$2ql^jCn)+7WBSGudbk*MO8H;fJ zC%l9S=oqpxMjq9S+6{8x?s-Dcv4*UT0xM-o88P8HRY5(0g-mBvWj-haV?u}k0C6S< zlL1nk)e731MMe=~g0CEoOC{#lWtEdM%|r=1L@+5viC1)V4;v2^ehNE9TypT=`~f5S z8y>m~f`bys5^gSGXvDMif^b zGQC)KWI+>S~Sla@*UaC5v+Spf!B~t4w;l8dA=>|2q;Y>KLp-a(}DDXm#pr%-ujFaJ=uw@;&>Krlqo}{<-HGJH2X|T?o(BX+)y7gY}h1bAk zFn)DMQGO zTi05rj3hXgM7T&F@mQ6Dv`UJpS!6?2B?OJ@SX9h5K2~pZ)r7Nnru}9m8gAtl9CX*G8ve-)Nl#vPO z4DN(9(sU%{L^FMXzC(LL!_SZmNV1^Fc}-Z&Mc@Ve&h-tN(R z|3l$#!NGhr-b!)M9RJ6lzt3RE&ZxpgI-TN^^i5v2P~yk$`0(n#2a~?86&$qaV{4(3iCaLITx8 zGzX(1xSzyCQ7~0$_v#}|WGXaJOo5mxNg->4oIqffy1{-196Uc`mPGMg=8KUoi;I!!<;^x|tG6 zNHn30c)+@TqF9#zKE_)-CgZAgbI$ffxLS+Fj4QkRDp}TM+2NroumqQQR7Hbp{Y6c} zn)2iJ^2x*Y=MtmTbC7y-)wJL{=5Vchuuags-dCG~geD%d3Pod-sl(+kVwk0W>8 zg8pE&Wdp{JO__*jZEfj`aKaBtYt&w;*hy*t055jOAoihus^It(Qz_@fzTEJlZfXYr z{JDOpW~IVvQ*&`erk`+T17wTgQbPNt??5_;M1ieF4!GaT{ljXO9JX^T`=iuvK|WWPW&2Eg5pT zGO0>1HzK8W4BNQHu_bH+z@874E(0o4ZLE@`6n7T}+0PrLdExexfDxvXmue8p z_!(hcR_j^*&THD>G{DEffNh9$<<6}2aRZ7GV$%{}wm`LGh@Q#`tD|UrC%fkHK#i92d}9X` z{<42lzaups6N3dmV>`B}j^IRBi7$u`?~n)zAhU>tsk$u8G1}$aK6?f~cRa-2rt9o2 zL2Y&risZ)Bct3NW z=p4=A-^kM)8GH6RN3gAJZrdD-g_#XQT)iDdN@=@g`w88je~UvrOGVC|4=umS9gdy9L}K6xbR5jim- zj=!!5Zl9c{k7}{X5&>MNpY6d>E=WwjmVdc7i@oXk*0%8{vn31(tH>!_Ycm(*0{=H+OnpsR*$n;N=Q$2{UlqBf z9l8kB9(GshM|D_A1Pyw$>n&n=5Ci_hVR|n ze;~Wvikq8HHc8`P!$mHIeRo_Rvz)Ge{eHaYoB3qA>%|?jcKbb08BUJoNv01Q(hTTb zy_*$y4@XbgTDqGM=n9z%)KRoo?fVM(?XWkdiBsVgW1t=H(1?D32lNbp$HL(H!ZZ<3 zNvXn2Yo>86z_x8K&}R)Dt~FSjW&k^&1cC#ZAaXE{1Ox!6x1IHoXF$0Tdp00TXprI8 zfsBCBAvjPnphAVUf8d5-;1%!_&<;mPOx?`H$^wD)$b2z^0fgRFbwJLD5PlLEGGHxz z3Pa)>CI`8x;`ONkbM$i}mQe3zCJyB*eSw-N z3ny+2On|DY;l<7@PFd`TA2SmG+Hb$$%3lN3*ZtpC&^-YXbYAbOplCfTNmM zNLQtRG_lNH{p^}~A)@l^ae*NJD$8_#Eg;OPSjac{(4UN7LCIY4$7-*iU(O|@yKEON zfBK@Pf5U&U{KGYMbIaAN87Fu=IYmoWX%QG;4CU4}xlg8$7QuM2w94)#>ntO_+!Bgm zJS!Obs3B8#5&rAcn4el($W;6LaqMY0ZI_&qvg~%W;>jZy$M?(}{{nI>rp^~f!V%xN zCCD(c$8UhJI@s~hfQ*%j(18$>qN1X~gSq^iikZ)#GaHmF#hlGgY=e9!)^l>m$V|i| ze7aG{fhhXR#;9WEsQH^qysw(v$O?4B9m+KNyB^7PQkO-!alw{qjm;oFlgB81r(3 z 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%0A#a@8ivJwJD z(*;PHZJe`hi@R)!{AAT(l*(;r-oipHK<{oTbIDrcA_~eah4N9>xtShsM!k;vubKtqFv{W4$m2-0isp!c|iF|xL7BoGaafd+%tks#hO(a+W9cM zLuw@*FpS?U+AZ}pUk#x>Xj*Nf!L35(R>_`DIi@LvAU*>xc^hlyf|6`mL^4kKXoD@p znkV49xIZqHHjuihQgV0Zx7j_?I5FP<%dgv3^VXsn9FXw{&aCq(V+}9E0So8K`0r-f zfqz<3a*+8<>q5eh>$nUBg!>_sSjS^sr>%pUl^U^ zdHG@guxf^l+$ZqHU~Vud6Dh27m#6(3_?Doxlx`F+bDT=wwWP~CRg1GzMmRA+8;VSv zv|-PF-7pw!3Jo_-CO0BBM#C$#FGMCPnp>?sQYQ-Co);~&DGqoP3sK0llHV#QR@6*r zt4hF7o#k_s)BlDJv7@sw-O=V9-QR_c3D8D~FF$95Ou#GUA`*{k%@{qbnP~$dvQ$+7 zAiZaBwJcD^-=MVjsbC@3eSTvnI zMyK8`pObyeVfO@@y@YN)Ytc&7;F)XjaI$d>TSCqMmJT+S>9V{g621fqYKd(PFa3t%0QJDJ5omct72Z}5(-)aL%fUjZoXqv0QnKLy)Hm01hM;!iAlu6Oy$3U z3&RrW#on-Oo$PtG)3$Nu$9mAZ<6bQT8*+dqT@xzi#TUklgjpqmFo>@y54ee@n~bU`)j z%YOLR8HLONqR|PqvRwAJTOpQun};rbPVyjpE9edbOCMe#3y&vCcdkkPFWoDqiv=vE zgT+?HJ9Ebb@jsOZBf}A|SHY+%qIeU)@{Hm|+@cISG4m@$Ud@ZNVTQVKLvvkN_%ny* zfn~gazl;b;v6Tg6h7%Udnd`%z>3r!^xwBLbox_r2F%);$mc?yanDO^37u% zc#BDeJPX2&^WTL;3ziZj?cMlmL~kf39AZU~J>nV}QLzfr9eA?VLcGR{+gk;v84aS? zPrJ}mm0>5hd$w_>XA8%~mf|+T!JC#AJJwdxhfPOfIc#5^5Q}=0?+_l}if3VFe6Vxg zoFY~v3ijfKqgZeio0t+yjS1glg93CAp_Ye=A2R-iHpH|mjs-$lur8aZ8g<75Et{8Ekf<`S@0h%SoRX!7`Y3Pdnh*K-UTy(buC(6kC;m*EVA5rT+J});@aa% z&7##^YSZr)Q5zC9!6sJHnzgObvTKv;9-ARoz%|(^<}?~9Y6Gj5s@6SfGqtOhsPeTX z0=S+?Ukq3r6V6E#Ol1enh%vpP+PWYOSI7&>8)x@tVG8lGK_ab6qIS*_Mp40OdJ&!Z z@PP2J`q^J|{h(y0@Nb}i$eZ;G!yTdxYt=?SP~@|oxq2*NW1iA_*9^LNDTj#sbMs9^ z_^ut$`1M+_9awbVN56`@Pcn_g%);hgV?ZZuYeAqyH5wuERnf_xM8oF0A{P8>|dxTbQYxTJp;joQl~b&ZW2?XUav1NZAAR^7-(DlCRn( z?%*o!k(8-)XZiTd@>;33Vb>>57TSc+bM{&9<*qb2hs4TAb^@Z_8I}&6OHggIUu%|V zf_`yA?dM-1Xc%Yii)H-+KGmdWBq_^G7cH}_k5r-aR5?2SJX=~LpCCS1^J;~W z+9A}oY?bY7^McwiIn7b`o?W2t7HNXDt?;H6mj=Br+$s(@`8r*=Y8E&KHLhgUOSNKX zZBQ@fYeSElaCe=qB;Lh4!IjshDmHBcel1%CqFpE}n!Hgf>`kOLFgT?)CQi*Z<*ltv zWSj6Rn%o=gHW*tKJ5#v}*c)b>wl4(NM6NPk>7SL?$3ZP1-odW%aZ8zhy{{P=R`HKZ zHjTQqyt4JGc?Z@kzFj2_1N%I-fMwA*0rV-CD82lFk?sonAlHwHMj;RXWN2D<7@z8j zT!UNfsNbhdIf&#<&I}*2q^D3z(r@}q-C2Wgi?N~PbHJ1Gi;9OPwKvw0I=xrFSg!kR zim%-PW13{kkkL}Et}92?tLdAD@$nM)=x|0L@60Bp;r?3<0tg!tf_>UGz zmyicMC848?(Nqc5KwbWdcFPO3{WY8M3qNsFU+nZ3xUr>O;p-iG^y+SC!zMSQxEBW2 zKc9Aq4;1FNF#D1hB%L~+Xty^C`>+>`@-@Dou9i6)Jz+ceb?>YZ311+pk$qdP5o7Xp z$>oe`(6y+H3*VVwG(%87cm&2bHr5y(bIobAJ!`?P)LDq-^XYsqi{j3TGjw%35}1GV zm>xzoTEQ-j5za$URVjb9iB334_j)RR3#Wg2*Tj{Z?Q$~V;6{#zXZcUHzt`~vkIzLLlF+RNUYUqJl2?~M5~`09nl*kVjS z+ZFfuoS|NW+v4#f6=b1K9{krlwh+5q*jm z@n@V6e%N_&HbZ0Kbho1tuCbbk$CGD!&~NBu7$i|r69@baAl>rDB#OwJ>0sFA;cGrH z)ektAWh(q2Q!l$>mI+CGF=wSG6ixaBw8Mz|_VJo5SS>l9 zlS_yA04F*R(U6meOI~nKx!9Tu9IPp)NZAU6cPaQd#mr+?IA*i?4@Mrj#_?tEqLr8J z(1Y?XGfbr8GSV2b;Y7NFXz{eUUKg7p5Zxpj!Czib;QQyy^Dgifo&L1CgOs{q_vLit zmx_$4ZbAY0a4gOk)2l}M1^6&g&#v`4aY5KSa8=Ks?Nai=Ih_zUYuo}&yGXgKNqa^; zDF0;TL;Wr*?nqMQ&n%+Pbu&uc%oIHlP8Piy-Fq-D%U?}Fo}AfbUK_1>gO1NLtW$U6 za_SI_P2LIBN)SvjE``@`p9`+Ec%ycT5zN}oi!_4xGOw4%e(b3lt_lQW@aHEGRcl4R zMMh!WDZ@bUCk-wEs~f(kK%T0(lhi9w0l~m(wcY4&ruEFnEoTbDspVE%{u|XIx?AuX z(~-$*$YAnAs4f1Q<<1M9m2tyn8&BDR3g8f;C zuXMOR1nr5stNdk2L4llTj=bTZ3(_SOii`|11q!w9p&}|?V0q;|VVE-j{k+0>A$>U3p2D8 zKJ=vu>Zw{BY9I3IHM0S7A9mIYr#*vD9`nW1fg}xI zIXxhTbBungcVc&ChETUBWYle?H^J8dCLgGOl?+BYdb6-S*(2v@w1RcU*U!{s)~8E8 z!@v#9(;0)MP3~ldxDR`5WOBd^327;ulIidaln#sfe7H&n#fP&p4$S!r$Ytg(G`bKD zqyVu!pD0F+@Fn&WLOeT1hoot0dt1F0F*1|Z2Y**2Rk{!16P7o#o=oy zp3ReQ~Y zEe$sxZs|3*`rdarc7;D9p=U9);(c+l3%6#X?;zF%UxYLZ1g29@;u<-lqUX+w@Rl-nZgyOD!4`a#u{+dBc2+owNl zlKuGCPsMgBBE@#$_&sJo2*NO2EG_)nF-OQgvbOxvEp4Ga(F4xu-uDTH#*6oN|J2T} z^(y;;lduFRU%1gz`JJV@yNQglM4gxe-r}jzNV+NooC&(C#uz`bu zodkWNZ0`y-_u}WPf+e&}cL3=V5Hf)HK3ZsSBrSMnreNG{shB)+zo#ZbsoG5Y$Ei`E zneKyrg*9^;w((jJUd~|XVbSi>Me^qrKg71{?vXV6nCG7rAIG$5tH`L-H`LItnL8^H z-2T4f(=bgBCu17FF$~SG1{;%AhuaK@Fvvv?Zx4-|4ScTG?!xgmUOh}x76_89X@u^< z&1u*vUN`q7Wu+`lmAB9IuLctTP>_YUsAr#k)=SYXqQ?~mx9hIYgrEDot{r##2;aP( zGjQ|LGw$LYoofO&qnf5{7VHzvp^!!xoL#z)rC}VqukU^oFoygWsI!&o2Ds&u-sM7C z55o(qNnrY(s1Lf0u)eD^K)d}K2X6~Td*e;8V1T5!ixw??(9~$Yjj?7#kgoqA!J&OK zyc`aiWZrmBC1y71nE8s1Rr$w|hXJ0Wo1m!pfVR4)bBU1&KIz5c6f!pEEsKyMth^1U zyzL+rq=%{2j6;lZjj_^mu-D7@3Z2cf^&xo*Gl*DD#0)HY|6re{J$)0NkpE{A@CNuU zQ}ixZ%ILpIi?eVN)!D56v=7_zg8b?wxZwd_S}^;*^lkSc*v9AhM(lP@pE+U-lY$YF z!U#*IhodqHP3|Tt`5mx`L^<5Tw}sGl6Qm8M)}@TlBqX?F8^cn*&Hp3W9{TmTqR0CK zjY*T51CFdIV_;MC)Cf?iMn5%P8giu%`T89=DMo?Ej}_VYls}u5Dhoqu4Jp*`U^I)1 z6@^_jg$SxotTferG8X*XfvG85=dSM`I|s9_;#pvBdM=c0*KnA>tqPjnCq!9gLO`Fa zl?xD==TQg(+K!DmAxsB46o5tTk*0%P7$IuK{``}By1fkoGr##!w0*@)xXo$dunI6NoB zXLA3qlKSvJ{?Y1z=g;Z%qfY>tDaIZ&Wr9);Lr@j}av|um( zIKRkq9T|dtXFQ$Jwm9kc|A6UEbwfVB{4^)T{ZKmu|Gz@?{{>9^Kfv?sx6{k? z{WNFNEq|{!$Q^1zRB2QgeX4GCyLpF(3zFQ>fGPqyy;r)Ba8^IbRb-r1`huximIncX z^Bd$VmSxQfNN9>0$JECH76GYZ!UKu{4^zBU1kZ)cEZmH@YJ_IMk`9Mwjg;pt>xu`F zas@lqRn3(GB zZDyo5&AuoRW#2-|Pa6g9lgL--E3)U73`dlQW4}|yA+k>GD&^1=^{}6+_}>|7GUzrh38SWU5_T39f!^csj~bOk9@NJ5vwXD*SsipC4)A=mQd zVMa23`Qw9ljqncr@D6F-dLMW5 z^+o*6fl8O)yjlTZ`JE?|ovl=5rB;wzMsI#~77l}yF3qp$0OL{ZA>O5p#0i~#8-N}1 zpMq0#qEE#%lI{2ZfFuSk4->%rP&i|L=nVgtvhM$geUmc%_uzMm(tn3-W)(Xm z0$7uk79C+m=0T-o1p7fC6|o^iIUD+^c%FXQWUC&mHjr#lUDVxy@PHr-K|X`H?rL%aC!4R(zG>h`UzQb;mny@EMrrt)`FC8k9 z5`&LeyTqj7kUyu_G60ek<%4y1lNv86Ry3QnbIklIGIdLqK5&@wwwW2k6Sj{7HIxoG!sM@$TF<4a-9eFg9LwD(a= z`6uQ7!m=6lh@W@}!HAfZvWl~Emv|IP3GvSxpEksA|1LG?m2*IIvyVIQvCbD{3ZZ%W zt=60QC5YBf>{y3(a9t!YS-W5XjbWc)2+k6mW-+t$JC#_9Yg1O(tMTbS$`#3q{|JBo z=u^gzRx$lQ>6ECuk%_&tg`MsH__E^pr9lJ{NB)qX=HxDz_w(1plnb`is{j)>0BneV zP0e&qdBj`${@gMvm9sI#xSAl z87oB9IWrk^YC5>OWR&ImKL+SAe@tG_kK$+kP)zy%pPuIb;57Z;0H!?bS;Y!?dBkrmL_!w618dFRXz?89Y zXjmFRudgyDnmc}&91A?^qT#L>7PAD1wC)N%bxuxKAB6$ns?orvY4!}(n%-B(R&kCp z791MEUcP~1;pGvP9Xi2(fyqHS4||HyW2VK3?ADi}l#w%(XS0wpN|<)B=CoU)K14K{ z=%~~tH^G3Ja2<@|`5hSb0)r%{(l} zt_vBc4mjhgO2K*^D#(lJ>oJ<@7L&B*sE3M5nu65oF2dvLbvhjbq}%x>mLf{LDmhL0 z9NJZwYh$^@ZVnXoa^QZ0P~S-qn(9I^rxukGP)=pb>a(VIi8~eg+(b?D(fc)r#cCBB z!!UuFrs8+@LIgTX@+eS#d*j9MrluQ~^*?}=ngAfcG8bQxk>@`Zy4st8_xCrlsR5-n zDPXJcbLi*ZxKmr|qd!6QMn~$ya$veija2HAN3o9T@HK#;)`f8iV}(>%%mj~z4NilT znC~`aM)k+&^?;`Up+XaFHcm|}_=bk(5>uDbWQ7rV+3G=Vn_|&f8TBmE!1%FB2kx~r zIhfik&BS|!%FeO?h=W^DYnkAdc3ny06`8kQl~aagcn)!k+@)Q*6=bd@WG=S#JhqZ# zN5xsvE*ZD&5luG^*RA1`t>gvP@lA_Bm)DmpcLJA7pFF4FSQv9(^-2Ctyyxc_j$0dYhpeT(!p=yr*HJYBLbpE zQ%M{`*+tCQ*RSx^H{I%9;ml#H;BI6`-rp3OW*OZ+k&@V8yZsJ^2@o5>COi}>{~(%I z=kIZ}Y!9^6c!o}>4f_l=;czH;hS2?Vltquo+3Od{g$fkVwlr%Ew`{5(DHYR@UuNi) zXIZSystadcSJ@iYk>`2`WQ|PVvdC=@cRzKWv(B<9{u*#sn%5c7A@%t(c44p1nfbx= zjAA>$_PjDUz}g;C|Wn+ z;y;4_omlfi(dD}Nql|=bKtMwOU&{Dj^Wp!6EcHM6;Wg@-%DAdO)pH016Gw@NjhL*| zVu^<;>UqzkOVFgZ`oalA97qnNKgf5x4vdCH_Hl2cQA->>TK5Hw0u zQ%{{a7?T7_e*SyA-MX!Ay=M3NoVNM-zF`S~)TZrqAk&t+3y)+`?<(E5M!KnVR~_)8 z-B!H`jD%71Dcv_j%Ci$kniWzCd7+N16NE$_!s00=?*R!X76j}Q4iSY8!HQ$XGP5%C zOw13@Pv4;m!wfNnmSJgOZDMv}b`~Y`;E#}#7RJMB&rjG39cVr=!?Hw6X<#PSJ7^IH z{Uk&66$TA#(9KA7veVK>H6yU1C8ry$;mb%*Hf}_tCAx>7OhRd7^!63hJzl8aNoxzl z57>0#-%u&Y_=Nk0G1_VG$rui4U?HvRDy}<p*o=tK@eTQ^_&}?Aq;LTO;u9@QrVLM~Zlz zpV_2ZGfVoH-<3~a1=8s&U{a{v`(oF&)3QfqLQUG~fDh6I6uWo}V8#hoeCcZhnvLj7 z%yfoY8-daAoUlCk0dN$Tu9+{^b*U5c+I~uT80&avYQsTd0HcecOfFdix7`wW)W)es z=dzvUM$H^0>vJaB9yS52+qP{Rm9}kFRw~lA?aZpQZQHi( z%u2lI+ugTMpLhGdamE`XMvRDm_g-u6Z_jV8@3+<>4ROftF2fqiK5R$;RoT}VD9vDy=h>fSgN-Eh^g=u*(~3ZQXZ{T4xLmEpKcFKN&=mhOi-#~%->KqrSrKY|DLx} zdcQ^(&q{V?p{zBP=QHA(NnU+8-mS&%4FHJF^&1A-NMMju-o@0P6rsCre;BZ*jrQ+l z@_i45Lib;%5&c?wwO zSAjri>Y%pLv{0<)jVhBC?^O2P!S#-TsHCGs#dKMwnX5?JGO%s3a&+Rcu@?;S<~b;| zu8H^ulG>mFG@L@W$L+$ZD~>S-WK|~VksKuj!-%7VW3)>b-2&wuw}%9DaU{-~05=ki zXMFIyZ4&p_{usO_#=QXKTy?NMgIcfeq_jh^2R8$ZD>Y%80lS4;TEE3e;_<9~wapOL zK^{%Kx)8m)iX%Ne4=B1G&3Ii_yzw6eR`(Ho9P$=&2Y)lZ3Mjb4K5U3NmrXs(zZ6-2 zR~OD8thGui-QzfOUKyU3Ql2FtXbW#?)>2Mt)?!JOJ$f8JLT2ecycE2);~cYcXjjh9 z5-Xky@{?g)OA>IU{lLNb46##4_Dg zB7m}Wfs3X8m6lTqIJVjl^?D%`k08Tc&94gnR8KMtY$;L>z56E~h~~S*DI|~u;tH&s z{Qpwrv~}?KXXrw;=6@>6HTrRgxjSMSnk5*!2(qFXl}I%x`lcjA`X&|hO)}YbyE@zi zdBI>9s-Jt!1sHx#L)ba#vopQelKOu4xwpa+!!GX4Y*yn)tb7L^)7Kj=)7(DOtL>cr z?>_gO-|SxU5&kR-|LK2**;2jf3PeQnE!!alPeu2w+Cc@+rFoI-J%;I0x;dn&lE{sK zbW{on42$4-V0x&~3c(V^?PmaN!d=4Q!}(zGVCNW}7_W>2qwfU(_JCuoCssVeFxCfF zJPm43wGcoyO&}aGp0THXKQ7l8(*#oiabzl6R&O2vPk%9P7#bcZl$eT)Q2tn@^-06e zdy4nNoo@|9;!M?Ta(7f2rJU-(9jEIXYGP`8;|{ZR1d-w}>?Q&JFy-yq;4R<4v*2_c zvUT;tf}CgSKny)f^Cv7-&yLg%w8Xo%fvri~9ZQh1dQ;$!>bwQ-%1HAjGSg8KhWm(2 zlhwCmE6lU-O2UFp(u*?0K-pUAUu9TuCZ9oOXIVwNM@L27EHoV@_u*jAJ4NXh4db@| zcmw01t)~lj?P;0^*efTHqW`Y8hD1=m-f+wo*UddB@Ag&%AC{ARI(B}W$Sb6zY@^v) z9kUSvCny`K1D^X#F##rkj0Y<0NSR$-+08f1`^BC9J&b*tVZKtSOQr)KszB6R15I|7 zZYfau{OeZp+BJZ-4sQLNk#c%LI!CXB+N=urbribZdx);&Q<5mL#B4{aNGU(n*DK zqv_npai+UOAxI^rbb~9621{e*grf)cIhBczj5ghv{sM2+fLRrtdz2-#4Q(bZECKLi z!)RhwJ}{f9LWG&H8AJW6~Y{+~mwOz|QNvYI* zL90}9A4?Q4Gk2XVbn)d628MIJ`E7wBxuHNvGC7)RMsISguK7YJ?916GRd#cg1!JR|Yupi1(>)`GBR$_d7N+)RjTCDK2?^;6 zj1Yi<-eEvtF9tg<&gOHkv+30+wv433mN|?nUiGZUj=(tNGZ5WuP7n*^Mdr$O`fwn= zwqn#85oG#OA~Ke^p;r@l&EaPJ6q!lPX^WWIoYT?5eH>}xwtZB6Ltm4|7=&-Ys0|tv zlAq+`Fc2M>R9Z^n!%Bz5oM_%=MvQxPYyPR53C1zIl`EkXQ=l9}OegO;;xupw_GSjr zKi5Z{KG?z+6gXj|apWY9aZ{KzAkQ75r49Fh~?m7;Exf>DHtsnHx|gzTJW`f zp*SeU#?JJa-YZ+|9y%&tbg0D=C?8jZW?7x>SYk={{gV?{U0%HRb)4J&zOOKb;IXP& z8Z`xm>b-X09%vitj*7j0;D{1=I}s6FL+WH8tmKnsR=+E_LS<=$Db$OY@^>lBi&}~0 zHG;nDiDEAowf;7OkHjG`&M+!qGT7!slq)n@vnwRl9kxupKoeypJnEcoxj!Etb5hyUO%{^tzRXsliRdP&&Ho`JmA^LiqydCcShTBAXipl zh~Qh$>_2U%|C~rbFE_6o2LXB zqZ?k?_$)>jeLDy;O?w*$HA&-dH?^jVu!cMQT8zqfbswvpy0a+6?L#B834A%#CMzC~ zucO`ti)I~wFtehWvBDVWWdcc282`$Kki%ox= z4f=#59>I<+Dvl0&fK8J|oMh@LoG6)N78|$5FJkNgMcdT!W>JL5>>XB1%(AV3 z)XgoC1s{HVlIU8?RyML)Gg6v_nd&t-hlHufsDy|_92>P%u6HCEt8}-nd&laKFC-uu zFLKYKC_s%mSDyRdS8lQ7UN#$W)$RecfzZFQa{pH@xT=|xo0+|d*?$ppiZ#zwRVC5B zE+IORFvP@)s++8pK{SG(1&|uWqj1E_heV1SADvrwLJlY>IH4B1a-Tlx=pQx_FOR1d z(z>duvztr|rd;3N7yR?SgtAW`F62SLlo`0-x;I^(nvb(KUEHsa-u-j4zV8hCgfOA; zmF{?fGg5gf_sYWPYdEU((!%Kf8>ZI?oK##1DXwN59e2ReX&G&^wLb)*)k)T_G`Q4(7LqDcp)CIjzQ8 z-=Gp!>Qe|12qrrLk#s8UA>siCIHvaSb5S|Mb%G2#3GL{YfjkSNwiqDr5qTl**$0G@ z@kOnJ6Z8@XNY0YpU|k`3;%$N`=E?4WJxO!X-Jn5$tI{)%AJu25UHgcBTBpFc9*JhBD>Z z`I4AWOkMt}uQY%@tT`nVXR|gZHAK}ka}#KWilkILa&k|l0Lg>wUU8a)1Nnop}ZNiO>N0TR+nMDzqHPxMO#-1|^_dD^ZthI%TnyS!QWaE!7)7LYYR?0%fxhrD#nrq{;`tTgp z6coOT=Dv|Oa;2Kip3bE_&%m`l{Y`7le(AMxk^TucbW-H7fhuBv*Au(3SZ8n3tcX#X&uHg>62~p>*iPnW zXt>eo0=LBq(|uck?AETj*zx*pXK&5>-LTWU3U-QKPFijH;i6tZs-9xc#Z*G7!Uu7Y zhY}r5p$}1t9A3!~4_$u_eWo=Hx|z^XS9Pe&iRDJkL*A;L4#T80phP9GCM_oiJkR;N zWUKGjcQdoQV#!!51#fR}l&8doNK?#4motql60YdGwvbY#w|x01${WhAd&W#PDi-=0e!s$wU?sjHXW0C%-MJJ|oLW)`VwpTdDnoW{&cvHbq-5t+}Jq zwW7PgQq?!1g`L-0xcy#(vuYn|qm??U z;;>uMP5;nN>5D+-?b97evP{V57_U$-!b&tky9YoJ$F zu=xdt{_e7H$7*?GV2CIP8|@z=@DpM9Wtj^I?~?wc-#Xsj#S@H$efN1E_3zn!mwfN{ zHx_@l&=_T`5r4-#+V8Hzf9Gt9{hC6!6HJ@>sI;RkGQ)O$tG|eVA(g4lbcOj4W9j|+Cs3ZoM?&&UvLqv~3EWL{$2db}Jk-lU7^ zkc1Cu`X?X`v93pJP}MPaWsOgGOaZ^r9RvmZARJLwzhRK`#oZ|NkwVL&q>xuhNl9w~ zv8sKE?qEm>yMuXf20^;02W>?CENhP9ag~8lBXN$}6p_T(mn}txC`Q6V;OR(Y6*~kZ zFbQGQT0QW>Luhh-R)Kb@KWy zFqseDpu&34&YnVX2j9TI|GBYmzBQKAs(&NATUmC{Q(W`8h5k0dTzey`6eo+X8RXJs zvtmFsa29(1if=X@TT==%?I!B-ddL5DT)Sd$TB->>p|?BlG^253M~9<{J817hG18cI zq&x_OQ70o`6AMBW(#-n2!d#;Yy-d2=MzirJODsf!4gct~m>sV6elo+F_3AE#Rc!j_ zJEe{YVy}1ctlJ|njpz!3u29+HY{*8n{)Ld(2LUB;f=KLs5w;D^us1I)i*2;?CJb7( zQnhF@{)m`C(u6Qy?EHj_Y*O@|;06_fP8LfDndMcxpU(;K7YbFz(^Ga{_rk1zFb^;P zFD*kye~ps$3Hk-rT*^*WOc&`xhiB{!^ICJv?s~<(F=r+5N!rqkwx}jPr~$&IkT}xE z0l@_~j}}6wEhuwSIGfKZn%WTb*>C(h%BSqPn8b@hJw>EFN~Z+9{J2gK^ytOeZJt>r z(A^g_6~Ne#trdRrh4W@DeJQi7Z`jTE2q%EXdmj;2UT!r!wCB%%LZBd`Y;1P}H&z>v zqVz9YYyZ&(`9~gs#<}yl8q#NsZIzh%56(`dF?#wEH`_8iO1q4I9#91cbI)%Cp^%0v$#S*x6Kb9>yAIF179O!vSKh^f zpKp&I-}Ya8zlme#j?I`Ym}0SLn5MA^B-R3L3IKbUa1?det~|I?6qP5!F%}y*bjMJf zv1j%!T)#Get)EI1Ks>y= zcAO@Ksn8fZRn7O870?h?7Ej(4ZTbs!tnM3CNh4sSH4KiuRRgU24;GRb>s^=r(@?+u>8-<2UJZU+qUOjxt5~e+*nfRkQQLRM8D0+ zUyU}_X96z2jcyc}@LF{Z^2<-Xt5stD1%3ITMc~yUTZl*^jtjiS@^5}7A zei}@nrGlZP(huL2g71lY45BIVN@nj1pexB_0#ljH<%i^(_D)rG`)T^KOPTVC8;I(3!yT&?%W~IE`t_rREqgd^okczv_fvc6mXF9` zY9k-H(H*MFck<9$t~xnJQ`+yAqQdtoc~gZnZANL6=GJtns9ZOUqizm|?M)OuaE$Kt z@1BU6Cq~CUDQ3i`#_LNRg&ZM^Bd4HBE7wqRH$?UTLG7AKBtk4Z({r;J|hB!Ap|2CX2lXl=C~0pc zM>a`&KE-)UqS)iUk-ZxVPvAj1Vw^EA|3;?;H-BT)~5O@rp2ZV{v zPKoCl8R4zQTX9fdH0^5@t^XUImaj1;YVcmTn{p1b19P^TH5-VhCHP->TI<$8Y=YG9 zpR}TTKs+thV__!ToYI9zDT~e>6qDNKORxeWA4V$2}JVFw&JEYd9xO-g(Pd(9l43a|iNrmliV@>?p6P3M|;r3Q}mQEo=~RZ-AB;!?*-p6);>AMwH+a zwDkz(IK_XbLaZ#ILT##ijQbgHKX<1>txdCz9-9U@@7cKRs`%{7y1vQE+x_t|&-hK^ zChvPB3>`Q&coT@Eutu*1j4n7gcut@%DUK6)7>_R09{K>b1eQclnWSL9H~^~un`n|z z+^!pd6N`a)01JQxz#hW>4Ke$xi)a!VVGoRfHLAQNNE)CGD2hO2s@@abP`gDgQS+Su zC^8j_^xL7IOO?%NZyHtxaHHoM>x<(wtJxZhgoJ~muY0NvBK$6Ii9M%za#S2V=9|Uz zl+EL3si`Txv}Bg8pRX-`q!)dr02?Y>cbc!|r#BgNZfdf7Nw_j)0bCv$*OL?1_ODf$ zXtPZ?S>;8+RlTL5oP^;OncG;HeMKB+xOT``o+OPy;*k6w%KG+6Y zaL{CMw7t!#{{WriH8b^Oj26MV&Hli7cQ-#@hMd81ubgG9#A5A`=29k^L%$s8Rcr6{ zt2f2d0D~;!E0fpC1Pv1PdEjLwN%23`-x@k=<#^BmyOMH3%r4<_OND&Rucd*f0|~Oz zVZ*%TWVvP1M5;c2vKbdrlSvG6E|`SrLFU>7SSn z4wF3EYxS$X_K7$S^F?AyE~rPo+aB`MQfs(q@&Sp8?5fM}c@XZQSb$kk%~&3#a*<#W zU&=h2c(GrMgbVFrYgAU>t%GKJ3G*eMXCJ~EzHO0LQ4)@rS0z-{$?>&&#{LMPmrKB8 z4r9|xU3ubq16|M{E~eYT8-K^RwJx`!&T9=@YCHy{kW2}PbriY!MMBBC)rGOrq0M}3 zG}ixG{t2G0pc&=BDg z=O8p*lr2^RMQ5}b-mebdqz+W|4lUu1Eyauy&IFd|v$I zu`IN*1}fB025&GnKcS1>CyK~4KCLPD2qRU zu&#f-1NeW^#g{7U5@`JAZb-;7dm?j1rLu6?4MFUPMD5!HH^7}twYC%D? z??#+q7-w=P>s?F0OR`TvAL!pmvbSh?2b6e}`9F4Du3OuDG<>eDm;K)#&#%9g7$F)f z^hW^H;d5=uthDBDLI9;WXEW>9iD7CF`pmK*3h2n?tB9?=6hzCB2FG$5yIsmCOSzR+?9T7d0_ zx?eMmh3jWAXBP?(+NE8weEwdR zQ~uUl(rUr3TYsp{OLM2z4=swGmK;MLot!{Ocn2dYhl zWwYsiv3t`}=fu~Yx3Pku;nr=|O_NaFg#*?1Lf%C*2b=GmbvBjeColSu0)b=pi5xq6 z%gr7sRpyBte@PoD9ba>AGY*@y?Pl-Ql-#Q|WaE26D)!5VFNfM-G^*WFQ2>=)cCGBR zj%gl2%lquAh5`zE-5q%Fio?|0i-v;^kWFpZH|?h>c9j~m+0%#K(!z!(;M8}8q#Q0$ zn><72KH5faSdnT|tJw}+F5jSZ`Gzn%qA3T;!)bmL_DH#6ad)-0_%3h-EQ}V)=G|;7 z;s@CLVZcOZSGWc<|9hs}uzB?6z?04Uhd?e=yG+60G8{FwE5p3KQJiAKxr`swc5Y+v z8kABkatlITY3CjGXhlP9WWYX#I99o>lMHN1q)5g0e&&)oen&Q{;C>)t0LAq2;)M}w zjG*TwTnoel8j=dq8P4nu{^=Cw9S6M*B-bdRPHR`OjrMi*{$d(yZP<*XpM*N`Z%d!R z7lKo{3B$$yJF$ul{?psqc<{1c=&^;ycm zIlXQlvc=nbRe~2=5C4hIIxwu`QHnSKa&{!PM(By=5K%=~uw>*Lq7?jGcN}X=(7^V8 zZ{^#ETq)}Pn}!7%QFQ-<#Bg?YaAwpN1`e*0RnS#i_iPa)vMv-b>44y zBK^S?(Cn~KSYv5pbZGfdkz-n8Xi#byQ}}*GO^P8F9wwt99u3QsGa2z;@u%=+FJh1a z^LsyB>_@qd0*CQITIX+4kg2$JYbwdGm{wIuKn}Zu9IMlX$Px6;p34tt;!!dbsQCYe zKy=|ldr!L#6u}kyxj3I@@wZ$Olaz~Ju!UnA#pW6BkFXjmg1=`v0VFl$Je(jY=q z*BUJ2(GbQT%P{VNNQ%qX3em25XRC~<8p6{6*HB4Gu48bVrt_{}+#(dV$7u?e*THGx zPmwn?Z%d0n)6nyg_xR)gPxZFAmhANzSa0`$Z3veC+ij9Ja<(xu{Xg8SL5*n#Ty>;R z{kkWfb9nn~w#hj{X@9clW%rG_Z}3;K4fe9A7e#gj1td-@T(ryKoi4uW*K`>W9&)+nGl73H}!9h@u^@&JR7#O8eW~8=GuzlSx;qb0xITY&|!Sn2)m) z*@)tAqw5-iTd z?bd8p*b3R8!jHB7r}~E8{=u#8U)IIG`^t;9t#0cD!LwmEY|UhObnEz~)>~Dqk2`fX zYMe9@w3g)d4L?d6DUd30vN^yHD(qU1NHvMDJ$2K69r@rF&SGGdrQ46%yJlbnj9OfV z1$RWO+T*g%BQoO1-yvLR$nD$^kf^}I(}=?*n6)SQ*cw2CIZuj*fC6nON<(?01ZJI24Hwi zV-89V+sjp{mOQOyAdO636hl_0kH{*(aUl%vqts8ZPy@++67Z@Y-o>3iNCE|$d2p_YHx`F+|=rh8CO!uZbb;(g=uweiv$iEjmD7vkLnH zFk{dC(UOXedfyE&yIulQzHiihL;dg7zQZoVtpjM>3Il=8r2k)KBF&5{0?RZC{a-fy;vwHaL~^@uIa$XWo+w?b9}Bnre3eOkGD=YAq}>_ z*T7=BUCiAU#H6~qo_T5yf5+$N@pi+Tchu;w0%QTW;bQM5Mr!=^L#1D8(X?)`M5D$y(&YT9DR**lZB<5%q}SOqhb1FVKzsp@u`A zAYuTHIH1IG#<56$MMesEgRyJPp(lr~knW7%C{&1BM0{|4(1Zd|4j4;%FlEV5@D|g| zT*_?iWU0#>>|}Gwc>N>283t}!@?+*fRT82Q^-9urZ!8QMb#sk}lD)TaHXzQ7Yl*fHdMsT&S5$JwU` zUM38wbSpzu)a>(4cM8rkj^EOZw#$y(vq?0aL7q#8C&&W5S{7UhYv3XlWdq zU2}C3dT2fKfGBQj^@SnWra{lBf+?(4>WnEYaAszBZzVeKri&_S%a>s17;_C_&oehU zlN5g1O5?-CLW=s_dIrzXN-wpl-O+mUp^xPRO+j$n&%&ap4Ax644}hF=f}0}{4b|0V zF8evDSp6rk`m3;QVz@&pKk76s#8`o@nqp8guD`Z!2PLl!kc`?NHHdd=zeO62@5@!; z*&1|1O2@!YSYP9bbdbgvT`EgzfW+PA{Coa4;vc0a7k5zf87}+C?LL6#UzD?bd0D98 z%v2@J*fQC&Xh}cWvT(_F*)U&WQ*iy_4G}>hOtlN~Z<`18h;A#fRQwKo-y8BEL&H5M z?_*%4Kvhs}(aWK`&{a^QXp1ShDpgRc{8UgoKE&>-X=|^JGX-@H4^zAT znq5F3*5l|5OM4q9hD$Eot2rgl2KrL^$){Fc&MXMM(~9vd*32D7mTA`VPkG6Usn>_= zg!x4siMxptkyt-DkB4e%{)DO2>k?n|z)xnol{KL+fG*@+p1IPtL9}BRw-@JIC$u^@ zSokcsv{TD%39(GoU&Rgs!}*iXQ4va;I_v4noTqE>N?sx9XN;jd_*1MM04QVdgG3p( zyicv4N~S)>))lH%?n(W#4k14UdUJ@a z$p|SM%Xl|5y^oacfok3}Da=If3`_23Jzk3acS^^c)2=YqmS88{UNC{Z7ii^NlA!5V z=)Zt{kF-8LxqTmwetwJ>&6sWz4BC-V6#bplq(Lt&5$pN7V3Ew!%fj97A9!Tf*6#t$ zrhgaqI9a4?{oZcry^2;aLLD=8A;P+YJ(Lf0hyRvYynpAofw!fz60B+Dw+sHhE$kR_ z^^UW2Tdc|^OzA}Uon{Q?Pd)=D5yt?EBcVD@MY5psGiL=SWJnVS)PFk zk`zu>`%^^_vp-kVZXXH+Dz420%hm{tCi9c*dV-9q7g;CX3KaaRM&@Rs|Mj2jfB)7tvaq0x!W_Dr8?{%4ctztf5a-=g;HX@|@vMp|eJsrK8V za9Qlf(h{9yhb}orPLzrAMTP0mBtuTn3N(d5^hEGb3v`5OW2h|qozQ{s$i0RL=q!{1 z#X+-&%Cx>;5wu+8dl@Uh^In7ardS9Te`OUPj@!&npXxN8^yc*$mDxnWczv3`a}q1&~snaJ*gPfvQ01L-U+edt>15E?DGEB zSR%aL%l+WcZ&KaOX%f0)q*3O8GvW2JQwD+I=!(`!7p!zz-@y%9@|~ZPDWMe6U#-4| zSS~QpMq78iAo4YyYmoPkAl4@n1(+6MMFxu#!JTElRkueRn> z>F%WM)ML~}nO)BVt}^atc%c;7Nsk#27Eb;f4eMJ=$VuIl30F6D1TNjxBmFBWuz z3^>Iz{*HCo^JOnrDzB~iW&Y79XXr?9YE^dOzvrIzM0TVIu4wh8A`O(A$(A`;q-myw zvx}Z66%;Sp0?GA8N+pt<2A#D^wR|wJLY|V ziuvNp2M60Uvm2_h1wTr~JyZbw%ao&`IfX^;>llwYYZWA*o#B;XY9iHK6J8&_a<238 zf+=fj@j%J1Y&#$0nK08e9>w?+*WB_kyQYOp_)ilU0HelKg|GHuVc0UaA3GtaA+z8M zrFu;0igXQfDX*(E8!Xxs=rbKUeE#H!|Rbx=BTaVy#u z!hiYo)XRg=8JQGx4T1n77{aw1TPU9Kiv~R|g#ogbg;<7E1JRrr!*n(r{uKk3Y(e z_xaWpzQ;Z?N5@l)i zinsDl?S5Ezc!wRJGCRWj9}g@2;|BfT8`8n~zc%N84%hw1?$m;(4*ba2JcqB(E;yPz3~C}SGth|pQe6E3_M1E z*X}hy>&V;r102b_i3rq0f0ym;M(;QZfb1mj#D2j-W1%uunlNMtLV-XJ^T{`+4HAYB zg=_NJ9hQK|z$}hRE{N?Fhhs30dm#CR6l4U!%sA#4fC)P@ZO9r#56571g8`As(h?=S zAp6t9+lhsP`Q+A^7y|3U&@luvdB%@wm;(ZUD6BiO;|yU0feb+r6dd8_NgL$B^goZ;dY4%TAMHdc)eGGpHKHKe=-Z_cNeUts__&-QQ%~f0#i1 z8=+=MPrDj%tqwYauQWP%ivl{#Z?zD}YhW|P`pD2(E0$s}c|FS1^;e!Y^-h`I8nu#2 zdxK4Tld4UWTyRbuh~@()!Vz+dcg^EDc|VHa;UcDHrWJ1vLCL88Y&KD*$TPT$3gbJk(5R-YqYrIG zg=T1UHn{n+kFqQwq1I_DNdrCABK${8`0cng&`8z`h>VbR<|3cWp? zJuB^>>NvP3Id5Mn5`PFrcG!DJ#cG$&pN*$(^l|FyFS5$62t<~8$WJmCrM$x$AHo?A zJ1tw2n*=vV<(dOp1RuoBI170qRl>C9XR`HF>W-ID@qjrD*b>us%|C5GS`r$6ij zr}o%%RszMejI1&UKm~m!phC}6@`tLaFsV^u&U!t8FOosBk<{2SJd2B`5ZW&e-*j-+ zObpWHqEwM@TxB}W2*qs6sf)`}&cgQ6wQ4D&KEkfq$*RjH0$}&nY{RoRQBXuZ)oN!I zL5i`8x#$5z>`tC3g>2b6SuF5)SuA9vfsiJfUfObI3TO8zjNvhdP?ZVUhBM4cgl#q)4zwN7J7$Wl7%nb@PGZ7CR7}tbbw}Ro`3|nz9Q@3rnZa?$@7v zi1n0nv%0DT36BpWwcpRVYJvfcs9GEmFnvqW1vf+rSI@kZwMV^eKDDl^U_XXG?pah| zZK>G@c`f)t8lu)o9t+DF#mCb7#rAT1zHJ8n9LmYY5VUzG8hc~SlCA=JALkj_!pHd( zsfFc4N=S~El72JTR9drDrlvt-U{hSKunT}Z=WoZ-x(&@jQS$s-j^Fe^{)$-yksoz{ zFPpm({OVp^-QoImPmVx3GjU{h332ak%8jObv zmu%+U_LgulQ+P2*mi=o{bJsHHiZKF#VOcV7R`gq05C|}QVl*T+714)tvUz`i_KJ8Ce5wD~hXsv_7 zJ=C>L`Ds}P#%uO%d4%X`EYYzuD;D<%SK|3JyV3bSb#iR~Kam<>JRD*0N|D#cv^$cPo!Uj+-%W(UXg9gg4i6AbavuEk%DFG7_~ z1^f9q%}p{(PDE2S`%)n_gT#3eRQa>xlYp)ZANVNl$9l^-$7~x z-q7EaFfW*1^%+OXwb#EE)GjR2v_g1TL@3Eu!?tEV^+R0_^QTe%5lilfNa)H)=mem2 zPRZC7U-BnvNm~D5dQ!}AkbdW|>E|lr?r2c9BsHCDqGn6iSQ~Wg0N_|hQeT;Ap|>oL zy{fi^bmK}Dg23KLbAA0&sLZ0}59vsVZ{Kc!F(|VC=kDe|>gWIK3$B_KFa_7u$j<#%t17M=+E+*2C}0wVSZKTnrm=xTNVd#Uy`l+gO$NM5MENX0R*Q&yb;sPKw{WTc z(Rxwi@^H3X!R<`h4xDbEnc%VP^C(J?Yl>^?gzFP}%CqB|VwbAdL;~QoJkuhVYdd-j-bJ(W;AG$K#XsNWM2W>W3)wQhy(k1WQAd0ANzT<#bC&Ug&?(7 zcE}!Eal~`3)BG7HtXucRDF6gJmHGyldkBsR;~WCQm;zfT62}gswgBxMPeco@T}_0D zNjoxJ99X5I^vfGuptc%GSlAjJEnh+ynn8IspfS)^jro@Zy0WmbrMgjpthlZveU)bX zKqHO4q|~5>ZlN(0JPlyBXir$TdXKnD^%gBd{X#f0qO(P2P{3B{mJbJNFktM6{_WD6 zsUp*_mt#F5&94&5g>|n8KO92Tdx6QvH4^>PDneqDL#xFwV}|7|Dt|{}vk89O)J`F< zu0KB$S|zWxj=2#So(`5#C*c8}kui|d)`MnOX3)GAwVnXL=FpgoS}s`M{V9r9OU5)` z3YDS0C8m`lFCgk_#)5L`^bTp>>@hV@5RRR>U&6eu%vD<<#PL^KW=cIw$FJ9j9|N93 z&acNY4*QxJrB|b59>GWc8H3dJo}q$xqP*HnNzu^&gPHURUH1jaVdn|3XWrM8VAP)I z7Y<5h%g-?~q+6QxNPijC!eX6hg`+`LL5U&}s5FDe9KB>(wO+IKct!R1*5X{>>4`0( zK2_>(rovn1z7hXgz78@n1HOx2lXWob>p-<(=9Wz`#p~dzi`nzxmy%{*!YcjRi)mYO z6RiNPdGttlUc+Fb#)=ju^6`{S{o{>Lq(IsfsfDUf7;o(;8vvr!Ok!Gu*QMz#q(c)i zG+NB~7Q7%7yF`J>-p?^EQsyRje(?|&H3r9cGMfr)-1}jd!9KH+6DJl{?@w{)B@`}F zhaUhxV}-tjVypCikz`~doTd06UBij%i08pFA-{4ug3?QO<0C6CY&SD2XvlMJ^pB&; zg6Z0ZHbRmh^*+P1;(BTZVPA)~Jwa^$L~8~`7T;NiwmD5C#Yfg&mT@0oKGw{3K5X7) zm}J&cY=H%XS-i`c&VKC!M7qSK(0MT7x5A|$oTVtIsJ*ylohJL2T?w?!SE{TKmtZ7e zf8C0xg{bWPT7C^Pl?1@?YI_S^WU#x1nol{XEt!dhbkB(^2Z4bOF)7W;qp#LnxDSdq z`H0>AiD^t4%a&^OqX0SKQm$+`=cHA$hZl>-E`7&1@P6fX!c$t>eZ&dy+T}{_NYFjy z_x|HJwAiznWz1;8LBC{~74sn3(@i~^saH>|7~p3;4`M4^T!&OPh! zB(eaksz7YtVXmq{lCreOA!-p-@p0ec-&heR8LjI-bMJ|6@5|s1UhLCo3X9IAj$Y)i z*l7kTOvMLN58=>WxZ^GNe|HK#luo`yoDgBm5Ub6&l$9JSOEMa=cZRvSV%fQZZ9bsv zJ+L&*DchE6)+Fi=BJ%)D9&i+9&ap~4Z`XixZmNMEZ$`U!FPN$H%Du1Vz1AiO0#%~`kx3zY6Zfa~~58_Z(ArJTk-G_p>1 z8|I{~Jg~t&KzV!S=slq30DABL%piKAH9O{rKhP8Wno`vdaPJsl!K|2#3dL@HjqF5j zW=`M^U9`G{ZsV%PFE#w}mzjPLKZ-9)hufWH>=5pFPg?@!I6V|Us)KCTf@}sl8RiB* zr#E`U;xDUbfbw_n8)Ssq>{yK*J-*?xI36VcXjH_=(LBLG_02rTCzJ=$8+Rx1i2ogB zGa2i&r1CF8ZqU?zmR!ac1y4#(4(@XUt%gD-vjA+F-$dMb0jCaH50Ir(8eY1?0>@T! zk(r+AEqy;fZyiCMzy9fb!ur=GCJ%6S0}<%zN&f$M=BeA8nweYKo0YHF?a!=pQ*OQp41%!$klmwJ3rREIG7 zAIbh7*1o~H)394|V%v5yv2EM7Z9AFh7i*GCY}>YN+qRwAT>6M-!_sh$>@@{&!{hINAF!g~@`wQgw8}I!O!GU_AJknXHA0(o_S6U+ zNi23&cVKzhjv|QYqezL4c~36_y|(Q8ny8@J+J~mID5qY~^?R8W41|t#-MH?$EG}mf zRzRzA?D7}5WOZZi^9Ou}fXEQMPON^~p?nEDtxyPmm=c0~Mi8ly5&%>ff7@1ab$$IT z&qJ3`G4sF)~JK|wMAHKc)TSReYs)sVT z@BHRsN!-GdOWj6Fad#k-4m;|!pxEVsgGuMOWd$W!DMNr{F!HKMQPIXUXQyhBo2D{% zcm*liEatz7Sasx@e58QUR?#|Vc9NJFRaxK_XXBC?aCVf-I}*BZegVvk^YKKJ?L`Qzv6uEN@(5o z$HNEG=nV|VLWz}~Nb@i`)CYgEjfc@t< zQsG2ehkiETjA2;=P9?4a34pC5jCmc~Fi2c!hlzZVEcM+0L~+Mc6l}nyn%drNOZ6k& zMo5dX9MffUgIKP0yD(>d-4#yp=-Db@KrypxNTj?(He|dB)pV4U`?lg2%*T3#-#oJo z2wt;>_$jmH#7=LT-m94DT>=cVo3WtzEx)HZgeShf`oFG848E0u!L9x;=`WL`ay|Y* z@%V?>W}dWR7yzk47X-{h4tm4HeGYT$jN_LEs>NvrDt$x02`h3AY^-}wcMiEM_1uZ? z6w1Z0?oiBgOWVhWj5Bsr>TCm*SjG=968jU7?IY$%M!o=L*xjh&m)p>$`DM2o$Y+gv zpnby`dAbQhDx7mZJM&4;Y))r^fA&^r=z>RVe=n+9P=5Si_^<2Qf8xUbgZX~dM?J>+ zJ5|F_6NNi&Sc4c$JXEchxd+p8+7-?=*8IS_o-*!t>c%j>HDde>d)uGWT1_3fAzgx zsf_Z0dvG&Y9Ttbt9#ar{Opn=~iU3X!b=V0UkHH>#*pIoMYS@pp9(&jhtDUrfZS0rK zfMwW^E@)Q{syz^5eB|3+stzb|kq-HR_x!LN{Q&_~v=zLN01!nL!{V?{V*DuL2={Og z!U$~5l0iBoVa2s|GNbA+KBRY%4f;I=)W;V3h?FpJq-f%_8j1)r#|G>m#fGo|^p1Ay zMGhS}lxw8hEvt$?K_p2Og5j1hD5S116k@pu4zfKG@-6^E>I+wqtPjYrj1Nvz_;nxa zEiW!cJgXyqOgPNl3rJMT3lTu}1Jan>4|aS&K922HIVw$~r=DC-Y;1sl!E`UyV`?B9 z^u0c;dwk1(#}ef)>McD_Wo~Zgeh=e$@M30dM(x!mmbI5xJK&Ge!!PUT75ruF6=7>{#RtPz7C_1DkO0!gx@N|Dj8Vd_6*iX?tHiPGb{tl?Y1VHV=Y30wptjY$!@5`Qls zNZD`AHL$*$U&a1pA+d8fOU~1>u&py6l?*Ojidn1~A*n!f2B&>f1`t{_^BbAl_Z;6# zdbKrwfTK-#U&3+qxsK9}8}InoYIx}hr}^uL>4~SkcYk`ISLKN;x21n5zzb{$Z#g!$ zP1C%9qKc?4ott&xkmRDds7NCm+vtdSZ>GqpJZ>c4UCBu@PaSJ)pv5y2T zBx-v$8H1OYH@I@gU02>+@u}dAbGrz*IHzlWxejHo#=-m5t{tSii zI#PlP)4rD8U#=p2{a0D%_w)JsXuH$(?~DFF$>{h_CM@(2mOqWh}i+By-ujUy>YdxjPtXM4? zcumxPREU@51=%f0ulic<+AikU7m|;7#0;mfGCARq*x;}QUPjHxSZ&D3hEc$IQRU}q z4bC6eX{=I|D``&GTGDvWz0B|9vcNDh_RpLNVWR*Tm@*o0(j9 z8h@?7fh1;+dG9BHIEI+JO9`TOTN! z38M?Eslvcu2D>rYaS^?)_lc*B-2I8*XUT{wd#9a;ais&^ZC&fC=>UAz7!y$czGzMs z>yp@@OU&}vDUW!Yyf%Q}4nkdQfIwcke$G9)EpJX;{RMND+%Ye$hR|})6`KB6O~AI5 zY#cv0%j-&>Pq6%Yj)B-TS zyTcD&iE=3lN4Royh4`pbXOHp40odBGJ9S|=1N!VYj%{^B{~ajNtY6h-7L92c<55z# zCNYJ4iRE$D$eC-vR==GkCUW1s>fT<-xE10IWchlrxn6;7!zYymvA=(>W^dzo_@uLk z_puV4DOEB?P0Y9Q$>qMuv!fnX+(_)0rp;{jjmLm` z3B-;qObN!#ln_JLFL0pdLjkR}eTn7rlZ!NQdipR4X%qZs3yx6q)Z5~1>XJ)J`G&;E zz1P9NIup#DLFUjJGNzcS61hNZYYY*UnEi4Ejw!`#z1^{KGvb~x<~uj{8;9aAsC2!` zCYyts1w`^ohq#(d?^szXDtbfGFFe!7z|=S2#%_8J!C9{eEvG;z5p*n()BrA!M({Gt zzDSN>C*U$4Sp%f=r0ks>{t20`*w`cZLq5LIT+-16?7O=d&y8~CPYM5J)(bQP^mPd2 zbo1Iq3Mc&AtUE9k3Jit8-z~gFlX=n7w)HD4q3zXltBA-UCx1p{mSKhULe*@Hpn*c5 z)DRx#OO^>l6TUE)PR(b^_yc6$G+j<&jbpz^0T0CvBK~5t-&esIdU$jtbq13y8ndXk zjU3M#wu7?wq2?CH{I^Nb1tFGpxIHrTp5wBApg`|0K)PieP6_;lT?VF2g{pMVv56-V zM-54uflZ`0sx(^cu>vCLvzB?2n{+<#i@Jy5kke>80Ts8L&@exMUNfI{1j8|Z^E9+c zQG}rUOQDk0&ZGi!KHayF-B0zIF~);`F=dXgta*1isry@70oZj0-BMy&e5^0QX^{ga z@9yQA+R6<()^THG5&Y^Mbr^G4-pS_R#WLm*mp@?S?>|kMwb1%K#@`?a>l*|~{MW<6 z|B?6;va~aF^861Jr28*f2)xQx$#gIa=(ix$#3i<`D^w$)n8vu zEf0Ywwsk$16AllC?5|3`j zB|l^b$?mpb5eNsEkc`EAGre&cj});@ZeLq1h;kk)wz2y@RoEWytkNsv?#H0=^_QQ4 z#)S~6nk1L>`4aFvWOt)5F@0KJcrk`#hWR(NUV4eT_B?^Lyi5K_L>u2Tac*8DHJ2Vb zgSJX7Y405~A3d&su9peRw-Ji$MDN%!eu%n3E7vv9te)i+>~v0DBYQ7}5nFjic87Kd z3V}VpCJc&DEG>GLIb1qahkL=KL9Ocn>vS~xgjc|yE#4G@fj|~7=NbomsffSn1mY*| z1)kFduh>ecM$rPP#pr<}40{-#c%Z3H{sfYjxkAAPC^X};tWGoxF-%Ewbl~Sd$^0kh zr-cZ3;Z~wpGlKs2@qHlU|3I|RaKuO}&A~%;qG8`@h1iCCIJ}z#<39>Ah z!*&8$M~A*HllTiwLV*uHjJX>CqJv~y+%hB5fKUJ}sXORIyV8004>r z<=9%-GH_}@!wi){xp^d!zhiLa2F%LBV8?KsIR31rNNA+B^j9HS@bhYfL_n{^m53WtQj?_!?<2+Mqp5svE5{ z3+wYFhadmsj|vPxDebw4D6Xsbw;z7kSM2g47IqH0c+qM83OM8HL+OQNvt{*Pf84Z4 zB3jPHwBn^bMT)PWJY>9i@1hTiq3BZpz$!PLk4N{q$%7+^PLn8@;yMqiC3-7^+Tk`} zw6f(=HO4!It){7H0bYe&3KcniSPjxLp6Ied;(AU;moJCxk1$kd{uxw|VE#>7%D<34 zR7ii?>7#%Fn9~muZF>*DS|Xy|yo{&LD5=kGU`>UFb^lWL1`LwGVn3qtI$J8--71ol zM#R@GN@Eit&23-A+&IKPu}Mo$jvaasjE>JBPw%p<*1KpIdIRJ-XMG?lZ}CIeB`3h@ zJR^X*3X^GNFvhG&+jo5p?m4g3m zm7t5$e*kt}X&gmF-uko(O?4E0E89ATj4M0P zzp5~wzxWdQ-tz}mSxJ#g8AtjyQa3rx&8DV0yI$`xdg!3Z*<@_eM$$bJdQoX$g0W!0 znb_)58fyWbIM+2oDO7*ff;WvwW^|9GbYA3223lo!*cA*5yzNjeipjc0-WaOB2nqwI znOxFr$_s~5TTo-@RhBugG9=l{ke~1c8+CSJK7Xu7G!(Z*$@)JeVk|<=yG{`ufYW9& zK@}rikQ5eFy%WQlN{q1akfnD<#w<|e?K7LzA~_^A&FJAi>*LFD{9Upzw5wt&1q6R! z0zr+F32}}KiR}GmH$m5 zDs8PTj8*{&ts3|ek4}WZ(6O*9xPVd4w_rFlY+Kg^b82VSF8HF^m57yj3-OYVd)76<-l zOhat2cajNsf@uP*@raNAz_3r1!bX!swYWD9#>yM^yqErZtLa(P1n2m4nkjXlkHv34 zw()BS1LZ~5mTQ;sn#@rD7KAY>m~kz*x|P%7!#N;5A5BNkmFI{|1xCK`w_7Mtce!zI z%?pn-3YH_aUidzSc)UdAf>pmH^8`yFvVEPNc8YsPCSs>kSE=+_7=`zSgg7>HGev56 z!UTctKWu&g4XLD+dxyTN!@(lufNmm(wnuhjtxqHM!m zguh8_2uPT0^bDQe=-FOoD{t9~qmEWAzU5mZj$3Y~*|{crw2@<~5Wox8q_$qsJawjz>HFrzw+`#k;VtnTRqAH73?i~rI9MRVsd#6SV%KIY1xdD#KJJu`5m9cNU~oR zWzFQobY!BF%(xwBcA-v~t1L*$&>p->D-#QhrQ3IbWL6!BexZ^>SY?3H#-0oGt^%Ea zcoY{w2@Aq`B!h-!{H+*`|2l zM#~rVN$=y$%Oi;`X+rBw`KY4JrW8}kd+=3ZkQ!s{4YpjT%xN2M?pNtso$uNyQ$B(h zFCV^QZW;f@JZ*gbP~rH|zR=UirR55RCANH5rtA*AYkBHBuogfC zYp`_UHnxcA#{(=?*xhN`dj_mKuLTP7)p~guX_n_;-KSN;D1>Ef7@&ArEh65|h~bRR zw0G$-T^1+~KNNBG*nrz&;xv2UyRm}0CMUA znTpx@iE1uV_9Z_+_+K7p7r!$GhjsGpj{}*fiv(bLu)#CUX-?ylw`0ouGmbZA#+GN- zx1F?s8D^17r^=kIlOk_H;7;I3u|b6Ns|3hO@iv+#MluFs4Wt!gp#UqrPJ<>hd`R7CiHZMC?ggnJSX=^MY(0$6>F|fghYyT zOy|IaGI||KPQe^u{?rP{wTICiz*XhdM%h-^9Fu6>5g?6L8%RebA(0taV`;0;e7(v> z53I)(a-Sq#8GYw+kU3TmJJKZnG*fq|AXa>fk<%J++1;adn{(--zvqZ~88qp7VXXNl zhd?5Qbg#?z=n3_mHzM+1ux zWE4n|&e_-)-}^I-#cCp;ss$97$e$1LttQF9&#>eqnUqpe>bDChG+zW^n4aXD zip*XaDGAk|+i=qCGLK)3Xw)eRw`hE7x2$5SK0%IX+k15p*9;{>{b*?Am`a8Q8lq_K zDn9h`v^3Bz;|)xjlWRG0 z_Re_yG-qz);#~R#Y9EA^WU}D*6mQ9<UT=fCQcWC5x>R7i`Zn zEDtvvtrC!{ol*iT?AEoyi;3*4lBtiwd7SHTJv|u+>^$?G2-Bm$6V~`Kfs4QP+ensp zLHZThH#UIHHklk3BAh*9wr~T&-P7^(4F4LVf==OcKmtch&fR%_U$Sgu%HI5?^F{{) zidV13#rJz|;*SGMpka;AmUZ?`JMTK|r6O=+DYRkpC%QS2%!FDdZZ{WcfD zpD+c-Lx#5-r%-n-j4^nCV{L%-Axx6psP3p7sTP6k0E;r1xg|C|YO((>MvE*zXI6Q1 zz2{iS2Vd#&BL=_uhfeYDQaqPJH^-&W;nj!83uh6vV2_xdF?hL#_omriQhEFQPTe^3 zD@D5XlY)n!2Y9(ohe$-jlCXBMR3o?nPQb5}5UQgYDmy|dJ7V&qS!z2&5gLylvaCO3 z7l9h*&XZfDvHQ`SnnyPGUoBts7*Ri|!aAJZ3nUVuKOtWaRYRXCP?zsr;PkvOjz3<| z`dd41KHhiWE&|vIcX{LC%){7Qyg0ZJ-NVlL7&pm^co=DkNUo5UnTiHL5SmWGn@+jd zMk@__gC?(y&f`|{@J0OZS3=3$pUfDKo|Ff|D+f9Q^(n-2?FrhU_TD1tm0s@vKt6W+&DQGQQO05c?e)83V^@4Uo zcV(>)0i?^9GI>~L$Qb4*dyf2oS*(Xq2y>si(OHVGA4B4hd8Zq$y*E5t)0QXS|ufL3CmT!V}U zt(Gr6$dQGzCyHiyp_aREil%&`Zb(>~_e+;b2DY?@;d|%-sCEQksC0z*Qf&?4qh0Tm zM7T5N?D_K059k3y_Ij){9LxjaD)im(0tVj}Jkv)V$B+&0FOmp!+1?}>e@ zX_oMkruD8oZ(efZ(V`B?WaUZjDu7+Z@A zD$&x^g`zh5(3h3gN&Z9|m^FS0I_(p&X-vFioT1)`ku^c!Gx$61g=Ir@={I5} zxmSwtHMK_C`0<9$o}i+*jB;}V*rcONXwA1??eViPHPMb>p`|{mYVp#d(k3q-{g}IS z6(B&@moRSPbl*SfbaHk06jZZ|G`WLt2c(c(5}qTYLB?Hq%`EapO`$`ZNiZJ~dC0PW zYsodLZ!UF%At!J7gm~Ycmxh<1wfG5OBJ8iiA~A1?DxLOdkh2Ow-bP%KPi_ECKd%E^ zGI+@@QKhD;`4*i_HBY_CS;@I`GOweNjPJq*nxtU)+VN1cm{&WPy|WPA8N6RHzmnaQ zq->SA@CP2{qLyo|$!^hB9V5kgLvC>=FGW@v-d4ELR%Zw2{^b=5{zFC)SaZtn6Sh&6 zXU6^3twYtMM`K~>TcTiqjz=;)xX3veNMzPS3DxBjxJfBI5vsxF?u@#O-8glVT+E3} zHsVV*Lc>cEs$tV`P?=XgXpn-Xek?ko|xO1+Ik8`D*CB*)5X*f~ivv{RW&JKFmBLT{^XmNOGzBa2eX6iKJmiG?->2&O*}$^%@kE!-9MkP5_FTm>4&Ip*s805F zqLhDiw>Z3^SbD46a>P3$w0Tu2pSazvVA2Vt%7EDBy-9WP#oO` zQ^fAG+CPOAdy(mZ{WDS|sUL+a{hlWAzu5%3|A(pa-ymT~OfPhx03zTo<2*|kzA!zl z345#{MQPBC@4P6}I-G8hUZpU?jIgM6Tqtzfx4Gf({p7@_V<%7;gWGQF4U}SBNt*$N zUxfzAt6)c>N~^`n+5?A-l;2UsUY$X@E+rEl3i{s?`=1-gWYE@22zLrO_nq{%6b4bw)8o^^@yztKV$0Ttn6RiCQujI|EtbV`0D2;2JY6$#X4 zWCXn58QFMrQ$-tBs{C=O( zEwq?n5tkryHVDabt>YHVU`QzkGbW!m|)9q1ae=bc35D$QI&r_DHx4qidQ1(_zI_}opDG@kg7CcZ3- z`0wn6O4_e+M$aRXdqEI)&ef#hAMOP_-ckE920B|WCp zy!*qW=U&z_3#~j5Wbs{D3)b6oR^%I)qc!BxkOivl{J;=xWNy-Yd1yFN+_&Ok1@}foHqnuKS~3hYB68 zj;xLEhlbb3u>Z3f-1Bm`d~Wj|4ZGdm@blPiA~Fgn2Iy-5)7Y64+I|OfM~fH-0a>rV z%ZY9}bfRRpa;>df#CWM7>bpP>`~meB z&IcFnUB|rS0yZT0*@@+%)MLEWWH&P$@FuNs`HDK6Zy2LDPjEvWQEs z=3_w)u3^^JF?XZGo7QZ6fTOu7{@E9X{`SYfEzZAJ=u6;a z<41^>^2Iig5`Gd%e1J$V2JP@x!$f|(9+jIA#^(V#@uz6TUO{8pK*s&eaNRH;5dN_$ z7x?1UZleD9p~C#*2g`rmivDR){BI4ZQwz#RWpR<;{7*;fC`oYKFAyMb6R3n}-S2!X zMA8&6NzlGL_)%%h)QN#qs7NDK2TD6tZ43wf*)~+c1cM3-)rPCJwuYvr#zxo5#zwVD zvhBYe?98c>;a7N>hW;zM zi-7i3-si9ULK4ES_JR_^ulm9q!ms{v4eg(M!;ku3 zmOBiZh3X-;!x_*G=|g?PAJFfXCh@#p8penEBD6!`Mpg6)91Gn5)c}Kw=%JG%yaN@G z4TFp7A+=)}pwIC$atq@nw#Oa#uj>rro7j#w1n229Jhqs>+l<3oY0o_{J*3ZNj*Zud zAc=`V0T2R*MbyL43{k)`o(u8koS^Y3EktyFCony9$3@QVLru>#E=#}@XH9Q1s2-Y! z?2c@JKGcWcPBpMU%8SH~GDNFsu8!A$peOJvFc@$MZ~`bfj0{o=6@#onTMuliH!|-@ zPU=Hdk3HDe&zqzmvsrH7Yv>QL9eLots4vMN!(ZV+X7lU7*PIqr6SPI_N|vaf-=5ll zY2{JTP*6U^m-e1y;Jc?spTqq#M#ndX<$?6kkG-PeZaIn@nh+Q&7ub7JqVyv$6iVFh?E#o*G_I_ zK495|3_6F@oZ5%wE0uS#9(7~t&RJv2kmHRPO0UB_8i(06nuj>SZYc7oKNVip@XPLO zE6RMh*HyZLE~&OhBgWiog%8_T^X|UmaK$yQjFn!20w50Wi2|~rc!+=N#|7v+<&V+V z$sek7=n^U)s<$c}vZs76oN9b%&%Z)LOFuGkkKHqh?w*)oSy~ zcGVJfo97oje*}2ZvNR!Us7;$prD_Z%rZU%l&`gud=T7h2(^P2r|53xp+RW6!gZKK3 zCPWDTt=*@mZ>XsO z0&NtfUI|!G03j$S`_ojueU$9{X9%VU1^0|Z#EB-12yk$sCx#_*>ZK%=_g0T0h zkJ_HV1tM*ZaT9BCg-ncBSi`8CtB{=L^r4UK%QC%%bsRQU&!BI+5lz)hh zFhTQ-DbD_z5iNpVuoADb5EpTJv+T%`{h~7W~JLM{$m=JeC^- zna&3tw8=fMGEJPWeAU}HbY@biD3>%p%V{+AA}=~}%E~e*RnwT&5)-r4wBYuHAO$&5 zoR8)|9<_p&t8)#oaY>epTEXmG0*6#wYb|UN{7oJ;SUFTx zP><@Q9u}Co^wy3&_yzOV(8inZw6W0G)H~zAAt~WOvudAWIFd zxur-qcK9jBVhhZl`FS3%qv-rUcBS(Vn0(yv?bM@Yq%f8F-iR0wfwEZ+9W7BNOG)t! zT2gw?nU3c?BJxE{P9WxdwN$oSAfHL$zFIJ@`o&#<!yq*$>K=`xqE2^$?=BYT`ZuYGBMac5H2+j0kb#AkS`Jfzun`fGhNMy~<)( z16jwBV%s)_0yMA_OP<)?cnu*9om3#S0$taPs=qbuXEnukBz7c53QuWu5p!p0zo9P( zd6)Q&Jx@mq%LVEdX!zl{T^H17B4#mTS?94Oe^`SSXJ*x#DScJAZWG%hZCeUH1!a+P{?IaFfnXKyFE5#u)emQx6%G) z@WlT@`!xkGubYVu9i7QyskA(N@DfXTOQ3w%e^Dwv85gL%{BiQrHK54slN>PQL%D~e z{PDPG2si3xU^4(I6ehq3ohK7TkG4=Ve2zf0O>DLR#wxFo;BKPo5YWts{3|Xu8i?eX zXs0LRJO@TC%8X!x5|zm^A@?Uw-~M-8kF|Ch-1)gfo)IT3{hn-Mf@xQCvpZ@(SoIzPI4XavDt*>?KmZS=wOuVai1c)lx6}L z4N`3QYZl`)5SLeym!bKv_yYt3ny-f_1I;yg#t**T%M$Ea&E4BZ3-HJ-Rx@p!ey`0U zo10*&M%t6rnRSDOsEa|i4i5d5p2VCb)D_UY$@AE;u?K+5BRUa}=eYwTz>Cek1ek&Z z%&d&Pfu@9&#X|5Edk=2W27V+u)W|PJ0Ac$9aL8x7wL%Mj7XNI(B?(;uI+c=HK=y?h z;4#zbAhdIp|3@kXwQ=j=3JN=UWjvOd1K$^vi5+za=XR$GRtp){t4V4Wc@rR~8wfK) zeH@jwsOn;0>jdG*kPDEALzO&IB=a`2)mRg|<=}RJw$oY%R$jqmr5zXhgJdj)|;9pP{Z~b4ffGCn)(5BigR=k zd(hMmDS~%}C3khINZD@j6T<;vf45H#ThK-gWDCWG4T}QF12p zu_dO@Lz*BNa{ts(BnB;U!rdTJ7k}?v%LLJ}l+&-KRrMX~`@%%@54n)~c^o@=M1;hOtCha^&CL$$mwo}y- zUuE^h!jn&`gId(i(A|qk90loiqb71!^9tY)Ep2ir8T1rl2DHOm+>$S6)eWz^^i(-{ z!qjFfB5YYsmYA@LgG7E;QTvpSa5l#5$gc3|9(Nf1g8AuVug*>d`}tnx%wZsNBu5<5 zl$j~#{K=E0aLt0iUGXafkQkM!hy*B@M1TGE=2kW z3N=@SD#Yetlx3Hhs5Q1WrmUvCAaa;}g#B=8Zi@&+_aPK(Zi_TT`dEsptDIAz4&tnq zvY;a9+d2;;R|qud+uwA=*ZE|%)pfoqvzP64>+YTx??|6B)B)0zARKVRT$zAbSgL{q z3#7>ctu#?Ts=P~NrV!$T zVMp73S3aPaTj4a~x@cv@R3y4_={8pt|1AHxnCcbgv{Bh$%g)JdAyf(J#FaO{W-%{V zyqLNsB}-keL}NZBvFiLnUEG-Tp<67}e`h@Wdr`_7VMdo+tF`z(NZbJ{Hs}S`bnoMk ziawvQM@whSYG!E$QY+G02f~>*Q|c79tccl?%yULt9!^EvJV8u-4!kXgOa4iFHfn#0V|KsKiW z9LwFdIz!G7G8%Bk~XF9gS;?p^AxES=r4lrgH;+TD8=*BUi zX3vvZ1v}r4rtv_z+ngK;ZYHGJ05CXk>k7Efz_-El9@(`4t^|8plGiK|I^~{cyV{vcqKFSKQdofDdfSa@$8chPedNDlMvNW45FmH_QZ<<_=h0;Z4s z#QsYkVq4%u*$gySBZZMg6Jy>4&SL1TyrzrDmbKLD>EjQ$4}A>p83S=W=x?G-i6=`& zc04$QC=SO3r0(K`UJ4s2bWrQIgpk zJ=J<8mNJpEO-Y8H@)cW9)Ux4R$=TetUHRh{=livvE2i#GcAy366u!lHK>Dn-uz@JMvT+y)R9ZwxFfY z0oN1ZyPyg7wc9If2$2`;RLad349erA} zAELj9UlAmWKJZ4;Qp!n9{X0HByB@f<%T)#N%_b;3mFtqQ3RjT{C4lWmzHdeGGeQ%` z9D2d$(9adzo;TR>`TCQw#1tYImr)_&>r`SVyj(}^G>bzdL+2HT!?wSwO$2d@PX|$I z-wSOj7sjrui}rJf)v<_MV*BSQZ~q@ujrqqNW-9NL38SCC?e?Wtu{AlglVdAtW6`Ca zcIfu=bR53oC`34t1w}p8S2p?&Bbu*dSwzPcSsihBiUi}WYf_nrmkpTVVswHg6DgN} zoN{v(7UM@IoH}YUP0itFnCx3-U^BjQWwZZ=Oibp^GXQ_8`8jTcb_6?B*D&vy@>}x0;6149EOMfw_`VXhgCF?4l%>C{ zIkG)3<#s^yL6A3Fk|1~HJ%xOh;-*->G=r}{eb;&I7b@NWh%1HBo!!95J0j8gtp9KK zIiju%y&dWk)h-@%@o&-A7dk!>*?`1m6iwT$K}7;-SWn5|P~k7uv0+=TED(Lt4w|{R zw1Z(d92p{ruM3gUco2TGvD@S?Las1wLuAkRtxieZh}jl z1~7}r*`wUdAUEW-*MWb&D$3N-bXjsw-STisA1hj1_K)^oA33rYwd=n93!kZ=~?l@<>fVNeIYt{u? zK-;21Gnx|7XGt8eP(&~+3X{$VBoRqS6uOf5Hp(3eQ8)4(1(AIa15~TR2q{sc&{^;V zl2d71l8_oytByoaT%*tuni8+C{s=rk?(xfF0Nk|MDi~azaNIIkfeufwxk`ivlhz@E78LL?YbRjbR%ryVZ(-TRy zU|GOJ2ub#ciAYtHMHavKwvISWt{e5v9B~SRNpXaR$U4FTFp)_lY&PTnYoq~-r#Ll6XYqfQ+=Fv@CNyT8E7gOT})8l%o&oi?G3N%Ty$=+|#UBAY@qq>oTl=Xq9z)WQ)=u56^_K zl!z)N^K6;iVLVqr2h{(Q4^)1UZJ2qA7 zL)b&LWm%J}nHG6c9g&(LSIx>I3*EcIv3ubn@{L@xErxn@m-0<4r=R)p8I;A|am%`f zZJU-synrk7jy$KF5p|8KAlw(rJVN&5;G>lD4XLM}Icm-hzp5$wDxrTSUi8fi!H-8| z9nuz^q45)7Y(WuGywWJ^9ZnpkRn52*7L~Kw&bZLdmyD&JSHoSwErkTd>$+0+^?LX~ zDO*Cj_fJ_@Hi>|@b0Wcry8RE*&N0T5sO{5j+qP}nwr$(CIc?jv{%zZK_q5GvOm|Oj zZ+5fE`(%?hoBdFgs&AD#cj{EmeSX&!%+E1-s}MHiPFsA)6cJgB>=v(ZVI!s0WJH1^ zDk&{9{#QxwI8n}+Lw6_#%z&-E=Jv0VWhVmx^lg*dbj)aR6JX594smQ|Qh)+YdZhS) z0V}i!*L0DAHoY?dR%{$H9XGmN_W?km6qn^v&kTQqrOv!jnO^7x)#tG0R#Uz`dIztK z$3&W*Uu-Mk>HZ-%es9~a_vr@uo8-=?3GFy9;l)iG_p$4!sjZh5K2YP38F z;;(_cw*I-Y9~-0eZ64RxAf5$%vCGI0PwOg8sNE|_+Fq%%{y5I1hYwZ9W4!nygm*YyL!jMdp#DA0+ET0@*VX*QJCC$0ra&jlW6g}P zy^$qy*>a$SB9?buG8AYjf}u*``nikasx$qnyEaXuhaO`|G-GDQ{Fg$b_E?)ZZ+EdX zZN$`sgVm@jZKPK7MCoW6=-KQ)z;sS5f5m%wE~T%+FIT)zScoL(4L9I*?6r-yDfKf> z*0YdPKf0E$*4s}DgoC1RZW&qEU)L|IXYA~fh};kCYT&;~vH<^j%GVIhCVQrysOi`8 zd^Og*;zm%L9PmwOlkL0farJZ(#`nd~h#?uY*d|&}+l{!erk%okL3LR+^sWF7v`ZH7 z*JI+Mxi`H{Y^jkGvJWax&6M7Z`A}d!Dzug6dBkQJ9Um z6sz$*DNGG9I<}JnM+-BCGFOSW{*tQq3uGp-*fLSRUu_Q+Nl`VWRu%49r!pXp(I*aQ zvmj#B1qI9P4483GpC7Cx4-xV`J`%B7zJX5~qP2IIj`nfGr>vzopb;^FW3pjj>p)D;N@y9y+yWc7dje()Y{ef>T) zLe@f*ZxV2daC)!CeZ=HqbqzotQe#c!Bm@l;Ki$=Usdn`bXJgNJinZ2J@DyC>7PtS{!ovoYB-o{2}tKH@@9&uu;S!X4Tztd{|<>O~(rPq!OnGRb7BUN=C zHAcf@PpKC68~sKDWUpn5*29C6Mg-beyf_-h&Q;P%(-RIq+Gi@>Tn$B{N2q zcrtap2Sx@qN3@${5UiXDJiBDKiNn@i3J}Ro8Dj5y;7R%YuA{?QFY=X>J}c%5#{f0j zntq{6!lKvO{i~*NNTUK>TJ0J>qMN=KMeSodYbAkOh=u}CU z$+)hietdL*Fl_uNh|&SmDF%J;`m-=KxKs2xPGVStsad_%IGDFVQA;6b`+ldL7t1yO zY1<=mh@}l4m56rXv={|p0h$|Rc$DH?j>0M_Ne|bCp@W}uX)m`CaA1?sHp5}9Mk6X= zyhy5lJ7uNY;Wa@!E6fL!GUxIK&eQigE_j(Xei==_Y1?M|2;b&ttA;*_imIVj*i8573GiBda+)OzWp%?tVglGcVrQI$N?AFbg5oRC8zc7uD zMpzK(+8^MqMPf1#U<^DWhmE*$odF`MOn5vC1rcp)LXuoKa$GXwZerb}H|V=bMmam^ z?om=|q(AG36P(me^aM#@ zS#Z`H!r|#hq^z5*XE@!V4-~e78aI-*9bXAVf@szqFQMc)+i(R}7JSGn_u{P7bVxCb z+tKV0hBHz?o)ylax=yK>i-Z0?c6xFt^2=uZ>)hxkMd7Ajhka%>I<>txjB>~{%c zDAXv|S6CiKL3gC8YgYkx=_~^8Fr(6xs1W{L$tJeVg4m$a=2dstKvj0H&!v&IBAFD!LVX+ZQ`eal1dj#Y(t( zf~%$;atrN?8svO}j1I{qKoez_7RQGcy-kG0W5Dg!okliL8Z`9t8SJZOUO z86zlmgxjFgOj2ZvKg3!Fp#w^f!v!E(I6`m@5zGgyM}Ay6E~8u>=^oc9XS8pQ;YOSn z?xcrsCG*GCK(pgmuVccgrY$6M6?;`(X(pzmTqJ6=SovdNE>>0x9#lVq1mXu52QYW8 zAd}|R13l=D%p*qpo0^i2=NNU|soJuE&Yqt%lBqIbp3ma|dNhw>YN>2T@4eo}~@!H_6Z>a$hF{1Bi2#!S8L6=v^lv5wIGu zZno{B^^6UClt0l{k25fZwQf_&XtdC{__&7peK@T){be+FNrcllm*W<&&BzIm zyu%&vHV>I`V=Wa~{6tG9*n(;Z>+#zst1eL?p(%QJq_u68IT>#q`IK!%4+Nj5JzX!Q7o=M&K>zgJ zeWmI@M zpfEXmMP(m)KG&}7xKAZm31@CuG0r9L0IAH&H5?K$V7Wg-s*=a&wox&h(H88#G4C9-NNwpTDe%yk-LMp!_1>&vYJlRAaeg8<TIr)!5tQmU5-7o@tqstdD ztJ3?zus&J*p3%j2)~#s$^Xf|+iKhCbJC>&1Fncc_wuQ$Xm#spw2fpDPS5>kA7yiNMUkw}Z1)uR4lrG!36M0ll zgFc2TT3$_0L6zKeNS_DBn1rJ^!uyai0YLDAk79qsJohQLKI-cxNC{xW#TnYiqkzwm z`ZSCSDn^4Mae7bV&p8_+LD*M$%5$o#o4OGlmi^lt z_Ry&J!_c6(eV{Ic0S1$z=cUB|*cS?n$Qzcy{$i^y%_CRz7q&giZbikl#s`2Ze*Hjy zJXhrVCF}i$TUtXJ@Uo^@?XZd9_77Ks^PL*whEU7uJdL%pQEo* z`rnTzfXYw@;+a0)h-pSebQXR*5oSD1!OmopR<+*Hl9S3?KczhaHS5Uq^N39KRqjT7 z7EOw$sUJQUGsJn!9qAu>N&Nndv1%UJ>|X-aAm!0}5oP{t=~)&mPUGIKN&ar+XUha( zHep}S3gV_hiUBkD`szh1ok-h_&chz%|mxLwzl!5%y+$IdcZrJKnkx$^`7ZGmCWdzFM z^_3!RQ3cMlF?mSb>2-2Rs^Z7?7bN4SM9rWi<4(He6VxP+Yi>!XE=ZdQN#;8jQFfzR z(fcBAcT*3PR9pR{?Gw^EX5su3q)P%9rGL1>Xy@NG&T}2x0az>Yr;&L#K5&;{P|HQP z+S~&it31Sdr+ikGt0Z-M*2A+3rQ|HJmP!JeD$w(#ReCqUt8VM{7YMbb=7db|Y|`6X zfgszt29!Xt(H~aT@C>}?#SS#Jo}V`jBEgHYiKX4X?c=)v>k$2>qE(;q+~c!%L3!Rf zD(>(hH;ZnJhQ|-hk|^JiN9MZa>(fi?cPE|gyf(H++eG6)-#|NWwF0l4(pt8HiqZm` z2?n`_`H9M&^bAytT(U%wlz7EmtI5b7c*R+d-hZHd&Oq6kb}~G(XAA%` zo&<*9@U6dctob_@IQB#|AATU_nhR|^GRAufzV9?Q6}0a09s_@tf!7rwa{;nC1w-US zi2vX(zg~?~Br7T32%Emy@6SvMOMtBX!1^aE24Gcz!Y7=y-ebB^A?*lxS$v3x3BLK9 zs5Y{s`UL103FkPX0Sub>~- z3o{oauPhap1et8AMK8|xqxl_64xtWIZtoAwo3A1#wZ2~6zql0|=3_B0K7_xK^)9hI z3FEGQCvuOuzv6Pz&vsgGb)MlL-QGbq+UsGBxes+h#a-bnbOy>YGt8zY4yRtdg=Uq@ zDYBXaI8Iy>s0rmc%^Br3Ayr?7Q$azqABP9!-jU?6PkqXUnai|R1lFREZp#o?OVx$^ zSc$$2Sl%%br%W`>n_B*Y2;G5xg3qsQ$xzGRk zMBF-d0t$j|{Q_pB1FwSYpv#!mSBt+=Ex!eqWIZb^hY`J+53w}gu_U_`|5dlPRGQA& zm(QiYz2+~OnKZL$H*RREl3$$lr92liGz7lM=?Lveq5@~wT(8mnYdqtsbWL05o+=an zB$3OJ8h*1cg({$AE4_O{fEtsoLnbQlC(em_6gBaQfpYbGmZmEUDrogD&5x82{9BI! zc?e}cm2>B+NuIT2fN4lWZ)rTyJTXmPrl?}<4J@;=M`OIxu_5%4Evl#F&?APKU!1(A z%GUme>xO#rs!RbJ<+g0X8HQw#VRQj$Y9O1%uMADBO#e(bDM0>$!oD7TMYvx4Fe)An0mR<}S{KtKHMK6k~ff+4e6wvW}^ zZ;>uQ`Wx}>g&EKXS=Wnyl~re0 zum~a`Pvlee^3-qv{(iddlNNvr<@YO4R`DL!E%RGy{;{C7g4gc5Ghg7+OGjsGIcVif zjZ>kG&ul96a(N*mQO_@DtBzR^vg3f%3cIuJMzuRAK(Oe1`9y=*VeZLI4DIr(IWe*1 zC4k%IdoVgaXTl5iRj9BFF&Sntv*B(k){YDGbkrr70qk+ne8H_bxL@d-I;}G^9WGJm zlBii!JP}$cK*zFxgT@=k5AD7Sf4mNU_X~+4a*oT}JJmDBqC*3=s)}Dh@j#Jr_bm?A z^y@KYzue{a2~YD#Z#-f7)@*mHEG4=%e~}UPZ(@z}7Wd@Tw|}Dr7@-TzH>OeJ${1uz zsCOU+6D4ASi>Q(vnez2I6$guwU1`wJ;n80ovtHHPp7h@JtXY%dtq zbpwb=YGSpTz^poWtI+!eiusax^{@0Apc^%DH09A&P527Wnk2Uh9C1(T4~9PNIsI4s ztk&d8KC3f=!ZQTSG<*gcPp-;b+3nU8c%56L#XI2xVP0KsmSm_MVQ>bJGm$_+kY1o? z%0t!?!XO-N(&g@Jwol8)3X*H!>kItP08Vapjr!iH)EeU`8#En+5VK) z?_X95`D0{s{`)(7`@#E)PkGq^OEfkxIs?7;ptC0Re&&*EZl7*qsM#)A^+1ltTX9Yz z^hvEv%4H3ih=*Ja6HvVKx0IN>n!$nFzoLkfK+eIpHkKU-hJ6+j2u%meXOT%|ev_+*)~PeCMq zPE}g0ss_V#9gwaOEp%&$qYwAcza%3tF4>AxzNt1YSTXRQQuah%${2lkARuj`AEWYr zpCgjZrlXZW_&()97`|}Hu5P~U|!)xJekdyB%4|3k;K0V|W{h5|cya*LN zyLy2woCZC+UMWpv6=s!6t!6c*l zB0Qa{RjtSzhW=GVG!fGr%9j}<1EzBs7Qe%n8JQD$<8~A+OwFrNH5@Yo_N^8MJ)>%3 zlu}LOC-X-TLgTklOJdmQr$P&S7?IA0e!B)On|GNdSnVxk8#fp%vqC3G=tu$GNAr*?-U=T z3+|^ru&(y@APuYu(kcKvC=ikZc#lz zLOWNM3R}!xzkBgI4xYGUlw?o|Gi5sYcu%XbyPn%ZB2J5I2v$54BOSb?*o*{qIH?|B zKX!Txu$tH~)5*k+4kLA+j-Q}7<>qEpWI~G#E8(|;Ystrle$7nUXm{22bo1&hy60il zSs(i4O_4aZ+>_AtN$T8&`#nI=tl8eN{8uB}eWTt=PX0W>`+guGnHXW?MIfp83B+YDQYFi1@Ru1PgME81D za%x%D8+UPqd7-8CQ0ukWJC_1s7Atb)37$ z#@cxbDKfGHCWW7+|8wSsG=&?#(3;uLYJ$VO>=^bbtiVjVVy&}|F@$A+7_JJ(AKgCk zils@4D?%kjZa(ztro!ctoH?A4f2uSQr)4@7hw_*KE@~lrciLuAsxOnLlxgjTnB}An z`;!9ZeCu>BPr}q+vfdh>qrviV%yvby-kYFY-P<0{ldGL1RFM>)9?Fw= zg&{>r#UcYy=E$7LqiA9x&ruM|41|+6n_9FSe`FtD3M0cSX=FSG0^{ZOOwZn4LM*z> zbRgbT$15^f={_5wbI4b1=2q=hVdD)N4CLpO|zF_i#sPd#E=_p@o_%I(Z#~mFFi> zj1qlhbI0Y29PE|Lt-%sIUqD(>x^$>C)MxGT2PIhTxn0+i>o9~R<)ek zNFTC_UTv9JAR61nq<(_P(8D`b;EZRMNK>DFuEgj!;$@Uj(I1Y%TbxliuvdXQYCmdZ4lLMPt zhajOzv6PSoiE5a#QyDpfDUes966uLkNC)?-!xO{Gb|hT9RT0_sU5@K97R<~I@Q%e_8VNWg!-J4Hdc&LEjug#Tw~wj8dh6=P=D!*wF2o7ODP z)nQ_1D;KNU&*js?8e>G|0!G{Ns5!jnQHny_>qf!?jMnb=h*V^~=KyNj}4HK#toAqhb1(R@TkL?}ic6zrE0jxpokE zhU*e|a(v$s*bZ4O=aq{RT+B6t5?F#uT1V}RDKU{hZ{_st`r;(aMe@Dc)T!C47`m+o zC9QbEoC@7qGb?dlM|5{Ponl%c9nz#uOjVvK*jZ>Ai$B9v|L>vVm{-8q6KVctZVDKBLt@>|(T*FqZcK7>iu%K4% z$i2^JmT}gsIOc(4Pq}8nM{KTiMwi4|7Dh1OEuS+ljZe`h%&L zBB5L#+U#F_amZojoD9n%klo{`MF85a>S+~dFl!Egzydf&k z#ksPx!f4}7g@~)-- z@9%M-r?j9jBiji`4jGG!1iOm7>)sEM_fK@#&uLGX31E$9rIXil;cRxg>SEPGb-Jw! zIGI4YJm>l!eD2?3QDRws3CqEBx_jbD2q8-gGsYanh2DeniF6{SwS6p{7|ksOX}$`K z<*#1mb7g-NUK$K4AXWl!#y2@jd<4fl$)0|e-=xwN>0Ou(#CW3#bCrFYK7;C`#BA|w z-R?@LF!%u|<2^S@dj3w_XUFNMdvOi0_NxSHHv{oQ`zQ-;H_Cb?wut)?v?#Hwyvz#g zxvZex02ibbP=Vcwv(ct@MBCVy@Nt2nOR&V#>`A&AZRCmdr$2nVnB(3)eOJJZ;rRZQ z^fXvVkBC(DQZxotA1E^>KEi4C9|m+6EwYNG^G2eh{rp_ckdJh&Qrpo@fETEh8>)r2 zP@~^*kW8$D+Q-|`)%=yn7f(m$$1WHauO6w_kqx3?JD)9>EkD!YYA<_F1IGAHPEt(` zdq_ZKqUR|q57NDiG$rCt8V^*nEU)sqJ%BSI#e94f;K`Vdf6nXDX@N<(sp6AZn*Da+ zM4SPup8P63WAR3Jw(EL-=$(3iWO4WkbpTE`8mm{xSQMGkiWxX$?gh?ysD3?Q=*&p@ z6uNUoFf4e_hWSFQaH07?*pt9{kFZBJq0t!XsyT;l8vP8NH%N$rUxmtEYDB zvfi)s3> zD0Tyq6Qn0}Qh*w-Vg20fGl_Q|{8>GFw9j{Onxp-Iz0xaAp-2Jm(2HQG?f3wqwCP)b zr-1#;84XQmR{6mhj>f87JO?BXfc50e7gJlFsc4Ut@=GfmB=)p~);q)9uIluFSzaKa zW&LoBI<9vF<1;)@XJ&2FpeOV3H~Py^bC|xoj!WjBtq($lo4`!XYyB(>_CiagM}aBy zwYtJaLVBe-30i-4;nt68MPcfN(!x*v+!?2#EH|)NFZrx5j&e)}i+`keegUa7=axl1 z#w+(Fc+ur`1N>pJlPr4DgV0~sshq1vNooVKU0;0p5lQYt8i zK7y756jw4LtV`wc22&AyEL=?!LkdlHzg8Ae&_Y!s@7vwG-Wk3F$A=J{K@Xxi|0@ZA;II3T_79(B{|9yW|0^a^wEsW+QjIHDRCToPJdR0+rSNp680BARFku2x zO-4m4Flq!z0xKp>RF@oG_8H|ljosArF>e@#N1PVNv4*)1KP1!4n34m@{);zYcfSNg z3BNC3sQhkeQBgy;+&pgITkan)071X&S%Al%;Y47zLw9t~DkK^RHMnXod10MFW$<(m z-Qbb~XmCXuuA&2Ka7uK(x&v(R`M*tA+o1PF8p%G=IAoht(zZa=YN^u2MGQgWQ4mTA z6w(}!O2NEjhbJg@$!4-Z!gdUyA-v?9IuL?5WpKcD%T9zZQcG1ugv`>nX{Dl~ zAiFpbjf$bczHE4d4)DWP>%T@A;7L_1Od2B4JZ!LrcX9HE1K{UN{SUd7%1sz&Bb}$ZM{5jS<{d_T4SlVYqRDl(l>5Tm#>yY z!_1R5;;iea($5~Z(wLK>iCe6q&t8m_w@RTDWbM!TEo=v zS8cZ&Eu?#5m7h<=J;PoF?G+r$4`%UYC<2>S<8XaC9U7M|M{R2`pW_j(dEIZDTC0U2!VtdR_;GOMK z!O6gURIq6oUa*>pVtw%V1!kC!VULfj!m^0oV4e7wjqgt*v| z6kuEzuwfjl5nnBH?}cbgDTZ>F(M)*>O`1m4JUKpOVnQ^%u`zHn5MUCB2Hg6w?p%T| z&ctu?jfGg|rL`0AutTP%4fwN=x#Oo#IjBVeyX0dV88*j^GDDBr6uH41Uj}(>^ZQk& zjZ)XkH$@8En6a^ry7g|zecbR4_>jzeS)raIZr=pU@slZrWjoZixscAhA6ctM3Lk&U z*=JkKVVFD;N5!|8RVa*)h6?339s(g_lw4U`gtfTO%#bwZs|0^Z%lb9+RvjMRma;ZO zw>#^#kIk`*HnD!aw{wX??0X2j*I1i@aaZB#ZFsRoa(th=SE>`@{+nHaQ+arQNtj(P84R5THD@KREiYLKfeFWW_oDqM~DC(nJVZ=Q}U+Rv|khfZ^m*^fWm0)PZ zg@Npb?S!rqt@gU(gfGDfecvy}*lkLrLze#V(~E6>7vDjOSaV^MXt$A}w0hDi`n&-E z3WB*b#wz_(eDNy1&CQ1vj!LuE;%`rF_2%HezXZ`T2O?DP{LXYr|LNBkjn_RA*VCVq zsQraGd1hZ*-773`&JGydex?;D-oNM89}@qI|D&>~ zUm`rN5Ufi6SFHZbSyvvoGY9X~&`Ft+XX=0#*=0&oH{ks2VyNp3&3K@k+We{7GqDo8 z{At4%A=z1y(S%(>r|Oip_)OzU^Ui$=M-Wy(({?EjpX-e&~?t%TNj@+z&Q7xVia&$l49Ot~xQhfY<`2;BpDGu)mH^+r5k4Kw< zD>r72ir<3oKXDisPS;ILC2U8qQEA)p-GkmSnAjGfElO3p#n!wDHN>=IwhDAki2t{IRk#dEEQv-6QTn8$|5PW$C#4AIT-F@;(Y5Xa2FccT7XHV?Se zGNM^~`!p|jiIKpd*9t?VhweI>6ehFerPXvQ4+?o4fNAi-XKgJb)5#arB&K6 zot(S^rJ2H1={elwHMDBMpe>p#P7h~m!oVEVb=?0vkr_pR?=A-X$H@MfDGV9;8Py1= z|9@xHrrE3hAczBQAzI8@L~zJ3)Z*w(q*BX3Mp0r+)MVf{IHYj@0?0Dl+;?ZM z9co_!pF{fx8hA{HwJdc6KN3F|wp=}jQB3HV@@8^<=XYK6{pVb7_i{A9KOZQAs8@U* zy5iii4X58EB(%pO;_l2piH;<(1t%BG?Zy^j5ly3rYkp{*;7J3y7!>q!3PrzIhx~|U zw83E{&_Z{KJs4vUpn`*W3iMm*J9b%Vj zu<0@0S=N4dh=S2|NTzl|VNJIh?{4)B(;5VP-jGMYet<#n)pNkLOyS26USsqx1}~EY z8s+ABRa?`jw&rEODD_*~)R*m_{Hrz5tv_R<$-l88_m9Q&@E5dgw@o+K?5e3d|HD(% zkem{zTPX`Ub1mh^xk}XbW$z1Ku*X;v+xOgj-eZit2O_E%9D;>X1ZF-(DFb)e{Iglj z=(2uVKjL4p@x$s^ul#N8MGnOYS@*+*V@(_k25-HUrkkt2CtT9nls=!Ct_1Hp^8K-~ z?zEE+Vbgibg;X}u2@@50_o3Pwyy!1MoyX@X{pxykxtI1)!j-B319{$_B`3Wj0mbee zSx74QNX1g{e|p)e75W2pG@^8+GLMl@u^Mg14?L5E4DY*GR-VI!W}QGx$dZk`E52%meR|I%f2H<- z`!Fn4nz{CuFm}iPt2mbK6ycCz{-r{-z=tkY6k{7Ch-wuVAU@O9NYK%k?jjGzKVXutU$}22b|GQLdkoxeW@g;HA5FV%B7iENrIjO`#!Xqk6bj%r$<$vK z&QiZn(nmKQu{6eCS9U{lo9l+wsA|=vD-W^McK|A$yc+msMSK?7Y}-m}PcCE1neYZ} z8Rep?P22%nV9CJP#Z|5mcxsQQ#49Vnq^g%lrEL)X;6c3VG_7Nbo%}T3JD7wi@eZ{kmfdi{Pt($bY8sGXr~}HqTF8n!d8-6k0RQZ4#zVEHpiw zJT?H5PZSomQ|^Vv8*~N|a+PGw zD$*)uB*-G~jNSox4C+Pn@q^$zGRJLw0Hr<&egg6$IEnzYSxRUBKg3DxZ&RsfKLsK2 zL$4S8?+fBTl8R(1=BDm0uGSvrYCjqi^Z!*HWopw7%R*@Uro7P56xO1+Q#JBdMG8V~ zLHJ=rQ7bB|G*LRc8mO!?`g+}uB`TU<4yXCPr#r3qrBpyEB zwxsmqHq;T}Wm|r3u#y%8VowHn>lE&()7*bH+6aH$iKV6trXp>Y}eZc2= z)iKF3{ z7ZTPNkQ;hkvI~D)3w(E}&XG*Jmp7TCu12%XyQA_TFciAt>k>MoRi?qPt`jW*$XiWe zOil5srP=S0^kteXYiQEyFwKY%rwFO`ezAX zE*=g-1Ol=q0Rj^G@9XIQ+R{}uHMTSU-{PY>Em%FhleF&w-r=1?mz05Dkf737k0DHO zBV?z{(aJ=LD4?amV$#)<;0#RAGY2!jA~ovjcegSc#;P~vnHm+VpQkciSDh+jgt3xnB`durtHV^q-z)Uh`c0p8n1qb?5rOW~Bh7FVs2Uc^=t1 zHxfJ1R=K3gFWBiN3Q2-!6LrH)PAq1>AT zC&F@(98``$@Y5SX&D&;1>w@{|4N!vlsQ^9A4q1ZvNe^hU&5YII z#DJ$BFvGh(1VwmbEif5^r5+jp8?J0jf3T$JRYafDEBDY9d-!qEV;4{fZFx z5*sK15uiPA#ew`?7%|!@2P|CAmm zz*ZuVaGT0lbpvL-Z&zS_;0OLDIiTc0KPpvly~ocxJwngJI8e`%d1zKJf78sX2Gfhk zaMOuX<)I%`bk~U?ymaHvU$w>#s9SdVY2wo7Y5d0J0SB)g($3R3;?Aod;B?ms4P3d9 z@zbxU3Db$ibpJWrbSRA|6|P!icX+Vhf`j(Y(Z&+b>!&3Gfswy4Rza5qagw!3Kukn9oV;V zo|ALR?Tuq0SM*wzgYjXX&EYv7xW4h#4x~HU>a>xX$mQk6IlmW`I#U*xB^Ui4lswhz z27hnIQ=!UaB1L;>;4}FEYD|nx6RqoJtk_WMsyT~&GsiQsDDkX0P1R>3CM;93={jda zw&_JZ%o-gPczA3)+;Z$6s<))LFcM$dMoCT70<`6;G1(!1Q<%a|*(~$jvJ^|`?!@UB zG$@kS-6dc-OYlx#VywkHxmT?KoOZ5T6K3ToHx{ceVBI@%+Ocs}Cv!+Ns4CLqU1dLe z{rG%7#Y9z5z%a~p{BoIz-dQrP%Z^b!~+DK1R*$HoY*-4BI zfW?`L^3bDxzc9Zo8aY>Ir0a7Xh{gaD7#&2p66bF1b$@l(;{sQFebJTtMpX~}!oPj=>; zuk!S^GQ*zY#U8F34%@7K^7OflqG{!M0Hts`y%XE0H#<{5>cPXleN2aj=eq5E ziGbsL4u z3=B+SqTeaJq)KL}KtAuB4g#jJ%n~hc6yLApOpJuaRjIDva^f6OehWH>=Vufb)nXND z3Z&*WN1IxQ(+i5w>iS?!AAK%6iMokw=8z7Cp7nEtwvXc%zexs%EOv8MDm#wnKdsq| z7L#%!2IbhC7##q=_!T1?SA2NVBmS&5VByz(AJwA9A-) zZ`0%?Utz!k=_3Yu)~DoRy_vB6dQeBaudvYZ*JcBe9iyQlC{$mjD?z za}~8i>&>B^%(0Y*tNs^{hH8J-bbpum6OYK^TH}J>LsSFlNOP?v6{ckY^=M{4JKojR z&546`dx3B6Uy6Xf*si~xXJ?{iCo)eWO4X+WP3G=L9Oy8$~P{C82W zMIExKK%J-x&tdx-a{Tj#d=w*K*(}lpD?#8lbc%UKwGR*JTDG6LatnVv6Deyj{8FZh zJNS+2yy`?AjhX^xt{78v48`rfLRXaD%rS$cqN*^+pvmEJ6^Kw6~ zmQsWwMBgwoX_!4%q_*v@MK)a%xx9vpPU)l!+)R%%;|iPcBZj=HRbmfYDt{GJ_*sFf zb#|Sle0JDkYL;{UI=$u~_;e~{o%kK|@1Krmk%B_5QsN>%MxNUO>pxJ}m8;|0qhzTZ zH*2`ZbcMIne0)ac@v|DdOux8H~rrKTrk zvxXvnd*>MYTVM zv@Gx1ikVvE9XHe3jQs_8GgDiP)ogEdrbO0al#iA&lIb`Z%v683(mIWGi>N3)vN|He z#!E`zMzT8maa#33X7g|&j=`=9k3yjv@dHZDp$&vRN&{8s2{sJ6r?^`aIt&cbxDCXy zok}EmCc8uXOe>1@7UG>8y}IDQ#3zDp)F6qEto(eKPe0)TK~H%b3H`UMrDn(+<_~`& z*+`*uh&7a7xO~MIr~c*Sou>#E(RhJW5APN8w`r6$v_q3nM1O#_im)vo#TOUOtNhv2 zdO&q2aVp5tL-5D_o1^B3rP=(}E6U{rMUXf@W&z3P3dz*Pr{s*bJ6J0`W$vfHaH3VN zvT)-L-qO2CnPHt^&b{nXZk<>(lEY7L>8$j6Daxe4Lm2E4DPzEY-bWe8}Vejk} zlO1v2SLllr8>&;yhdJHS+qrji+@^^uLi*k8*WiKnplZNbvW=B5Bpf@OGwY(W$ykfT zeL^pmMP^jMJQWrc%IRKT&|-U|Dk3+uA%Y0R*%OWRx-@7NByT!q?F z1xvmXUsDOmOBI4!iOH#o=BYw>Tin~3@p4FXGk)X-H0(y2uq@9t`f+xykz0m%s1AT{ zSibSf5g5}E9Q3&>0{KgZzNFt8a%%xAApXbg*NxXNkHxPQnSycwpCHZ1+Bjdhu4LH~ z?C~0n?3t|e(X%Zpn6r|xWPzv-?vje-8?|`km(yXVMt{-?6I^vbJ`8v49XVy&5&hg; zs93FHFm57gqF>L_1Ev6TtfE=VS~qHq2pCn6r}nUW$s-q!EK27`3RfCDtz}(1`CTJ< z`x?ob&6Nw8J9ptS8|~U(sEjhzlPR?(DRj>782l|L3n4}EkkOw+9h&ChwIFGYS6B_x z%?4DAR+(KmXCPSG!gbxJWgY`keTZ9qnG-n{OzGN5;)@4(H+p%aVnS$u;v&$g3qZpkPjo-J6lYMw!z#H ze&mm#R#?y4KDR(v+~&QLe35*cKVigX9I0Lwt%5T)X*;s1&sfQOPxbd1!~>FpqK$rz zw5>GL^c^*}P&;RAn#05Pi7ysy*DVK_zJX>jg0|{7Q@b?#&pv!51#tbU@+!MuhA~Ok zBxtb^X*HkuRbQDWug8B(A;yip1zp}PwFR5M@;5;@?1bl?XB-ZzcLULG?EDm#PA}n% z+sI_(GF*@T2WjsZWQ(?R3+}RQ+qSEA*|u%lwr$(4+GT5(xy!a~cD;LVci(f~`%ZL3 z|5#BgRz&@pnPZL|b7Uq|mdGajX=r_$ew@y|C+U-6+m_;T?D%_*`N#De&-@$17Trfv zS}gU2D8Lu+Tl@$gl@$jS*tMO4p|nVJqV-fUP}j~ztEJw^P>I!b~=$b1J?i*=s{11@qU&WQ7 zGY{~jFI`jm%=D=y)i(Re_-V-=G#UHhP8zWWx--K`-)-5rxinsf_P}X9OSc~2Y+6L7 z1=N=+)6kiP*X)!ULND?`NLmObSN9VSjV}gk^qg3T1Ac-OT`%Z13fJ&n=Hy(Rg)9lY zHV%m5N%ZvBz^*u8$?=7p|F_5p>h7cc{^%h=bSfo)lR}>}?8Kxa$1v8)?=LiD_f3nV0%E zLO3aRrm})#$;wR=E0<=55RkfC++0!;6HP%x%9CQvnPW|3BgYb2{obd!X*Hm8SxmK> zNW?$H93JSW_aWmap45%@lC;+OS-vOhx03i{_5M*BedI_s6`7`-CRL^Td3&U7L}44V zi%lz45X=lABkF^w3Xp8ixtBt0Z<$!>=HQGci?GI<9>&=NX^n?-4l>O>)iMV{6y-`> zk_ugHU^(JQT`yY-n!r>6-Wp}fIHKU97*rO;;nBwO%Yh~Ykw0m5ex8aBaENdvv6h&i zSg$i_x16YoM|^R3PPHUnRIO+pF>Co0O)}F-2eWcQ{M^Lo)`6ES^Pm_d5#e#g^K$T?ur$))JA|sXKj8;a zgYb8w2_bQ^^-C5)37MWhVOkF{3hbFJ21`D8h_msxWiU*H!Ga#Q@tJiy5eil7$eq))1k%Q$z{b z(FAC6wi8CgWP)DmaR-P4Jux8kSp!L;vs}X)g5vfu*M%^I_)Gn&8-Hp$aHzF7(8dkn z2PuBV zBdTpvIlkdR@XXOg$X6zwXpR>)FGm@1T%a7d*5FV|Sfjl1++VO}!6Tt3zDt^%(X`{1 zuUZ-tu(@fFjQ_ktDa^BVbj_3`BWzBKyeL}fd3&DYT*{=3)@{IDEi9;=h}PJS$hb}_ zON%jOJSOR(wZ0h(=X6a)Zh2yLpHWEg-U|=(D?-$S?4T7i)lHksai*AX?Pe}K9akbB z3jFDY64H%S9;s7YB=l3T+)lVrTs1gi8Z=PECVr`Gqz=i(`%)u4Dq-*jut+%=n#>!N>pp$R7uPL~qy&W)9kVv8* zS{jL@DXe1k{`9>7@$W-ZEcExFaw1~an7CCAAzMDn?Nccr9vCfxTK`W$^byfxP68*n zwAbX-R?o13S8uZIAlLAU~y3ludH3v)o+E6Pp`%yJq9*Xw}})~uW*HAI3P z1>Yr*;WS>@1t%j8u}e!VWIUZw2f=`Ibf|(Ci}?BQq0qr>jR&% zW9%JO2Qg%?#g8OImf9`?1S&<|pQ*%;9YN7L4dQi0qqhsEy6nRyJgIVRaUlTpLNLMEX^ZRaj(`rHW?7gLT%(qS)+6 ziXk8g{n0*@c#dy8g&i$jiL{btT(*}nU|y2WWC&Ej(cK;!KW?UC6-WMZt}$Io=Qwd< z`a6FB8ivN3>Q}RK`R2u$5dX9Z^JZ}BL{edOF{4X$T}bkKXzBsQq+K=lD&*%GwA}ze zXHQH@a@HKjK*OX!1}dgx8Ii_xK&Qw;fp9gu{g?g5%mrcK`Pi$lEEC9_Op#f!zA7HXnLkX`XGFk5rKtq z=NH0gv`|9^gGH<`>}6~bq>B-;Dm^2@sa1TVGNn`b$gUIW!I;HC)w^`d!U|J`JP6|~ z)9QU*;O`$0my$t#V%*IptM4`RV#KiJD*=ZZ*o!cTBTANXnFU%2Iv!An_^F1``gfEq z+4(jAk$rWJ(r>{6IRl-6Hj&XCCbW}gNVh3MiIgd2X!wz0edoobq1Z@b1!&kKF*1G#{qh1)uH zT@&O0VaJ#n-eV29v!z}G3Ml=#>Uec#Aa45vCe|#zl7u_J+2%UFM41fY#lSox0F(4PI@fJMW0zc5dPr zc}Bw{nqkn_eZijM1Pk_Vfsc9{_$2(rb>wE7*VrII2S@jYJd18nv=c7YHYq+>oul3a zt|Ul`oaT-VCb6~XYyE^RVD)rFpr9zDRXG5~A|n64Z7y_F#BStRbd622ENAgTu# z#5Kr*6f#pytV~~8APxu7Vg-R@V|^oI2Rem+{rQ`VC0glBVO|fON0*Km#$O;0U#>1sfbOT9 zy!7~?F9LO ziJ_g5Vk)tS`b}J;z=b$+Uq`!A38>gw>z`H7O3rGwpt}E7$#!l0h?s70v-cnl; zk-)1^b1{(Q$xM<~$V}c+kI2M%lE!P9fkTrjzPJv93DRM?h;Kb;jnmRV0VkI8_^UB4 z$w#~1*8Zu!%|A)NCUxhdqECIlyY879;v7=MD2M&js&TYpZ_72t5|dBVrb@APj|CP` zKbk>?=kPb%Y?#dUIOuiK#R4fI$>I3 zF7x_Gwq3*$ZX6>jp#r6AJLHJ=YdBljC}`8aiPjcrwpa}Xj3-ono~yTtC6p*>v0k(g z2`2=ljTpzpsFA;yQqBA7&urvr9PI8Mw+4s)GF}E$D9*+=!a`x3$I)QYUb27aKXv)+ zgz&)n;sF9^`xu%%w@e!2YWOXdGf)kG_LxP}I9sFgn8ix610y{=iOEu7U1WnL+?}K= z7(gbR%NR|`5GbyJ6uig)9*yRoHe9*0CcOoUZ{~^$j&@ScKds*&coIJY5i*}{cwaOU zn_sdwa{RG7vSqvxi&-3vQwVK;uaC_jr5D~AS&bDp;N5GQrT!e{245ZN-t`_2>5tmo|#FAf6Hkdm!TiGpDkzWemjEF_05vf%Kzv+xT6w|_$txj)scP63Kl*Q|cd z<$F#p*Sw5o>HOAv{s$f<$ozEMm2ueY`{EIvn|uQa0P zAHaAJtgZtvFzcX)hY@wP;BaU=FhE;u*FZpYn9uqCco=S@y|FM+SnSr@QT~mfQz(WA ztdOm`KP&&$%D7CMr`<~nkPY~VOceCyMcyaK`&=*nGtw^&uK4&mANuK8E@m3i47F}P z^atykoIeaN@C^nYrG0H|#VRm2zFwvu4xkIv@>yXt*oWA*pPwM$E}#d<{ToAA6rSuZ z1YftG4PVYL|AP@G_T7<2^y@vU0Gts9z8t|+zmfN6N|BFeOx%aPwFYk;weHA3A1~Qo zWOZAy4EbGABOh)c13sOUYfIN0d{c$fu~1?!H>9xie=s9dN@*IGBx)D8Yiz^J)l{}- zawMMEaF{|tGa1G2!iwpsvSo@hIVbMpqaz%90>D^~AFLk{kxt-K9|sQQ8_j2=9@#D? zOOQrCqaSa4JP8_0c}rTU&a5|uD$HYV4GQUlPx)&2iwHrE>(#2bN|e};xoPskJO8|N zzJbn_%iqo96~}ZwY*>%63C6ioo2-#H)Y~9-Wg?CW{R$>%F7}{-$(UI+?D%D~QkdV# z6W`<#4UN+<_a?+-I0k}ww*D%#jyXlDAbv<s*40S-aoD-25_%`VzaL*xe28A+4 zTPmh;C?|6=CQy~$nl6>lLX$jUG-;IL)!kJd@3g*}0{>C$*=X`E7RqtHT=`qIU8U1# zojR(rL)y=1dqzw*H<^^9CZC;GuVhVuXtZj3V(wB&;5q?&b1a)J2NN4Zg7WsdeyW=% zD)U#=vmNz{B~KslQ-(U`?dY5h$=kOcc^EI$z{WC$tuZ|!-q4I08UQuXW-WonxVI_^3O&Dwf`a`x(5{WgHE1po)ov@K-maon=2rYkW zB0(YH_qmCCgNp+t6tbG&%H%<|sp62ep~r-qN|`a#0<0n+G&MXY9L}%Zl}s@g&51;j zhVZ_UMW8Jhg$vxb_ZaDe(HvHeg>-4=rQWFmv# zeiyd43`;7Mc2<*DK*c%qDpP-`IB|$f#XBS*t3OJONq2Z^fpt2?q;#|(vDY#HAbRCN zre~{^+t(gkb6tMQJC*dfZ+?Af?zXU)C%#$?Ug+XJZ#CXb9dKJ7DTA}%xm;+eX@rEp zeT#Z(VOr+{EolK%T#C?4qB0>`uY!n!_=u_BlIek%+|2*PE)m?Vb{rYo(KOnIMti{6 zk+K3rCxNk{F&4#oeRs;6b1smuQ-c1R{uOM!L>NE{}$Ulb0IsSYGoF;l6^V(~fSVKSB8%0gG#z8EdJa{ZFlkVD#~@`!(4 z+NJtEwdMhxX)a+r#E$4&Row($jjNWo5sFy|WKDk$jQRrl$I&j|=DZ?l1<^ZYWC-p37{%dLaG(Hs)j+GHkkY)j?D2Wu~v(}{D(b~t42p5{R?Pw@4O)~ zW#17%%jgdsgT3vI_%nyEv&7Mb^);2K_}%HV%AP{ zlK3!`jGRz?_Y_ML!Ove;CF>E`%RW;{*fpt+n5{L8hyK?{#VWLAEu-% zsfuKZ?n9bxgf9|+uUf3M07-xeB2g))1aD;lJT6V6%#|KRA2%^WkY6168Bo*iaG<|5 zpJOwKIaSW%vLyT^)uO$^dzBjL0hv6+y~TC);7ND%@#*z)2K6J*4rT(g)pWbt9}Kjc zUJvs(dL6V8Ox0o`EZM1i>^$HVL{_;dFb^OZhz!Ia$SV=}uC~99zY#EJJIEA7RxEyy zD(wg2uftLjZt3f&WwCGkT)@dan?&xql|$JRlQb3oz=?E|Wh=l;{mdjYxeI zlsr3ni~$TDxK6 zvPH@IgMog{_L_;0kPwb%qyk|_Ys-1H{?Mbx6|RNOqJ1iv_tssl2FQq`C~QK&YzK3W z#6z*gLO}uPSZBLD)lsXAzLcO_lfW^wk!6^akM+tKqN!k@$cEag{l$p^ui@LB38`pu z3J=nPofX|@m34~kf^y;}rA?KQl;wr=*_3xXi2j+Pw`guEm%HfC! zOF7iQUZOIkv;^4@LDk+(9(83LAvA=z`8?Lml(-BgpyVDPQr2WtYAG3&qL&yJ)seMW zomCs8lUYZKM8;{1r0@xC?P)8>n(L%iM5kb_4=6M9QUHygW%!eHAQ_M|YAf7el+eC@VbxE2z=ng~T16MMa+wvAQ>jX%hUSIQp<-qhn{NJH z@-Le^zTQTf?#QXuN9f6$qnWG6P}kW zN_^|qNGhkA@!_H<{wBo0Ac{ANPpFJ9zfa2SSWVTcRE@NK<4-L+$xb9rU;lo8}`10Io| z=%Px4HK;sm1*tQ$y8ZPy*pxfZ#qf@>n<)08W@w`7z@uDcw>d-dyUciT7~N8iVFmyf z)NAhReejMr#yMi`lpnuM1x_Dfc$+y|1VUj%kLJ0|kBYrf?7xQwCj`hpa`AodFdweoIr3FfealL zW7&P+_C8s*wZp%5+L}Z&$xhaM;7a4V1c}`z4P5!f)xOFs&>PzA*$d>z1#mIjd(gj^ zI~alBhTk9^HdvR`>k8VuY9`imkG9JXnkR`_$vzpPd{;-5O4~uBQSTnu zMoz0xmsSCx#|%4PZvi%*Z4r(Diz+m(TY>j`J9VlUNK%+PihB}6C?sk5R`>S6i0n918qe)`Z!=Cx}+hw;e_mz8lS!)?pl>- z)hga!BQxKNRifqFOWyJwo&TdC@wdqQzgr5T6{Ka6`Qg30CN3vp8X0f%!|?o|>)h-F zxGg&2#aJ8ST18;9JUqENfTZD^rmJ@7o<+H#!Wn|Df!^hZPZ1sr2-8O^D=s~1E8EZB zV#h6i(A6LAmB)hMN%H2rsM#0*(tx>UmhH)i>Fnz<3Ph11pxV<31cV}}U{@Jr?6}Xp zrJ)!s9FU3Igp6YFsf7P|7gNcZ0-Gc42+9T+5c2F&+yM(I>iX^}h*~%(_C+@z67yxy zVF0cT9&=LZ)W2pmkJopQgi2nMg6n8NKOn|(Zb~sxw6`oS4$77q-?(k1oAlgN6;f{> z;;(j{JG7vlj1=TOgx05{i;i1MM>2bWq>U*X!RlKDcwo3fR2+JUQ}QTAw>DLP`4u$^ zBlzy>SnEqJ+_!yX5@%k6j{2zxyD`PbI3ewSawUPGVw;#^MbBKd9f3qtciWVtA%_&r zpjzB?L&)P24H_`yc$u9Y`hzKrkV{fNSHv&g+E>uc8$}17-PL!GDr0lg)XlbXrnF8c zSXZoC{2gpCV}NlILL1%vXW`sS&`1zMr+4md4G`xJLiHc|*f%4d*PmYaMU$NBgMG4p z4FCk+2X`6BA3qdPe*B>PpNQ7q0^r{)t6CMp4eJlWr)o+Ql{*lBeV{NbHho_M5nkJO z7s2py9{zZr3L^Fh1eUQiRlKT5LLz#KT}v=vv8$k@WWMw&pmhN-SfW6Fagczl$IKfq zd2q_+PXMO7CIzD^Z0i@^i?74UiA*+IlTEXyayDEK;9fuo$QqSveh@r`Ykd$r`D+r8 zSW36=7hDuC;l4e{?uzeja8cyW8a=Jy0Y)Ffy;4RW(!C=_AA-G9Mjw*BB}N~jy%t8D zxSN6~zVYYCs8p@Aa4PMzU>4|9#wyce{bS?hK|74VVR-#xM}5|QXiJPm1}7#fz2)C^ z>H1KCQ+4CPO!nbexP$054u+VV8{~bgA^M>6(F%vsrtCmm>uLV{As03d4ujGvpy&nA znj7SzXan#A2hiaLSuw-|QwB--xdh74bkHH}11OX=eMFR(y<8ZZrMrdC)B_)smqw?1 z72yJws==Bce7SKutiueL2A+U>71Mq$c|BJ-e#L& z%pht6QL{FP_<4WNrb2a3^?9kY5xO59-E6W%2CH|oIoK~m;kGs>5WclF2ly1vxId!1 zkRT}#@!h*2M62O;*=BUN%(AlkfGFHhbN?Qn=YhOU4f3`02V_d-aCM89k2xuH7JU?=E0yZ}zpd)72SW^w{Ft>to zVGcD%*@!Fn8Ai^chwf28QbLmGq0nF6SC$_d0>*Y0UiXVbL{c(VzAtBVN-{0ObwQ7L z6r}N;rm94sUgCJv&8j1(?4l{``dUuPR%`Y*E{?XWwjX|IF283+!2oA7754YP zLbA0qel$<^u~_wVv}K=5E(BPu<6HA6h5m|0Q3}DLQe~ZBILg4P@M2bWTU{6|n%H+J zu`#X~(cS21u(>O#$l>($rW+{Pq+}XEnIM_aN-&&D;A|}2?1@?#54&hga)rDw&giLK z*;@2Wny8-86;if-A!?-$Q;(9i>G)y$Ma!56Y9x*Tx`yS}7K2>1Krefll zco)o+$RR+w&f{TeOA1pZf1zoPs-^IgsW7cs+1pCe4&x*r$EYNWl4s}*6BYPaigHbuWx4ovD941D`GcnpUuV0D;r|uPXKGQ zq=^8uVH5J(cQcS&m@z<{;^sd~p}%vB))W{TbuzTLA}dspr|WZ_+sHmOFiV5olTu5@ z*Yr@r3-5fDoa;#up+zoU*7dabX^SA36f{)MzU23tM0vy|V)Icdc+BAZxX{->-i9a% z@~L@<>)6^Khf?k!MqA`~){;Jy*Q;dKH9xc4=(r=8oX)o{?1t8I-8S0XvU47Dr0Ryi zlABtD%a`V7Klv=H7pTnc3>&09uSk|Wdl;aBvUyhWF!yx1;znVsp9zZjf`?V18Nus0 zvjw*>hKCKNGp?x0**fznkK&z)4+U5LmRGFz>H9<#XLN8*lvU65zD<9d9RlkPGV}b= z_6xIZpMcg+B`VID5FOw;n96I8IRz%4U1P5tk?@|YDyAxd__$;xoc@N2fwWC;a4Ov1 zf(rR2+>LR;BhY{#Nqfpwim`m|4ib)zdlJ(XZPEH2mLcUockiVu41LaQ(Y++hE|5&h z7|P?&ieLR7{Z0&@BH?uqr(DlTb}8M+Oqt6PiIYlzs1I+Ce~9@?wAv=SfN`zS7OdOUl` z>0(60kS{PZs!1$xypwe$ir1qt@8vAmx$&xTTc1F0QG? zvy-S`_(&y4=~Q;MTEQS+ zLl>pMW;8KPW0W91l=e^9tKT(8tk*ScGsXU6CyS`@Yiv-RJGLfVNk-Ld z3b&Kqk}W5bEn=8UZrGi&VBzrAYzvBx>1fv2It~ANHTUOlOFY32;F>Cis)RbMXen*# zcp3M=`7>-fb3Ivg*LQN_?sF&9d8CMRnL~<<;kT?^i|K zF>&{h7Wk^WCR)Lo_AJU<&2HFBJLVN5rglI%Bhha0%sTy(3J^B&V|JO$NG*|LodFr3 z2Sl3bLLabC^}0eIp{KK?Wq7-hNo|lGpZtG}$>3nsl0flvhS195KEYjc82`V%Q z=o;oq9p_9P=B%Pk&M!w-j3X?W{dQIDFVB<`mE^QSWaQ16%4zwl=KWFV23TVpouI9im9e3dxvh<& zlfHwK@c;Vt-~6;#dCdV!7@o(l+Lgqe25Y4a+(6U?I-V^8g;rThD(Wf*=|x~atzm0% zE)QDgqQXTr6qMoiYbu)M7Gey+=Eq$zIgQQ}BX*XiMqyv#S?iGYQ{C%3AP@!Aen zEjkrJ-417sfJ{y2FAsA_9Xm;YOT0-48a6B$b6XZ6V~&C4$|G;>h`jd1AjFXK9q}7z zt=h-M=aUV~3Nq5K$et8axy#+r>Q~w;u}GBPdY>fLFJJaIykB&biNeaeLLYP>6CTxd zUk$J@$afX9PD;wbt|0dYyiI4&yvj9@N5D-awWJ^pk~w?7DaUJqe&N+%i?e0vYdEOW z*n0Daw`O?t9_(XP<4@rI_L_f+QIcLX0ah>_g8Y6;q52>hfd#|>hfYqWV$+NUI=NZ~ zJExy3cALG!Ht#5Ua9BERuzGE<2yGC-T4{|;q488+TWR(l%EH;*J=^Fyt2L|Z%~pfE zl#z=#!wBBT{k1N~vR?y<9Ij!fP1jVo4tNr=bX)15T))f@S&3`2JQ?H0|Mg?Tr81T$ zm%ou>Bg2nBWk@cv=iI_xI|Rz7>yIAEh4~Ty^o&!NiPbWh(R*JTJ3sP03Tj|;D&c{#Iai_jOcrlxw1f9X5`;fGv^#UL!i;~ zi`7{vXM95>m2Oc4mgnf{S)W{>x%_M6q%sWenaT6949|u_p8zX2@U5v}?3E}F?H>7lTerDIg1(Mg-z$t%PJnL?@ z+_%4tLXm0lEynwnAbP(AGRA+*cSU1+XJZ>f?&I zKVjyuWK?-TG;vutI;{trwg{(7`p`=8>e99N0u~aT*AKigHxqno7|QC7(Jb5Pua~K* z*xapdAUD7Ezz$eeoOMSz7dd;mNy2C?SaG8}H6h;EOgjwL@no4YuuTR$P@SUZ{5mmg z2o%vxMIwm{mB1atw!0KOd%A6lZD&K8KY0w5D{qF3)q)p1N3V4^c!!H_?1--ip1EC{(gz2j$Ovc4Hs=Vu| zCeN*6RR)rM;VnQ#%epcAf88BAakcrU4Ys^NLpiWR7SWaWzj804R~(V096xhmP11u0 z*%Hc><_k~gr|TPj;+lP+tpLg+rN=@@kEX#L$Hu@J1z8&%4`+}8nAFf@gS@`}2-V4x z+o-5+r(nA<={DGDe4v_3CxWPwALLAd;K_8`n8Neqgt%C-U|6(9(C7sFCB*ER=(+8j~ zl29~;Xj*<-?YG_!L3MgNw1MC4X~V?dQ_jmVGk&>})d11W?Mi6KZc5;Y>X7&=f4Rl( zn0<)mFy!A@^lM!_h^L-HpLiE5d-ZN74Wt-}y^KKD)HX98{1l3hLLaV>7@wbV7R+#* z1rK9Uhsh)?gDOn$rBgefkI{ed^|b!vuME$`Dqcg`XaE_U@(D&S={abj8>+^iQeS3} zb}vZaXj`Z@!iQ`zwle2Uw)xm>!UpxX8m3&pYj3j7RYq5Nr5l%feX4*?Cr2f{jJX^{ zqwI&pZqL~-20sb<-F|;}QU?nDGJLp*GzXVLFTyGbz8^0Fu(wa+YOdCwl)R%h7?ix9 zMno5%Em}g>A)U6LB?`UiYf)ldW%jUc(_Na{U)9Wn-rR-ZEUCXw{{;Kj^PB%!h_3g2 zek{GW+(z?Q z-n;e0mZd@GAGryzXyE`6=#5rm$S#KqbK;&lj}j=?9`Rb&4(7tA8ubZGa0JckzbZb7 z&Vm%K<;Tycc*3J&_)_3@hrdmqFis;B zF<|4ASveo;Yp9*A6wy{L_1sM~iK5sqU{=T1nTkzF4oqcU(scnjlw0a5T$m0_bq;+0 z=J!lKi615UKBvxaXlMAxv-(f2{qM-GYm3Ma|3w2*vn`Hd`0&1@L2+BF6$QtuCxv1~ zoX>(VAh`8wL}Cfo)99+~(ehb*0SyW7{f7_v-Z{SpqLRi{LiX0w#MFeX$#R0-5ER7#AZxJd&D46IcBwN{wWd^Ji}Kps2U=NVVQp;)1)!FoCQ<8J1H z85TG4oDCAH<7K)8+L zL9}RxSb`5FN(>%DG1kCtz28|G7>F0Bfg36k$0gGPazW5kIOT(zZf^MZnm&4+HIsI3 z2*BOj5x;Au%rp&(f=7sE$pn3J8stH7pFFiBksL8wT@YxYEulCEg)KfMwiJ>aR78EYafjj-3x77orN0$c*=+CN?p^mj()le3pZ)UWr6^Xr zzzTggKgoH@Z*Y&=S5?cEbu2a9NMx_&sh7PYwWHIy+NK=kCK#|VUdx9T*IIG$0s1RC z%q6eUtqs`XHSQPlDb`23=85Dc09 z#1rS@7UG`StwI@H(ydKOg+7yC1q#A>GoA|-Hi?@JggL@6^P4su?VoDP@LVhM>Ju!zvDW z_ABpdktc?{u_j}AazQ&LAA0&s4Ww1tEVF7pJOMFE% zWr`2(5!DofM8{DXF2ozNp}Q0(_#LcqXqu4$;e@lz&7rM@h;{*O;*E~lqhyn2=sT+c zGr}kt1T@hRx)TbMvFA(kGLIrv7z)o#)X>Ki%<8LkzdkPF$G{<#N6oz95zewP%0oB$ zW)9Rj6++!xx7_%xWAFVKSapj@YjUoljyZ27Mknzvagrmck} z{9TA2tB@z$M;7)Ip!!w@^fb%GI`aTI4wntByV-uV(Jbp@TN9%U@3eJonpARh^#CB*RsQPc`_EU} zaAW)~v6#N)->d^}RR#O6m$=hz^JwbSNm5kf8z+>$xx2=n*3IwbmmSN^p6zLQCV@3) zt)t2V8$GA>rHl8lifJAcnK8LWC$Cv6>Erqo-?hl^FqhgY#< z46L$hDYC!hd@=HLsoqb*cNn!(dXg;ppTQWo%~P~tbX!3-z+~pcujsNs^1eJ;6WG(F zpGFDzuc;$u%Eb}QI;>~9I+Cnl2ohOStrki+;X{>DNEJp)P0ieijx{G3TeFv3*t?!s zhoEuK*JET zDt<(%4N_+h0iUKXLR|71QtS)`S3yUghe)zdv7rz=OMW#kq7G787{^XzGK^LwHf{9SL(w5&(FT)1955{MZ;Q7jnR{z=NSRpYvHfT2J_${(YO~7Ik{JRL)gq z29d9?+HgIJ9GGy6fe=CE7nV7Ph^2GzN(AK1*8QQ~Qf=Jz2?gG)5>94CnDYDb4|~+K zJo6vr!n%ZAh2d>6e`{7fxr^It|Ay?!@1&#uN0K09Yv}y1jQa~CFILc&#ry{DM(V0w zRE;yy^5UkXraDa4l34V46?%ev@A4i0d*h(+jrMca#>m;P{Xk6VMBaO_=fWu06c~a* zaBcbN|rn!(|^D!i|>m+lE?Rkv-UJncgB4!?vunU zMsBj~Qu(*;zyb)??%xUt+N|AyLjF)7Z{&YQ=GuW)Zy3?9<&f>?j0gS%hJK0J3;$kO zm>&oBK0{J{5VLh;lPW2?j+3abK!7$npW)SD@pk1@7SEvt zxzHICcWIdtVo(Yn%H`ii+r_oHngn-Tf^@RXg0e-%Imlr4;( zXRfeaP5P{Ve!2tcK}`~Fs;T{|Gth4a26DmRNaEn$k)t4rrNDBQa!hN!!GyuOORL|> zqm*;a$ToB*-S`=jvliWq=dlLpUfM=hce1|KA^XLC8`wR!@F%OcBXNPb5+k`jEBPSq&;< zBb6#soLz(wTY0DnfaJZe*7&O$}m%zb-trv=evCPXH@uix6I!whwnQ5 z--X^`iH&+nvUgrkP)4gztO&A3on9AucP!`fVLMb~&4^f~%(jAdzjKq82c)^K7(Qr7w@J0;2%FOE9gm*35Rv2ejLgFT`i zIjuOc?E;%OHIijg<5%`A1I2~6>I{6QID+=|9Ti`_tNF-Y3$Sg_55Rqi*1pu9yQ}hq z3Vc7HSGKNKfxZFb+Z0k99s*{tTL0$MhwTm>dIzUhMopVbfKX;cNs7A31t0@oOqZ_{ z#Qg!)Krv=jAv%hcymv~KlEb2xY?Z(rCyEVHL_sN~zbq;;kG?#RQNmm&9AB_8d>i#k zMCZYPE{w<9aoD-K>}A5-cNncN~E!UUC#}H`>owc zWLbGCQkdvHlfF!{>GSq%^8L`#OD!C#&&C&67s9cGRwYY!jy;J?J8fb%AfzJ6Zlvu( zv2keIeQ_F;yP_!c$|b;E7GOO8Ht#Y%jb-FhggBaeJ*iKC2vRAEY)+OKp5P9uA+1eW z(cX)(qnsWb>_p^4Z|H{8mrMD|l!okYPHEBBDqkPXA@_yl-{E1sE^j?2m?i13_t3|F zBvS4f(yzL*NBv)vy#;V2OOgdBsm07JwV0WinVFfHsf8^nF*7r@n3L0P>Ap5Yf=lpT;hMog#OoBRMOVL#?si*<-cbR zD*Y>SkfRnwWn~|fqopP(djh?w?5s3rvySYX?yh&BE6f<03GFY>Xw}C$%TlW+h{cSZNd+sTsyLQg zY^c=_hvT}@P#eGr*KF(2Vs9)Q7^4Z$Y+mKs7vDf=J$XGRN&fYjn0LhXsC>p?(~?3> z7oitzx`M)JiDP%De;mJlY;oK7LL~g0ro!~2*PtWZGoW`B8&()=#KfKlcCgsZu(Yud zd3{e%eZZ>&=cG;z^~xbyQ)+!P0%7zRY8vL=(Hwiyk2ks{_}_|HEM61MP4pPkwL&mpczsu-GEJ zlDiJ9ih5k}gS^z^-dIC#5Az^J#gjeBGK0(T8`_spWd0*XUFv9!BrN5;t;X0=C|W50 zKxIdie92T&M|BNfR(i_(Zz(GabFfyz{y^%%1JUcXBqObBosJASkd|#lE)Ky(N;wBv zc}D;9n#hcFj8J)p_gk<}a`U%M<XDNxK z$iFh^RnC?E(u2+WE-9Q_OQ0m8C_?$9c#UEyiU_R&Q;L)s-JOihm|mRTH1UMb7rKPy z=;HEp?)-!s{b;8Sk%Tmt=KQdc+39|1$G+|B{qmL0jE|Md!eB~ZPGFyFV9?u>?@#(o z^c(57aV|BNjrnVVkOTo_a!df09AhLyrWr>+!&s~#rZJ{D$GF2(Q1C5Tn?w9gfMjg~ zdYwkC1D-mqjL}vfs&F*nw1R<#frg2O5d~8sW-^wV<7^)`o%M|PlDV`sn7FXLS;d`> zO;`nez~tG`-z$^Ayv&w0pB1Lo#-B|-}|%PkW#`gMP)hjYfpk#e>hv~8G{tt_YguSfhCCKvZjAG`p0a{=WoM{N%AL-=VfNh|42pl0I*=PpIp8W|EHF$H&vn4z z9qx-qk68z30Rjc3{qP_nor>3KpzIx`dra)rdIJ0?a zbWD}Upxx_9%(h$y_*DN^W|b#51S4Rx+UQ z?fQAkDx2i=tUF(9lW@(Iw8(j&1-|>K%&C4T&67_S4FfvltTvS=kVbcw4nhcpbHD|a zl!i3JoNT&QS8Jx2YsqJx7E#o1JFmywbSn~;X%A$N?iTq5Fg(QEC*(e5>wf&y`d$t} zEMw8AQ0G3;ic8I2#Wgh58{oLFip&rlEn}@NKsvtGVA@56_2Wf|*P1KAt;uEN7?cJ2 z&$6h`_xA^A&M4Bn3QjO}#jx3VxS7~1!an)<4#;jjt-w1vaR!+O zbkU5UtNFFWw@3%3dniw*D-=5K*abyN~GlJ}L}v&f2L7P85+Dq_SxkaBREYA?x^#qNBHf_@f0NNR4%?u|n82=*mN z+;-$O5*HRi5G zh7Y;AX0D5(t6g{&dtGggC{8Gj5g8kHDlyk)zYAjk3Ne$3Xhn=ZIIOOB|Eow82#bNu!kv{T%uClp;PslukG{~iqqbpeQHl8 z7*VheT|sKP{By8xOu#Q4T~NYxK&?7Xlm1~<`Ku2wPi!s4XND=wzR=cCOB(*Me|__P zL8hE!W0dSOw|V}}OZ!>*A%*sgmgdm*BvWD8bz=j>z4>$eVU(N{hpO=N65C`!fo%|R zve;X%YuLa45$5?QLWl4;sw=q z%}9B3-cXwC#Z7*-Tv>H5AN8*)3Mc(U3*y=E(XbyO>H2$Blm*~gCU2E-h*Vv(@ajpV_8RKRV%itw64wW1hm)il zsm_oC<&@x~Efml{8nmlaO|%m;l7H3l{LsxG+)=>fvbeA2DlpObW15dmNyS-q5Z7(z zIgZY53$XsYGO9Jx9FMj{Njm7FgmztFi8tF-U?=w`!&EYN3?cMF@?_NEP0|_YVlEw= z@nd@ql|L-R?~h90#W;q8kB85W$cAN{KCIHWC*57thJU^J&Ehv-=!n(j%<&NVV)h$- z^JkVzxs}8SPDDdcN7sTgx5j*ynEbcMi!OHwU!WR9LfE>k=}0o-(Ieok36sZ}46Jow zccs^F=hH~K@*?mK&yO-n>%#g<{47?k1zjQ8Ig~<}j}m4_;o#ti{RCVLL3Xfv&~ry6 zSuA3V0GbPfOmF8@vgssGw^R>E3fr__rcwz$L5XD42-LC<`IP6@69oAUXmj~e33#U( z3a&wVib}#Itv_wrP*v8b?{Kk^QYqF;RMOHRR0mZaBn~j{K18G>8qrjTI8~iGE)WwZ zYQ$*qARbu)a~eSXmYAINnOoM7-=N@bI9l4V&YFR&Z`jF!_(||+*Aop?U-#fLfQUKR}VZCOk;t;gE#mM*ArJ$p7?=c=4zAy2N@P99a zBI)>}*-#-k_zH~vM^%jWwg-z#*cbIh=^0`E-0x_UmFP%G7yaJ#%-i0~-)7HpcMNrd&Dc9veF<4gZ1ySRs;g=%4mcXMX9P^h4{as2pumO|FE8W$ zI0-6nDr?)3LA@C5nX&mr`@Y$H(pq%}8ePKYYPo~7&R`R{m11cAW{b7!OW?wg%8RYT z#rJ?z1Ou%f6gw4KAJ$WXT%hGhzYs2)_z20lv`?hoSaqqDC5(xcDV7Mci zn+x5A=0szRAPkr@GojxAoDx&h;)tCAAPr7uJk*0L^KCqp!QuNntZ?w|khRx#lUClI z*7W%SbiY%(J*!q*lX~;7Jco{#G0SOe(<#Mb`jaL9O^3>!`p1^Ku}ZOoh?L2h>rR61 zK~Vwl;At25!`BU%Z>MFMH%UxjWH5uafZ^ciS)r!@jquJSy7fU?K=Ws4?dI$InoCki z_osfzqlVxpW9Ny7T+2{ya}9#%UEE zD31Z=h6B$>{^H7x(fpQU>s>>4b5XaqZ9k6hq+7Gij>JBu?|$KJ?z2}v&-i%ekrE_e z?z`TFWiSQd_PX-4N>-bB2(4gZy=ph9)ms|z^C=@YxY%dFRHyD}P+m;8Wt-e&-kixP z4_8&)_zXRUxHeZM+qowq7@nZ4+k8;oOu5b7YmO)~a%%(utnwx)@gPVTR#;x}Nwn6} zSf1o|OsZk_OP&}nbC}^O&?t8Dx%}h;Os_-287NtqDU($)vB}}cZ8XyyOH5k5vwj@w zFhU%g^BUpHgw6@#3wiL5s3D{=&|(Tt?Dr94NOp#BEFJPotssA|{lK~lB~axh8ciru zNj*tZNwf4il4jIA5HZ~D3J$TaI(zj#QEXE62s5k%rf!0FK`;p;%Re+!L`V`;WPJ`9 zReoHpm&V#RM#CmBhsH_KTWf=D}FZGX(>ZFkQ&Yrf3s2EiQa2ylirf__2UP>EGz$TMIHD1*EZ zb>I(3gTxoh+kxzd0wlol!j`B~9H}A=G6L$URB%l>1|7sm#~cBCaE>yTE#ZOyL%=xp zoP=enL8?hhAPn}!ZU+ED!YXy>Cjhsf1{p-CNWWe{nVFWz=l1w)!$j`4LIr=jO$9d8 zx+QFY2um4B4c)j6RRS%s*HQ_uBK_p zT1q3X^8{|)<;^`7d6rh#F1WE@iLHIqB8}IqOIVK8$hLYJUKGjE zTo&8|vp1r(%Z!FF7VS#1@efJ=tI}@B=oAcDU>|i+VO+XgQ`}(})9wkXRvmNsY?#hf zV#G~K?cAj0`9`HJ7xSnN*?>{rP25d+ocIOE&RLjT^Kr2LY<8W9`lmARhvl7~z&j4r zoci$SokbmF1?NBM+6*N$YA{o>=Glm+j%Mk4KYh9^3=5PPvqb$Bdg-_e(P`7S-0neW z+qsEm?nBtax{$f$Yagn?A@B-BoOnNfi4lB!g26PX+w^NwwHLK@<~~jk;SExM((u$- zt*|3I_kXXyK%gSfNVQfi`)MPkz3|vc0*gUe9Y_}6|F%k~pQ0vJ`m#3QuV>8v$=bwh?A?`Je*9Or zrYsd}=XDWOUYu?d(Me%iN=o24HL_Oj!Ke=dUg;{|>e@8iYP`{^bB2dD!cKSfKvfo5-bKzu+ob4y0A zJC=>PfvLiHZnh{m1{U9#5$+|U_XxwZL)cDTI18U*-ftg3M>x#^CORgc*+|*ItAH@D zJF9mXDIfzj$68}38Gr_;uF1uJ^5T4~N%5uJW`3_rN&`htidDU}p1@4Q-a`!}xsMs%MekbRxI%I)W9?OpE)#OBSO z=g}zXStD?77eb3LzD@Zh*}|Wb```;pfj!PPen~}k@OCyHZq4nUHyeV~8NSuB0THbU zRq|YVm#uo^P$AF6CLzy%;@&=UoM{|0oTp;eJfwXR8;cKL>{O5?ss|HHikghSB--Je z_uzwZ1jmtPVmLL8ICoX30gaNGzYO^hIr={i+HD+6v+4NPAE|RUAAHCY)qlHyk-;sy zU)-;?%e5F^GVPo}MkM~}IiW2<;gaQc(rQq|Zfj_qSE&{Oc`1b`#Sxr;IB`3wD_dDz zoY$Q=bDNIYXi|1>r+e4GekZ6SjiNGY_3FaA7m8P{%*9~K`ZaD&;@)JfGBT*l_tvm^ z%;6hhmwyb#cWm;#oAUWCEC5;tw>rJ&xtT|)ZhzhOOFM>L7$o@fA`L&l`@4_u=#h8| zNg{=Z4-acBdDF7<#BgF(rtA1}sU+nBy7C`QJ7J(G>g$#XVwVe{o&~TAlZnEu2S`!K z3MH2?v5$psGPt{E)P;U|5(Zfew2v~o`~y*`e&39pR2PR~y7#iwG0i_#7(dv9)~wOp z6p~&S*q}5GVW3FT6kC|wgPem0w{!VVtz~BDj;dL#5;b+LCTH-eed%v^R(-}O{O$kf z=gdhi7#aI5u553>nBa(~&MJp^G+$BQ31=>YO(HOIpLzK8TEIG^YoT_UirEQiZ zO!)F;v=9%os*ngP;He~z*Z*Cjat@)^Zx|T}XfXMoQD|9F6+v1_IWc-$!>{rZdV42x zx*vwNHuTPRhSsM4*mJPArSq`0Ip_T{%%-~STWSv$PJJd)%hgHClk%el*-Y+>#tfNE zzNr#;5g}yb_}_#A+S!qxuev->s1gBn`x<5330k1&5n$*VXLRU2``hId4ONa(-;lfU zqp||yf{kOI1Uo!<$5u9cSzjLSR!JmB&CeKNa*ba+8%$_8-8Lb0_f`aAG*lFI80Gs5OPCQ1{fg-Q)1&P$9c%{41g+j zCTZFt67_a{d{hT^!)K!1i_e>*zp;mf#`JHS7L00`txUj*(Co^PfdbUk<%m@BossC zrj!d!DB4MUaV%Evpsm?UdTQNl4=1Y$dNlQpj^INXtg89y`wj`A;}z zW6J4HVyTo<|H@w+)3rVCxhDWs z^uSjTvkuIYpi^d*sqvm-oFb=s;VgK=pjR`Mr`&`3OaBnTWy zzNqyaYK^EYJthuO0pAFPK3rqwa3M5wO=K`^<;Z5BS>zB_YjK?6x{yc*%>4E;3e*li zTkKt2rfyg#0A#IQ6!AxEdR}E3ZIcDcP%zTcmQ!7lD>(gxpsPL+V1(ynS!(FI z1z%*ZnwZz2_xN@;d0d@R!j|i>63&WE#EplU30^Pbf~-%M_xejRNl~ew^QkcS=g4qb zbWxO+;HW^N$Ue4NRP}k}iu`q@E2SYz<*@fpxda<<6Aq9?d6;Yxh?a@UnJU7)V}lprR!8UPATUU?pPcxKTA8xgk<(+%Z;KDU-|gd`%5e$0y|l`ElT(E&6^-FS~bK z)ymMybpzdhvbSW>tum8rGhk}>!*!<1EN=4{oj8`~bJD>soqD}6Tf@>;yZ?lGC0&TD zV*kVm{@a1Eof!+{uY<+<1rJHX+}rRRzcgU$->=cuuypi?=uI%>6c9S%Ob9{>nXP40 zbFgdLzRQ-5_X7*_)>YpOIgW-LNi(b{;yF*TZ09tzVxaZMgO+8zJHwXgAeTVmaQ zlv@rvW6I@Ysq0ly$E>wW{%$#fO?*8LJmk5YX;5L3{o>nvepk?5Lhp8`t01|7$_73Z zH~T#L&EhBTLOljYSd_SA;?VB{-CSZ)2x9Y`M6$yb?nV?Sx7}DW%P?ENx7*E*hWczf zvjR_ph&CsWvpB7&nqmT^$QI?RtC{q{X@8M@Gs%bLBCXEAi6tmmpOF6(iSFfNU1a)# z_b9W>{tc&3`y847bFMMWdpOw4nSV8OQ9nsN5M7>FPf$M_f-!r|Ppmv;uRpXPk<#;t z0G&)}SwxXw9)o@ZBc~@GqrJvRUxuVvCev=9l~w!|j!*BB^xL;|HLB^`NGU%7N@!u+ z^kn+FW4l)J=#Ji&^)j5-qu;(W}W67Z{biG0>a>0yxaorPI#SR9SSC#g= znst`dQ)aeBlqa z({3Hi5UX(nMw2KARQJb$0dTyh6Fph>~LKRCBooYe2s25!lyW6Px<=*FNeOq+)z>CEomy%+pCZOz^^{$K(FA;Lz=B z@A2QKwM=hU--vP>>bz8>t!IreB2eiKC`YL&Q7$TnZkC)>AMzG8^z4HIR{q?#@jw?N zjU-&^0J%OYDEwg~9kjp3H6`Sp1U5aiW_n@J$t9s|ZO+~@VyMb z$cWwC0$Coo!jb|%sLL>E$<)7<<9)a!#U`#=S=V`OycHN{+zz^DiL#RFzsdU!#j56%0gvlnnd;hA@IBgJYm(uT((=eS&>)a*Qp}9UmKRQ?H^=RJ#IN{)@3J)b0oNE zr>BEoZ_5a(3(5&+fzWIB-%t2>G3Y1WzA|Nq8cppZi{~u2HI>&?AyB4480MK)n)6t% z0+)i!Qii`Lf_}JDb#jO*1M!?J^)wb_BS$1s~NX>v3e4U=7(7NX-VCIbDg`{@u`Wp3tGIe4uR7N~*l z{(#-t>ze-}vjd*z<6XGoP3u2-A|q*FA!tbR6j8?{Pl>-^a=P?+gNIF_8T>Wu`4ij_ zeZV^i%UWd+`_9K)+?ZYC*>({EAtVS`hri?ztvS$rKY>*V?D;zFmZ0k;sDNaD=xAo1 zP`LG z?`U;wzfKVn+_27{VKKt3D){g%Tbgp&(H(tfy7E#FB~QueF$oDn-vv-MSp1=|beb#W z@W4U!!jvDN0aOD>G(@Aw<(1L>sSk}HDV6_b2+43qc-Z_CoZ2sXeri)^AZWNud)+CRV%6p2Nj<#e$vAmUX$)NR#ROs{IU`bCezV z_~viZaTrD>y}DmWY7Eie_oUqY2saN*Jdta7b+T1Ws7D4@5o@szZW2;pqk_s{F$D>& zxr9zF{p9_57HVwVRbd@9Ve8eFb$&emylB>jJ69*>ZraZ746&KzEQg@>-^lbcbw<-f z*)HzwpHlnO8PJSvA`x%4&3UqQ>>hwOJE0ac0Yy@M*^_M_9`~n-OYg?p={m zEd#3S+T%3dzJs-weG8?vnbrLF@BYQW#>w3djXnIK<>~H*ttk(4tZcgVfa*hPw~ycJ zP=NB6Uw{M`Ln44j1?1i1!Uu|qn_K3fP{vT#?*KL;k>QJumY4+8ajz(_0KLV{&=m;t z$L0!S3d6TTle6-8!vJR<-#ML&yjIk>fPOaeBu|HR^ynetIN+b!AK!1WcOS0yt$nFO zokB;p+m@_P-^3nhF-DE%;l=~Er2E{cY%Oa-&ofQ9B*s8yd*9qbjFRRbY+rmJWN&^T zzSi3aKHBTkm3X7v=W_|`J!}H*FjgBx{Hc6|u7?m$VGqx0r+laf$4bomOl1hd7h4F%arG8_ZS<8|e zBpqZr&S@a ziR`D>g2!9!BZ1eaq+eYMIMBW;f$tt|CDXrj&bXbL#EcD+$I@6zBRU|9s zx3@5}%LrXhfm06Q0WCZ8)le1!z-IqTK(xaaCyNNf=4yi>rv=Uf1w%dJLqVs~HatoX zY*aEn$UhQ#RDHwD2?047eDqFX>oJ*UEdi(K+qfFfip9Oh&mQQb=k?)Qt!iz!X^M!%_%--l@;;fqu{0E$oDpmBYRvaguqeHN&vWuus6G%6) z5`)~*QrO!{OsfrFQVV?>}i5ywlv^qo)~Fynm-$t{{Zi1<^Jq+)OX6(2=^XVavua?MQXBfgv092 z*fTGE7a0KKzMPVq-nOeA4nEv#QBGLCDPT7`4iR} z*|+@WAh#Ii=~e7`f;2hl<9Ku@^<^t}A;PWCE+Z#e#_p1|^^`ueb1Pbd#`r^~Rq1W% z?e2aBc^4yCqH5hdg{1Vtu>8gSr&R4+#AuamBS}OA&I?l?>b@0sI>OOcqQ9h-k+6Zh zebeqG0-qHA73%!sEC1r zf0JT{PjQL=i=}4%+Wz|dzp-HsPWE5nA{R?jXK5O$Q5k6&x@(zQ+9~M?xk{Od$sH;B zF?w2{@O_M;Q-82ArHF9m+glsB`^c!4zm*RIkuS3me~n7`wXy#9(Vb15+$@bvo&Q0{ zeQ|FNt~NGwZj5vqwl)f1y9$O*Uq^_2b+og0`Y}!~wOl?jNl7s|Iy+uT!LV=}1t~#8 zB}eP@bzP(MzxF}?KI+#^%?0H=~#^Q)kKw)CFSM5{q2+-rm#f6 zuR|NYw*RVg{?}#EyD`$cI~h8BO$hzJU7q?szx-zmjr-nynGf6yTo+u<4V=vl+|3Of zUJShI_uE|lzDn~%rivK&Xy``f&$-OZp9A^33;9?10|5aGM4c4_bs}Qmz=%aT38^Vn zmpO?^={kKQ1PS_yRr+xm%0LVG`evmu`5AG7II?ZHM%jF9(kqz$bjF}UWZ;MfCI-Oq zGO!hYyPM77b8z0T8ThMv;D3d||MT7a>puQ9+y4p)DsRirE1-VZEmtaI6zBD{xq4?-{(gvIbZiDSvHbE2mivm77uK4xEX zA9|NOE??U7$M%6Yp`xPMP?S2?b;+xS$~6)g^G|7h$egZ~)jMTT9g&!+5{amxB>*k#6P zRJ~~h`H5z~;?kkOy@O}BvSEqM&4vK-%fiv58viAEK9XHGVI5+lndmoACtIrvpj}zc z7*|nOfo}Z;6GfGdo2K%j$w&E2OEHVuxPVGA1NMwIaIAd;BN|eIWHQoaWsg=c+Ne#A z!jmuL=%8w+`=5}4f{w} z0M}pe88qypO*WYslFWJGZW_xILnyl$ypW08)lAgO#ZpY%#~}-S1V%BVY6{fph77!lNS=)-Ze$McJJ9y5dcJ+vLWt5w*s9Vq z3{y^SQkM}xE$3J!{D)d7R4KA23Uf;gCyxL;LYOHG`>_eAKw$ zf=d)C4Jl~3@5!$-av@>y0XW2kC$TC;`{kdp=tleJ{Qn-EhVn4Kxc)M$&l@NkNE>JynB5!QTP2v|;NqF`x-z9i zNrj}Xzc#Eg+9Jg|`x8DTx5kB(J#;GolUJ5w&WHT- z-ckf1xm6Uc@45Q$@Y3m_dPp}w5GRNZ$O?t6=9iVMD#N4p3j`kTH&-o z_Q0>X`%5l^|7#w<0vPoFAI5BKW9aN`X-xl>(Bfig{GT0FmXfUWSD}v2s_$%msp>+4 z651O@8>C+0oV2wdg_43wN0D_~lnMWc+38FDSEbGy@CSvX+i7pO>JamU?2P>*aIkdiZMq!BX_m z$X(_A@j{>qy{z|mtTP~e1}~5l8RQ$2WQ0Xk(#}!LTG+29g&e6$29j1SkyW|1b6hfH#ed^V7XlRW=p1ePdFzcltSZjSk zOV*6#nlFEI))w!!Z8l#@X&gxZ|9;>9U@ckdP!722NIvx;YFbgoct}sN=PS|1Kh#5v zaZ$!0M!0ZE>nb#w5?4q(Sh%$+nbI}Q%uOkAcNl;(0yqFbggTPA$)M1XVSgw%$OKd& z4`>KB6u#PCgZ#>6P*qV(U1ly{)Y9T6Q+j`Fe|@~%?r#6wem4Jny~6^X4f>w6x8sx< zN`TQ@LhQj3Fii9$1DX@{+XZx5#DOe;Ui``iRKKhTWP_$gJXhbKy5|F0$A4K=G5WN? zM4y;}z=2@QUmeB<-2!ces7BQwqsPsE8QKN<4(bdA6SYP3_mY%KuB<_bK)XPQK#4#~ zkDNaaXd9RvYKvs9xIv0Qb>*Bm-%`UC4KJcL(pSWje1R9#Vp;g_Kh+oD2)kJn^q{5^P7dObL3pg2pe)Gc*} zy3?g>RgJ0XNjAssS&2y-yKwLnkgP6W-DKL8q-p^~#}|2u!tTv3DTuBSmDbn?85->R zn!SMd@TLTtG)(4s&3PNF?xsJAg2GTg;!HwpGXQ2k z$hhb#JzMdsI(e9N9Ddia=mTJ=ailEn;?CwXVOdSCmv@J+)YA4I9F}X z7nsr#<+@qfi}Y*cwjj;LU(YKFaC9lJeFq0sGf3f~K_D<^*S-}AspfG;vz4tMOXlf@ zht$zUfrr%f%cNzGT=mQa@Z}TauNxZ!MAalIAjwl%;>c`x4UdWgr21J*I@EEP&00H$ zf~Yf-j%w~J_`4%F^k_$Au++#-F`0-HmRyMEt7@fNci~ti&lr!yS1=zBR6X9eMjI00 z|13)O+h#bnZBB*Dsn$-o7ui*fXj@O+0Z&dSsmW=EbTcQJ9G(Rz*69Kc=JfrN?5ML` zxoJ1$7?NQ@ML#^PvZ=I+dk#7)D3k9wha9W|MD=Ml4hu2aq+W0{$`WHopnW;k#dO#= z*O-(ACY5Aph>G(~SKJxrd3K}I%JGP8x$P2IjT~Ha zUR;*VYy#T6;)iWK%T=O|SL>H}!+u)@QmPslP&RNB>|nF>S>oQTNMoO*qf6jV|k-cq-K#DD{i_|LR^KEhg~2 zrncD{%s03l@9IXi@eXUnm^fh|Io--iY{DvJGFsP2S48eZ2@d1^0^6L{<334p5oUZ> zu9m|GoAHLWF4|bjqbI%ss8f|ABT%>Z`GaU(1jLl7o%Lh9TkVZPRql|&7ZOrx-yiLx zdkD8AVBk4+a2$6p+_4EO{U|#yHCX zY3@3Sgi>3&Ln59HoNIg@sqniK&)rT`Qx;2axp7MFoy0SH8q1u=_xKuS! zbtBAIteCrpJOJMkQC!d7|i-DGrc} zE0@!pBb@c^TLVNO@V8-3?7yDyH39Agz~U{ZkH5KYw4W$eNAEU*ylN4K(~2MGFJHsm z__QR>D6-9UP-9+r%7ADuN@!DFwFiuzsLBwDp}N)rwz9`dedsT)_Hr}FhIe$lv7?}y z7Wog-OugT_Dc04RfScA=V4DhT^o?F|GoJ2v)?sYuhpa*7S1^0(A@7GQYBUAsQLCnQ zd;xAh;D?J2F#b5GfG^+9rHe)Mu~cGC7-mkmzUji$iWS#TK?Hu)Ngb-XPJB=AV_i6< zby%>Bm`rV<3W*AiE8?u6Whi&nP%=1i)=)4=o-8)WlmyD&8-3y8azOW?N&5DLZg<#k z6WYu6M1wPkpjpg6q|z<2O8gg)qet!oRDJ`^^3k_K8|_r$bnDc+{UIqZD)-&Flm0=^W4%$*d}#+EOo5 zpEJi4ElLSDQoxuqbKgMr*k9`r#S~Qxv|YhI^sWFvo^N6MY5QZzxM^9sjNS{me9#JEJk^VO z;6#H@P1=Ds`@yI&dDvo&`V$jjky!7!Ie&*n9^_ zYKeO^2z%vlvA9t~gP?)2pn@^URm&GOzSLjs&I5b=Mi__pvjY+2RF&wQMi53~q>8-M z(1o~R%5d*2i%SkqFYG-`wun7)ezW!B1t35|gDQj0gEE70M~psaHqaPbNw0bKT(NVgHe;c28Kt&1aOkq$-WNl8#@bgoK2RCkU&5WQ zIRTJUNRZD>&fl6}Oa#rH;+uwH z=f$mkiSEDQGgIJpIc{)h>x&||^FUS4mRM!WA{!esK$RUn93}|9 zr6BHPK9MZsK3|ACZB*s?5W*E%b&b-_HeiTO4&Q@0Ni)63$c{blCy<884je|p70a`J z1NuRK$%WoD9KNUetse&c`~bUITP2IkVLi4c1D7}|JfYEK(6O1ZW#zm#%5FFx^!*&* zV>|9S|KM0_iE~@ZNzZxF;;R+H*y6M1B>(&Qb3VkwvIU;cEd6vh@Tg05Wv?puN7Hd) zkpZ#qp@AYUe=H6}pzh9mj!j^mj}>0(z`FW3lfi9*O>LmqVMi!FVeg=NG@a!ue&%;@ zrFmw*o-2Ef`QK2xoEs1hVD5UsEHXVzQ$xh|R}SPONVU7df{(@_&U#Z}x9*sH0p+lI z?wlci#^6Sa#P#s##MB$o1=* z-+KXxhA6U$)PsO(_(7|-t^-nuRxrq}QnKZ{=92l~3sOmFiPhP=u={8ChF>K-q*_Fk zi&>lj9mAfGFbkuGq~D&j$eAyDDxWD!DxYh$h3gOVLK%7EQm}_LuWE7NHW1W_PFP93 zD}akT42~6_ocY69cxPEMq^Wu=%p*xi@lSxxA_+!8HASNtv15}!*{T_GzeVPbIH@pe zS-!I)AP1SsvmD;H*0p8n+NhvhHig{d5wZ%d=ejW^PU0jJvpOJBy)!nlMM+USDJ@cC*R)ev(Ss*^WTInG89+e3wRvAYX)z=OgIi4mFJ&%5=NrBcFEn_=3*B~on9hTof%RgKbjMckBpw1DG8QOOM z1LS&R()2q!7#69;?BolN_Vj`0UA2~5r^gIK zdbT0zqdkT`OJsP1>*9=G@rwC zhB)r6fGqOM)8Y$0M2W8rhYjq*6B7nA!Ez3_2;r z4WqBiO&hZap~ZBYqGKpgQ75kRb(~Do?vy8T%8L?XN9!syDeG8hsXWlvb-kyI_^Yn^ z0wJ@Dv5JGF%XsL-o5ux3IPu`f#cKqImUJM5DKX8OIs*~wf8f4e-3jJh(gxx%2Q@Ps@xBX-^ggay3 zQX+K!AI9D?DAG2`0tFg(cXxMpcXxMpZQP-7Y24i%n#SGT8+T~j-MM@-vv+sCy?bLK z>aD21^~RI=WS-1(PIe>gS>=}k;ONrFB1I?!Jo(X>d;s`y?)EEUk5H64+- z0Ab=MOz?AGuH?IXH6}j=Zb>Q-rveKDVN8^VWc76l+xKh8E1NA88as)uK&xo3B}@Ei z)f<08wHCMVdd^r)7XE(HhL#H!eVdggEHs}mh=Ji>sj5*sDisI`Xw{<`YkKf0WhYaiLO3W`T2^m+cvV*W(v+9JOg ztY7wF%W{<_kX7M-?XviWyAq3b9VQ;?0PJq^zXt$gb(?6>v z-$Xl=RYAnzN6^v0GR#5#l|$=U^>SbP`X)>eIf%fW0=9G4v;Ylk9At7*c)u$7Ew_?) zpm)V=dr1H>_n*P@bBD+8mmfHOpU>AY#C7mw&@!ks$}RFc;GvnQ_DU@xMxlLr&{)tm zARS1A3_Y-B)+nvGOl}7pZA)(dE31!Scq*|3N^O`XRz_!$G$v~j)(9~=e{uEr^>2#c8H~ki& zOHwY@p1w@_GxXXVN&Qn>KLKhY1ujaXLq3tGVw1Ig+_+jl*>osLx;$SsO?xX*wOE^o zv46ow56=n*L2xE*C1-wDte*i%?a#Mpg$ivsbI^g{Sgl*xpCvqe7q(9zh-sf5IVUc5 z7YBNG89C!*Yd>{C%9Ye-d6o(JV!iY_2Zv+7GFzA}db(+*{xEb-gfR(K9;1PxLw{X#FPb2cpfm9@YZ?p!};N2o7mL`;REtjVrue%1W-cpR)+| z93kGZfiEQGD}4RAI)RVcu}qjmfm8z9%X$|r6hb!1kM$RCS3K455V6e!pD*(Hf{wWP zp=7GBG{Yz|P4iO^Jmwe@$$Xm=IT_f2e?CJcu;=wDbzlu3=79va6FzGP^th$Bp>)9o z+hZ1*#ahC#nwhZ0GKFtY(ZPSD)^Vbb_J%SwxB+;Bo_miqjFK(#KN%ZqMLvidr$yS4 zh6oJBw#-G^u~vsM1vaFx6EI~3p%Vmmpo@O!i9A5vzU5|Ryg;#Ni$=51QH!UuQ<0~k zqfn%ihpWgI5*uk#lMgwfi2`d-E9>sy{HHwQ+K2djfNUpnfEIe=XJ-GR~g z7hbK;7v(1Ii{SQOngRa<0{^#|5c4oG`v=YKpTQBMw&jAN_BF_wYglt7VrvuvWy(u7 zO=RCim?1BChq8p8U6g*muG^qL-X+gm*&uw{4W8yd4fefYiEb>M*p8kUiS|$0b7!}r zVw-njzTI${=6YPe_4U4--1>a`z?72Rw!tIAL*d?>by6B8!@I? zt9jH{erm_uD5JJii<80EP$u2H8gne#^L$r*c6gCJT%@BY!D<|g&6GT?UaTpc#J z4Hkd4pSN-6t@Sw+em0-4oUhUm8qt2eN#y|f)Ula#*;Ow0Swq+uxz|yFjsVfJplMA( z5ufs!YPI39gZi@`KTD$4{6{<$4cz?QEeu&H%XQL@Yl&x)jY2aeuHSH+G(oT3jt~958puVx5jCWWt5ywj($Mj zalff5=BEL*%8&03LTwx88x7rB@U)q)mi5CX$_d`Ll%c$8vw(4-xHtP-&hbM*h^GSB z5xf#MLU&gD+5wXUjAV|SCwvPx(x-3Y6T9%SnGse=r4XB(f;3M; zT{<1fsiw9ZwS|x&9*`;E7e;ZB4%vs=jCNgYrTuq8M!8E-2gFXv>gNsyM51{Mz35Zy zaq*PjV^zB)fCYL6;wX11_-DHfnM>@yOPwoi4Jga%RiXJ{!u*T?8)GoOtv`!+XE~IL zWjUzD^o&eu4NlZ)c>)?%xA8~zHa+rFI)cBLo0R-umq*XF6*8dZr+RnF^^R^ZPyStT zR_+zh&-#gI{O(wq>!8%ekgLplRcvgKSPuyDDFJM9agrVr8LiCfE=(@H$ zBZsH```dC6(udPU=V8ukw#)SM)Y-kk=j*TlQ2=U0p(Lf&=TsKYOgUWlaEy7Yw=S9YNzsDc{m}7SX?9}e*A7Y zDnhxXsCHx(G+bEmQOd3mRcwW2Lc1I%>7cLjUF9;VTV~~M6m`>f04jvq_oS3vBRC5t z+CdZLthp=HAy!VzAI8G{ydeNEs~fefg)3ZhHr_ZVID=s(xUHT-Z2g`x0KqO2oWM{X zY9h8DxJv(Y@dZZO+*OnA2Q&ri8~89(V=AKLcUWZY1iXHXXf6^x#;SBzgI>oCl8|bf zMv4;p@T_Jbz6-7rw*HgOs;2DpJK=goY7FS(*5Kp$!9GldVc21`sem81wui?gUDHy1 zv8G$%S(`U^jgHIYNw~O4KkO1s_}s7ehn7ig_1?9FC7em5;g%ccgVoE=>eVsDhV0ur z&oe;JKLx&@UZB=mOc4>(7H(~y+b4Qg;V);$)_iAUI$gdUQWbh~GMgiLN8u~)oegAN zn@s20DZwhQ1T3(**H!8xhDf^C7;2Y1A`-3ZWrDt*br4cYyh3>4#v zr$_3ZO!k+MiH{Fb?Z}Q`avC+4D~wmfd)u`W!bbhlIZ>tTl5XCOyRY{ei2c2{^02ma zn{%SR!UA*bSE-8{s}vkpyUJzW@-ruQ9u1+(PkF@lS(?WJl^kw3N&Q!4^Jc60#BBS% z2w$F4Zx{3d3x7PfeQI_VCS&oMC|?pi7VA=YyCmDq^G6UR^!VN?c5y=8O-LD&17{yH zy#{jzOI1fY2d}uz$mGqBtg68>CDaa__FwVMDaX6|(`dFD&LkE(Ihuz1f;AHfni%K` z$uS_gwumrQ>E@NkXc=-a{WLtt8tF}V5o2RmJI}u@GOq5Fc3zfFohr|aU=sz5N|Jv@ zkv&Y0F21KVa2KYj>(gc#QXtJc^YxF7%A~=fvFkO{;{94MB2{t6yG=P?yosIZ$Z@k# zRr9*$sO8^F5n5`n#xg=H<@Cn@JEYJ>T#OzjgVgr3#-?KuXmPI1cHc#~J(XXptZ6)? zx71u(p+mk&EivW9Eug@CM;CIPUeplFI-BX#>Ypc*g8fk5cl&s@rhfK&D;mE6m2TRX zE*}`AO}738>HH(DxPrv_A$kzs6UiO4RF%=*Ala2|jj2=|^Zlpq+sVLFA9RtK_e-N* z)6L3sq&_P>^oH4##=ELRZRVizFN$;;uk)-;7WT5tnyGb07_|b{7L_cb?lztEj8Fx2GS?qDfSiVxSTC8>~(qJTL|_L zn7-9-mM1o7Uh(HamVrg&+GL4m4010Fz00d;pQJioA>gcAl5N_jQu4}D5Uf~(z4z2d zU!XsaUrSv-rXFYKw0aLQ@&`e9XEB(%85R|Lr)C!*EZbt~ER4t4&f1;u8hTa1 za>qk<^EnXp`X{o*iz$2=qs&5IOjgK1n&F_#K05KoTgjIB3*8cDAPcpwVO3dc7m+t= zqv(jTl#*sBenu}-((J|5nxuAYI-mI*K8O}!H_K}2Lgh?{q}t2h)DNA8*DG1GCPV5E zHmMT3qOGaC)*9QK;MK^}n78aw^AE~dZ`Y4S`0p@k&_oil5eZK!QUTOgBiUC0B1wWA z=b{W7<6k_YtRg*58SbfBd(1`%mPQPWGB}KKJeQ;anuS1(a+L03dfj|hYF8kRBf`x> zktdvuFa)aLxFbgX5{N4(vui58@XwikTm=NM^0)%mB-WGCYF0s>BP8oT5OO?trKoVT zz}We(R!MEgp!ai9P1uLoP#<(WVqn~I?4NaQcbs|!E_b|qLJV_>cgWd~Tz=`#lhFfN zTVl=+tdAJ(M85NvRp5m2oBdnY;JJ`{A{_t=kCJVZ4}?95Gm;>MD_Y(MoIlXIeNiJn{h$5E zGAWrps_i4UCn|F6%N{JM8%1P0_56GIPQAHDOSxN0c{IGZ`?_-Py)z7-7a#u4j};3_ zmh1c4C-M7&!T!G+%>RbG{sqS;{zHcpV3CPPK^Hos7#r$rt4CC~&90FbfLgAMC{)~> zIXSRleg124kNUjOsrTEJVt74W2BErI2%V<||7T9(kbuAMCor4`+$-=I=oMwaFz^}p zm8c*IFQ)o532<#+zltY0iCv+Rkd}~%Gi9QmT#W2qc!d0(U%4NK*HgZm6RU!(IwneX zXG|;#i+E}AEXL6bNRxx5E79cf~vOjVmEr%t))dWuF#HyU`4{SH1$fa2*I~8o^#$d+MSE60n&YsO+ zMi+Zt?ow|hSUwWWrjhO>6tpWwlb5Oq@Mug%KT^1;8|B>kgjvbgD7qEN$Esf1+WCLy zoOc1vUfCEOk-0RODjc=&bYIaA*6IG+ zpoX{40NeWuS_u1k{_^Mh+fJy-7aiKd!NKB7u)xC2=(`caKfnKCN&oj=DA{N|bRQ!k z&dLCAoQXPqk73ED zG}8FZ;A|O_g$*wt|BjbfW*p@#eodU_zsy4ZQrP{^|IAnMd9Hoxvc``5nbQq&zbl?g#rW{HbgB1ecH(ugQvQC{AOOg%#^7usnku%C zvJfUEtTFF8I#gM%5aDu5T%k{7-4Zh;dJIZ3hNR#bmI}iK`*D4<0m%!T`P-7ofqtg4K^)C`&H;cEHZp1S_s&0~-Nd zp=p1m;E_hHg?>27nWDv+>`bl6Np~C+TW}InSU7f-Gz1QQ_S)lwB^HAbJ9p~yhUtor z59Tr`K3h=l)2Q7&{A(QEG=||A)s{Uc$&(m!sz&_ESDuCa1FRH3(V*&SzgRU|_bQ?w zl0{Crd<18Fb#AvvIfCg#E!enpePT=saxHHCfrJ4PnaHWnwaUY&<0)kMH{?q4@%0&TxTjnwcUteM>8OeV#Up?>3l!Szrv}c61$TbdJQO z25Ha2)a00lII|{QW5pRHL?1eA%Cw2*a%LfZ+xKs4YaMpENzO{t;(KXU8yw#KSBn>P znLJ8sU)B(YK{ox)+(@)^auJ(NLQRKP47{+K>S?DvBLVcJ3PG9&<=gd8Dcf*?1~-2D z5CcX=W4ETt^7li&6TiHCo?N#DH>|CC0EmplU8dA(+gCE>^c?i35y1j7)Lm}ZLtW|0 z%D^oLwtFWjXHmtk!neBEFwrmgVCe!0iJl!=w<)A8=Pv@Fz|VIdXYcm9BVZb--ovCn z9(r7O$F#sHCCFt*e56g``>V)U3_*IY5}kp=?n6L(y}D$et7r|B_WI z+WAv>MOA`F_jKpn(86k0pV5zZe?2h#mN&OYxhoY`mZmg0U|Z4O#{4;RJM0Lu2Ipy? zHdfBrl8&!}_{0+@6WY4GTK=B?iucDB+08Y_ZgqHLFykAqUMNk+2L@p(s`}$FLy=tA zqFm%}HzU)Q?%$|-2SnQj9e|F)NV#^r_cPsR*`Zwj&K9cIXmO>?u0KBgu`U)*M|j`k zO9Ijwp}a18)W($u&)9h(cJmYpM>Bu=qYNYVtwbB01#_D8qvD#3bP^#CLm+-L!&7fY zc1Ba>FxfcIubQZLggO{4UJB8VGFM4qVI1;H3iGN8N&EIYFOMs0lZu4ui_gBy3Mr4-D@K}trfEBB+mX4X51>?T8T||XLCDcluxC&A1@){28T=bW zArw1p8KOOb89YS0VEqpYQej1KFH5?zUVV{1m5UcO3X!?X4+z|BA)h}IZDhpK>QWjj2pYR{_in*y zNm-MO{Zr}?`o^AfODgfiI&wxD|}d?h)xG4N5RDw$U423t5jv{_M2sZG~P`M z_DfvsNfnrlJumTgrE|t@w7Dm23wRkXo^$RxP4h&%u7)gZd=&wX#Y(o3zV?}Cr@&-6sgF>5F|hW^VG0c)ZrkQS^`v=Fem zps@w!#({EAP(=VY+;8i{g_zStpgzsRuUx(HHl;5!r;?SoRpV6K4Ng1l{SX!7p*#Z) z{2wn*S60a$$X{Yrf&qi-yA2dBeXt=sx}S~P7=%vA#E%B7rK7B&=S;Yl!of>Ha3^Y! zO51Yaq69EbS1>`==CAQ_K*42z=xa>oglTN%)_JPcFNenFNbc1DAw?l7`)@M(*nH2| zE4PIdVR3~L(>ZUq<>U22SOfz4cZUu*zu^5tKwo)(MY;`@Yv-$Kv5J#Dg7KBnG9{aW zBGa*Ou?bi&?|6^oRz` z!v3hi2e~E;@p|@o#r|n*W9YtdczO~z$KS1jhbVtD?c^lnW!~Tu`=mEMM)_pBnJ=| z*d{|T0&R<({mM8&$M+mdb6!}4?TBg_LX$>7l|~d&TjtOk_=dX!CLOLr{!J!sTU)fP zuHL5dZ8gTZtRCzD_i4@V8g=&+q9*+_0I1l$2*MHF!cKG3nsb;v5gQ_{1u(Z^vmEDg z>&is6J*9fv;-i!Sn9**4a#CEah6PtnGq2=8wu5oNA%h9K5 zi(92vL&*-dPX#tv2d=e}J$!IA)-r=wSsArTnBqO`jeLrqUG?cHpi2J9fz!;3x`xfz z){3d{jWeq;H5E)e3#-=t4~&i^VKL~E=RJ!{0e35u&I;9!50el};aY|9;Bqwmcg>_9 z$_;+Dl=j=;0@zO>WY$`q!IMNntrWrENkSh$Q}H-81L?T3}K!w?6&D@#4^l~ zNSDFPx6`CdV4J-9;sN!o_JYF5XewuWZE*~iN{kh@8`AkHz4}Ncl3ntlx;h{*pP(Xv0ciZy{XTk?bXfx$LpXHoqW4X$NjtXr5Evu-zPGgK&+Lq?mJN9gG18y zx9#qKZxDV+_hOeJ?4)zSjMlNOyLdGutulab4s@<0e zC}PfO^21AzAebmA-(DU%0BHtyc)WSOhz2ErW(sM-_emqF2iM_) z2*8FpMF5P#>4001LaoBZjL}@{(Vhs+(}N|^kqSy5nj%OC?T)^9iM{% z!~`QupSY&MSvWvZsuE}5yKHor%mNddn~ur$PJ&!gKSt4LqL{mVp|pq^eAEIxcN=|= z?N(<053D?V{SUP8)RGFt!V;#eP&bELkU^k2jFAtpUgnH_ejg5m*=gmkzkz2%dfII-9zzM0mPR%3W>-!KMq3sBdhScOA z0V7rrI}I|ND?yIJ=GB4G*Zakq>rus>eiXA_uzPQ3m!9>K)X!i+AGO;U3YxceU@~@K zB>KIOy!X&eUJ+M8GWJqi29S14dO1CiwZBH)kWKoeBvfkGRFT_Nk@=FH85hM4PF0UK zevN$fA{*NsYq(8UFmDc1M0a>aU%FbkLXt8)RGO}jJbz#7Bo)t5`3on;&MT<8%=SbY}y51f|5i z@-O;Sy@vbPE-3aTV;>-Lrq!b8y3If$8ng8^!4>5)#b zV&kx=&*_zlOF&JVH74$}@AZAJo@imyVr^WP2DGZT>uloyhN~ZDfq(3}`1wr5;R$>Q zd}4{X>6EFKK5+HVbxR?{JyTg+eV+{1_Vf<+3(KFK6;9{%Td(IB21R3$fK<1;B6k6rtzI3K z$ZNqKpRtEyxq*>oTg+hOsna?~e|p+ksd5ar)&X{yKLNyOJ!(oX#|q_dT_#oe){IeJ zU9$HiDJ@!ErywT|RVTbCQ-}D}_!P{QMU92&t|fuOn^E5njD?O~2oDCBW@-CYM*-zd z?CaDWBe2sV?l|J+GU4K~pE2zrz#Yx}op-p3VLYfbMiH2K0psmb7C(&18XzkNQ6KeL z{r?6YnKyiLMSP`Gp|AavzevUZ>2dgrm-esq-sG?J`b94F8(aKEBjyM)1}Y?WBzPov zutsha_=8qU)A)z!b#QB?TZ*gQoZA~cRs>=UVETh{uhl(fhi=Gj)Mcvmu_M>}<@B*R z7l^&Cyif6m$`6hDlDxd_(4bUk{o?#>_%JDWcdqq4#$q9HbrSom{t)nA2#;>Eg?T36 zF5EfW_3&TjHO{y;!{6}8c$4xb2$F0rsnHK()0W)0k%wY*&*Sl!=1u&@t2hww zc&Mc%F{pg`}`c`j@7dNUJ$>c#O5rF4z|;QRzE^CALP`# z(=^PTy&L+C23oIMtpl@h*L}^j*>1gv-STb}r$g0~&U*AgcPoaStVo)P#p(AXb#rq3 zIy^tO==T$EH03Qi4Vz>z0%E*`4<7$04s($4cQh$^1#+cdb(T zEK4*8VS$q!-_YB56>;f0HMTylnv^%KB;!pon$}aM3+yEyGtgW`)>hnF8)%6oM-Vx*e@B6<{hVpOY2>0l&+T9vTmm7? zh$}~$$1OF{>QdE3vFhl>ErU(KNBSdB9d@U&&K>p^N(!X_rLt=ucqb$5pmg>e&-t5q zYz~Y0P_gA>hRion@zQ38O?{BBnu+MK4gmTNY-Z*8g4!JSX;hOpqB7hzla4q4L_s89 z6i_7TBmN9r{Nu=Iz?#&1rW&wb7|5Z_2dlGWqr?=qvK)%nPU%O1kZ!t*YC?gDBuq>N zst1`s3n~XGLPZ3dYjg*Cyw?p(US3bwOtSDm`^yJOW}ym<`d98dbPiOT;9&<7tE{xO z3C-)@#KYh3K}|@$Kyk4zGTvWE;(vIu|CQ#{bX3;V5kE}FM^XmKl4d~Q@ihz?d+m z=TCS{&+1S4y`E3qEOq<8L2bjVCpzl&!9j^ZagePiDE_D;+R=e(HbHcZjk;wDVZ;-` zBye^DL}}4ajhViOM|slor%08KAvy_(gSs#S7)eBSi2+z(P^hT7Lln?vAKJaCx>b(X za2Pg{G?YZedC@XoV4=FA$k%Lpy=~BKO%t)MOx>T6x3jh8m)eGXIZsok3A3NwN{aT9 zZi)G6&7ozR#$8&WXH%g%-=qmhUxcYrk0`O0S03NoT#5O45zRe>>|+X;DDtSb-HQ9_ z-5>VkB+NTrc1>B^+cMjdCRR&*ELAr)ylKYyS3;H~-_RWFG0c>mYDiAs#%M5n(N^d0 z!I4O}$bD3{1RwXu1 z%7Ghh!?;@e-jVI(_Ef)W=|_ACIb`e^Lg?203||JUmIL##WH&9;OOFoN7V$rwAt72EFs6$)Hi~iJO;Q(eY`z z75V-;*2JMzBf3|lTL$}KQk{WwW@0b7U}>z|EDAQBC4*_z;TxP0>@2jY_%EcQoqTH6 z54*r1NnI=40ae?dsLMpM`DE+1u}ripTk@96id~Xoro2dh=Y0WR+<@?d$2Y8A)Hy_6 zusGav;CRAux<=r__{UUb7^?=5(*9a?>LoFGo%|M&fDY3LdZBE8l9b1y3|S&nBQ2TF z?^JU3c=AQLdG8O@twJHDZqR89m1(4{{t*?)-CD%{TBcSBw1gWna&*6MpFF3-{g1g& z7Z!c(yYxucoAkcn{8dug*MuKKPz%J>*JRRJLNy4+-+_$T13Y5<3d5tTp#4dR-o6PD zyM$jp0bRxc>n9&!5^*b+r*htdIAeTVsq}S(F)@d??|hS-UohV0W^xP8VK9c~U<%V& zD7fd>JOQHpg`f@^VwE#e`QUY%D8SO=3BvTjvg?4j<`r7r+^dL4{>&zystf|$@pJ~6 zL7iWYlp#laMsHp|BznPt# z{dh2WRwMBFb_LagTT|*Z(U%qK34=kW+u&%10Bg#^dZyOT&vrK5Gav~r6%9`mniWHW zsUfmCB$d_R1RQ3o>ew@+7QLc5fElbr`x~<)s#tB8e26~8L!@J-DB}6*z(Y2#*}^ZZU zkf}|Nhv|Yvt1((51*rFTPpOHaFr`^7T5ggT97#f@YpZZ&Dq^sbe)%EKiy9t=?=Gq{ z5?%m;^qrS^&M1x+OPrT570a%TXlgc-<=A(wx8hMu9UAKXV8kUz{kGAVRfmP^0bQha zL^e;<1YnN270=wY2U~q^k6B}d3;>fIK*g|X1HoI)217*PKx33ihQDc!pKq<(lX)W@o+C&oC-6Oh*SyHcm0l4?ZwQo22{5 z>ZqZHuk}&Bt3rp+CAteBuaS-`x*6(-q|J%=XK7AXElNae65ZZRS4?;r2u#>dogo_` z3@tlH%T0Ck=5+TArSdy6qh}47Uh>KxnFEUu7_Iw7-Pvf?x_0}k_!P%$$$8_>vmTBx zAMr$r6j22JG=IVP_ud{Am)T+ct2deX>P`NdWd0vl_WukbaU&Pke+ATkH7H8|kUF_o ztk$V!45JM13jqFxVqL&*B|8EOH7W{X8qu}kwsf9w@!iTn?oEMrJ2=78*ylk4Yx?{} zG5N@H-bLZ^aiezYm`lLV?-_g>irtRYwrW-LXZ=M$zI7iQ1Xv4vq@(VH(PBtO6xzD; z?0_6#a`F2xg2W~vEJWZHC0^**>9wZEIZ>Rx(>a3JU39+C0Lw>?cSK6yBfU~r$^dVq zsKJXaOaZFSnjWBfku?a=I+H;Ot_!Ce|GFyZfOT*?bGn&+<<@54N1wdFfN9NDuP0(w zw`yddIQq)Fh}E}^Pf1qry=PBz05-1VYH89zP* z0p{YzWv0=i*B}#b_HK{b!(q)44x2==>PZOx*s}G^5mVZDK^P!z^MLBslI^uPTPBHL zS-FRJuwjKZ$0WkpUAPAv-O|il^=E&aRT7-~d*m(-a+&TM(G?YiVm9Q$gXQ+=Kn5i0 z5xMQ*j=N?mW$tIc5P1LumKOt>jqyRPGJk(pT0s&>%De}TyH$0mzGYsOwDzK}s^8yQ z7tQQzzT>ZyJM@)u|5_vd4^E4e%YS9uHRZ1^mM?J)PzM^l4$2TNNUsZG?fDHU+*l06 za&YV$12?UR=K9&t2GrJGCIi1^@|ShBUx5F9l-aa-KCxlCwA{3;!sBt`JkRazV>1De zy$N6JxRb24=FF91e*u6DZX7S%m@$yi3niQ|InS<}ITbnFNHBc|lvP)?L?N9BPfJ(B zTzJ@bedZbn3onkb!URmi6*YeT8dSrrY9}KWc@8$;HH9c^6djA4c_m?I;YMw^T$@;7 zJj3L$xs~E3l<%U(#p(>oJtsdE z+JbuPmk%w%tz!98IX9BGR5j!+`Jl15q+nIfR9l#%`7xB}aC$OlD(gN6PS+}JF?O1` z$#Atq*VGUUkb@3jDM^*eb*92BP<8wcDso8uXzJLPhheAF0v6?+b0zsgobHMv9F4|j z%(R$ex-vma^{gbLw9~$BbTLL76UH`vnlSn)`EU$h=Oy*a_ z(Eq0qBk$n)UqSQbmHC&KQtF0sit@NzFN|?$lP>h;uQEY6ZIzy)5`>N;SDwbGHN81| zsRaoCP=>CjqbP(7OQL@Osa=@UwiwF5CO^|zSS+TVr<%7`R&u+$-+>(A;zT%c`Whpn zBgN3%)z&rY7lH}p!*+%ZF@XpA8u3yNWHF(|i?Cos1_M|{=Ax}7cMDh(vF&#f0Be$# zEn!e_Bi zkXPtw;6_JKq`^iEY!xz{$3{0y3rJiG8|hprT#O%VcUvAkwx#D8$LV3rX6s-N@xP5T z!@4qNv0$GzB@$v4X6r|YRyBOrV!W%l0qkWnT5^pe-&c*|z|9&$9*_cwRKRfU+SATP zxR>hrZ`KWX{ZvQ3FYPczPS%w0R);MmB-N&MI9;c`X(I~m7;)^iUv#Ut9+5NX-Fb;( z>vC}%anobPz7Bo%oC92*K~~DH9>Jn~QVcOJ4OV^>YZd6&9oeu;E*#CuGe^G_whnBe zst=Yc(^w-%3b|RV;0_|Az1SX)eAguwDy0+bDIen|8s_iOaBp2f#nDMCg~85~k!u?} z6|W?WA>G|iFaAyKa|g7ufFDy|3+Y>uji50qepDmk84+*;%{OMFOR?q1gN;xR)It*> zZA}t2j(-3M!@`pB6*}Tu=z#!zBN*LtcS4H{zA5>};2e(8i-&PZUaj`zC!~|GeV2IE zQ`<5a5I?Xfaak(TX1Cl-U$q!}ZJ7Sn?eQ!|Oe8bacE7lkaZW zhfcKAY5+4GT^_Icx~6bQwq4vcoio;(Z4Q6fumbGd()lL|*Add)4#38O5^aHsAp5D@ zy>Nj?-~c55ZwgmaT~c24UsVXrR~5qbpGAqhk)4_8|0+eY6Sn@EI}CTP@pu*US(OJo zB@(cg&_O-s@f&$q2@5-`qrhISotEgeTx4`s`=^p4Ln8D9D|{#ot?U^?Te5bYP54+` z{N!=DeII@X3(&9x^FZFV3a|iP1hJjy7paa!KB&A>f}8E>M2xFPG{!@~Oj*r-3isbt z8v9MjT_;{K3m?36fy>-sIlaFL7b|M)&h1VH`17C_{w--slI)ybq>$s_fUbE|GtEw8 zZ2R#}k#XU{!#oOBq@^~Au`|gceFRf~I3h=sq*|gpd?ecv4bFqS086)Wn!=b!>2 zq+HaW8w>I_5J9=E9kRd zY?T2!T?gkzcR`R(BOq;8_c(|6$UZyYIkXiese3<}#+4oscoWR$64~t%y0WMmHA#;4 zTkGL6Y?McA9ifCN)=KMzMv}m1Uvl=5?>N(rn@}Ltj*=g}afEFmZ`=*SJG3Y4gG-xP$C(^)fF7<70YsT#M*vEWpqX7CUiw*wcN$DpUv33S%*kZAd>hQGPLs)M$}+K=z-GeY39bXak`=tilQ zxKMa{A}O=wi%6v)1F{Y+CgPD&yclK0yr7&+9o+Xtt6SXl8so1`*Wm%l?1z7 zGyO+o$jw9-++%u8_;<<<(iO$6*l8&}3~qIB{Kr%eN;uAZ9jQ>**Gp09@f6JjJgE|` zVvxy6rF{J_Z@SQ&7IL|fskVd7!px3rLg$VR^hii8?I-_vOg?P%`#ru2ur~B({{Goq zj%me}4?(M(EvFKfbFd1c#4&gOJH9 zbr@5&2V*n1(6IrSGoP3Rm;Fx?J!lKb3u2Il%lOf*VZn!QAA}o@41fZKZ`WgWRt6Jl ziSd`D`@Lf<`v|V}djy*4{y(Gyh|IXf4@b~e;(SMX;r0pXcSu)Ct?Y>Ip}w&I6q+^r z-1mG?9i9|8#?F}phGk0+;~CRipAxp$Mm2}zu3%m$BEe34^P=<~4f?dZngP3_7{MaZ zq8K8XSFNf9ejQ;9Q*+fi}h;1Kr*yO2nSrhT4(H~)HMqz}CNcZN}SzE!tL;(cc=WyECL{*T6$znVF-HE5NU8nGKKX`z$ zEP`NL0_)P2Vu}xWa^kFZYs()*v#%eu=BTB3uPIgxPlh`sERQHv9Cw9P zjKrF=5a41(8b3`K@e`chNEQwS+?>h65E$$m2b29ay*S*uL?Ds=7oc?zSqwLRo<_H1 z$JJL*y8^}=YQv(*K-wjAj$Y+a_+XCQMcZ(}WMTm-^Z%Q6215^XrP=a4PhfknAI z2cG92Fm0N259kF1l(qWPI(X9g*6dL;+pZo=!DbB|OCY3tmY{qgYGn}_J<|4<8 z`msUX_ANHPI!|s{J}ppFib~t{@~EU$=!j-7f&;!;RAMARenWtm;w`|tu?Wm=t<)lK zb`SW-bYU-#G9t~3v5{HM!2Kv{wkq}Z45-`}+Jtg0tpsb8h4dF*((&3+Zyk0d<9dIn zq;dK|+U}qLetjZzbthzc=%)RE>W_%=#%apuLCHO`YHL=D!)~KABRAt4#G(1+`t9%v zVH=SpTUZ@5^kHNLNN19y>^`-O zTO$+WmRP3>Vt^;z{oh7NtMFW$wqLiuH9Qay<$siV{&n+foc_g9{Yr7b6%t4ai`|0| zc=kWa72V4_?F~#L>|LOO#j{x-kv=WsTofHkjOh48_y4Mg*^CkCo z-4yL^s+)XW6K%uH|Kqwm8i$$xR;Z7jzx{9{FWDhwqZ>6pxvDIK&oa`#sMq26lxy+iUj)KI&4Z!-;blXE-=A^>dMr3`q zF`&t@N?PGwwjqcn;-M7gjMc;`C6os@?kDeR-)~Hdm&qOCy)#E;p4=r^HJn`l_IMoH zZ}W^&EkiMhVe@J0ipfWuJ_~9I+_Q`0^HT!M^>zn;S5kH_57~gjJo}>u#(ZQpdKg5? zP(!5w*1IOXBaEf`s;%+Vm;vv@$`ZlkEW?2tUEYELf@*eN@o{gI}kLQB1@ zv^}%Uz-Z%Ay?B$2O=c zFSuF!qkok*D9U3-;9d%H# zZQHhO+qOEkZQHgxoutFJ&Y79#yff?h&vVwQyH3v zOwC++nu!aztd?I5B6J9WHLLj^uJ9y#-T@;loN|fWUz$D4`i8;`H0EH!Gud6Fh%p;POW_Gx;^awM7c$iWAfliuBexG{1h_8AbF=n5{PCn`1}$wRD|WWC|TN zCNpc96iq}3ak$ek6(EgSk1N|trv3cd!IPX&Iy^Q#c^cTdPPc)~ni<1|E#VxlN4thi z<-5$5a#PlL`YeV?e%`h~dzq`EgoK93v$8awa7M$k4&EWCGdZxDb5DInfP~2)w9xND zAAe9K9*;Xt`XlZ@WaU`&A&$N2`~@L9tvJNgaIe~APXO!3Jf|#DUkcX#>%KUop|P$+ zt6w%OB+0|G1H52pJ+sR&py5@%IFm}=dEX=Rir&fTP_OMCiBCt9`;Ni=Ywqnl{$_KJ zxB8`!*q(R&1OZ-!-cW^bsr7kw2d77R`Ac8JmHp-M`wQH6ybnt!+y3W7a8+Th zPKTH~f|X!IQ&PR?sf;glbIBUP6bc&9h4pT68U}7N327{<1R*2A5r-?Yt-i+L58jkW zdk6%g0De;rBtn|Z{GZ=G{e&lO~J*j3f5Zu3B zWg`dtkeU?jeO-vu$V|VTktxnm$xKHI(J%z{YHlW7T}7+xZ1X)XPCuZ|LDa&8x%YA5 z?R$VKYKdqj3U`^I+7fDaMGV+u$I5q7d`%Wvl)HfsaLEb9+8Qv!q>664 zZ!pw{!ALLLNl;hhWu5&zu_c{KbTY-q0blHaJoC&qUVoT9;v4z&uhDYtZlUC%FQMIH zL6t<`CALv+`v+EeePBmD!n%pvM(aXTNU#5~A3(wA`cn$fQ=J13+kf_0Lasn?myEu- zk%6Owl#!#UjiH0EjlGJI{vZD95B7UVNK{C=zo_pymc!%o1wRTa7Y^d}w-@3gUlaA4 zU-NGkNdBa}C(b!|)qJ~ueZ9|A^!mcg&MU)9S^G_iuteBG7?LRG^i%cG@5fEPN!qBs@~jNDm}Q z8dmB*B2y#b@8+<;ykHJ^NdNPr3OiXF{MVZ7Kc37Bm;rz>qGjG2G*{^;-FzYF5c6Qf zlxafipn>++#YEhyBhr$u6Wf#m|44`O@#Piwtf&gr;0}B=X0joR>G0|30%;kLi+scC z#|nWzE?6&e#n^xb^4?gM73M@{p!MIf?GgiQ63G(m(&Ggs6Do=+Hv1;i7uZod*gTOd z@7L6_D>EpCWcwnS9@sX7s!YDU95%F~91XcE(FH29*x3_SE(f{KBuz!OH7&WxjZ+1` zYaS~<$x;RPZUo7f3*v%m)vBjq)};Vvc^q2hGS~bGlETE_1Q`X-D4_w`{oT}zneX)q z13feO^ToVoPNvL`(3cC)$h%;UWi~(3u-bJRLqHZo6TNm&|DI$OlMMPi0>gYXAgY%A z|9zPbB#Jf)j`n8OCV#))ETuo7U~PTs;(i>+5OPRlS3+1Le2xy*kqF5&{f428-e=ppLCoGTRnB4&L}uSTnWzPtXO@Xw*G9r4yVQe zp*Q7KC9@d5NIj}axE1G{)zWxi#%;5`r9^weuF%)>cW1x$QM1CR5}Jy5ECqzk1q-{+ zSEp&{ts7nPmV(!CB9WbxH5T{U3POM?TM7|yMhMQx_!(G4`pPH2$HGrIh>nUd5y z1?m)Q&d`;{PcHiACDQ?g?Ijx(7uUEsWrSzd#ol8Yjh>qfqE$G_Vt! zA7n$lkBAc);l=7l(N`@59b4Ark`BG6wdvw%^1C!B7VVsQ13!nwPzMOUWDuU(u?vgo zXBQ_z*9B2Cj*%hnU>ksiL*|Iio8v1u;ufN=uae{QbNao)y{d59rIsvOZ5NGv55OM& z4w_Px)N!?g-O;^c{7`N2fUJHPjILa3x;-yinB=CK>o+z}2M*XTX>oD|)9k@1h$dY> zLOwOk<`h&mbE!qjV|LvNlD2(`4>jDj%*9k&Ul;A4yB#V-%SO&N09(Cfx5xq68fP_0 z>=p>K`F2YZ7C!AamB0$O^BE;7FXL?2c?RW0=G%$c8OqDEhj-6gHm`tBUL(ZUSLgRA zTZEn)m%7KcCk1$df)9AG;n>ggu~9gcdcHFq3cV0C>mJY!O%Oa-<+DErR&@UUUsBHO z6s!gsB_bgBjO>5$U;4u`B`K_n1Bv{zOdBzUBzocUbt_zjQu1vyI?#jktNMbwO4c2t z3PwYMh^_h+`K%zL3{x#;{qITNi>!Rdhle$d7tXR zmztU~s;@M%m$DBqq+it4@Gblc}W;%^pnl@ z3an*v+B^g|4#w?&OBMdIY|3%ppu|hguqhi3y1q^ z=ibL7x*vS5=%aa^kSTsvy)DWPat)h;9bGu7C?7Q^cp777|8+aXA8KS(bRRxok}YVj zs&so7#0WnOf;tN0TQTX>2(+0NBOyG}*5>q%2MBdyyWt0t0&~s_0=l72( zC?Dtp{9Q`p{7=UaA|ig{^n&n_^A22B>noVuDnUKw>Qc~(A6k~4Ra#pHaV%D3#Ay8P zrUbB0*>s9aCf~<^!^iz1grD!CKl(Oc6=hk7p(Hnki1$LEv~huh%f$a#;^H=D z)<*V!id$Jj1;{t~E-lK`3h#nbnliU!?vRHd-YAX?C%UePv+#w+U5!ejEVdc3~=W2svx$^!{xN_x!(lAL2w*;s?Lh;5o0>ZR2g3aSs)Q!kBK zVW#}_xapfU19WH;!Ag57j*PQvHH~x62vtXr&LflO-G?g1stNi`f|#_Y!nZ`bd_@0_YYPi(U0AOv&TYWg`)HwBD&2@noT!aE0)UYoiUQ* zXdC=lylbg2vnQ}+t5q)D`-{xgL#gB!^7=*@aSdZQ&=-iD2#{axwH3-?$(;b(?ckkJ zc>%(F_b@B=&&X|EB`Kfi#`zfS5SB;FrDNfck(L|a7({G9+#hE4{2Y%=?sW0jc?QQaKWX8(Mef5RGQ^3^-*5!e z-hUs`{j@c4D)}tp$k~;gJ9*j7l;4nB=;-gw=gaw)vm*GzPj3T&l9Pag+Y(MsGMFH3 zAEO_AA|ruquS%{4>N-s=I5Fwrz;SnIwClHPm083dbO&lP{(29SU@DN=JR@<~B~2`M zW!0?73e**VzekKNuzG>5!^Wt&^D|$M@T3$Q_grkTwu^ zc#{BI(i{?YrikBK4Rhsqh|8403AlEhQ!6NZ{1f9fQrJ_6t_LW?Xd!~->*;eC+yXlEne`K zZYU;omG&r(M@?f%T~e8A6;V0w!wi7yW)4W<-IVdbwqd2>WObgCpoI3>wX_;gVupqt zf_{w8JIHHaScoQ0Y_hs#ACP3XD$}SND6c)8YGoAoN_sCAM;5=^wL3Mw!TkMdhvXTG zy@1!642-}@{`1xTnXvtt$;eB|^Z|Pr5^xZe{`q?@9c8JiQjwVSIK*KvBOnEG((848 z`g)DD!an}Iy@a|Qu53dAB8czA^h0KpjB<_%R}&p>*O!j#kJBkCpE6VzVwV|;^rZVe zabO!*6iJ*Wz7!c?0N_!_i!i$Pg8R7;3iO)-4{d&AGSVRQKrxf2Sb*U`!JlPU!UYe; zldcN`#)66A#n2)W7>&zPY17Q^xQ!z)FkBr#|^(dh@pCMth?(1%VG z5glFohMs6(oUdVm$K=+aq0iJ@NL$w>R(tihjcD#@SIQZ?6(Vk^ACW3!Awv|45~os$ z;xNS#T*c!E+SZAhm%!`i^yg1XZiUJI$ZM#1o^Wbww1IDH6 zX>h#oa`=22X9u8e@*-VUNcsGF$hce{CpeC`TH9NFKHi?eb{Mr!M$RctT1xi2J_CmP z!LgK4p$$ku5JtiCTM`G9D$5S-Q8)?{T%*zYt=Uu>4VO*DR_j{%W3*1Or0R#G`W0kE zhZ`c`cP+0%cg33478 z@(ei%39XX@#+wJ#;@yQ}Dbhnofl{JIs$`xL$VzNqx z^>p#MY0}nVih~-&%Y&Z~>*0uDt8F8Gs#dmxpug%j3-5e+HwV+y#IqIF5}h-b@0Nm$ z$evS3bP4$N6O2o%K^zl_OsNdh&OO==%1$&^`Z7k~a2NECD)*|(FMG){pRK8b zr~4Hw6*jW?uH^4G+0Badgt^8#1?23${$?ie)~3` z_#&fH!yD@H&xt-*Ps2bvpw$Qlo_~R!%j!7-XZfrFHdeM~mVbqz|5ND!Za7p1t~wNk zjPo6ck6*~=K7QTspUC__D-HkLeaN1RL>!=Q?_KTf?(OX^UH&~bEhDESCs8%CJf=7) zj{j4k8ZS8`z1B7_B{genV3eOFM=F9|9b^FIJ-Pghe0dBC5&20Y}z^B*7< zvX**|#y0j=e+?l9NlF0OiqJBbl@%)VZF2oB0(KAtdxI!k{aJ=q;>l(d5s&-8Tqzj8 zR^z8m>lQaeh0QIs#@I(pP>ZnZdj>#5hQ$LBnZT?e~TBT57gA1^@V z`SV|nm$9RnC}UNAC{HavG#M{U*6`H(1Q&d`Ov}Ds+>c>J==J1E>W7k{ZK$)vF91-b z(%ms4F=F$D638_Qa*5;)wtr$pCY;X@A85@PT*L|; zjBE6hC(($0B1Jo`icQL6j=`BDQl9GmM?$wm62`Cxl-A?FTlBy5@-K`22R?F$R!bGb z&mQ?4Las+1MY&f(pE|#BC>~T8S{Riu*hm%QVNSA{0pdFeVWdej zT(Z3bq48Aq&n%lM+T-OM8{SXcd}@OL^cY2MQ&Sw^ilciX` zm|zS?GtqpNfbhg<4bhNcCwv)OfXHVRrvp2wVF&mVR}g>*asmA6gzDIMYt4~_ z%ab=p4TSjdNXetNg; zScnjniu|$IbgfNG@kqU=%2c>>&8gcS&6uwvuRcY=bmgFWoa0U8M;2G%u@atxd9Lla zOp#y76n*OHx*HNR$N*;z${VJ#;y%$)Y^WX0eNKpCzT&OksK&$L{0zs6EYD;b z;VqTEmxPav31)3Qbt?`}(2={c5CazyuXp!#!mObGY9?V23IdAy(_gPp^{FEM=wU@70`2s(hP!V>u zN}&!i(@Hf|<%}(o2&;Ez30-3OPu5|zSUb8f-OXZf^`;gD)D{ukvLNSW(!%~X0eMbM zMn`f{k(ba5z`e=L7#V%M0B#!vmH;C0+drl? zRPMy)OMu;R7o>kp2xRSz3~a0o&Hk$h|7Su_rJ`YjD}?sW_AnG(FP3Q~hO5(KWo9QJ zL6ImiFP~c!lz1;Z7g)Hl^f0hGu*G`rBsN~8IUqzU`UPB|0o2b`FyGhoD-}g36v;bi zC_9qRCva}rsYvoEPVEZheEI0s2kZBGYojgOn@6dkaYV3qzAj3HXR4V++nVaiBx ztdc%g(!fc-7ushfp5rtqe$8CyJbk((YXlA4)tjnv>O{elYHRF8(92YY<3CJ zeEZo$ou92a?G(VZxR(YA+wB~{Iji@JV=}z0o6Nt3uD7oCPHH2>=*4Duuo&8=1ko!pn~J#*Z?iL~3mqQFx2)*Wz?r0xdrf7xU&&L!tL z(890NOg8yUOMZq~Zq!a~Ohld>&>(qe?rvIYBif7ejCU7ghE8p;m^cKko%x`1d)`EO z8AdQRQB$drLIF^bu5{|yB)1E~(wL*x>nvPV^8Q^o;hghSi#~@~OkOek?Ns55VvZ#Z z>T%qI#;pxgOP%7!UWH5aXSV7K@tEkVlLB4{b~c%tQwni)m-OV*EBV|DBAAC24jhLd zGO<+|a^B3w2r#$xDa@5mtwQTKBUnakwkvvS>tkuvW*SE3bF7x?7rI5MdQ+uwl(KM} z*NINNtH1QPEYODFhYynKI!eB~<~OwDF7t2qyil6rGX6~7RmKw!ja)$|AAd;WZZ{ZU zt*eKMjIaD0N=uyptBn7Xc*Q(Xd}2&aJeVzs(cS~Da)icZWUQ70LM|MyX&h7|`2LVc znQY~PWqfMu@_@QSmA~1w`no7=g@2t#l@hHq##M94)5##VIVP0BYO;t{t394Lf7UEs znFmrF`bd>S0ygZjIZi4~38i`Abtq%jVYe-K-+j(BV8YJw_>&Qq+aC6>@9`|)t!ubA zMuYPF7ZiO*;-4YHzHNrb54ukes#DAaX{si=Tx%vLX~ua<0pgKH6KZ=scop^m=#MiC z*6sR-W7(Bg!5W$1n&G#oT$ULPd#>U6GU3j62`xm3Gta(1$R$d+p~$P>{&@%R-qQH}G4~ zH<2Bo$oT|iTHgqflb=M-3VE+mdRvd*S0DMQEO$*8nj;=Ny+O{8kS$K$IDdHuly*|O zKPmzl4X${i3l`+_UxmW(j70O%kWr*i0#Q&YdVe5gL6czE{u%*YdIs?Z_-=oVz6RGV zS4RYZlF1IGuIPeJ??TVU&G^W}gly60nUFZr^Z&Tzv#}0-A>MrtYCHzNGl~c6%Q9o*#EFvb0Qrq6@Q$8-x1Jw%Xsx`$Yp?(q$S}Y7- z50ahAjbv$GExekxDn;TGGfJC`ltWyYeE%x=BXCDMj;xmRrOMRoCBm4r&xcJEI3981dV#le=2tWt zGfMyZ`-!7+e>BF2JnE`nMyTeVwQa)fA-=f;{IXu3 zI?tfv&nTQr4G5n1S^xV*@XX(EUroGNoN?N1-1@GdGUL;h_D<+_uX9=Pfm-;1cj|M; zdz$m+^UFr9_I*0`y+riGMC{{O^aJxf;GN7_?5>Fa2ba*QDPb#Wl%lqW;EK-sEF z-3EOS(?(a@Qyy86B6QG#a&Mh%bBOk|m;^WP;{fp_0Em4It7lcV;3uqeFg}_{OS|am z?Ct#tXE7GyPy2;fEf+{WIDc zv7S~c?}Rcb`_%af@cRc>ZubwN$|$#3#!a38A)R3DkR+ocj#zdJ?v+60k!A+zcYL*o zi<~odQXcGpplCn?LaV7Qlqx{&Ye2BFA>32bXn$79f=B(-`j=X0b>(O~>62nVK7s~L*Np6J4G#hWrjz7eW;CVd zOkAIaIL%q=(7HIy=}c|zfE(!+V@)tR=@zRkZn2+KCC(GP3W8^}5g3=aXAmO7LLB1_ z0v$8S8nMcz)T~IG)f1sO8S;Z0GnDu^b&8xig3hQ@9I-jeC zfoJFs;$Ym8rw{THR)^FchLUx^OO_y!-<0*r)JCU9sjyP{Kq%Xx{pFGETU0pdV}upu zdNf6REB&T^z@wmD^ZEMRp>&$KWvRN+dgB|y*=eyQY;cksYBT7vyn>muwWhRNRQd85 zQP0>nvc!7MWUKG_8Q4i~+o(Ldn%vl_5-xIRw=Q9u#f&PWYqBpyeaLO`f)5$F25j9N0ko%V zR!PeSs?XP5sJ03Xt~*aoSKxvc;+}-IA!Nnsv!`F{`#rMW-Lkk=y9}z|N%g<+?rF=p ziL_XC1A-%q$w^wti?-!<&14z^$u%W@wPMm4))QN?O8&~vC*J(W+au6t0Vb!!fKJOOZtZ5wjJoSloh2MEJ#z;;@+2t07A zA_(CKufapsBM43Bd# z+#D`~cA@WMy*mxVO!bO=L1&)UH{^+|n#TzTD;173-?@TOBoiOBCx69o2(!R$DE8Jxu5CxtFEp8>!IbA{cR_M7pn~_p&BuLffbMjh zaNyanc}5Tx;$qRMr6`T3zY#XFW|KKXa`5os^SR%2D4ZV!bflHAXMM2?{cS=n`v@ru z2Ph4KW<_>t_l*I(%~Jo}JiGY~Bk%)Lb}eAaPWhjUEDE-kX8%wWi!u! z##3xopKNI{Okse3Q4!GaGBOqtxDb}YR49%waMqw=t5JaJY>H{8z`3^!a3PwWk z1oBET;H3VQMbU__aOHSy_*i?};^igg$Mz@g9ssHa*;Q(bMIW2o=+_`m49Fu#<{Yqq zBmj;IEn2NRNe7lX4Y$}mh2j#Za{!tRO&f-M^84%DT~!*=i9enA2OxTy=Oe}sl? z`pv}IkS_a|_tv7edIYEw3~-4wKy6xwNYOu{E!twW}wNo`+-L- z86U*j_GIRcr~3T|Jx3nen-I;6hHbzM<0|AYWv3U^iL{K)R-771=kn=>)w)x5c*yOYOrFrat4 z*f(bBMy3A#HQE@PbpKE&>9M;Et2W$kQnAQR1dGPz#4Yq{ZipurG(O_8oMBiY`@42R4yV z%0D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%0D$Wbw0+)9X?ZdF6c_Fxm(cA3| zB4pYMrH1Yvl@RJ*8i*@(Pm|;`=g1`J}IKDb3 zSR;?8v8Wh&R;$sZ<++L_`-uuXYhT@ZFb0wOxRoH;BUeA^98JsKAuY!7_(#6AU8W(_ zdc1XexNW&6u>V7BR#zkm|u-V(@vLY2NMYNJUqS>?G0Uupd!-ZsR zOBlmP5eRf)`qw&bE%a7|^jN=Ed@ZgX*7IzxGd6H!y~5&B$DIS>P%yGOBieGf3Tx#L}e^&DG#n)549Mg!KLrlsx6;IKZLB;41gz zGN$OvVKC2P(1RpB)48iqc4Oartl|6?|&N8V-%(&Ha2&ib}4s(?;|XNMTzv;3F|-Z8t+UAu4Z3 zhDYDeT9~}F!E}}0F-))D&x;oFOm#!7M>_(QQj#=SZ;OZDQmWPrbI>&riMe_X z|KS^YX9FfGZz^sT3Qc@iw5}nVw391UfRvzX5|_@t&>5F-Nt@u=;1za%t}>^r?jwqm zWZBTr(*?I{0kqbUin}h>E))M9{I0k5rnQq8*N?YrB06cWPbumXvEF;J!8rlu!jXU+b;BYJ0dM=O8y?E2GF8UNp< zJ!7|9hog|d@EQFk&s)z2p6)wwU7yceS^hwic~$$6=mHh1O1DW-xvIR%x6v@dqJp6c z_0`fy z!mD{JOWQs^QE$58u0LtdD`js}f_a*2Simw`b@p1sC$tVfsI$iGyXUmyDCzc2wl=~c zh`eUfhBN~Ph0z*4Hu9>w4kF30^jeKXhQlYQB5p1*!jeIeav7x?E5mI3P79pP|Ee&v zpDjXp($-BSaa~^V{^!QH9AnXVYkbNTIyV(~gFD;xjWq+~oAe1)u}Wi;&xl-JP#4=? z-jhc>=c&g`cERuJBJ!}}#{Ew}s2wKV-cSReQJtD2>%?cJDf%o4jzce5)V)7*0&xS- zDxKD5dQ{eVy1VDO!2SsycIrEF%eQlMlvzD8+i{2nHqhH(s{s(FER)1aw)(=J##;sk zE$lcn@)n{fwuj&|-ssnDXgh%h@mrNt!sOEgCA?ne*=mK@!q~##A2>XtN!m|mv#nR7 zJ__w1HiZ+`9NAr_aF=aINFS({kuoHLT7iisPGpH@f2O5pnmL(NT0?OS7c^`7@f5(< z8%YVr;)dOHu2z?q4;yLGqv_FW7ZDsU8L({fzRL8uZo4okQjGA(kv(dJ+s-%~uqK$M z|Dz92{y6>j4UJh>}4qrd?^Hc{RQM5E7B`s^RxzbAB42_AD@`uD2=zlpG|$7V7MWFckx~sg z#g`cCEsU`L98Cyatl_*MRj6t~xV07)F{lc46aC{kGsTWt(XTn$L)rD%uF&oj zkH}MLxX$5MP@TU%0nV<&;O$$VT~Vu#RM9+o5F@SxV}B^ z((Y@vq1zl$6H8_H4Fc06&;& zzPxZ0^okJrq>DnM7+%dXFguEVe8noh;$5(!9~x%m=BwVaB0prq0g+28-~&j$;vObH zXnO_5=mk&)rr7YiyLx@`Yr23?dJl^DanD`k=VHp|o|H=J_{uQCirj<@Xu$?+c!V&KgPL5dmUsRW8>k^8Vk$Lg%1ng{rgOuJ`e#Z!)``EQ$S1r zI&dY36UegY3lkc|fNb~X{)7RRZbXRW+zci+>~2^H7R9TRe!nuDw8j8Fv?g!-4Tv!c zI}`C9`7w6Mfin0Ib0YZ!&6!oA$N;nDf~%@yqUS&v=Uq+>MpHwQna5JMYsrn|7ab)n zpoFsZsPHuGY;`0fd*v*9>w(4>8|5-Efd!kP$<_y>@DfUN$r5|7%TnWgJ#hH)9$+;A zFil$M0Ay?3GfSkqW`!A$%0}%c)GWD9e9t!nPNL;6nTrl=6;0Owe`g$(=#feR-lg34 zZoU-z@U?CVOz7gIrGHFQX~V2KD6G{pP0X|phlzu*rxyRHLikUwt7E^h%ZRp)XKJpi zWeZ#967T+H3bDdwg46Xm;v$F=9M3ATI&o>&QJWC)&XUy(wzHT%`gb?QxPrZw>>|jr z#DQ)s-|XH7Fuahu!dCl=_6Yk5Djt2SvFVt)2FJJI=jE@U9xPB}HZ3(u!lTzh*H+|U ztAQG~Goep@t?oy%zW*Xl<)(!nkfE$%rqiwUQ+fTzC8oUS7gaqD$b1|$0O4+Wjr zj!zLjKVAp#on26&3k#Hv5?=}EbKN?6TN3=nK2a#7N4)#R9S4oWsLPt8LDpXiDGBmv z6fut%mGqF>q(dkt<1b8gi$9O)bw?~}9dEOXTRH~;r&e7TO13M77i*Yc61kCmhLx*s zGBvky7Wq#oQu*NziH{S4_xw=JTR89c5GhO;_ zW0Awrg;Jz{Avf*tJ8(kXYY<91w5k6dA0@wg!~`qCefy^s}x zJFhlM@M{s64aivy*p9&Be5X|-%0##5`S*3&@O6Q(b%7MC8wqsiZkyIw+!xed^7NPK zYIS~y9tiTAz7Wb+<%po^W;1_=EVt_V{zC`(Xbc2U-2+ z!R}`;_|M<1OUu(kc_l?a{d#OBF&7?dBfz#72}-CR3zPzw7BICx*k>@lzc?F~a1{P& zr0JB4VIwi`l1)!+-RhDtFQ;uLi8~Lrm&`7^;I{6PTfA__es<%VNW_| ztV;n@k;I5w z`ihr88L2~dS2eD41DhgwW1X_p=S))>F0R^wHcw+6LReM>OR-x3G^jsihq+n-qMSy(t^%k&|rJxnBtmHmbLef2DTqOWedc=vVq{m zJ7o(-Urm#NSNPB~v@Iu5Cc6aJtnGbmhz9n`>-D|%Utpr^u{?QJ2)I$qB|B8j@uU( za-hB(aI0a%Ti|NoPJ=N-fil-02?#7NHz8rgnR`k{^`cv!G7xX~4iXRV@OCiHYl;o_ z;tkyVns1A<801x8c6PYAQlME(kU32NfaagMz863nvwOJsb3jTm@<^qHZdi<@qPP#n zgs_K6IZjNO+SMbamQT6Jt7m94hi!3QcM}`Susob{GP4trK3kKa;a_9nbm6WzdU={< zcJNR}-KCY32#Zl6vp86)CKMZV1T@oy_i>BrXkK<2-Rn6cjPxl;5mGKpDN{FCa63v) z7jT_C*^114u){lh{Shp*@14WG><$ccqVHW+dcAaPuDp=vxP`A!%AUegFdhiXt| zf}~mH-|=pkJMnnLv%k{fxh^+JUXjG_c;u_M;N>dD<}G3W)jLRA-0dI+fu8zbL%5Qotwy0#NVlO0)NuC2@PbNbn}>J1AI$6~Ni-sdO-1HLNMU+yCxn zPM%a3QHR^@n+HxVE)YomBe^Gvw*ZhiRZi_EksKfh>~j!_JC7uQP!*g@cpe;Ph1l*| zZ^{o9E(4Z!CHOl!qurSYhh=tP8mhpaBnNT+o3#SlnuC;GsYzR+Mx$7{*ZZ_b9k zR)*R!n2)WyyA!k(zcd10#|_G-zoBqmLrYyti=N!u9B)n4uwq-)Gjz;gE{|XdfudB5 z?SP7D_u%@XXEW5sWgfH1){rRQ^u?W11`-q?$rWG$vRsSxC>JNATrYoxKHc6gpQv^6 zjkR;pd2s=>KD*y37-3DPR9&O9ORSaLkzw*v&#~0`HH#VU5hV#@XOH1GmchbSq#M;08H}ozl-mSHOsYAQ~nd zCO2ZQ3-~j(b~f3c80;$^hku33+kV}fUr0)c_<(Pukd=YU-RZt#$eTYfW+9Y2ANJS= z$a*W7(;yM?ViNTRoF2?6kXR~Q37|;h7*^|3_BD&6SXtHV88 zbC$u&TkMVT8{-X-jeA=9Fs5>*$A~Z{U{KV~Dd_y;40$ETz+VXUXHR|^-Gwx_6bLX9 z)sj0OaZy8f|2uu5+*Ns}Re%?-vr@5tL526(=C=17(bob)fX3}gOUhg}hS0*SFo_&y zue&;Xvo`7_&PK_oaxt){Kqi?ovCs62V3`rlgV7PNet{-{xshJ0Zmql!so8Df_F5HG zZ+=QPUmZzwWSeUkQr0j}_gi&6D={C6xn{+zWX{C4>M|KQOX$(IPkSAO={$x4)%M?k zEuVzKF7;Mk@BJOSa>Xrh574%9g2rUsv1RW`iZUlIjJ&~=ILs`H6-2?F1anR4tU7@+ zZ^;x=VzEY!l=Y)I*{unYw*$9;6iw4iJ-b`uHo!0!}N@#M{uL^$jwxG&T)dV znb$g}uw{5@3PhTGXv$j zIO_Nb2kyz6Wt8IKwD_Q_%8R-Y8BZ`a$nq%LN>1VOU?fXo)@RDJC{&$DxvIBM9n>qhHn`KU=0;Nms30zguG$@r;A7k>p-25t;0g*S&{@5nY#v& ztpL6h&DW&8)K$LVz|h&ZjeC|hp0n9@kwUmE^* z`uYRHgfFBVG@cUV#1PwNfx1ZDut#~v+op+VyxliK1)ZKFp$!>+H^et!k2vp`=TUWf z1ojEnrG2lpeJ|*C88mrEG)(ZQI3rr)jolu&);G{JgLeM~a*aLv9T--hFJ3=c4`PPhcw*=YwgN|mewOStx+8+#>ALurNi&MEF%e^HjmKNl$i~O+S{1+Wq4%Rn~Atq#WWfe)Vm{Y(TDY1 z1%%4h)r8=^<7K4H7_@JHmKI zX%-9_3Oohd$R>Hhe@R*sPk>l*I!IUk-#+?voKv8FIHAfI{9WWov07SCbvS<6>3@BLV zTuF7#+=0gzQ__X#&ZgX2;rY>JypQQ-~)6$riy;{lU$>h;g`GXh6(FWC;3iNY-kg0WRbpqwz(h> zxCL~Q5Z>vU{`Ld&=Fl?248x-by(4XFg5akxF>jQ|X(`TUAbeDzUK5x2qSaYPAaqRa zq||Rv3_FzHo7Z3(^S&p~rI&7q{-TzW=ng=k5^!nWjkPUy@gzXJHV)^Q=!;9Pwp>fs?@V!w2MGh+BV2W@w;tg*@Tpct_@}h z;js7f5qSaq##BO|YAMW(f4JLYKMTl5HdO)v?hs-8d>#1?EuwR?EJbv&nxTEk$4H9l zN{!jFMzdItmo;S3oB;{B}z1i)5BjT=D9_-%umOa03Q*-c+MQk|7GrC+4AH zcdigjun_xw%eLz9mh7GuEb_o7^Sy`=^+}n>N4fy%sjnw7>^SlOI~cu5Zwvk2@Tbb% zlx_&N`4vO>mVZTAl6<@`N~EWPUV;ISUbRliE)BlN*;ddZodh6F>KD>>dbZ1FAKd@1>H) zU&&WRx2)$jmrwHfYuA(2Q+1e)n>C%`sR@^1A5Ri^Y|7)JaI9U`e3KO9B_#-)haH09 z2hKs@Dq$HHPmDGC3nBzDTw~9I&S~o`4w><$EAI}g$$g=}MxXXva>k6F{S7-phNPC4 zo^f26-Z)(MHcn1c`dT2B-y8aRISj(j4vWnsmvX~4>g#Z@o1`jPH*a~%jxiUkK4vxI ztOKk5t?Y9kjkX4B69C2eK+>f?3upNN`P?D77~>`*ZU{Ashm_#DF$aI&^*b%sXj!W} z#sVr3bZl4hz`0JX8H{%z9bFrWYEfUO8@lDNKDGS?Ev^3&>)+vyQ`r*gZ-(b8$3@D| z(;3iZ-VgRy7Xyho;@_+w?1Q94@jw!~BDqT!@5^x)RIaWzI%r00{8BPRFYdp3Jyb;> zt!y}a6oxP;htRwM8 z0!_UxGU_`kKT$vb%iY_geFN<~C0FKS7x6|M+Z+&tq^S6MGs(y>Gd($dxniH&1JsLv zr%`9u7Y3e%kxaKb4hmWcbzq`U5f-RTN=J~!X|sfesF&TX0w!A#l0Zjsu81?@l$ z!`ELegUA=!dp~Wo7DN*7Jc?HDJYkKSkZskWW*OyH8Y}B3a>i-_4-QSEnFoca8vbcI zU4U{WTTjVgZ8{Y2{1CHuge3i1I6TKuO1E#Nr5;Jd_($ z4$1`zFR6#zO;DeaI-Hn#}qRI51D=|eyQu#l^ zK{BD&u)q@d3Ir9B>Ow>}gQy@DiOz{f`?Ogs`*%$!*cS2+&wFkJ9A;^H=Ys`${SSxk z9%X)05s4x!e7;rhXdi!mz29R7cx%M&N`k>6^Trxb2OUA_4fZ;)g<-f<7Ba}qSUXyr zDv8VERi9c2V`X!TIS7xClDYB@Bm+*c<`cwwxG7vZ2Lk}=Z8gT=2XHLq4;6bV4W=X1 z+9c8@L-l73bcUlB-W~hNld?(n8U;k56U7I|SbxVXvaWBchAy3+wuafyP&&RNbdyR_ zrg&0l1RB~L11`Q z67no1!{Sc09dP1ZpzlF;nxJN?0}H zsjYchS0L2*PicC`5~*O7MXD{mHT~RefwD9FZNEy;Q^Dcz2uG)uI-K(WlIj^M4Pz{{ z`-E~I+Z5xr%tqPN6ug*l@V%DU8rH~Xp3S(>v3w_~_NF&2KXUx(cl$M8k11Tn#B(C? zT%M%LuZ^EP!R)ua!&FJb{&Sq-#NpzO4vqD_7UK9K@^z_>7VvBmCXoo+TqP ztwMV+4oRo1GW-yq&#%cCmJHuP1Z08V4_WpJ#Vm4qdGJCjC{1I5aGHtu zFj$~IQm^LxDWsOs@>2)&XH&@4E2e?`1J-a!fc~2dyW;G;x;fz{U%?fP-{%4j#o+mT zwsC{Rgkothm0Kb@(gpIk!vXC31849$cmtBVOlDM*o8S$aiF{;#(Jv4o&Q<@4PKv@U zJN}xJHUv~SU69^Awqg8qm(Kg`64hF4y>4R5?Q#j$fm-1pe(;3y_$jeUNW4das|Fy_ zgv=>i{5N)ai&+j+_@@JDlJ@@+ME-vzz$9})fwAj}8OK9H;k zopUf+8#1R9RCNZ*d2th#1V0k(2pjT-*irF_3o>RI6U+qK2%qFpC}e>IMG}|Q`sKX4A|8ywzWeg7P?z`g@I z$UQ(2P}=2#IEab*dWh-zv{}7i2@-bk+oXfs_tc=bgKH%wVK^jY0%jy9A)X~B5jc>! zh?o*0z*eNH@WAUrkrFlVFA_BPta?-XmQZ*wyJ_mh+OkKpQLIV!DS++PH)IB3SEOyg zHz#_}?Vgx!{${;@>>0d!aPkr;tUF@Ch2Nk+QGI!IFks0H9wh|Kmk#ga!>OSS^C1C- zQ|5p}TdICJNuL-~}+zXaxD-R?F$wAu_XhC9)?zvPC+PL+PqwB)KDf*SGC{_gwmth|Zpe4pVw#hn~- z_xcO7e1qrSU5YR2oxO44sBW;(F&pb7#iNvbTm8|#A~=u;t}D_JF1^u_bN$P=XP1D2 zQ161B8eX5tyxq(hx&%==j=FY+%%n_9o8PSQyr;9#UH1u4gMtW8SCvek4F;DCbh@GH#I>aYvbhF0{zd-Jft~a-z8yn!Y@LkqNp^o? zu8f&6AA)Vn6U^crj?fGz)$6Z>mF2aHuvI6lx1zjo~6=Qy&ArAo@mt4S+}w%v~89|vXbgCn7L3Imi#5+ zAQFi%j}z?mE7?k8hFqU2F#>V0Fbb~-b0%45p)qTk`V6+Queepe(HXwG?3i90!g(r( zitQK@0|NfFg2q{YT-(idI#{}7vg+AB?zKUZ*bR$d%0%vqJN`g)+hqNxSZ1U{Hhayd zbZ@av9|3Mm@ryL{C(iU?>@(p|NY(#&_sMq4SN+j$o4f74B5+&KWwk|wss(_eUs3z9O+0CFs>od8#-HnYLM0oCE7RJ*4(X#0`%UwkKYci z!YTVQA>f%31lWe%XT41~M^}Z^Nyc&~>I@$tw&L%lEO-kx#IKh5xZpKifTZ{gjD%!{@l7`Gt91`ouKXKz!TEKZAZ&YFf24vm2(si`nC{92pAxtUf zee5M-)Ume4fsDj|hYR)$?3Kj0wqAw4ev_2Qk+`jK9;dem4jT3}Ad0J^I@$b2py4a$ z&rmS=WkT*k`S$R{XMu>Rywu(p~EW2Ox_n_npI&q#B=M{)N7jUjWJ4Gt>!>cWFZ5eD;TSHB7!b1AS1yOP>)RD+mv z+RMBy6vFx)be4qBIxSZlpKf5{BMTf>j$B7-K;==;TY+tf#S6C&mV`rgy0k& zIkYY(BjfqQnh!fN3|Mc$>Fj2N0e+;ceL=>Qz0J-L=X@i3 z{l;xHy{z*vbtL#8lo!3Xavm7hWVRe5V4NxJ&M37r2mZ8mF!*2Ay9SR)vwgUnv{952 zoy-WvCyjo-BcQth9J>c^fGv;a-KEI$Cr>_>x>GF3JYTu)J6M$`)f%nXVd(E*$~I^> zHP{{DwbJ=zIV|fq967IeV?P?q<9(UQ?}Ct47RH`j$a`wk$#BkNLHv94WQJW=^8Tf( z8xQl{f=BppgZyVQsPMe;cQ~le>V;VkESu^P2Uppi(#P^;Y>V{RW#$-`IVP8~c-F>dog+2_QX;+}R+4Z-BO%hpKG-q^K8R{y=TVp`s(VupWO0*t zab?B0rj~oKtHqa6xUV#aqLV(St#x|`>+6MT{CPebN?~P^ahAYWC0=We#U^LMQm^~KT8p(b znx~f=B(QXwr?1MJm(~fxqpKaDbbdwKH8*H&^j3rL+J8uRT7Up|G;8qRgAN)7#5Vmm1fo4lg{+VOFpK`TH%#8hJ=roFp??l$)2;_*1(vlJ?h0$JAHJ;?aBDsST94si@$&8iFU-<*Dz=3{CV{Xt zL#uJ*a47UEl(<{Jydv$ecS3omLd_TZuU znLbt)-LM56h;(VlMuXq$j!T(|B7@&>90|*Q0oIv)xq@$uK3eJ~WNRpl%d~vkBYAJg z!id}Czd(sJAo>i~a@H}F;8wgI%A1<0jW3H5I&+8StdW)+J8l7VbqR$m=YtJA#l#yf zWy+Q;KN)th&@ud;xQxgK51KmRYk^LZ)N=>TasziVc@j~w1%^oxe8*#~St0`zT0FJ^ zzB$48vwdQ*hkg6Cw&`K_%(oO%N#Y}g2}#e?%JwBc1NEU;o31#55qFYI_y}!NUVe_u zE{{?GK15wG6aH$S>TG~{dkI|40>p~t;k*jxplX}4`ktdo;5tLAuQ;v!lZtTl4>1R+ z$O#hU3W4F(317X`&+1{$God5pFtKIOhzC}BM4(~R&QYB24d=@j)=glx2Pi@^8n@lnXL{ip}9n<446o(Q5tDA%HXMvnD1L%>oe8lYon`%ycSkI&XUqIB6(dZ zAXBdwrP7=w*JjN@RcOBFbm7k?etirg^Ur#xp#BzryBfLG8p6Pgd7Q>JVtONG*fMrM z>#H3AXfB+55>GznT~A~C#a!`9D0`X0KZ;a>+Ne=-R?(-Mrx@fnlaOvnhyDsaiYJOEnMZf6<&h7L~@h{Xc#)U3PtEhzc8Dvke^PjD9ikWx(15dke3bt*L3o=txGj9=0-|ym*PEq zUzR|K@7a{6(Ud2Ng_(P*!CWdrD>#S9h{WDXYCqcLgL9Aa?FIjdK`@Hdp7-PRFAEzX zDxi5kLB4$H0umtqD@qP{CHucpaw-${sLW{m@}(JM#mSE%`^{g#A(%lyqbMTLLe(SD z0*TZ(^th9LMEt17_u^CAtJNf~-vxW38g$G5CW=`Seduz%Ig-IU^5^f2oaKR1G%mCK za2xu8J1Y93wj~ipxqv6oZhT{F8|QKYEaPzAbS&#kprmI3w?v&XqghKHrgI&K!)vtIxf3j7I%Vu-ND{rLvvcdr4cuDKEcqIyssr_yh0b z*FxOT@(g1`xK^>xXJUuFIY>Ud90%&ZVd&#U?rgv2lu{qWQ$v5rGu>e4EElT5S{VTK zpVXK}$ggQ>AYtnYTpU7cJBWgpw<-0Ey=%InLI3KgF(iRbx+0G9cjt3Zl28Lx{qH|Ke3 z`fB>)<2R5VvnaQ?rHUHS!orzv%Z3V0m4Hn<%%3oll7P{0Q&n748i*7{ovnWSboJeFYM1);^HH*mp_R0e9}AxJ$I0FDD3Nb%-;M8F`sKiucoL}1 zZwPl$EcSf}f}sOk0D6($S+?di-9j_p$mVs9BKWiEsJtVfZ1{6jKQCbST`Gtn4ks~Z z4I?)^6JC1a+68c=H{<@U=s8Ug7yB*%Rzy#u_qB(5r9Z!wKMsn11y+QB#db<%OP=Z+ z*Fnm!-Yo4L&4fXd27MWsAb=n5-qVq)8h$9&LFXy~9r`&BOQS4?a3_|ssm76y76-EU zr1OKR?pcPIlEwvdvaWu%vSJd#0}wla*oH2Lg7La}goypICEB47Yx+YN1uIq5(-0yd zzY-!q0h1UlubhsY2g5ZNn|geae$gcQB^DjF!9!BzjCPMl%OT$V+j}ZWM(uKsNX5tZ zmlU9eO2LF8)^-;p<_9TbdK=teW-)VBQq73}0XKzCY8SbmAdpdWP+XQzcxC}}$PKhX zZ39qhW(CEajNg}x65dHkN_z?^zZ{w-s+bDS99j->i)ZWhYYAEy-TAerr)QD(WJW=& zDoJt}QxaDua&^M^SUCRT&gM~jL8ppvhe9&(g5#8;DL!)I6@coXcJhAviytnyWN>0J zaFXx>+*M%xe@_$sPjLQ&w#`xBQr-|p`@q-$GA~RpWYmHsyWl3$*~M&DCc-j!mYX;z z*20;yy<+;ffplJE+$!E%lxK1dJPXHw(lc4Y`~{6O(xx*lneQ<%BciO^dO3O5ygt)& z-k&emOLw0kqaIW?{@U~ZOpj+9iO!Nm%(&yqw=n)J^ zs`qp@XX|1f*-q1!>VlEjE{K`GfNAZBO4J%z@FEemh8E60lD*ryW#-~rvJOp0uNFhae)@83*9}L*VcOUzKX)FS2fXdC zBNi)f+%JI32k5eU!!9k|8r8+;lXtl$nkDyEvAD13x8~A$4c*tWjT{4VtO`p7cJgG} zi!Yua1$PxYEe194ytXQfOFpDpX99{2j}`s zbOSo3SZx*?x#!$n``7Dcr#3f+&=wa#hK6Y4B^WtQa)9A{GkO^=?4-^bqWDGZjVPlJ zTY@m&vl;AE%^#_)p^e09@FsRq{Y*xuYQYIkTD5brbXUYe6AAWGBHI}ugwWaiBu;&7T3XfF z84K3}o%5iuF8|r=WS%oZwjM13w@*JYf+aE-xZS!+dV@&g zDaiD@FNsjAwUgYFx`b236AqG%H+pAtTWnG(f!J?!^B_}tsE5;MuyGaZ(t;#6$(5yo zvI<0g1UE@UIwjO8_6OiQ5{v_Lm zDR(>LYNd0DrR5H(pK55xD6q~~Gwq>^F{r=GJ8V_P~P`7J@8y;V3XX|fQhdW{ra24!45yu_zR26kXLd7sS6+LdD5iqkfo#%$x z0dBQRNcW>i&4{FXsCZUKNM0mwIkFHHiPqFTCiY zJP9#r*DR^_ z1DRQ?CQ*Wo+&)&}@AmQ1@MRqQd!A`BwI}@WZ%)6D%qvEgW(D9X468`k82}>7v}9M; zRta9Ixy0aFtlH!BxXHlyXKl`+-P12Jif5Q|EBifyxhr4?XbQ1P)@pm^j!mS~xgZ z*qSi{pV~Rt10QT{%}iVwrTz^ewto)X)nA?e7L}S~mlZlSUyM$J-Ukc9(fxI?a&eI) zL_P9M3^lT_Fl$Px;nG~e++zWoV5oH#8#_?Y_sa;>9plLL1w}kZ7F#gT6x*QZ_2KaK zd?zgcR1=_hD>>9k)1z{$IrK>5uXtMot0E>AT2fdU^rJjS92D+ObMfa*4}jT}E&3o) zyzLxERd+7GPg1zg7p2TmjbP<4L2e)ZxO8mOrviMt@R}RH^|m0EMIdp69^dClbp+Ly zF0PAD-R&)8#_cT{m*tY)_j(EMZChtPKo5O}FQ7RarYxk5BW*j3Mw%Pm2_Z zlxItcK{e6zQgJ&RXD1yV@<$usCKX84d@}*``rNkoP$7ESM?oPdbvtyZg}r7JeucVJ zcZie@wCH?zBkH?bzzAS9Hg#^ZZOPMS!Y>o8me}KrZX+NpF@2{?b;OfaxhmK|Q|mOJ zaDIrMYGF2H*ypLP05A`vNFyq1%v|ey3a=H!CI2?y=PpJ$wwwy_&KT;9aol5JT z=q^o_(F-_*#S6|ZUrtNegP2h7yJHkA8{0)@VK13XT+5CzbLZ-x;FEp_7`|{)N4~mJ zgd>mR+ag!VU{P~DCE8P9V(cec-?_@HFTPz%cK`H(1f|G3xTqaL+d5ZbTT*Jmy*q@K zuu+sS%IQ)*&DHaay(g_uqtW$@fcpv8RsGGI3xg&%8H6e;U6Ek7s{t1$JtBk`lI;Gg zK|5EWN4wp1tL0><^%q-3L!b*+2H`IP#e$|`@gM1?Ek7lb}G1PX#V!!>Bu(7 z45Nm$rGcubFLFzT)dl4-hV_B!!Ha3?-D{g6p;OzFSAdKU+MIfmGpK;?2fdD^2HJv8 zP$Hl{>GE+ z2qG*s9aFT0dE|y~+DT@v)sZ@|DOcd}0=VEqMB(B-lPAjKC8pw}dKq%B$t|-Gj859J zY)*h{W3<|U_^+Wn7ZRVhXC|}D9EMlP@M;{_j8?PR4X~Evg=CTc* z!+@oA+gZfQz-=~2tCqhB86kRz_J(q=OW0&E#LN%Z0I+iU5It5@OOuR**6kY^@Ola2 ze15!@$;M`}CVx=+pD<)zMRagoBgH94Gi0`$(K8ocNuIUm4&Vye=>htJs-OXfz{TPD z5=1yM_?JpMxH3bh74+gX%b0K|i7rKUnT&TuM|`*KO^b`u={jxw8Hq$6q= zOag1ZCS5veoM-2~4X$sSL$)~YtTo>?#7{MGPuk!?0Gl2Dm4}MXWk43G zFP_uLy)jPV#+KFFY3{<0uEJP*lN^Os$a5s>?rx7{L6Y1r8ZXSdPD^Mo;V`9e1iUGiHR(9 z999RiS5!du>c1^9od0Zqcns^wcDF4MUa4i<Ma57v2a9UiIur$XT`OFAREDQr zDIJ0w>XB`kj-Tuzm~!C{%c3t@S4%cE^%k^m*XcHxlL`DN`KvME zA^Y?Odmdr#m-d26OYPDX_fbTR%a(=RFkuLm6+LE=UpO*mt6j^04~3%7P)po}MsHFP z?!G?D`R&h3Xc6P_Cgw@$ITQksLHudXsh|y{*KSlH-}l92E2qFLmD;WT%BP?8@?{xw z33(AiixJ?G3k76xasJe{ifnSr1m+#NmJ9&^Lk2H^;uURwo*MNX85l5SEdt8)T+b8@ z;!u*+4Oua@A5HRyCf_4OAL23AD0B|#-5JX13N+O=l%0o*eL|dlf`DUh??(t|u82lk z9RB3%tWfeE%b!PR4rYMdyxDSN15*c2u-v?VgS}xCo!dzT#_aFESZj*qB2dHuEp;Do zzkH$o@A~k6fU{ZS+yz$y{j-|P$IR;T37t2>FD@J4C9V|52cI+r^xTo~{x zoY!6xT}SWyfySyrL=LagGarayPK8hP{5|mIl#GJaPP$<7#(ocs)m2*NnKGX>)Wt*N zN0`ThCDhdEcIPATRJ`W9zH-=k9{T;I^rn_bfA1EIV1v(p^gx2ofARn)F7M`vIxg?_ zi9b&8=7}^;Fm!i-nPU?>h|q~+6J7X=gvjYnPw1TRke>(d#NbX6(0btw#KQn74m^ti z7>;as;t-#H=z}Y!4(2`pHOJ-z;I;p>4+W@@?=e&VI z{1_bs4I4;^7>d>oKT%~*OWSXvE0^{aSuF9aEH;JLQY+<#M_z%rO~hivb{6O{l+3g& zUvHu|UBX-8x`>gj($V!&8XHREWRS!T_5_fsbsn$9bg@k(&vdBhelc70%`F~Mc}^_G zLZl5V4}(sVLrf^0L_9sNq6JXUavSrnhcCIVW`}Oym4xw*2BKb}X_O7?dSUXx@0|3> z)$<-nTW6vYM9O!`Sb>|?R~I2!DXUM111zepeOmX`cLuazjo05Ve5QV9a13_59GJ3# zxLdcY4}i1|M4U!z4KXVe>NI;sY5%4oPde2G_Yl<{>=oSCkC8oLM#|Jk;W)0fi;oWA z+LzWUzfb3pE^1gazC(7FmZbCpXuLzBfc_FP~!bfulPJ)n1t1 zkAb+3TJ}J^&`rieyt$|twh6Z+As4tHS6~$MfmgcDWxdA~mt+07DopyO-8r9` zN_?cpT2}qOldKG-X-(y;A;tm24|5?q8fiP}2t8S$6#*t;r>v=nCY3c2)xmIv=RH1h z&znJo*xGsnifdC8#EoaY{aH@l`ilzj7LxN_xImF5otvF8Lgg}tinH@pd}Q37w1+>c zfrLH<7B?}~+z0Qaa^JWkv-$L;+gV->l^{7XbFgX(#c1|@%VhOH{e)@FowRV}(A;9& zYIK{UOKeUj@FZnlOolyQi{(|X_j~2Fm6M7#I=j+@TD#|?M!)|f3QLarY>qmIO|j6! zk_{c&&|TT4kVa6_K=2jecc`xGJZ)0ELb>zm!nJD>5jUOK?CuBfku_`a$s|rQ3{c*r zFl)}%NVEPAR`Q{ExcSPeiKYZqw56{ZHsuwr)uY^EY|=Qlq3Vl?sR_y~yo=q&;Tch7 zLxuE%4%=`(D_f|3rrkxLCVn zd{iZa4o_#~QB)piRYr|Mg2NbdX0eLoS(UkWfDvnT{Vt@dOpcSjxjyS+vDyi-NcDF_ z9H3RG1T4Iq>b;yAZJmg@c!+c)x+Ha!6gbiM_doe?wZt%lXx<&*()5`UMT~{7)E5!k z!jFiEPHnKn9l;x1n?Hem{LqF`!~U6pj6ox2@Vm@-#Sbf%5_KWFoSw-ZK7H1iF*-E$Po2`CjHoB2tesfbqxnKI>-ARLj|Kz4ewmOZO{Uk&7$1A&K=y)su zevl~Ql7C{;_YVcnjF`zveQRM!*z=f&Adhb&^mC#b0AZhgqfY1zUp&Sr+I^@X1#f`i zYmh~qEvaT}4pxhEEYZbI4f~8og|yMCJX_0)PELQFo+w6j;SCA3FKQW1#$*-+(o)tN zMaG)~%X2kOl7XXa4@C9!A?6KvSSc?wOUSNR_AT420~$_4 z1?!45-A|EvH~2ShGpY5XAxCDuqr-RMIim;aBWEr4AsgJ4&I`D_T>X1l9Q~KtvVj8Y z*AfPXbu@b;9?iM8l{&=G0XqS+C*Pl`F5kdla3|BP(4DqKN7~P^Oa*pnjG(jY6wJ;( z5nLXy(X0eS%XtjngZ@lzxRkNK|HYxFAI=i?t=|te51(N~8RsE;d`=jO(+P$7kX{D)F%REgXk@%>ew7glL=Q|kdg&~spqO& zWimDdiJ@m}ycQbP8B%kCBtKXI-NdAH?lrUSdMaM4($z73 zT(g*C`wvt>4rD@eLMlj@ip{Fk6ki`LYqQCNctk?#Z^(XWZsdUS`l4uQ513|t-qesk zE~wU7RH)tYXM?dYSAond+Y2O8rox(U8@aYe$stppqZuYX3YtTWGO#;)U~5M`f4*UR zrOQdM5FEP+3^X`FPk`aV`qAwN9m8+%DJLLXVYqDaG-%-2$m0B>9Qp8ky|;R;)_ zQ;rdlLAmW6eT~kh{V$tlIipb)5jul%^)d0g(3l(FVWxD!Z0si;{$55o8H3dRqj{$Z z^Z~1Lxe+UEVaio^+wNih0zoISEw(naqkd#+fQi_u<6kC4Tn*A>X4ZoO62gEidB!nyuF;6emT{=klNejoD59kfhCD>iz=rQIaoeTKNLy88596^T;yvu47-}NcR8dIZKnior-` zThF{L`H6nl(zUI`n_9LxEWaD5r=nPob|piC|C$Qf-Q>Ql8y`1qH5 z>sFne@|Zgx(5nyrjDHIgzC>d@h397RCI&jrEw67=L;A@l5h@TG>o`fZZ-I(`V7-|d zyT#m5m!4eiqVPVyMP%|Mz-V1Sqwm`*>6}6k&m#0gy-Y$$ZrNa;=^^yaacr?ZO{4$J z{DoD`B$J1BF@cnZ_xjOY_^Un{pIWUxM{XRd#K$Zy4S~FGf2aumt=`-NNtlo`JhlMA zgiGbh-WBx}_toVyxycacNzw6V)8D$CTeg{k0dSzzb=Gz!cxBEi?1;XpCA zI`~0L{KwJH_&V%c%@WbGIqDiw|1 zS^QtjJPsxa(`*HxsnEbE^g-<>nE#}(UOp#r(twbP_+LQkUlf+AoC2_L^4GGuo-#2V zi9pnA(@W~azaT&g%R*Dg!7{AJ?~b3{%p=O5BxFz%f1v7hI2{P1CX~Z4=t{X3eGZ4- z_85hTcjS+CKK|MIJ?&-TT^1G~fd8c}$_rru$DA#hZFA9)HWYlGB|B-aOWsH^3{*t| zX;PpZE7?dBfDDEmjolVl6{w}l=7^gHzu5;7oL=EXxPmZAJi(O6sM=D6|Km_wzv#ZL zXXw%~uz=E_e2I$ox!)Ttk16_iLSokaw5`N>)Q=YJBM4mfq|pbOl-uZpB&On z%hnmvWvEdPnM>a!B}}eCa)?b^oT5f4*WePr5&P!t6;4-fM#hoz)k#+PQTX*N|wSd%j+oko`z;@QnT%$W#g0sg4u?;xvrc(5(TfNHpPu^m< zyq3Or{xx0HrIsySC$A`?6y3v5+)rdEpRU(=0+<;mjZC)T1^5J==YrD=nmg!M{)3AutYMIHE@(obIq(O!uJ zNa(=GD$1gK9S12b=P*S;eT*-fJZu_aV;7##FMT4A((bNhl9hUe4&H-cdtg^RLI6od zoUg?%&PZ>Plo8qI944GM9d8X!FA?Tvfjo>PjQ5V{nK@lsmDow!hor7lcqGx9KezDo zsbVGDqS?u(4r5BW#!~TjwLIowi`WzuaORhm^L8?^_-%-+DOgBo$mPXx7XUJ@P@HUl z-{dX(W7s!|O7t10MzoU+w+&}6osUs40OUXM4V$X%zyQSem;VL6x&PHI{#(sJvBqY# zUU|#9ZkdGE!T3UyO45W3Yvm_Nw*+O@fSpvGmC?Yf^P+K&^t2xwRFa>6{Xs@J*lAJ) z64eC9`gpbJGV`9!yA$C50lQ0(YPZ?ov@u*5)5%>NufRbW$L8#%Im(?bGA4x24uvqu zW4T8&;9In|b^x`B(1zEc@Z!_IfP~EwV_qx4vSoRd{?0uheqdnQcu-N#t7?q}owit? zNEYpT26c`tag8(sB^D@6;1HasX0}W8t@eYji<=#Z`E{24k zE=?xUMe;<82sb)LvT6caB-6c9W}w=>gB&@2W?R)Nvo4R;F5Z@`#*X+Q|3TpuIcmC6 z;~78bLqtLt1J5{r5gBvCOU%8lkefj_&EnkVUC=c12&iG}f$!*Z= z3IRq=jp{R4Wam_lZCyI9`5M?+-BHhJ4P{JMY)|NIZ15_b7{@lcb~p@Lkdj@vK$$ghoIPFJmf+ zJ*<}qQSM0tVk?OCUoIk;Jj(mT zghNb*cnjLafgD;|H zDpn4uIcZ{@T-H3J#vSw#eMC<7BCB6@UIpp zGEXlhlE-~m;AtVqW%c6y7EJF^H&mtWUY!H>b;oHwr8)K`DQl(lr{?i}K_ zK+7)Acyn2If7;SHeT7$GaJz*6{pqv{FN4{R;(dotkjSnB%@X~2p1YkouqEFn@zbUi zOh|ozpZ6!r14>bgilayq^4@C`PM=<}m;}NKWOYS58EWCVr9Q1o zha%hfC)oh{waDkl!=zz4$@Ht(X9BMb3JpV66}P%c8&ajYI`O>e$UyQG(By={hQbVU3` zu@3{Ls(}K;Z4q#A{y$iB|4qL0ckGHd*qa!+n%M*YO#d$G0lxZA9IM+op#5!@-kE0Q zQAV$4h^*LA0@2brJ{|?zgl4^F-Apf;M)L%^ur_h^^FlT!Lo5?Z?mlWbZ7^-{yEuwU zFoo}TQE)QkH&B>>{vBfC{dU%c%a%?Y;w?)i&B2e61# zT;;py5VbU(a(&1U66jquyD{pbbyAU2%6!yADoShxypiU%;qy%rk=s;U9fg{J2PGfv5Tqc&?HYw2rFmz7@LHg`$&YB=wgy*EhRJ0af+G@T*iJq?zn}YA&{eR`OfJN`xDR@o6Ybb1tQVoA|-4LeDr}Q0*?AEk-9;V3(RxOp;|k z-6)kZ79>XP?OpkQpn-Ckvn4s&tK_P7=4C5?ov#EYnM%=6jr-)lm-WADgPD9c? z$h^fu85A2zw=!Lo6k*|9r$OkwmzBr7D{K#|? zAg^Bxd=>=#T@xJ2f8kaLuZbb)nG(nUW@Ev5EC~>LwR0Wa<5_0T76G_EaBu*h6C{<2 z@}yT8L4VixbWGDr1X@uLAQL(XmjcO}KAF`)gp2*M*%^AmW}IyFLIOS01kI6Ct0KSs z$GTgAbYbf+-n5}}Lo$iq8kI;SO1UH`M?mL=Ck;v>X5~RCn72S2deRYDy!k}&l4L%< z9bN=)D0haAYVwFk?JC-XDwdFI_H@8t=fzBAKyWNe1uz+$J6wYNgP!NfLvx_FmfF=rub|Tg zcB=2nNKSLt?ywZ8JpX68VxXC4Vyt~F$z5QYyIgmhEZ)Ai2<#N1A^*qh z(|=c6IWuPqD|?H7721E%n>ng~*A#r1w^#jaAzEJYwy~){QpeD?AtaK6p9=|DrXZKQ zw_B4xT{cUjlRBY{0bhemIxvT8b$o&9{w>(ax@-Ru817K_{6)YRvo|z@W$_{A)dnH|@v`w!Ng{j3c|2cZ(z)9~fH*|jH zx zYSoDKZhnvv$Y;JJ{1-2q6}$nFaidOBuOfBFDqy z%%cECRJBB`OE`oyDQgxaxZ`&Ybf+$nRz2Bz&fw+$Il1`NeDZtB3s6~lYWRuMM($gA4zHUHj zfZVo6fJ&M)8}v@f4CBuJitT&_ss!kAVEhWV>r1B6H`BB!$UIqGD9U{7lXWQNKP^?B zLTnwXXmv+k9+773jZ|5UaK)N7^)AY!@TsxMlc(v}Tiz}d)Lbv=7;lJ<9pD!o=C4XJ zNP3reDCKI5uOvwB7x3jjTi%PAaSmAEEsGr3HgNx!E$?4|{I8B-M*~L!?L!<(-BC;= zf|{a~W8EAiC4G<$$2h4F1DA|~q(bV&WQg7#w9{3~`B&cj2bkBH$i@PJjf=cO-s^He z8B((ch9*daM4-#@cFyY-@1wtqg~jK`b(|o`=3q+*6bcKL!0wl3`z`EOLLptLB+IwyUx0qW3r{+A zmRX&K@}tGPqQxp9kakWtwpb$KIOmpnpuAxnR6gSMQgPmEZ|!R>BurHlMhW=@NnHv>`Bpi5&1S{5}cS=XcS?T1w5r zmg{8^_(ltRbb#W@?}ctcY=)dg9r&}Wa_u(ilA~tGvx0YzQLwIsLmkvrz!+6}kpUj>$~5S#?(s{LQ+h{t5QxdB=xE z1BGAHhy#PvnTdPiNYyfwB~Z0vT7c7vF_U!ejRK2!_a$rf*Xh!v?jIE?MTjIx`g#l+ z7yK+|E$a5{59bnW=Mr5Zv3U@Hy=n6@@$=;dxyKd(lQu`TcKfr^k_{hug}GD@SM2Tv z__9QQVo~sZRUYj9o#lD~8QQGc5a7FNFv~wumvyGyp?lzup?m)tpmgn=#|3wqw;1!y zP!wo5Gd_eF5=D*C!B(Hy9D~NB!-KNbL_7_iSf-=T)5T z0FmHEKx5_DBsZxtEWGh8u>p}JMxxluQb2g+W#q7a@tFI>o1rb&LvKcG@t6SY z3^Bz|^8PO|)^F^|i zxtPq3a@|pIY9;K**ut5819h65)4OsH5UV>D0humJgze>O!V!bP zhGB!z63ImEA%2pmZuEf)_+DTuIf<{QGj-A5QFHu1|1#srMCJ@D1P=XDfi`OY!>;JR zPfA5IGn>Dily;7`|0H!(XI%c456-bJ+ER5KmQ~7CFhn6`!dqf3B2@rWuvq++iI{cF zHGLb+!YO%FSv-;VerFewa`#IbOVT&iV*YO#dxLq4U;`T|ba)pmmqM?(+i`w7{?}8l z=hu|IAZ@YUkS;u_u5{;~8Y7XhkFJZZzVQ$vUS3@!aZ+GlSZO2NV8NbC-(wrOO__+} zg7`{hb^C27wuQz9SU|-gCdZeh6W{Au27S)h9^>9a{YE%bT@3Y z^X#r8#G3}0G;3_D6Box*I)8PII96=pu5mv5qO8W^t!PJy8cO)rkui46&NT8Vl&B{M z6#CXGAUON>ba^+fG|t;pa=xW5-M^R8(kbioNc6jnnb|?tUwck9RaK5NHC=ehH}xyl ztZnP6!i!GyGDiNvMAPuyZ9O?X`K~-9KNlOB`@~|r%N`)Xlx~wt8I)-gRsf9+;MEAz zAY%a7d9=Vy=br7#;xn6v>L3{~7&RX=v@JHDnp~TXPKod4g za}y1=KP&H+-IwzSfR~cf@IrI%wY3%zBRlZIJs)2A!zY4f;}-}?(>nb`Ye4&ng=AeW z^gt%QxU0ueC{%*bPV;~pyQbDW$6_6`X*QeTeQ!*0?){&rV-{=$?%F{|zLp;~mN0RX zBDa>bLr4aN&M(FF6IdU{Y}j>!W27Nx`)6MCKVI_H{Ck`{YkJg%7J{c zYcdHY9c9CqeWxeyr?K#|P&~I^q@wN+Z%PKYBr)nQ@`a$!Gg=8yTkxB(uQ}}S5Oz2o z{!p;|&OAFg*?`L|K@9V3;+qekah+c4ySmNYW^Llh^f1KCAjAk3qSQo=VVnL^Y(jN| z$>A~5!hVt}!5eYl3yjIzR|x-*s5cAQ-v%8|>2hDtp{FzVefN^Doqu%-^@t5I;mU-! zOHydR!7%%nCNO43It`m1u1P^T*Hz?SI~-WUb1Lu z*;s757@OYRlvm$$DUu`@PsZJNspcZtoX1Ia?upaDiq$zLBkZRxm$94gOytZ{LkuxES?XEklnTLgxP>Mp zcnHUME0$;?Jw(>?>?Z}>)=A(M(CzE%-iJ$pLtI^5@*+plBhn8V!y%i5FAQlW$4L%C zmjJf0^rELiPX_vcFSD4D1yyM7*ZurxK+1upRPln!^1MmdJ=#?y!_vdz@!A9a?6d`P zq(h3}blv~_$zdLG0mbh=_+fP=7e?v=FunMdlYNnewmNuH%(t}6Yn4!@vNx)z4&Gk! zK#*39^l*I33PW|h*CldLKjf*1{{ycmPF zfY_3v)FBy1-Z~+Bv{yqh2?g@#c1Nmo7Fmamwz}7&m-cJBNLPk3X-hCOrAng4*x%SGc8e z0}%LjnjmKomYd+u=obIkV_v@;@_r9$Cu%Gst|C)QuvBn(ZzG7?X#wkym zPybgvn6E}ulNr*EAvfXI4~3I7m~F064t1dT*i5Q5QL9uT0y6-s^8&RrFY$vu_rb5YJEbcj8hVa_|Mu@YOG#u&cnY)Q@T-Cqn znooR_)OUlJtdwCv#)##+f3X^tf6E)guP`42U05|x3{cnqhCn)2FHaby)VGxro{K<2 zl1heq%N!4qdE9EOB;iG?do0PJ+EtT1xe%;@!oF1WT5NsItK$E}EH0SL~lFrPR~X)^E{-@4rxW(~&90n%&GM{r1vWGe0>ctqGsN<p(5IqLVS+zwdZorX4*Lb)4~iB~m+3O2*FW=-xuW4DugA34+&Q7EBpLf_Ba( z-{LuZbEam=OqTXJJS$aaq*h3coWxZ7{?+Iv430sBqOq~ANhQE&KZw_L+vEccXIg83 zI=nhP32Q1N=O>}$We=8>NH@9|Paabw+~m@n!9icga>ray!AA+2?KpzRINB(agDESf zfdZ0}*dAHS;ro$yMB2tph&Y%rlP(Y7OcKcV@Qo>lT_X~d>2X+aS(1~xszPSN0#6?N z{dUus4g*faPo?SOi>wyLF-PcmWK7}Xu@L*9VkudOvRB8QcW0bqSLe+(%?#nOB5KD( zXW~0_vos@%s}7Yd>9_8v7>t%-Hn50N<|!HtHtH5ykjVH4wcV&KovA)I&}U08hx|u` zHi+gucyS1*@Y3MPjAPX%hLDU@pS=!|YX{avRPM^Q^24D;EmvCvZ#gGrMTykN7&*_- z10<}Z0!LV^3%}j`vohG!b}cS#8MB3pC@UnLOf7X)Gt(|d09%=CMRajYy3dE2CB9O!bwMjnp`gdinFzhQjEI=%tpzp4gS9yzPA>m*hc- zmts8QjdMHSDjShrq!+AJyB>C2scGH*UPlX#g*?)%&5{M1fx$ys@O%P1=l;iGzZ&cC zi77HzB#u3Stm!?~{cHJ-njYf47Rf;r!Yrv60MaOId1aUe+4|x;#z%L7`0UXMI^-M= z*^wF2?3-0W-RwvKy=^k2SiDI-!H5)*XgCL-SA8<`!a_nyFEu-gQmm$w4vZ9?_yDz* z{2ygP44GM2^n)r)#Y^Y;TP2S&3LEUpsxeB8lT{@su5&+d0Ksof1(MTiANy_2El&J# z6&pw{yK9PT%xJ*)0{C?b4z4@Aocm4kE^@Z0+D%xy1d@N7Wym{ci`^|uH zcFApT54k|S=uDrITb`D@odlUFXR?aSk;SQIs%{j?vUL{3KBfXJwkeqH9fh~gRo$+S zACjtVb$U0ZP#~WevOd`@uOXkW%L5-0JbGOyc5qNc_M%BLh62SdHx8A;_k;FS*c(vq zQU^h$I^5(t6bMbjp0K?oZ(f0sIF8~XBQt+W4Ieoy`xUExM%lfyFGg$Yy|hPX)aXoe zY!(gcZJ&$G@5R)j(iwn%g7}7$1YI^gN3f*|j-`SBl`?QS$M^l+_vW-LS+=H8wxzVZ zC?(=t>yI}gY0Tn*&QhBDK`ql&(10^hGL248Cf9f1J*a3(sn1*V2A*8Ap#8VYkxZ!2 zYAKh)sqI3Tg|2)LSNB<%Cp{4Ug4r>~++UAbsaF*yj8#eOuS@-MkuwhJ8i&zUC|E5# zoqQc$%Yg4>hR3Sp>zc;vn&g_Pr>D^w6a`Ly39vh6R=!~AyAg^Rl3LPew%Q<9T_jCC zTW#~_yVE=CLY?UOsXNx?A35$2FLOMWWgjs4o3e zqUS|lILTL7YZIDQgA8U;%w~v2VXbPlBKMpUHzNdg<7-O}V#RK8>QE=``pS(W+(DzL zX8B6DlPfs3BsQA1!wa#iUD9(zsY~UanFbRPZ7k2`O4R5M&r$29_zFGk@5{dN?>iBZ`saPxXq|MfQU-OniNwPT^+Lo;?YRN9 z9Yy59)7&#$he|0u!5u~R!kBsDh}Us&nqj?3x5G5bkYlZ7TZQnuY|kiqT?JqF6KRJ| zZM3`!g{~4@rpf%oD=^#6)P^Eip;HGu?avVzWKL&Yr5SW(xs;8hc%Z`IUiZ}$;0FpG3VbP(W6Rk z4z7Af*KmS#y1z%q%AyIgt=q#K8&kDe@921Hb=;zc5?u?YGbplAW$1OU5oc6iuhs@+ z1q;1}3%Rm)c^c(nDTiYb@0F5eT%c5Gj`fgmOH}4cz1n>&GyZN$LR3BGszujaAI%w3 z%PNWb4VUjA0ly906k_#TZV#;eUqs%6IG?z@RY!h5Dsj>|sWdtD;bI=AOmA%7T>Dmb zYTRvU_C`-elUVbOaaN8!x?^@}{Pq$%l7ZPIhheMyg=g~vcGcE;@ln6rm95F5Z@KV- z33S6sCm-Y>lI0A!sH87%3xSNq|*(s~O}`PjMg{c#}T<>>xwY&p{< z%KukZx=Uc|*)*%Ti8A}ThKDay4qaHeJe=I>YRRe6D>MF>Lb3tefJ8xCL=LcZ6mP+} z?KC>Xm_FW6*IuICf|c8zE`MY>f?O%&gTZHnhmjACAc}Zg{K?5VJ|6s2s zXz}lX+y5lZWCY;+=@Bx3G=-5p{(!@0*+h2n=R=YX2GEh41n679=EU4>1A8ad_Sb`x zt)y{`k9Tdxko`do#vvH`Lu80y7d6{NA?=&e>R43O8TVK^quy3jx3|lPFyfF$gcyTjp(hqIF5|m1a zFw$(Z=MDn@rT4rY&2x{)4%?0Mv@SB~p@R?iFZW?>i;R=;n>bAU-h~wXz90W*Ka&5` zeUPyIP6lx@`M3CS3zL5m427!yRMZCPELS!7=Q$$IQx=jJ61rPd%I_mX&^BiLth^P~Bf!H)M82kT;$R#gQ~-nnAB7G>z0x42_L7 zLDV(DuHg2?aYUWXLlHsT`Z+bV%t~{)u4AMKNqz}10g}Z_jNwu@Aox&Uxx|dsfP|h* zPJ*Fn3Wc4KyTCwCuUVN@N3EN|0K0a`DkL_#dME;rf+s-rfrY|OD#bvPn{nFv?I~YXRmxZhBa8&EyknN-pPGJxGex;6Knl?C3@TkD{TaQVUdiB$TPxC*-{dY=LQ}}*KT8!4YVnzc8zRggs^=8A-?~e ze_hHO{~gq3EBEPA;0@O02v zeZNNrP+Mln&*nejHvY~};Bw)ny4J!V*c5t2i?_{7_~azVP+i5f23h_5 z7iH%Cr`LV$Hd89A$BWukm>xpN|V~Ruf>!XkF6SCXE8YC8a`{IWxXb1T=>d$JZ z=lDN#(9hw2mO#8!y1y?v-E1HowA-*h?Vz4p|L8$H7yfDXhuGO$_x1ObzEDg$)D!Qhu~Y3Vr6yg&%_8~66qBrPZ$CYEzqu>-V)0IFhq-?57>jX(Eq@R*Q9#?3mHjCWN{>Tl^FHO_@`NY-$e3bW)BevkbqIX$QHzK52 z3OKh_Oo49)PTG(awcomF^R^S=)L?6~^nXyz`*bE6TOICsD)vNHcoA(I69~)WC ziKC*WY~!fQP)L?$sYd=dIi8Fm>9Jw%8#$JCfhZM?KWO#4^I1SqVtI{UTPL~fvD!~} zEsC9dc-w;P{LR0h!Zgy2mn-GKo~?r6t-3rfLYJI4>oS0`xGyL`L4PiJqK1;6V;?xm zb-6+M((d676GiUx_~mlNz}*r6JXsUKq?@-NZQ5RabE%-BHW(36AI>l`gqd!YIqSnB z2ioW3mKZpf!pH0!W_`ywkKqttjW=OtY$M64jF*ROX611-I=k3?Ih3TWkN``C<~f1s zZ^2SLW;&Cjz>rCYg?SJ;n!D2=aU08IRu+QeICj;rm}ax+ZGT7`fp#D*N`bQK<>g5} zb5KYkGNq{Qm`e@7cpQ(vE3b>=sl0w0F8Go6fJYLX?_x^RSp~bU1G52}L*tSVC1YN_ znlknuxj4Hzd^l0|XaQQ{Hk%VTE3WGqubyNwMR$vdE}wVog@6{52pAVk{b~kB22%cSZVbG;hHJ z&Aq@^X2$7|8PzLoTh+3#zl!WQ12fH2 zPDmHC&wc6Hz}fp6{Qav^Iiv^k-4uUwr}RaN)GC#G+;7-6n*d&Y;Aga~oL6oaZvG0w zZb5KXd-q6y!xZEd@0B0h_0%)(RV{4)r++eR!_!L%=1n0NQ5WFYa9f0}PsZ7E`Y7i4 zE4=oQ)XW-K>@_en8~vx9aE>D^JU22Vdy>p~=k+~jv}hoUFaR@6{LeTRr*+J)H>Z@o z%j*@{z|ihYck14*KfpT=IZFr8AXJ$k+GIVBWON=YTFtAw4TmxJ9&Cu|(e7OBi#Ida z$>X4PKKBanI0RwQ@!|@vmN7dByUJ(6NIDpzY`XcC9>|^U*hANLSTFE+y)+r!^~`sK z{@R-FU@0X7R$IjvIW(reR&(k2jHWgz;0Eu|d;}RO-0#3!B5@t0CsZG9^gCqm$j>wj zAiK%ez>+`cst^w}PHR2*u5M}DJE;1t>UA7ec#rBjx9bkVE<6ma0-l5dL7C^^-{`W? z@xA|?gEKG5W>J4k8jQ-~Y8TH+nMhgVf*anboX5CS<qGG_i{!wI{QUKMud z99(n=ZPPkwj+(XfbViN)uI?J9X*rXqYsP$94!4w&Esw##j3pD7!}GMCTV;TErS*9o zm+3Ud)&Tu74WUKewBUS05W8H!5(U9U&9D4;gKIKB`Mir04qT#89TR1ZUdpe(8AJkt92yj2&P-$rF%BL=j>&y>mOTX#d+J z^eJWfrR>-nPUi>Rj=xZf{fYP#cJkDkbI927B28Omea?2hYHKJcCH%~$xVKaow{&~S zOy7(knbHHeMA{GDfTn+yzxi1lf<@TMyzjKb}ejhb=y ziA|dN&4-X!s%HXMlIYsyiO$+(x;9z8nO1>x!tR4-HJfu}@(8ve|B7%IOPmhPVi8!0 zq7DnXNpai9y|YW>-Jc4$uVJpASp}{;C3|Hxfl5XYb}P7(-R6obnUgzA`9ADf3dxBu zL8V-#rB@kp?zJUlTb~?4-f&YfU&p>cEU# z>-#!=xloO9CrP=^Cg#H8lEEAd?k4xR0y5B_ev3v4d3&bqMumH<2-%R-=N+iPZDmk8 zrqe0O=&81Dn>v-#>6eZ*x`KhuXllc{#AnbJLC$5*$d{h zsDq5kKv`tNUi+;Fg$4=KEy-e3G!htsw$!Jt2#rX>Gzy7oiz@N=tIr}A@yQb<1HVFP z@rWL2$jMGg(btg}b>-##!(FtCeIzPc9m?d+kR2=cDYESNA+(`73 zks<6ABkb|+nlCPydn;}||I501qts`Q*Yd=+K3nyn87i(t=8w2})VB07~ z8M$751RrSe7e!uWX1pi{h_Huk35c*B_uSK;y*{Nf8g&=(v+2*(9j86NwqqD4(Zu;9 z?T;rr*z9;Y)2gpx2HpZ-%&_~DQ-g`QN*~&-yvzB_n<&^VUF;UiVLrE4&k{|jrks-;3ytE>D6*xw zb6yZe$lS;fIIrE00%smN~R3I`IYV}(5a`d|Oo2wLUx{FczvE3#t7phVH0SmuJGvo^( z+8;?)O%>F3QRRw|w0`pa7pWo}HpW)OcTFt5Ndcb!a`gDOnm7?F8rT}!*$5aJnK(Hq zn*2Kz@NZxIqez*GW0HN}rUG-8Mn(&(mfn15wDbNe5P1}!h#&;y<_?LY(8lc9#6 zc?}#obve**5iM^d7Uyq4_LD2(;PNLpIBgCs^^ST-(3@7K-E0f`3`c=Z#&{N zK1KlLZu+O-Ixu}c3Xj69KzNOPRdvVF5t45d4$i;Mtb(bfc)(tOZNi>5u^|6PN5JD*pn z!>Xpdk1KB zWBvW{ap&^`U0#);csD$JNoBm8ytJig7Z!Di%K@ZV-B=^i9Kl^!2s@a$|GGxhs#qh# zz(G}rOV;wZdxTvXrjC7L7bZeXBg5ndBLXJE02e)O?uHU?=?07Tm^?4X2u$uI)x-hS zh!ahN+CX~iz3h12kO@~ZtpNrg2l0Buj=SDW;F{# z3KDG`jE+Vsm_Hy-3z;#DLbxWWztWm_03O8eDZ1@x%#lTre(7mD;G$-oM&z>LVqRn8 zh_U*5;-Qh0Md!h&pnp9U!sUd(9r324lv#5Nxsoj?!!377qWP6Zi*Ls;ho3+HrG z-ZB)>X8Bz2n1IZW1*+b-4n^>EUd_5t?7{&W?8;`kp*WzO*>uq6?0+JoWJ|Bsw)>cc z%s>`+zMs3Dcu>SYB#PT^B^K4R+F3#wK9v*>T8^gCco$pbk5`H1`ii^cwRAnog@BP) zv?PnG5G1IRsEIy3*JneHQ%W{dCi;bb1ERqrv#Mg5X$=^TwiX!6S`*}MkJ`u8RJ_KK za0Nf`=@9k|j~qb(BmE<9lmg^2>(W$y1!cF^g;lv7s)q-jbVQW&Typ$hAjzb`q zd0u>ftFdc50X3dy@3sy5OLOU4LKE*@B)(gSf4TavLcYeXOf&U(p#%%@J&g`NDw?nn z=1D;sC&PJPwzN(K^eF zVWnd5mcm%icb)I%RDH=Z_@>L>SFYpZAC}^+Jte%Ju=EtEXLWP9ruI;>AgNGT|2j>&skVQP^ce)1!ZRuu??NEwOXDaZ4Do_O?!U(NuSs`|^?OO<80K~NE0Bt&u@~(!Zkp|O zgln-E@3N9Ao2M!$7<5ujmXt6gw5!X{bcaxCXBh7iq2ggz?f8ekJ@XF$lj7}Ggo}}v zKBFZd?f34~1@83jtf<(?P_gjzQ77?i%y6%z#l~K6GPKsvGl5-&rs5C<;>m#FJYkrSYc^URe9 z-keaEzMY!UP02Vc)PvbX3Yl$|oFS18glV*rFQozLXQx$xGd3pTy*C%j&F|tOi0_CauVZAmn3{NM=&SQK0%vM5LC_9&xF+E*N8Gbz)?PY0F=|=Q_1D*OVMnj%7 zk$rNPOJu9DU8L^P;UbROHk`{|BYVb;b=$&KD^IJq7{9w5Wu?SXRem+ zO4$i~D0~&5x$~vSB3{VbeZduWs)oj(o~g`uousU&iUUbBFHxCUjZVkqzRYIfn_k@d z!a5|zSpjQS=3J}6!z`|^c=J=@S+C7}OINb06-YzHid*4|-ax1wbID}>AU5kIh3w0| zWbo$+ZvO?QxvmSG=)|N9W3;!EPYuzKC1v9Knlzu%G?b8I|>`G7kGkBh^AmIjc#MhEQj(|2>K$ACON`mdYy2q^r=sGK=cAeFY zB~=UNdW@I`2mSa+oK68i{uw@h_k(dH@s>G6(Fgcv<9d<7kIyEuLbd19>u zz8CFGalo(^3_F|c5;2?)YAct#tTrzE57!lsxy4#hL_dF|u;MN(=_fCS=Z;3#WN`Ql%4AYqd z)*7nd7d`|%+UTzS?YrpeQ91EZJ|ZH%gB+3H9te7>_R0MScz4f?i3uvyGpiH3BTy;t zt=P;*Tu(Rr@Lhw&{xeFuqvDQ7Sq>2sIb?z?3H|Uud|_lbe;fBmyhqloQj1+M4T0-z3G(y96eJ8O<5Auf+BmHs?n%+Yjzx4b7=Nyw9lN`GQW0~=qJc@XnxhQr_A1jR-qmJ}Y zf&K=;iPV}peOX|$-)P-Ly$-AJkm9TR!gt@(bq+RPlo$xFG-vdB(2{esxn0tQ#{l_0 ziFnVWH*9ykW*MplCPrnuz3wf2Ec!N^BN{>ow=&w07MH1%Op5n0G#R>OGgVYqDh*ku$J{2bmC7 zZfm823Dw7}hvP%4DjH~sN?Ce_nm)R-i3qQ)bKy1;bT(PPDT42F>`D^z>bJR+dkP+1 z(#{!6%o%*(FiS6er#r=!kGHn&A%=+#Fi`&(G7mA;20#hf#JA3@lW}ptw14rqa=s1u z-JaMvc&`+n=*Wf2YM;^+$~c68A?U~(L{&vuw5cqgS9IY*kQ}qcXtW92A|l;q5(8+| zc>Bohe0s*oUZoAwHYp?pcX<{et6^trBDnY?nQiQW@H-IZ^d{=e3mLRm0%61fP1$}b>TGC3f@E^)`Fw7|6=nq zV!hi&FsS7Lgf))9?*08={HT5LAi=o4k8993z7YKXd1U`5;IMM~&g1Z%WF2Wbk*pTB zhy(nbMS&3Sj8msc5@$v!K(zkpQqLjLym219A#+gFOU8FBcM~ufs-EHSe*O%=*{W|3 zlu0N`T21Tny4B5k@|?{2ILj{n{UfzU2s1r09ELWZGM_Y`V6O>AE10M+X(q9jcCY-W zu)TJyG7eJopal!fa2R`@I}IFW@owneFg`|n07gH9KoN)pw4-8dBz`d{2UBQ@y=$VN zyAOHr4Z$~P;qB$}?; zbpP`fs%sD%s;lSCKjYV+M{w7?vL8WQI%QSanPt(*sc6x*qm~N|*BJeZN-R}UT|IH8 zc>Pkc<$ERod8rN>wYKcP@BuZe`&VVQ3r_4Q8^U$V8c$WwHvB zdvLPLSV4$EEYZ}gM6&gQb6K*^(!{FDLWTMRhs<6yQNc=O9s&pV^H)u|jFOWJ<6pzO z@TyYUDcJ`!CLAf3Lc#$zpE7m%KMvQh}FQ$;{}(#336-RZS7FM09Oz{`Ybt74X^IoH~{ zgd*T^P$maQ)@Dwo>}kcuxy|jw-Hs}}FT#%*(E8pg8>xuCX$|36b>7lc*6Mo-G=_ev zY8toJW_kQH?^w>1CE*@FU^;eEbUDcglif_Mmc#P?ZFwB$QQnJ*flDgc!`#YaR}$SP z;po10NiY2sLQ6k>Y0Jg9?*@v0NE&KfQUdVK)u3}~Ck`J%csiF0!(xndT`TMZ6sNG- zE{zzo*KEwhu8$0dvQx{jRF%$~Krx0g&rBBhphFmbT6ELblq^Xv*sKy(iRGxO;$}1z^EVWT&*{I&((oQCWJo^ff9?yCr zLJd0BY)#l_9hA`)JX`Z-CzZ<^HfR9)aQD1ln9-NVpaMd3AKV7ZbG$t^={uv}E~Z!- z!H9j(d=__Yjg!y|`xaQlME8=W7!@H-5ijY=~gG{`9p z7$|vtyN|*tbz06#@%EX%b0TFAZ%`Kgm)gIk+r-PSPFBRGM(&Z%W#qnscla2dF}!BU zI!L@CbF(GZLqziO_aSB(31`270viLtMla(H{0qV}TK134QFwuhKqpAH)rP93hN|X< zs@UXTyP&%>G_mG0&`BPgH}`bQ^?oUsSwlqe!3Bo=lwJ_QLNF|BmFLn;@)ZW z!&rNPT*NhGY}es|u*Agg^S21dkBSpQa?h`o)I$nGB=LMtOnA>Xcc~;33$3Q~L(KoG(T*#vtRZ6Ph3D_pAynMQ9ZiWio(0?GbenNWZc)ccZ0N5!A_T8TU-?nBY69*R)TW1Rc>;H@; zbmaccAZTuu)@G?mSs3JCEPM@3ql~*1mKQ-HUD?Mxz>ajzggjy`t*xD9N6*5a;q~94 z#MQSxyb!}AVZ-Y?Ym4h?edXmlvySb@+A^y=gFK5oQ;os40+>W9rZhpe2-FG=h9jw| z0^tpPWg2GM)iy zJB-sf9`>buno_O$2^3Zv)#_)44UuXZxTIQ`30_`M9oZ{Cgp0q(j1$2EJqA)Q`l=1{n|Cx%+Q!QtGrnyf zJAO63I;)pmr0o$j4TSey^+7}1B{1dJ-a%~`$!)dFH4pxGlE?^P{#jg0m?Qa#9N1W9 z7tA(6HC#(hA6KJpa7yk!@A8Kr6`;m{Q>VZ%|6OSBKd96Hh<*R_Y5gaRQ2j@s&Lxt% zcvCDtHjQ#%x}dJP5|k=QoTL(PDMclz|NN4SBQhFmd&>%a^51Q}ZxFFuI*&Ot75#VQ zW_`m(93P>8v9FWui2LXuE2aIY`nT@qPkqF;$h^p@Z+D92#G9ZTzM`0>FV+XYGt_`E^vk8g z8sj(v>l0>1AG<1fv#hhQ@?@-LInS7&SzxV1>6<@Ucdkvun79l5%RaNVJIx%vSHnOHu(8 z8=BQ)nszqtuI#`5QcOhAlF=(HFd5>PZap^EUPUvKL_g~o5*A-!*X0j1_%&ps8 z7Ov`puH{7($RbnouI-^4wUJIGM`iAtD(ldh%W|XT4=E;{#%IK@ZjV%;%aVnp?HQgJ zCXW`SSih3?Ajt+n(#*}^trWP^-FG{GdtfCQ%gz+mxEL z*RyYIIvAvO!0{P+5ChV45c|Ce^EqosX`A>O*3Qh z!{Fm#hxs_&%=(O!%;}gIYdSo<_;Kl(IrC)sxLdaKhVdh&@|mp;Z?WUXwqY%d)-W(N1VIfW z`W;aTtH1+B!VQNH1^whD?kWcYARVciwP{_v$%g4`d4h|8b8^YyGJAgr>J(uratmSf zH~%*kEs7itA@vTZAm1;gEXTwU9d{~wqi3wKem+K~!!!q>1Y)eH(5zP6S@QipLK{G@ zHunwEUN^yJ>}u6sFhzu~MdO5JiwR3)@vw(#jC&f|l|i{DFNCC_;e%jFyl>pByuUU4 z6z*=Fa8b1+8DZQ&RsaA{ zd}#Smtw!k?v~hksjRXh%(kDhFv1htA&B9OpL*afFofT z9eIenT-Mf89${J~Ag|N@wN@lQEfXAWkq{KZz_<nOihnQL&jr1z?DJHh+gPYXduh*_jF12dL7AO}o zk4mMm*eTM^%fn-BJTcj&t@%gg+-vV^I|xos*IG4F=N#z)BII$!bH?5cG9{%H{Hysfi6fv3>--F!CB0wS)iP#dKCs`KY zYBxJ)@d}se z{O8?aMp`uBoZ}WSeIJ=<%aNYtD~M=Qd9`=wLlTMTRBeF$XzrTa=FVr{mC~Y=8^NNH z|Amq~eM&VNo#rwksMhX*a(qCf+6(wi(n$@HeX(ld{Tn zF7`LBMGnl3{AiSL9$8ue3e4gb@M0y33B7G3w!;_)p+Hp341uY?Ck3zRApGU`c!*ip z0Uwt|+mxZhacDS$BP80}i-cth2eMy>1huqc%AFvq4s^v*2%gwtUk{_IySropDMgn@ z@k)ILuq0<2oNntINvq;IbKI!)%-QZa2bW>gy&wn|g8WErn& zv{eKfk*+7xV%J)uISzzoN({_G-l1{E-Pn@$#CgYz=9Ait6RoDy!ehJkF31l>p3~l; zv7&|MKXMwII67O#@igTFS(KExy7{1%!kS8zMqKJHfMI9->h>>b=b~PH)8K7 zyuZdhoFnoxP2Oq3n&Ga6a@k(H@J?ay2>VWvqwY?bP*Lxt`SjI8;x}x#AF&N^RLdE-+NhAk*V($ zu9YcLkd>kxv9xVxi;4shbE=^n1LHZX&<(IMdnq8utay$WimvNOKhXFD4dCT6LOVlk z3Uzg4+?|FpdkvnsG+4v<#b#3>gs|{VN5)CHoDG4{O?EtI(omPZ%`tz@7cfk*OX3}G z&QaO@z%If32Y%1Ct__v3xh+C9ZE^9MSn#bEUd~VjX;8mj%1Ha&3A{UqyypTNJXqiZ)wTT1e?z^3t$GCxu z3gHj3)FhuEVli*|;=CefAD~=M)2}qIm4f)pA`D3JlqCCLFNk={EfCZKR8kVz{qdg= zB1=tljKIs>aHE|llSer_cklY>K$+1mK=AWHVz=FW#(Lvpmn3Okw_+!Ed!ch?uD7o7 z^?v|@jkCm>j|<3d#fa(EBv;I&wU+*X8hqx`rDJYr%9lh^G~<4b}R>E@^( zw%oy|P9^KVqBD9V{hx50C!43bwWO$kqU3>PN}!qZlb+LH)~=;EQ8M08e}3m@jC94P zY=|)abko7Rd?7qpgSceVkATQV`B)V}OjZh1{=A*LZ{)12-$Svn7?PLJTD7QPKRD!f zP&%Vf?7}%an8!bf8&oZyb|b;eCbqs{-0B^4#{yfNDLHH`_dH&gWSIJ4LL-CS-LSTlq;tn;*D_ znf*YQhb4rW8J?nP_;P2&&i0&PLC7BJZ7be!*&_13aOv;dJ-0wTw}j~jDK+A}ay1>1 zq3`I{adi5CcP!i3uW;c0E%Lw71~1t-RZ+HR?qUspqW{=k0dSs}oeYO0sMOCI@7pW{SVdgqc@qDrwPgyN`b}%M_^!xDy;rHf+gEVmm zQCY!@t=&)A8z-SXXs=FZK=#w2RXC1CBy?>YU&G$|6zE1xG8JMxr#^OFh$2LiL74)z zM2)$DA_;=(TMo65Wx9f&9^}Axu(G7ISS>%(Q6Fo8dsP2jMN-Df5N#Hb1o@)5G8N_@ zcC+)&32i~P_j7X+67$mMSb0+yk(F^|CE^=4m1NThwtGRpflO?W#Z1ax%gG$lsI(9e zd*>j2jg3ut-D(Rl;XwJ7GUq5-2v^Pqsup5Ghv}6z7)H$om((F_^y^hp-zay|WxHh$ zYYnJ$EdFfUmFZYyT&NSVXR2?O)9*o0hjj^`_b4Pmnw(l<=hq4hzh}KzirC<07U)Q< zev%XJY<55GbSFFqazVoe>No}5s%-6+zM}f7=t-D2C@u6sP#{vPaMq}5L`{rp$}KeS z*KZNl!M`Z`L<}?UE4g$UFH9XNdFhPz;3{7p*a}J-TAiho99PbX*k!U~rE+q(>=3KE zvy|LdX3auZrtpjepOBNM2r01UimpVW9Y9&$$f)NE*9xqJ;}v3e_75f6aNp3|b>qJD zyM^|bldlxJuW(T)qyQ)$;pA#l+6Iz6YAx)$!s@=HmtJf@3OQGY_Yk_-INaDekGqjL zJN!pKU2497L2qDdeuIME*wlQ1finEO`1_yPf%~QUJK}FHYvP+BApI}V^7jtme+b`^ z`4;J-WY{2M7t>N$0B#qMB*|ZL8WB24!eh$_Rb==}6fUvN95y&zP3&R`9k$7mpdsKw znfRb?79DaZR1tX3Cno`!Pw%czLsQ=w6z6@jH|j&t(PW&KoTnVr-Qxy`gGhD5Y2P;2 zVU)=-+#;L(c(x1`DrFZ;pV3-)Pq=3;U((BUJvB-%02$Opq#g0LEEi&tVG{(|!g}I9 z(YBT$`A)2p>xkQ2x;_Wb(FwXO{Pg?qK5Ni~OKzNk zSzy4y)*Vqj+_yf6c<$Wc!ors}To{_N2<%xk5OBcRq*M9plp4zagR^%EvMkEBKvPv| z+m*I$+qPY4JG0WZZKKk*ZQHh;@7&vc-;3^#zBgXPJ`v~ReC;#WSYypK#+W{$SGGr? zZ3NE+%>wKw0jG4V$7s@y5#0CI%jkba`@108JFXQbEl+he``-crT&CjEZ{j5e;IK0q7@^!ZB5WeS=%eB5Ps!to<1cnUSzVG zwB-~!)hp?%dDk-&MCX^L{c{B2P7Ogl&FpW$Qp5lwb!_-COiU!FLpdEg4?{j%uNC;V zAZ`oi6d$-YKsQslc$Smr8@cbgn7-HJ$(>uvuAqaiZ;3ZL& z$~Lp;>F1M zR2bq~*AcQ;+UK3v;CP;BHM^ep_;~!UJJwXJZ1a_+8)YFSp^8u(w20Jzu2AmqpQ<%h zxqc*|TrJl6=p@059tEC5bST^m0w( zM<~2SWTge~`{B6YQfvwD=iR(}ox~q6UeI2d^kgkfAW8bt)c3<+Gr2M*wr3A+0zcy( zQr4=b{iK_o53KfRs6e6MwYM7WA0g{-+Y{*`(d7tN#&S64!4)~nHgI&A$1MNmL=DdR z=0t7-GIRh&vqFSx!H%mfDpRGeG;Rp4R(3m!CE<})vDgnn5^q!}Dq#bEEQ{O1Jz=Ie zL&`2_ow4%vd!m@yRlGG%~K(SWH6mowhNoq+-^^Hqi&Zxp4@fF>rB;9=AL!3(> zyboK@;f_8QQ;$&aa8)lU%?vH4lXEM|{r>r{h?ZN(jsFc01giiljro5^wEyw}yNf#8 z7&%$k+WgPmevHGSie>qsp{VOLb#CtT6a*N7fiq`9kkeMp2_~a1#j6pJ z-%xtY|BT+XT9(>}GKimg^*DN;GLbdy{(iYb?UAZHcPlKY-mi^j!Ii;P#r%;to;oxE z!<tD1!_;!MO38naga-a~KY1clG+sY$IwN#xlycvvpu?dq5ZGt?`Q3{$97ebWSn%q?6^gb>o^OU>>b3YXWOUYy8bcj_qr~y+$+BPG?^XF(h-WW3 zc6+4w?u`VAlRIy{xbP`+6#4P-l;(jNhs6(!rN53eFxboOBIQXj!v*f#ya&H!k<|v} zCtEqOT)oc3xH29PpyZ`4RVMs&f%1;ix{Vu?SIAEAA>?*xFR>W@Aa9gxO4~!yP{*5` zp(0A1wm;a0S8lz*1nd&Z+=%gtA2u?OBv3toJ)d~Jx|$zq5H`dY=lty`Mq#T%(u);4 zg{^pmT@y>Br7fEsiATAiH{t04S+$RGJ!wui3|_ZgDDhj84a!GRn2%(JtjhVu^7qH7x_K!nzF=k z4u`%&oan@A*MXGF=kuu%RI42=IwZPc1$j5ycX@>u5oJ+;5hcwO!9mq#jvPB(6-LBw z5pB5Q4g%oHxAt13izZq}X6)`(U2&XB4Ny-mo1Y9;o5s{I>uec>ikH@AQ9i&pV}BMQkQ^tJ!i`^1mmiE8UtDt03|Y-pG-9%Vg3pB zuO&rKFGhF+D5+b3Q|dpD6!~w~^)DFp&z(^PfKUnuUvTRVYt9r!zo7E9g{`3#`Q>XG z9jG(~+)Lw`c~2CV+l<>SJqX^&K4?I~5W<21C1r2gju0DMd~9I)lxb_)#bL(zUy%j2 zKuqe;`h{4h)EHH+`LMX1x()x=1I1$4bb2Z`XAP!EB_MbAO!%NXNi;>~{a?DL#Ro5qwQq2)z zQB~Fj@-k55vn$0t%FItLojZw0BEuA#qW%-{MhSJ){v^6*IaCFh?V4Y0n)T2s^R=Un ztRAFWbwz5FqfFSXzgHU~M(a74T&je9q-I5H&=Q_mA>t1ukFao=BY2aHm-)-})0#A7 zpc_iK`3Tx)2IAN&waFF{E)Z#tZ5_X+v{KzPQOyf@28a_hKBL` zDH&wHs-_^t_Q%w%mSZX!MAkL*?@h;R@|n#Yow9A~PT`cJ3LnNYyHmKBsF;TUc1$8` zJyH$n+EiW4e1;Y%-#pb1yg(hBBJ3wl# zboMDD^v>K)4E+X4$CYBlq9S)^ci;XKRGturcU?SAN3=Ka0d?Dt8?5Bb*UX-U_D^oO zdnRV*97zghiG%F!HIE>WP-s0oFrK~WJhJ^_5C=qp9Q@C`f?^OyMAluP4;KaZ2s-a4 zD?Eo74%d4;obtkaMQR;}CATAs^)1&(cS?eML#i*=Axna(NXyP#XHxyB1M30b|7QAW z)mPGg1Khro!2$u%{2%xD|IcBlx((1lp?o#18m~J+L(>!qgsc3vK+csHsG$kcgidS% zzJy0W*d&!|H%@>ZEk;2BzC{l$Ehw1Bbb1I&>3RWK00+-Wz5RQ$-2;A`*}fjj46Vd9 z?qTH{LZUZZAdXx++~Az6f) zMywQWQ~gQhAZ0`SN`JnV2o5Oa)Lv{jCXTYf-8A(#_jF&c0qT#3GJs(O*tR^?$R6=s zMSB>Vl6MdoHOD}H@c6_9`XT|r{2C*EW@d}QK{jWRi-w13 z)7|MTGtSO~n3*;WI@-b+jzd(|^#aGbl42cWvEDd>y7@60{y9?a=|SZs1`{WfQ4Y#I z9vL=?6KCn3sai?PlY~~U^!x*d;tmbJz1ys?6Rh`-wMK)%8fIk~uA<%nW_wlu=~6?RqI=JfH@1zydZ%*j%5I!(J) z&Bdto*3iYGAh>LO%1<1hsf4LbX(Wz^+Z5daazA%e*4ZdJTRg7Bm7M<}ejz~uQqjLH zJ(U5etmSe5I$2~swg!fW%s|PczxbhJ*RSZQnYVveeM)>Kt#B0V$a_DLHJkPkifq3% z?}b(TWKH#*nf4$gspTv9|TZZJXo#Cm*6fa5gs6$25kaSnuPOReR`WJEwlSaN51ZSen zw0kCy_Ogwaz)Mc!h-uOpB-}k`?!tt3MCOK$h#BSd@FHE%95o0#j3&Sqp!d~9x#nof zG*KQj0j85fe_V9=Hx5Z3f7Lzxh(;zx^^6^+08xp-eMz+fW-fr;jwOvy)EwE%&O`{R z{kFJs?S#3L4EGt2sim{y-}`-fKhn)ar|M$r5(EguVss0MXDU=@c7eA%o;_n+rA~Fa zZxFYm&>5goAwRUBk&AcvQPEgoK2x11)J_Z3qB0czF~IGERWr38BEaIXAA}y@@SGY^ zh@pJSzuXwe}=c79?EM>dwr;y$DOH{k#rx0 zgHrj^`7Pf?q6wPK8Xli2>wl9lDHHeqcMHi<)zLy0L-8T=q9%@r=#2$QQWSy6!>V{1|AmV1`&TYAM)_0! zr0E}$j7_KdJdyP`t~dM+^PG~#J&_#U=TrPMnVjrZ9mB3r3pxh?4`aIaJj!HBc)ia_ z=>}~HEX<-eOry7CJ14`3Wj;yH{h##I%x5h6;~U6&e+ulOOR|*nwk)Y z+{QC8J`=PuEXD}cLekH#D2jMJ%HHE2X?qhEX?yF3pv4GhuQY@Ve1lsJyJr+!y&@fM zz|NYmr3SwsJUAOAJht0(rtT7NP+4SPV@bmyw>0m(8#uGi^t9`ZLz~ z5Hz?f)r?iykKj|hI#>iy3+-a1_R_A|?(H%^NRart3hmR{< zW!ap~vJLEJ>u?Nc-IM5;oai*%r|1_9IRY{nWo+m$f45GIHoHdQx4oUR_R3q2Cu9>T zka6Bua%@Oyvb~BHrS3l^r!$c^*;N!&FmGbaB40<;TStu9bp`wmqX$T0>&mMlYCcwi z&y$?uy@dX{c458^veH3AS1#i z39j#J8uUA`QU>?V6kuvMo_^g5i*zw6ClXiN7SAw+Uthd>W{jHvXXQcmQ&BG7BSl4>QE+Ffnna4ftYcm{# zUAZzUM`MAQl}=Iils@Hg*wF6DDLfNb-#;6k=K8rX1RH* zm?5C3fZJ_)lpJqACEs5!R6l)4bmbB@WAcEmtgcKHtMZmZ3_6P4z zBk~F+?n2lycKn$esnzaBwAq7Lw(pQ@15x#g&d+HH9a(J(^?f245|Fk9n@R0dc_6pQ zR9LdCLoYL>^A{UgG69Uv&aSam0|-1!A8rUK1l4bwF&~;ZhHfeiJTq9fAs-B63+&e9l>OKd~hRg^@Mj z_x|>tBdjb29;n9)kM=R?P8fjwIhfF{8TrQ?|6$OA%dE2rYQdQ1l2F!-*9N&aOJ(C` z@B%#jhxxkhd*MwG7jGdlNaS1_?OU6W56?mU)@F!LI$saO(nkx}lS)TW#lNdzpKnIx zi~-qS?MVM87*#c}a{iy#y+-v@J?vvdAJyarQOyZ|V03)2^?{*2^=g@O6bK4ZcG5qQ zus@ei8^tXfOdBgIRR>(=sjTO?I_HQ^z1zU8<5}T`EbhmTS-)lY*sdnp&l}Msge`nO zdoC){+>hN%w^m(Whq+w0!01ESOuUqanvK1*hFp!k)P|-_J_Lv8OggRIkM{MrIbV1gW=PwR2Xl=&4VKsqmNnra*` zPoFpd7s=qx9fsx=I!d2_NLnB*%jBLoijv?cQR)^r8j@f>NI|*}_;Ktkt5%vp)ze)e98w5b@s~%a;~^+noZaY_neIk9$vPpU@a`H^dy}8>D2^4+uvnpNRu9 zH^E-Hv=10`)Q_}BKq%Oczxr{bB`6(GGQE2Ae|P?N?4xCL4~psy$NM{zHrosIZpSIz zLPD;;MN3PXUvn{ft7t9G6`RtOOw;Hr)?d{GMtfe=S*D)WYf|u)Fm*ExVWpwO|~oj%Xz}-z96q%+E3OWVtHe! zWiFp!)umHrpOJKQW9i@r8%ioQn2>M+6Yt7)&5s@y5@$z z=tgoCscXI@%6^?P3A&9aQPh%hQ_US68OdX75a`v-$udb)>tZI^RP?9+fSG7WFLg(e#LPNiASxXPK%%tW0oA^zzQGgYwQc!R-dnuCFa>ro>~ zg1>o%^8r=+GogSA^;&er@f2!nJ^5&urA8+?XY!E7rD`$h-}PZ;u0EO-s@Pv&U78>A z9~ojh)oq|PMZZ59LpUnA+D0v$OC;D=_@NnMT~wLSnTPfDy`8xFrPE=$eqBvcLCR>C z8eRNZavZ8FYBdQ#L2`6i9X&IHS+dD?Y`lQ7*jm3tO-9p9rXoPYL4$RrNlEx+QdU*x z&eI-WyD7cOT((~KUnbDD3QtoBs#BlaQBzyoAPuqUHPtD7zM^y&N>91I09cmeze5rPr3Y!fgb~o3f=5728CC9w(s^D;oQ;!3}|BJX)Dpx{(r7{irJe{Z<>e7TJEs zxFzuzQv7RhOyxJu&a@b4SL6oORbeKGX1X{NQQJ}3{8w`^wapbw<20B-n` zs|ef7w0uK%sO(lxB#P~6gg!%?%l#E!bJZ)*Fo6=fJsS84GSr#wz@m5TqD|of_)Y9u zfP^z&@j}2zX(wSl%Bd2!fN8xOtVtcI5z_WBw6f9B03;Qjl z**zqWg+QkAD3tg>3B${`C>oYS$h`DbPUKfR^9!^kGc>=#Aw#*v?*)WzrYsxg=f9`+1ZzY_k2azZ(lLj>;7G ztpw_fD05aM+E= zMw*R0O}8iEaaHWC@b=DlTE^@aeoGpj52?qGPR&=HK+G3|%>Ir4uZ?Fviy(6XKvE7q zAU>Dte{Y*If>fgWCG}8UF-e}7?1U@6m*mmQcZ-J1ha}U%aw`^gecH4p0PGj>{N8bW zpKX@;^>zPA_J>Oy$zE>&6tSLgju0(w#QjFf-59sj`OFcD$^->a;Ag?7ZC2vN+BZ zgPk-uAO6EoL1!bI9%mEc&=H~~#Y zn8mSEhoXGdQY(#35<8e@sPNV_$_!HtH6>%4^q&;R4(wfHb_zCC=e z33!#4KPKgK)YzoT8!1zq1T)y9JG+ouE&2L34m8})@62d)=}|T4#*&AC+sHHg+qI&E z1Fv~TvEw@PlVDe?HBn-!Q&prC&{=dBnheLseyS|NLyBnpb&y5+LLahwJ%}*H;0Ox) zxmvQw5<8I@p%I*FSXNiX*?bO@_}g#jqir1nS#`6|W_z1uc2A6J(*QXOCX4rhRfR(+ zFp3kdSCL93D>ApU`1U*48eG9H7SQ78)S+=3)I~7Fx=zCHfo9Q@v2#MQ$JOU4< zi^OC79&+M-o=4^om@SSgP{2~KEs!(47vJs%PDA@j^OcSEZFjM^Pe#pa?_}Rw-y$!z zEXR1Be^0&DhaQ8g>vati@jO48&LWKOQEj`+c}lQGFKs6Z_N7tsSBhSmBN!XyaQ~X{ z1N~oD-sTBEwi`6ShC>Vl1bF^KaP@z68~(Ax1~ql;ke5+;)#5wrI+n0Ne~#BN484ef zzyKrn^yy=R4y_!gG0!KXbM`kV^%Tv=%dSm5 z6wN=i%FIcB8mU2opIb~|3RK4(`P4C8yfw*%RQYTM@w zY<K!FAqbra<6)1O;?E+_1rYP4)7zyQKs?v%BR4_&VIs!F^5kg5y*=g0Um* zh;xbgEN7N00E1dJNAJ;((i)8$-dg9W8yRO4}fz=zUM+l zzxT*xT-wF67BpZMOp@R?^fIi$yyqfEvj_rB%^wL8HS}AoW#&y1Thq=RrHMlHajZ$R z2!dx8O)|sN^@Nxc&5;UZoO63Yb@lYyTHK4h&|3p0kxle--5}z9fkkkCU>b7U`wb+B zs_#f3<60Lt(AcGsX<5ueP2Uy5R^J@ZdnJ;|DXmFRI>4E_Gr}r>Tz&aTfV97XPYo|D z=nJYKOIRR;P^e&PqcF|woK_;uo2X!t*8C`{j-cApS5!s{Ku7y4#n2hZU13=l≀H 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%0Alfc;an) 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 k@hyHd7bVJ=`;CZ}XOA5E{CF?^!{>(k_ST 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 literal 0 HcmV?d00001 diff --git a/app/build.gradle b/app/build.gradle index a11e7a47..7d6c887b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,7 +66,7 @@ android { dependencies { compileOnly 'de.robv.android.xposed:api:82' - api 'androidx.annotation:annotation:1.5.0' + api 'androidx.annotation:annotation:1.6.0' def room_version = '2.5.1' implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" @@ -74,9 +74,9 @@ dependencies { kapt "androidx.room:room-compiler:$room_version" implementation 'io.reactivex.rxjava3:rxjava:3.1.2' - implementation 'org.smali:baksmali:2.5.2' + implementation 'org.luckypray:DexKit:1.1.6' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files - implementation files('apktool_2.6.1.jar') + implementation files('apktool_2.7.0.jar') implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.5' implementation 'dev.rikka.ndk.thirdparty:cxx:1.2.0' } diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java index ab9bdc6b..56a5c0a9 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java @@ -1,13 +1,17 @@ package gm.tieba.tabswitch; import android.content.Context; +import android.os.Build; import android.os.Handler; import android.os.Looper; import java.lang.ref.WeakReference; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import de.robv.android.xposed.XposedBridge; + public abstract class XposedContext { private static WeakReference sContextRef; protected static ClassLoader sClassLoader; @@ -27,6 +31,18 @@ protected static Context getContext() { return sContextRef.get(); } + protected static void load(final String filename) { + Arrays.stream(Build.SUPPORTED_ABIS) + .map(abi -> sPath + "!/lib/" + abi + "/lib" + filename + ".so") + .forEach(soPath -> { + try { + System.load(soPath); + } catch (final UnsatisfiedLinkError e) { + XposedBridge.log(e); + } + }); + } + protected static void runOnUiThread(final Runnable r) { sHandler.post(r); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 6b75d1ba..ab4fc030 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -2,19 +2,9 @@ import android.content.Context; -import androidx.annotation.NonNull; - -import org.jf.dexlib2.dexbacked.DexBackedDexFile; -import org.jf.dexlib2.dexbacked.raw.ClassDefItem; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.zip.ZipFile; @@ -23,19 +13,21 @@ import brut.androlib.res.data.value.ResFileValue; import brut.androlib.res.data.value.ResStringValue; import brut.androlib.res.decoder.ARSCDecoder; +import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRule; import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.util.FileUtils; +import io.luckypray.dexkit.DexKitBridge; +import io.luckypray.dexkit.builder.MethodInvokingArgs; +import io.luckypray.dexkit.builder.MethodUsingNumberArgs; +import io.luckypray.dexkit.builder.MethodUsingStringArgs; import io.reactivex.rxjava3.subjects.PublishSubject; import kotlin.collections.CollectionsKt; -public class Deobfuscation { - private File packageResource; - private File[] dexs; - private int dexCount; +public class Deobfuscation extends XposedContext { + private String packageResource; private final List matchers = new ArrayList<>(); - private DexBakSearcher searcher; + private DexKitBridge bridge; private final SearchScope scope = new SearchScope(); public void setMatchers(final List matchers) { @@ -43,11 +35,9 @@ public void setMatchers(final List matchers) { this.matchers.addAll(matchers); } - public void unzip(final PublishSubject _progress, final Context context) throws IOException { - packageResource = new File(context.getPackageResourcePath()); - final var dexDir = new File(context.getCacheDir(), "app_dex"); - FileUtils.deleteRecursively(dexDir); - dexDir.mkdirs(); + public void unzip(final PublishSubject progress, final Context context) + throws IOException { + packageResource = context.getPackageResourcePath(); final var sizeToZipEntryMatcher = new HashMap(); for (final var matcher : matchers) { @@ -62,36 +52,19 @@ public void unzip(final PublishSubject _progress, final Context context) final var entrySize = zipFile.size(); while (enumeration.hasMoreElements()) { entryCount++; - _progress.onNext((float) entryCount / entrySize); + progress.onNext((float) entryCount / entrySize); final var ze = enumeration.nextElement(); - if (ze.getName().matches("classes[0-9]*?\\.dex")) { - FileUtils.copy(zipFile.getInputStream(ze), new File(dexDir, ze.getName())); - } else { - final var matcher = sizeToZipEntryMatcher.get(ze.getSize()); - if (matcher != null) { - matcher.setEntryName(ze.getName()); - } + final var matcher = sizeToZipEntryMatcher.get(ze.getSize()); + if (matcher != null) { + matcher.setEntryName(ze.getName()); } } zipFile.close(); - - final var fs = dexDir.listFiles(); - if (fs == null) { - throw new FileNotFoundException("解压失败"); - } - Arrays.sort(fs, Comparator.comparingInt(it -> { - try { - return Integer.parseInt(it.getName().replaceAll("[a-z.]", "")); - } catch (final NumberFormatException e) { - return 1; - } - })); - dexs = fs; - dexCount = dexs.length; } - public void decodeArsc() throws IOException, AndrolibException { + public void decodeArsc(final PublishSubject progress) + throws IOException, AndrolibException { final var strToResMatcher = new HashMap(); final var entryNameToZipEntryMatcher = new HashMap(); for (final var matcher : matchers) { @@ -134,26 +107,36 @@ public void decodeArsc() throws IOException, AndrolibException { zipFile.close(); } - public SearchScope fastSearchAndFindScope(final PublishSubject _progress) throws IOException { - searcher = new DexBakSearcher(matchers); - var progress = 0F; - for (final var f : dexs) { - try (final var in = new BufferedInputStream(new FileInputStream(f))) { - final var dex = DexBackedDexFile.fromInputStream(null, in); - final var classDefs = new ArrayList<>(dex.getClasses()); - for (int i = 0, classCount = classDefs.size(); i < classCount; i++) { - progress += (float) 1 / dexCount / classCount; - _progress.onNext(progress); - - searcher.searchStringAndLiteral(classDefs.get(i), new DexBakSearcher.MatcherListener() { - @Override - public void onMatch(@NonNull final Matcher matcher, @NonNull final String clazz, @NonNull final String method) { - AcRules.putRule(matcher.toString(), clazz, method); - } - }); - } - } - } + public SearchScope fastSearchAndFindScope(final PublishSubject progress) { + load("dexkit"); + bridge = DexKitBridge.create(packageResource); + + matchers.stream() + .filter(StringMatcher.class::isInstance) + .map(StringMatcher.class::cast) + .forEach(matcher -> { + final var ret = bridge.findMethodUsingString( + new MethodUsingStringArgs.Builder() + .usingString(matcher.getStr()) + .build() + ); + for (final var d : ret) { + AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); + } + }); + matchers.stream() + .filter(ResMatcher.class::isInstance) + .map(ResMatcher.class::cast) + .forEach(matcher -> { + final var ret = bridge.findMethodUsingNumber( + new MethodUsingNumberArgs.Builder() + .usingNumber(matcher.getId()) + .build() + ); + for (final var d : ret) { + AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); + } + }); // find repackageclasses final var segments = new ArrayList>(); @@ -177,69 +160,45 @@ public void onMatch(@NonNull final Matcher matcher, @NonNull final String clazz, } scope.pkg = repackageclasses.toString(); - final var numberOfClassesNeedToSearch = new int[dexCount]; - for (var i = 0; i < dexCount; i++) { - try (final var in = new BufferedInputStream(new FileInputStream(dexs[i]))) { - final var dex = DexBackedDexFile.fromInputStream(null, in); - final var classDefs = ClassDefItem.getClasses(dex); - var count = 0; - for (final var classDef : classDefs) { - if (scope.isInScope(classDef)) { - count++; - } - } - numberOfClassesNeedToSearch[i] = count; - } - } - scope.numberOfClassesNeedToSearch = numberOfClassesNeedToSearch; return new SearchScope(scope); } - public void searchSmali(final PublishSubject _progress) throws IOException { - var searchedClassCount = 0; - final var totalClassesNeedToSearch = Arrays.stream(scope.numberOfClassesNeedToSearch).sum(); - for (var i = 0; i < dexCount; i++) { - if (scope.numberOfClassesNeedToSearch[i] == 0) { - continue; - } - try (final var in = new BufferedInputStream(new FileInputStream(dexs[i]))) { - final var dex = DexBackedDexFile.fromInputStream(null, in); - final var classDefs = new ArrayList<>(dex.getClasses()); - for (final var classDef : classDefs) { - final var signature = classDef.getType(); - if (scope.isInScope(signature)) { - searchedClassCount++; - _progress.onNext((float) searchedClassCount / totalClassesNeedToSearch); - - searcher.searchSmali(classDef, new DexBakSearcher.MatcherListener() { - @Override - public void onMatch(@NonNull final Matcher matcher, @NonNull final String clazz, @NonNull final String method) { - AcRules.putRule(matcher.toString(), clazz, method); - } - }); + public void searchSmali(final PublishSubject progress) { + matchers.stream() + .filter(SmaliMatcher.class::isInstance) + .map(SmaliMatcher.class::cast) + .forEach(matcher -> { + final var ret = bridge.findMethodInvoking( + new MethodInvokingArgs.Builder() + .methodDeclareClass(scope.pkg) + .methodDescriptor(matcher.getStr()) + .build() + ); + for (final var d : ret.keySet()) { + AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); } - } - } - } + }); + + bridge.close(); } public void saveDexSignatureHashCode() throws IOException { - try (final var in = new FileInputStream(dexs[0])) { - final var signatureHashCode = Arrays.hashCode(DeobfuscationHelper.calcSignature(in)); - Preferences.putSignature(signatureHashCode); + try (final var apk = new ZipFile(packageResource)) { + try (final var in = apk.getInputStream(apk.getEntry("classes.dex"))) { + final var signatureHashCode = Arrays.hashCode(DeobfuscationHelper.calcSignature(in)); + Preferences.putSignature(signatureHashCode); + } } } public static class SearchScope { public String pkg; - int[] numberOfClassesNeedToSearch; SearchScope() { } SearchScope(final SearchScope scope) { pkg = scope.pkg; - numberOfClassesNeedToSearch = scope.numberOfClassesNeedToSearch; } boolean isInScope(final String classDef) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java index 88bfc4c9..f42db0c9 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java @@ -9,8 +9,6 @@ import android.content.pm.PackageManager; import android.os.Bundle; -import org.jf.dexlib2.dexbacked.raw.HeaderItem; - import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -26,6 +24,8 @@ import gm.tieba.tabswitch.util.DisplayUtils; public class DeobfuscationHelper { + private static final int SIGNATURE_DATA_START_OFFSET = 32; + private static final int SIGNATURE_SIZE = 20; static byte[] calcSignature(final InputStream dataStoreInput) throws IOException { final MessageDigest md; @@ -35,7 +35,7 @@ static byte[] calcSignature(final InputStream dataStoreInput) throws IOException throw new RuntimeException(ex); } - dataStoreInput.skip(HeaderItem.SIGNATURE_DATA_START_OFFSET); + dataStoreInput.skip(SIGNATURE_DATA_START_OFFSET); final byte[] buffer = new byte[4 * 1024]; int bytesRead = dataStoreInput.read(buffer); while (bytesRead >= 0) { @@ -44,7 +44,7 @@ static byte[] calcSignature(final InputStream dataStoreInput) throws IOException } final byte[] signature = md.digest(); - if (signature.length != HeaderItem.SIGNATURE_SIZE) { + if (signature.length != SIGNATURE_SIZE) { throw new RuntimeException("unexpected digest write: " + signature.length + " bytes"); } return signature; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java index b631775d..c19fff01 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java @@ -11,7 +11,7 @@ public class DeobfuscationViewModel { private final PublishSubject _progress = PublishSubject.create(); - Observable progress = _progress; + public final Observable progress = _progress; private final Deobfuscation deobfuscation = new Deobfuscation(); public void deobfuscateStep1(final Context context, final List matchers) throws IOException { @@ -20,10 +20,10 @@ public void deobfuscateStep1(final Context context, final List matchers } public void deobfuscateStep2() throws IOException, AndrolibException { - deobfuscation.decodeArsc(); + deobfuscation.decodeArsc(_progress); } - public Deobfuscation.SearchScope deobfuscateStep3() throws IOException { + public Deobfuscation.SearchScope deobfuscateStep3() { return deobfuscation.fastSearchAndFindScope(_progress); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DexBakSearcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DexBakSearcher.kt deleted file mode 100644 index c1d6d155..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DexBakSearcher.kt +++ /dev/null @@ -1,144 +0,0 @@ -package gm.tieba.tabswitch.hooker.deobfuscation - -import org.jf.baksmali.Adaptors.ClassDefinition -import org.jf.baksmali.Adaptors.MethodDefinition -import org.jf.baksmali.BaksmaliOptions -import org.jf.baksmali.formatter.BaksmaliWriter -import org.jf.dexlib2.Format -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.ClassDef -import org.jf.dexlib2.iface.instruction.DualReferenceInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.instruction.WideLiteralInstruction -import org.jf.dexlib2.iface.reference.Reference.InvalidReferenceException -import org.jf.dexlib2.iface.reference.StringReference -import java.io.BufferedWriter -import java.io.ByteArrayOutputStream -import java.io.OutputStreamWriter -import java.nio.charset.StandardCharsets - -abstract class Matcher { - abstract override fun toString(): String -} - -class StringMatcher(val str: String) : Matcher() { - override fun toString(): String = str -} - -class SmaliMatcher(val str: String) : Matcher() { - override fun toString(): String = str -} - -open class ResMatcher(var id: Long = 0) : Matcher() { - override fun toString(): String { - throw UnsupportedOperationException() - } -} - -class StringResMatcher(val str: String) : ResMatcher() { - override fun toString(): String = str -} - -class ZipEntryMatcher(val size: Long) : ResMatcher() { - var entryName: String = "" - override fun toString(): String = size.toString() -} - -class DexBakSearcher(matchers: Iterable = emptyList()) { - private val stringMatchers = mutableMapOf() - private val literalMatchers = mutableMapOf() - private val smaliMatchers = mutableMapOf() - - init { - for (matcher in matchers) { - when (matcher) { - is StringMatcher -> stringMatchers[matcher.str] = matcher - is ResMatcher -> literalMatchers[matcher.id] = matcher - is SmaliMatcher -> smaliMatchers[matcher.str] = matcher - } - } - } - - // @see org.jf.baksmali.Adaptors.Format.InstructionMethodItem.writeTo() - fun ClassDef.searchStringAndLiteral(l: MatcherListener) { - for (method in methods) { - val methodImpl = method.implementation ?: continue - for (instruction in methodImpl.instructions) { - when (instruction.opcode) { - Opcode.CONST_STRING, Opcode.CONST_STRING_JUMBO -> if (instruction is ReferenceInstruction) { - val reference = instruction.reference - try { - reference.validateReference() - if (reference is StringReference) { - val string = reference.string - stringMatchers[string]?.let { - l.onMatch(it, type.convert(), method.name) - } - } - } catch (ignored: InvalidReferenceException) { - } - if (instruction is DualReferenceInstruction) { - try { - val reference2 = instruction.reference2 - reference2.validateReference() - if (reference2 is StringReference) { - val string = reference2.string - stringMatchers[string]?.let { - l.onMatch(it, type.convert(), method.name) - } - } - } catch (ignored: InvalidReferenceException) { - } - } - } - - Opcode.CONST_4, Opcode.CONST_16, Opcode.CONST, Opcode.CONST_HIGH16, - Opcode.CONST_WIDE_16, Opcode.CONST_WIDE_32, Opcode.CONST_WIDE, - Opcode.CONST_WIDE_HIGH16 -> if (instruction.opcode.format in arrayOf( - Format.Format11n, Format.Format21ih, Format.Format21lh, - Format.Format21s, Format.Format31i, Format.Format51l, - Format.Format22b, Format.Format22s - ) && instruction is WideLiteralInstruction - ) { - val wideLiteral = instruction.wideLiteral - literalMatchers[wideLiteral]?.let { - l.onMatch(it, type.convert(), method.name) - } - } - - else -> { - // do nothing. - } - } - } - } - } - - fun ClassDef.searchSmali(l: MatcherListener) { - for (method in methods) { - val methodImpl = method.implementation ?: continue - val baos = ByteArrayOutputStream() - val bufWriter = BufferedWriter(OutputStreamWriter(baos, StandardCharsets.UTF_8)) - BaksmaliWriter(bufWriter, null).use { writer -> - val classDefinition = ClassDefinition(BaksmaliOptions(), this) - val methodDefinition = MethodDefinition(classDefinition, method, methodImpl) - methodDefinition.writeTo(writer) - writer.flush() - val smali = baos.toString() - smaliMatchers.forEach { - if (smali.contains(it.key)) { - l.onMatch(it.value, type.convert(), method.name) - } - } - } - } - } - - fun String.convert() = substring(indexOf("L") + 1, indexOf(";")).replace("/", ".") - - fun String.revert() = "L" + replace(".", "/") + ";" - - abstract class MatcherListener { - open fun onMatch(matcher: Matcher, clazz: String, method: String) {} - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt new file mode 100644 index 00000000..3a42abbf --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -0,0 +1,28 @@ +package gm.tieba.tabswitch.hooker.deobfuscation + +abstract class Matcher { + abstract override fun toString(): String +} + +class StringMatcher(val str: String) : Matcher() { + override fun toString(): String = str +} + +class SmaliMatcher(val str: String) : Matcher() { + override fun toString(): String = str +} + +open class ResMatcher(var id: Long = 0) : Matcher() { + override fun toString(): String { + throw UnsupportedOperationException() + } +} + +class StringResMatcher(val str: String) : ResMatcher() { + override fun toString(): String = str +} + +class ZipEntryMatcher(val size: Long) : ResMatcher() { + var entryName: String = "" + override fun toString(): String = size.toString() +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/NativeCheck.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/NativeCheck.java index cd6ef392..3bae2fe0 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/NativeCheck.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/NativeCheck.java @@ -2,27 +2,12 @@ import android.annotation.SuppressLint; -import de.robv.android.xposed.XposedBridge; import gm.tieba.tabswitch.XposedContext; @SuppressLint("UnsafeDynamicallyLoadedCode") public class NativeCheck extends XposedContext { static { - final var soPaths = new String[]{ - sPath + "!/lib/armeabi-v7a/libcheck.so", - sPath + "!/lib/arm64-v8a/libcheck.so", - }; - for (int i = 0; i < 3; i++) { - for (final var soPath : soPaths) { - try { - System.load(soPath); - break; - } catch (final UnsatisfiedLinkError e) { - XposedBridge.log(i + soPath); - XposedBridge.log(e); - } - } - } + load("check"); } public static native boolean inline(String name); diff --git a/app/src/main/java/gm/tieba/tabswitch/util/Strings.kt b/app/src/main/java/gm/tieba/tabswitch/util/Strings.kt deleted file mode 100644 index ddb8ecea..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/util/Strings.kt +++ /dev/null @@ -1,16 +0,0 @@ -package gm.tieba.tabswitch.util - -/** - * Returns a substring between the first occurrence of [after] and [before]. - * If the string does not contain the delimiter, returns [missingDelimiterValue] which defaults to the original string. - */ -fun String.substringBetween( - after: String, before: String, missingDelimiterValue: String = this -): String { - val indexOfAfter = indexOf(after) - if (indexOfAfter == -1) return missingDelimiterValue - val indexOfBefore = lastIndexOf(before) - if (indexOfBefore == -1) return missingDelimiterValue - if (indexOfAfter > indexOfBefore) return missingDelimiterValue - return substring(indexOfAfter + after.length, indexOfBefore) -} diff --git a/settings.gradle b/settings.gradle index 4350906a..26f73219 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.0.0' - id 'com.android.library' version '8.0.0' + id 'com.android.application' version '8.0.1' + id 'com.android.library' version '8.0.1' id 'org.jetbrains.kotlin.android' version '1.7.0' id 'org.jetbrains.kotlin.kapt' version '1.7.0' } From 7ce16f21de0020dd8f584897a71f79789018d1c5 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Mon, 8 May 2023 18:33:35 +0800 Subject: [PATCH 006/158] fix misuse --- .../gm/tieba/tabswitch/XposedContext.java | 21 ++++++++++++------- .../hooker/deobfuscation/Deobfuscation.java | 7 +++---- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java index 56a5c0a9..d487b780 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java @@ -9,6 +9,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; import de.robv.android.xposed.XposedBridge; @@ -32,15 +33,19 @@ protected static Context getContext() { } protected static void load(final String filename) { - Arrays.stream(Build.SUPPORTED_ABIS) + final var soPaths = Arrays.stream(Build.SUPPORTED_ABIS) .map(abi -> sPath + "!/lib/" + abi + "/lib" + filename + ".so") - .forEach(soPath -> { - try { - System.load(soPath); - } catch (final UnsatisfiedLinkError e) { - XposedBridge.log(e); - } - }); + .collect(Collectors.toList()); + UnsatisfiedLinkError err = null; + for (final var soPath : soPaths) { + try { + System.load(soPath); + return; + } catch (final UnsatisfiedLinkError e) { + err = e; + } + } + XposedBridge.log(err); } protected static void runOnUiThread(final Runnable r) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index ab4fc030..1b2fc8bf 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -18,7 +18,7 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.dao.Preferences; import io.luckypray.dexkit.DexKitBridge; -import io.luckypray.dexkit.builder.MethodInvokingArgs; +import io.luckypray.dexkit.builder.MethodCallerArgs; import io.luckypray.dexkit.builder.MethodUsingNumberArgs; import io.luckypray.dexkit.builder.MethodUsingStringArgs; import io.reactivex.rxjava3.subjects.PublishSubject; @@ -168,9 +168,8 @@ public void searchSmali(final PublishSubject progress) { .filter(SmaliMatcher.class::isInstance) .map(SmaliMatcher.class::cast) .forEach(matcher -> { - final var ret = bridge.findMethodInvoking( - new MethodInvokingArgs.Builder() - .methodDeclareClass(scope.pkg) + final var ret = bridge.findMethodCaller( + new MethodCallerArgs.Builder() .methodDescriptor(matcher.getStr()) .build() ); From 08bb384a0ee4c923d271c63585bdcd78946c99b3 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Mon, 8 May 2023 19:45:41 +0800 Subject: [PATCH 007/158] excludes x86 jniLibs --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 7d6c887b..b790ffd4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ android { excludes += ['/META-INF/**', '/kotlin/**', '/okhttp3/**'] } jniLibs { - excludes += ['**/liblog.so'] + excludes += ['**/liblog.so', '/lib/x86/**', '/lib/x86_64/**'] } } buildFeatures { From 99b10a5c1499adf2b73c7239fb7bf0279410d9e8 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Tue, 9 May 2023 09:43:27 +0800 Subject: [PATCH 008/158] bump ver --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index b790ffd4..286def0f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 24 targetSdk sdk versionCode gitCommitCount - versionName '2.8.4-beta' + versionName '2.8.4' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { From 91f0b9738c3aecda2213f32c415f386e9d736a12 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Wed, 10 May 2023 12:06:02 +0800 Subject: [PATCH 009/158] URLEncoder.encode --- app/build.gradle | 2 +- app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 286def0f..fa74a37e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 24 targetSdk sdk versionCode gitCommitCount - versionName '2.8.4' + versionName '2.8.5' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java index 5b398851..ae94b860 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java @@ -8,7 +8,6 @@ import org.json.JSONObject; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -114,7 +113,7 @@ private void runSign() { final Iterator iterator = mFollow.iterator(); while (iterator.hasNext()) { final String s = iterator.next(); - final String body = "kw=" + URLEncoder.encode(s, StandardCharsets.UTF_8) + "&tbs=" + mTbs + "&sign=" + + final String body = "kw=" + URLEncoder.encode(s, "UTF-8") + "&tbs=" + mTbs + "&sign=" + AutoSignHelper.enCodeMd5("kw=" + s + "tbs=" + mTbs + "tiebaclient!!!"); final JSONObject post = AutoSignHelper.post(SIGN_URL, body); if ("0".equals(post.getString("error_code"))) { From ec0dd26e1ef0aada9a14619e1c9e55453b9557e2 Mon Sep 17 00:00:00 2001 From: klxiaoniu Date: Thu, 11 May 2023 10:43:42 +0800 Subject: [PATCH 010/158] opt getTbSkin --- .../gm/tieba/tabswitch/util/DisplayUtils.java | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java index 7dbceec9..b38dd3d4 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java @@ -5,7 +5,11 @@ import android.content.Intent; import android.content.res.Configuration; -public class DisplayUtils { +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; + +public class DisplayUtils extends XposedContext { public static boolean isLightMode(final Context context) { return (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO; @@ -22,20 +26,30 @@ public static void restart(final Activity activity) { } public static String getTbSkin(final Context context) { - final var settings = context.getSharedPreferences("settings", Context.MODE_PRIVATE); - if (settings.getBoolean("key_is_follow_system_mode", false)) { - return isLightMode(context) ? "" : "_2"; - } else { - final var commonSettings = context.getSharedPreferences( - "common_settings", Context.MODE_PRIVATE); - switch (commonSettings.getString("skin_", "0")) { - case "4": - return "_2"; - case "0": - default: - return ""; + //Lcom/baidu/tbadk/core/TbadkCoreApplication;->getSkinType()I + int skinType; + try { + Object instance = XposedHelpers.callStaticMethod(XposedHelpers.findClass("com.baidu.tbadk.core.TbadkCoreApplication", sClassLoader), "getInst"); + skinType = (int) XposedHelpers.callMethod(instance, "getSkinType"); + } catch (Exception e) { + XposedBridge.log(e); + final var settings = context.getSharedPreferences("settings", Context.MODE_PRIVATE); + if (settings.getBoolean("key_is_follow_system_mode", false)) { + return isLightMode(context) ? "" : "_2"; + } else { + final var commonSettings = context.getSharedPreferences( + "common_settings", Context.MODE_PRIVATE); + skinType = Integer.parseInt((commonSettings.getString("skin_", "0"))); } } + switch (skinType) { + case 1: + case 4: + return "_2"; + case 0: + default: + return ""; + } } public static int dipToPx(final Context context, final float dipValue) { From 88cc368f56ccefe17d627187602479800cc5643f Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Mon, 15 May 2023 14:29:18 +0800 Subject: [PATCH 011/158] fix progress --- app/build.gradle | 4 +- .../hooker/deobfuscation/Deobfuscation.java | 133 +++++++----------- .../deobfuscation/DeobfuscationHooker.java | 11 +- .../deobfuscation/DeobfuscationViewModel.java | 8 +- 4 files changed, 55 insertions(+), 101 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fa74a37e..786d1ddf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 24 targetSdk sdk versionCode gitCommitCount - versionName '2.8.5' + versionName '2.8.6-beta' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { @@ -74,7 +74,7 @@ dependencies { kapt "androidx.room:room-compiler:$room_version" implementation 'io.reactivex.rxjava3:rxjava:3.1.2' - implementation 'org.luckypray:DexKit:1.1.6' + implementation 'org.luckypray:DexKit:1.1.7' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.5' diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 1b2fc8bf..8c23bf25 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -5,8 +5,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Objects; +import java.util.function.Consumer; import java.util.zip.ZipFile; import brut.androlib.AndrolibException; @@ -14,7 +17,6 @@ import brut.androlib.res.data.value.ResStringValue; import brut.androlib.res.decoder.ARSCDecoder; import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRule; import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.dao.Preferences; import io.luckypray.dexkit.DexKitBridge; @@ -22,13 +24,10 @@ import io.luckypray.dexkit.builder.MethodUsingNumberArgs; import io.luckypray.dexkit.builder.MethodUsingStringArgs; import io.reactivex.rxjava3.subjects.PublishSubject; -import kotlin.collections.CollectionsKt; public class Deobfuscation extends XposedContext { private String packageResource; private final List matchers = new ArrayList<>(); - private DexKitBridge bridge; - private final SearchScope scope = new SearchScope(); public void setMatchers(final List matchers) { this.matchers.clear(); @@ -63,6 +62,18 @@ public void unzip(final PublishSubject progress, final Context context) zipFile.close(); } + private void forEachProgressed(final PublishSubject progress, + final Collection collection, + final Consumer action) { + final var size = collection.size(); + var count = 0; + for (final T t : collection) { + count++; + progress.onNext((float) count / size); + action.accept(t); + } + } + public void decodeArsc(final PublishSubject progress) throws IOException, AndrolibException { final var strToResMatcher = new HashMap(); @@ -81,7 +92,7 @@ public void decodeArsc(final PublishSubject progress) final var ze = zipFile.getEntry("resources.arsc"); try (final var in = zipFile.getInputStream(ze)) { final var pkg = ARSCDecoder.decode(in, true, true).getOnePackage(); - pkg.listResSpecs().forEach(resResSpec -> { + forEachProgressed(progress, pkg.listResSpecs(), resResSpec -> { if (resResSpec.hasDefaultResource()) { try { final var resValue = resResSpec.getDefaultResource().getValue(); @@ -107,76 +118,41 @@ public void decodeArsc(final PublishSubject progress) zipFile.close(); } - public SearchScope fastSearchAndFindScope(final PublishSubject progress) { + public void dexkit(final PublishSubject progress) { load("dexkit"); - bridge = DexKitBridge.create(packageResource); - - matchers.stream() - .filter(StringMatcher.class::isInstance) - .map(StringMatcher.class::cast) - .forEach(matcher -> { - final var ret = bridge.findMethodUsingString( - new MethodUsingStringArgs.Builder() - .usingString(matcher.getStr()) - .build() - ); - for (final var d : ret) { - AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); - } - }); - matchers.stream() - .filter(ResMatcher.class::isInstance) - .map(ResMatcher.class::cast) - .forEach(matcher -> { - final var ret = bridge.findMethodUsingNumber( - new MethodUsingNumberArgs.Builder() - .usingNumber(matcher.getId()) - .build() - ); - for (final var d : ret) { - AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); - } - }); - - // find repackageclasses - final var segments = new ArrayList>(); - AcRules.sDao.getAll().stream().map(AcRule::getClazz).forEach(cls -> { - final var splits = cls.split("\\."); - for (int i = 0, length = splits.length; i < length; i++) { - final var split = splits[i]; - if (segments.size() <= i) { - segments.add(new ArrayList<>()); + final var bridge = DexKitBridge.create(packageResource); + Objects.requireNonNull(bridge); + + forEachProgressed(progress, matchers, matcher -> { + if (matcher instanceof final StringMatcher stringMatcher) { + final var ret = bridge.findMethodUsingString( + new MethodUsingStringArgs.Builder() + .usingString(stringMatcher.getStr()) + .build() + ); + for (final var d : ret) { + AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); + } + } else if (matcher instanceof final ResMatcher resMatcher) { + final var ret = bridge.findMethodUsingNumber( + new MethodUsingNumberArgs.Builder() + .usingNumber(resMatcher.getId()) + .build() + ); + for (final var d : ret) { + AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); + } + } else if (matcher instanceof final SmaliMatcher smaliMatcher) { + final var ret = bridge.findMethodCaller( + new MethodCallerArgs.Builder() + .methodDescriptor(smaliMatcher.toString()) + .build() + ); + for (final var d : ret.keySet()) { + AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); } - segments.get(i).add(split); } }); - final var repackageclasses = new StringBuilder("L"); - for (final var segment : segments) { - final var most = gm.tieba.tabswitch.util.CollectionsKt.most(segment); - if (CollectionsKt.count(segment, s -> s.equals(most)) < segments.get(0).size() / 2) { - break; - } - repackageclasses.append(most).append("/"); - } - scope.pkg = repackageclasses.toString(); - - return new SearchScope(scope); - } - - public void searchSmali(final PublishSubject progress) { - matchers.stream() - .filter(SmaliMatcher.class::isInstance) - .map(SmaliMatcher.class::cast) - .forEach(matcher -> { - final var ret = bridge.findMethodCaller( - new MethodCallerArgs.Builder() - .methodDescriptor(matcher.getStr()) - .build() - ); - for (final var d : ret.keySet()) { - AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); - } - }); bridge.close(); } @@ -189,19 +165,4 @@ public void saveDexSignatureHashCode() throws IOException { } } } - - public static class SearchScope { - public String pkg; - - SearchScope() { - } - - SearchScope(final SearchScope scope) { - pkg = scope.pkg; - } - - boolean isInScope(final String classDef) { - return classDef.startsWith(pkg); - } - } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java index e249de14..2ae05c30 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java @@ -86,17 +86,14 @@ public void afterHookedMethod(final MethodHookParam param) throws Throwable { new Thread(() -> { try { - setMessage("(1/4) 解压"); + setMessage("(1/3) 解析安装包"); viewModel.deobfuscateStep1(mActivity, mMatchers); - setMessage("(2/4) 解析资源"); + setMessage("(2/3) 解析资源"); viewModel.deobfuscateStep2(); - setMessage("(3/4) 搜索字符串和资源 id"); - final var scope = viewModel.deobfuscateStep3(); - - setMessage("(4/4) 在 " + scope.pkg + " 中搜索代码"); - viewModel.deobfuscateStep4(); + setMessage("(3/3) 搜索字符串、资源 id 和方法调用"); + viewModel.deobfuscateStep3(); XposedBridge.log("deobfuscate accomplished, current version: " + DeobfuscationHelper.getTbVersion(mActivity)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java index c19fff01..79b72935 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java @@ -23,12 +23,8 @@ public void deobfuscateStep2() throws IOException, AndrolibException { deobfuscation.decodeArsc(_progress); } - public Deobfuscation.SearchScope deobfuscateStep3() { - return deobfuscation.fastSearchAndFindScope(_progress); - } - - public void deobfuscateStep4() throws IOException { - deobfuscation.searchSmali(_progress); + public void deobfuscateStep3() throws IOException { + deobfuscation.dexkit(_progress); deobfuscation.saveDexSignatureHashCode(); } } From 9b166a19f26faa82d41765c11e197b8d7711b2a7 Mon Sep 17 00:00:00 2001 From: klxiaoniu Date: Wed, 17 May 2023 23:00:44 +0800 Subject: [PATCH 012/158] feat: RemoveUpdate --- .../java/gm/tieba/tabswitch/XposedInit.java | 4 ++- .../tieba/tabswitch/hooker/TSPreference.java | 1 + .../hooker/eliminate/RemoveUpdate.java | 29 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 22e1c412..2d6a9983 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -49,6 +49,7 @@ import gm.tieba.tabswitch.hooker.eliminate.Purge; import gm.tieba.tabswitch.hooker.eliminate.PurgeEnter; import gm.tieba.tabswitch.hooker.eliminate.RedTip; +import gm.tieba.tabswitch.hooker.eliminate.RemoveUpdate; import gm.tieba.tabswitch.hooker.eliminate.SwitchManager; import gm.tieba.tabswitch.hooker.extra.ForbidGesture; import gm.tieba.tabswitch.hooker.extra.Hide; @@ -104,7 +105,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { new AgreeNum(), new FrsTab(), new Hide(), - new StackTrace() + new StackTrace(), + new RemoveUpdate() ); final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbDialog()); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 6510ccc8..a375c698 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -194,6 +194,7 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "净化进吧", "purge_enter", SwitchButtonHolder.TYPE_SWITCH)); // preferenceLayout.addView(new SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏小红点", "red_tip", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用更新提示", "remove_update", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "只推荐已关注的吧", "follow_filter", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤首页推荐", "personalized_filter", SwitchButtonHolder.TYPE_DIALOG)); preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤帖子回复", "content_filter", SwitchButtonHolder.TYPE_DIALOG)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java new file mode 100644 index 00000000..5a70a008 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java @@ -0,0 +1,29 @@ +package gm.tieba.tabswitch.hooker.eliminate; + +import androidx.annotation.NonNull; + +import org.json.JSONObject; + +import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.dao.Preferences; +import gm.tieba.tabswitch.hooker.IHooker; + +public class RemoveUpdate extends XposedContext implements IHooker { + + @NonNull + @Override + public String key() { + return "remove_update"; + } + + @Override + public void hook() throws Throwable { + //Lcom/baidu/tbadk/coreExtra/data/VersionData;->parserJson(Lorg/json/JSONObject;)V + if (Preferences.getBoolean("remove_update")) { + XposedHelpers.findAndHookMethod("com.baidu.tbadk.coreExtra.data.VersionData", sClassLoader, + "parserJson", JSONObject.class, XC_MethodReplacement.returnConstant(null)); + } + } +} From 3c412e56bae0ddf0643a2cbbcfc18bcb6b144297 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Thu, 18 May 2023 11:01:05 +0800 Subject: [PATCH 013/158] refine code --- .../hooker/deobfuscation/Deobfuscation.java | 21 +++++++++---------- .../hooker/eliminate/RemoveUpdate.java | 7 ++----- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 8c23bf25..cad72931 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -23,6 +23,7 @@ import io.luckypray.dexkit.builder.MethodCallerArgs; import io.luckypray.dexkit.builder.MethodUsingNumberArgs; import io.luckypray.dexkit.builder.MethodUsingStringArgs; +import io.luckypray.dexkit.descriptor.member.DexMethodDescriptor; import io.reactivex.rxjava3.subjects.PublishSubject; public class Deobfuscation extends XposedContext { @@ -76,6 +77,7 @@ private void forEachProgressed(final PublishSubject progress, public void decodeArsc(final PublishSubject progress) throws IOException, AndrolibException { + progress.onNext(0F); final var strToResMatcher = new HashMap(); final var entryNameToZipEntryMatcher = new HashMap(); for (final var matcher : matchers) { @@ -124,31 +126,28 @@ public void dexkit(final PublishSubject progress) { Objects.requireNonNull(bridge); forEachProgressed(progress, matchers, matcher -> { + Collection ret = null; if (matcher instanceof final StringMatcher stringMatcher) { - final var ret = bridge.findMethodUsingString( + ret = bridge.findMethodUsingString( new MethodUsingStringArgs.Builder() .usingString(stringMatcher.getStr()) .build() ); - for (final var d : ret) { - AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); - } } else if (matcher instanceof final ResMatcher resMatcher) { - final var ret = bridge.findMethodUsingNumber( + ret = bridge.findMethodUsingNumber( new MethodUsingNumberArgs.Builder() .usingNumber(resMatcher.getId()) .build() ); - for (final var d : ret) { - AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); - } } else if (matcher instanceof final SmaliMatcher smaliMatcher) { - final var ret = bridge.findMethodCaller( + ret = bridge.findMethodCaller( new MethodCallerArgs.Builder() .methodDescriptor(smaliMatcher.toString()) .build() - ); - for (final var d : ret.keySet()) { + ).keySet(); + } + if (ret != null) { + for (final var d : ret) { AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java index 5a70a008..9d995315 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java @@ -7,7 +7,6 @@ import de.robv.android.xposed.XC_MethodReplacement; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.Preferences; import gm.tieba.tabswitch.hooker.IHooker; public class RemoveUpdate extends XposedContext implements IHooker { @@ -21,9 +20,7 @@ public String key() { @Override public void hook() throws Throwable { //Lcom/baidu/tbadk/coreExtra/data/VersionData;->parserJson(Lorg/json/JSONObject;)V - if (Preferences.getBoolean("remove_update")) { - XposedHelpers.findAndHookMethod("com.baidu.tbadk.coreExtra.data.VersionData", sClassLoader, - "parserJson", JSONObject.class, XC_MethodReplacement.returnConstant(null)); - } + XposedHelpers.findAndHookMethod("com.baidu.tbadk.coreExtra.data.VersionData", sClassLoader, + "parserJson", JSONObject.class, XC_MethodReplacement.returnConstant(null)); } } From 2820defbba5f1426193a1b718f1f1c53262f1bc0 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Sat, 27 May 2023 06:11:15 +0800 Subject: [PATCH 014/158] adapt to 12.41.5.1 --- app/build.gradle | 4 ++-- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 14 ++++++++++++++ .../java/gm/tieba/tabswitch/util/ReflectUtils.java | 6 +++--- settings.gradle | 8 ++++---- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 786d1ddf..6e9010af 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,9 +74,9 @@ dependencies { kapt "androidx.room:room-compiler:$room_version" implementation 'io.reactivex.rxjava3:rxjava:3.1.2' - implementation 'org.luckypray:DexKit:1.1.7' + implementation 'org.luckypray:DexKit:1.1.8' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') - implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.5' + implementation 'com.squareup.okhttp3:okhttp:4.11.0' implementation 'dev.rikka.ndk.thirdparty:cxx:1.2.0' } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 48fbcebb..40dac0e3 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -187,6 +187,20 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable // 你可能感兴趣的人:initUI() final var md = ReflectUtils.findFirstMethodByExactType("com.baidu.tieba.homepage.concern.view.ConcernRecommendLayout"); XposedBridge.hookMethod(md, XC_MethodReplacement.returnConstant(null)); + try { + // 12.41.5.1+ + XposedHelpers.findAndHookMethod("com.baidu.tieba.feed.list.TemplateAdapter", sClassLoader, "setList", List.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var list = (List) param.args[0]; + list.removeIf(o -> { + final var type = (String) XposedHelpers.callMethod(o, "a"); + return "sideway_card".equals(type); + }); + } + }); + } catch (final XposedHelpers.ClassNotFoundError ignored) { + } // 首页任务中心:R.id.task TbImageView // XposedHelpers.findAndHookMethod("com.baidu.tieba.homepage.framework.indicator.NestedScrollHeader", sClassLoader, "onAttachedToWindow", new XC_MethodHook() { // @Override diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java index 80f0f37f..59f8349d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java @@ -59,8 +59,8 @@ public static int getDrawableId(final String fieldName) { * Returns the first field of the given type in a class. * Might be useful for Proguard'ed classes to identify fields with unique types. * - * @param clazz The class which either declares or inherits the field. - * @param type The type of the field. + * @param instance The class which either declares or inherits the field. + * @param type The type of the field. * @return A reference to the first field of the given type. * @throws NoSuchFieldError In case no matching field was not found. */ @@ -108,7 +108,7 @@ public static void setObjectField(final Object instance, final String className, * Returns the field at the given position in a class. * Might be useful for Proguard'ed classes to identify fields with fixed position. * - * @param clazz The class which either declares or inherits the field. + * @param instance The class which either declares or inherits the field. * @param position The position of the field. * @return A reference to the first field of the given type. * @throws NoSuchFieldError In case no matching field was not found. diff --git a/settings.gradle b/settings.gradle index 26f73219..91c4b98c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,10 +5,10 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.0.1' - id 'com.android.library' version '8.0.1' - id 'org.jetbrains.kotlin.android' version '1.7.0' - id 'org.jetbrains.kotlin.kapt' version '1.7.0' + id 'com.android.application' version '8.0.2' + id 'com.android.library' version '8.0.2' + id 'org.jetbrains.kotlin.android' version '1.8.20' + id 'org.jetbrains.kotlin.kapt' version '1.8.20' } } dependencyResolutionManagement { From 5f6ba441f7e0142208170bc27d7c90906b7ff6fd Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Thu, 1 Jun 2023 02:15:47 +0800 Subject: [PATCH 015/158] throw err --- app/src/main/java/gm/tieba/tabswitch/XposedContext.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java index d487b780..30501d34 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java @@ -40,12 +40,16 @@ protected static void load(final String filename) { for (final var soPath : soPaths) { try { System.load(soPath); - return; + err = null; + break; } catch (final UnsatisfiedLinkError e) { err = e; } } - XposedBridge.log(err); + if (err != null) { + XposedBridge.log(err); + throw err; + } } protected static void runOnUiThread(final Runnable r) { From e87788d6ef4610b3f47a35ac45209bbf4fec3a64 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Thu, 10 Aug 2023 17:02:00 +0800 Subject: [PATCH 016/158] adapt to 12.45.1.1 --- app/build.gradle | 14 +++++++------- .../java/gm/tieba/tabswitch/hooker/add/Ripple.java | 11 ----------- settings.gradle | 8 ++++---- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6e9010af..0d5f100f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' - id "org.jetbrains.kotlin.kapt" + id 'com.google.devtools.ksp' } def gitCommitCount = Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim()) @@ -9,7 +9,7 @@ def sdk = 33 android { compileSdk sdk - buildToolsVersion '33.0.2' + buildToolsVersion = '33.0.2' ndkVersion '25.2.9519653' defaultConfig { @@ -67,11 +67,11 @@ android { dependencies { compileOnly 'de.robv.android.xposed:api:82' api 'androidx.annotation:annotation:1.6.0' - def room_version = '2.5.1' - implementation "androidx.room:room-runtime:$room_version" - annotationProcessor "androidx.room:room-compiler:$room_version" - implementation "androidx.room:room-ktx:$room_version" - kapt "androidx.room:room-compiler:$room_version" + def roomVersion = '2.5.2' + implementation "androidx.room:room-runtime:$roomVersion" + annotationProcessor "androidx.room:room-compiler:$roomVersion" + implementation "androidx.room:room-ktx:$roomVersion" + ksp "androidx.room:room-compiler:$roomVersion" implementation 'io.reactivex.rxjava3:rxjava:3.1.2' implementation 'org.luckypray:DexKit:1.1.8' diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java index 5365d639..9ea0b481 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java @@ -7,7 +7,6 @@ import android.util.AttributeSet; import android.util.SparseArray; import android.view.View; -import android.widget.LinearLayout; import android.widget.RelativeLayout; import androidx.annotation.NonNull; @@ -62,16 +61,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { view.setBackground(createSubPbBackground()); } }); - // 楼层 - XposedHelpers.findAndHookConstructor("com.baidu.tieba.pb.pb.main.PbCommenFloorItemViewHolder", sClassLoader, - XposedHelpers.findClass("com.baidu.tbadk.TbPageContext", sClassLoader), View.class, int.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - // R.id.all_content - final var mAllContent = ReflectUtils.getObjectField(param.thisObject, LinearLayout.class); - mAllContent.setBackground(createBackground()); - } - }); } private StateListDrawable createBackground() { diff --git a/settings.gradle b/settings.gradle index 91c4b98c..bb9a6066 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,10 +5,10 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.0.2' - id 'com.android.library' version '8.0.2' - id 'org.jetbrains.kotlin.android' version '1.8.20' - id 'org.jetbrains.kotlin.kapt' version '1.8.20' + id 'com.android.application' version '8.1.0' + id 'com.android.library' version '8.1.0' + id 'org.jetbrains.kotlin.android' version '1.9.0' + id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false } } dependencyResolutionManagement { From afa07b624e015e93f5daa4081f442abc3ab696ca Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Thu, 24 Aug 2023 21:26:52 +0800 Subject: [PATCH 017/158] =?UTF-8?q?=E5=90=A7=E5=86=85%s=E6=96=B0=E8=B4=B4?= =?UTF-8?q?=E7=83=AD=E8=AE=AE=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 10 +++++++--- settings.gradle | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 40dac0e3..42293e7e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -41,7 +41,8 @@ public List matchers() { new SmaliMatcher("Lcom/baidu/tieba/recapp/lego/model/AdCard;->(Lorg/json/JSONObject;)V"), new SmaliMatcher("Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V"), new StringMatcher("pic_amount"), - new StringMatcher("key_frs_dialog_ad_last_show_time") + new StringMatcher("key_frs_dialog_ad_last_show_time"), + new StringMatcher("准备展示精灵动画提示控件") ); } @@ -49,8 +50,8 @@ public List matchers() { public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { switch (matcher) { - case "Lcom/baidu/tieba/recapp/lego/model/AdCard;->(Lorg/json/JSONObject;)V": // 卡片广告 - case "Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V": + case "Lcom/baidu/tieba/recapp/lego/model/AdCard;->(Lorg/json/JSONObject;)V": + case "Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V": // 卡片广告 XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(null)); break; case "pic_amount": // 图片广告:必须"recom_ala_info", "app", 可选"goods_info" @@ -67,6 +68,9 @@ public void hook() throws Throwable { } } break; + case "准备展示精灵动画提示控件": // 吧内%s新贴热议中 + XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(false)); + break; } }); // 启动广告 diff --git a/settings.gradle b/settings.gradle index bb9a6066..f511fde2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.1.0' - id 'com.android.library' version '8.1.0' + id 'com.android.application' version '8.1.1' + id 'com.android.library' version '8.1.1' id 'org.jetbrains.kotlin.android' version '1.9.0' id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false } From ecebd54f7708eb655240a21ac82440f042187366 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:34:44 +0800 Subject: [PATCH 018/158] adapt to 12.47.0.2 --- .../main/java/gm/tieba/tabswitch/hooker/TSPreference.java | 4 ++-- .../gm/tieba/tabswitch/hooker/extra/ForbidGesture.java | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index a375c698..6ce702d6 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -37,7 +37,7 @@ import gm.tieba.tabswitch.hooker.add.MyAttention; import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; +import gm.tieba.tabswitch.hooker.deobfuscation.StringResMatcher; import gm.tieba.tabswitch.hooker.extra.TraceChecker; import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.widget.NavigationBar; @@ -60,7 +60,7 @@ public String key() { @Override public List matchers() { - return List.of(new StringMatcher("reply_private_setting_switch")); + return List.of(new StringResMatcher("隐私设置")); } @Override diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java index 23d14fc7..af4c0026 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java @@ -68,7 +68,12 @@ protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) thr try { method = clazz.getDeclaredMethod("getMaxScaleValue", Bitmap.class); } catch (final NoSuchMethodException e) { - method = clazz.getDeclaredMethod("U", Bitmap.class); + try { + method = clazz.getDeclaredMethod("U", Bitmap.class); + } catch (final NoSuchMethodException e2) { + // 12.47.0.2+ + method = clazz.getDeclaredMethod("V", Bitmap.class); + } } XposedBridge.hookMethod(method, new XC_MethodHook() { @Override From 2050309b9c74ba37dbb7f986ca820729b369bfa3 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Tue, 12 Sep 2023 23:44:46 +0800 Subject: [PATCH 019/158] Update build.gradle --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0d5f100f..99c17ae6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,7 +66,7 @@ android { dependencies { compileOnly 'de.robv.android.xposed:api:82' - api 'androidx.annotation:annotation:1.6.0' + api 'androidx.annotation:annotation:1.7.0' def roomVersion = '2.5.2' implementation "androidx.room:room-runtime:$roomVersion" annotationProcessor "androidx.room:room-compiler:$roomVersion" @@ -74,7 +74,7 @@ dependencies { ksp "androidx.room:room-compiler:$roomVersion" implementation 'io.reactivex.rxjava3:rxjava:3.1.2' - implementation 'org.luckypray:DexKit:1.1.8' + implementation 'org.luckypray:DexKit:2.0.0-rc' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') implementation 'com.squareup.okhttp3:okhttp:4.11.0' From e6bb3d515a0aefdf83b897bca46a2547f5738681 Mon Sep 17 00:00:00 2001 From: GuhDoy <46047320+GuhDoy@users.noreply.github.com> Date: Sat, 16 Sep 2023 17:27:16 +0800 Subject: [PATCH 020/158] refactor with dexkit 2 --- app/build.gradle | 4 +- .../hooker/deobfuscation/Deobfuscation.java | 45 ++++++++++--------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 99c17ae6..7ff98856 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,8 +73,8 @@ dependencies { implementation "androidx.room:room-ktx:$roomVersion" ksp "androidx.room:room-compiler:$roomVersion" - implementation 'io.reactivex.rxjava3:rxjava:3.1.2' - implementation 'org.luckypray:DexKit:2.0.0-rc' + implementation 'io.reactivex.rxjava3:rxjava:3.1.7' + implementation 'org.luckypray:dexkit:2.0.0-rc2' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') implementation 'com.squareup.okhttp3:okhttp:4.11.0' diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index cad72931..e3984781 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -2,6 +2,11 @@ import android.content.Context; +import org.luckypray.dexkit.DexKitBridge; +import org.luckypray.dexkit.query.FindMethod; +import org.luckypray.dexkit.query.MethodDataList; +import org.luckypray.dexkit.query.matchers.MethodMatcher; + import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -19,11 +24,6 @@ import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.dao.Preferences; -import io.luckypray.dexkit.DexKitBridge; -import io.luckypray.dexkit.builder.MethodCallerArgs; -import io.luckypray.dexkit.builder.MethodUsingNumberArgs; -import io.luckypray.dexkit.builder.MethodUsingStringArgs; -import io.luckypray.dexkit.descriptor.member.DexMethodDescriptor; import io.reactivex.rxjava3.subjects.PublishSubject; public class Deobfuscation extends XposedContext { @@ -126,29 +126,32 @@ public void dexkit(final PublishSubject progress) { Objects.requireNonNull(bridge); forEachProgressed(progress, matchers, matcher -> { - Collection ret = null; + MethodDataList ret = null; if (matcher instanceof final StringMatcher stringMatcher) { - ret = bridge.findMethodUsingString( - new MethodUsingStringArgs.Builder() - .usingString(stringMatcher.getStr()) - .build() + ret = bridge.findMethod( + FindMethod.create().matcher( + MethodMatcher.create().usingStrings(stringMatcher.getStr()) + ) ); } else if (matcher instanceof final ResMatcher resMatcher) { - ret = bridge.findMethodUsingNumber( - new MethodUsingNumberArgs.Builder() - .usingNumber(resMatcher.getId()) - .build() + ret = bridge.findMethod( + FindMethod.create().matcher( + MethodMatcher.create().usingNumbers(resMatcher.getId()) + ) ); } else if (matcher instanceof final SmaliMatcher smaliMatcher) { - ret = bridge.findMethodCaller( - new MethodCallerArgs.Builder() - .methodDescriptor(smaliMatcher.toString()) - .build() - ).keySet(); + ret = bridge.findMethod( + FindMethod.create().matcher( + MethodMatcher.create().addInvoke( + MethodMatcher.create().descriptor(smaliMatcher.toString()) + ) + ) + ); } if (ret != null) { - for (final var d : ret) { - AcRules.putRule(matcher.toString(), d.getDeclaringClassName(), d.getName()); + for (final var methodData : ret) { + AcRules.putRule( + matcher.toString(), methodData.getClassName(), methodData.getName()); } } }); From 941271ea0f98f74fe41c272f30ba40f98b8e072e Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Wed, 20 Sep 2023 17:09:34 +0800 Subject: [PATCH 021/158] Update build.gradle --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 7ff98856..054c0551 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,7 +74,7 @@ dependencies { ksp "androidx.room:room-compiler:$roomVersion" implementation 'io.reactivex.rxjava3:rxjava:3.1.7' - implementation 'org.luckypray:dexkit:2.0.0-rc2' + implementation 'org.luckypray:dexkit:2.0.0-rc3' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') implementation 'com.squareup.okhttp3:okhttp:4.11.0' From 5199b18353f76ba9fc04d8d7745d97dba5eeb089 Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Thu, 30 Nov 2023 15:15:10 +0800 Subject: [PATCH 022/158] remove redirect_image --- app/build.gradle | 12 +-- .../java/gm/tieba/tabswitch/XposedInit.java | 2 - .../tieba/tabswitch/hooker/TSPreference.java | 1 - .../hooker/deobfuscation/Deobfuscation.java | 2 +- .../tabswitch/hooker/extra/RedirectImage.java | 89 ------------------- settings.gradle | 4 +- 6 files changed, 9 insertions(+), 101 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java diff --git a/app/build.gradle b/app/build.gradle index 054c0551..a8b195f9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,12 +5,12 @@ plugins { } def gitCommitCount = Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim()) -def sdk = 33 +def sdk = 34 android { compileSdk sdk - buildToolsVersion = '33.0.2' - ndkVersion '25.2.9519653' + buildToolsVersion = '34.0.0' + ndkVersion '26.0.10792818' defaultConfig { applicationId 'gm.tieba.tabswitch' @@ -67,16 +67,16 @@ android { dependencies { compileOnly 'de.robv.android.xposed:api:82' api 'androidx.annotation:annotation:1.7.0' - def roomVersion = '2.5.2' + def roomVersion = '2.6.0' implementation "androidx.room:room-runtime:$roomVersion" annotationProcessor "androidx.room:room-compiler:$roomVersion" implementation "androidx.room:room-ktx:$roomVersion" ksp "androidx.room:room-compiler:$roomVersion" implementation 'io.reactivex.rxjava3:rxjava:3.1.7' - implementation 'org.luckypray:dexkit:2.0.0-rc3' + implementation 'org.luckypray:dexkit:2.0.0-rc8' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') - implementation 'com.squareup.okhttp3:okhttp:4.11.0' + implementation 'com.squareup.okhttp3:okhttp:4.12.0' implementation 'dev.rikka.ndk.thirdparty:cxx:1.2.0' } diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 2d6a9983..335efc69 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -53,7 +53,6 @@ import gm.tieba.tabswitch.hooker.eliminate.SwitchManager; import gm.tieba.tabswitch.hooker.extra.ForbidGesture; import gm.tieba.tabswitch.hooker.extra.Hide; -import gm.tieba.tabswitch.hooker.extra.RedirectImage; import gm.tieba.tabswitch.hooker.extra.StackTrace; import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.widget.TbDialog; @@ -100,7 +99,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { new AutoSign(), new OpenSign(), new OriginSrc(), - new RedirectImage(), new ForbidGesture(), new AgreeNum(), new FrsTab(), diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 6ce702d6..425bbc11 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -234,7 +234,6 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "自动查看原图", "origin_src", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "奇怪怪" : "其它")); - preferenceLayout.addView(new SwitchButtonHolder(activity, "使用媒体存储保存图片", "redirect_image", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "用赞踩差数代替赞数", "agree_num", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createButton(TRACE, "希望有一天不再需要贴吧TS", true, v -> { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index e3984781..d43a5894 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -4,8 +4,8 @@ import org.luckypray.dexkit.DexKitBridge; import org.luckypray.dexkit.query.FindMethod; -import org.luckypray.dexkit.query.MethodDataList; import org.luckypray.dexkit.query.matchers.MethodMatcher; +import org.luckypray.dexkit.result.MethodDataList; import java.io.IOException; import java.util.ArrayList; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java deleted file mode 100644 index 208caf6e..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java +++ /dev/null @@ -1,89 +0,0 @@ -package gm.tieba.tabswitch.hooker.extra; - -import android.content.ContentValues; -import android.content.Context; -import android.os.Build; -import android.os.Environment; -import android.provider.MediaStore; - -import androidx.annotation.NonNull; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Arrays; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.FileUtils; - -public class RedirectImage extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "redirect_image"; - } - - @Override - public void hook() throws Throwable { - // 0x4197d783fc000000L - for (final var md : XposedHelpers.findClass("com.baidu.tbadk.core.util.FileHelper", sClassLoader).getDeclaredMethods()) { - switch (Arrays.toString(md.getParameterTypes())) { - case "[class java.lang.String, class [B, class android.content.Context]": - XposedBridge.hookMethod(md, new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(final MethodHookParam param) throws Throwable { - return saveImage((String) param.args[0], new ByteArrayInputStream( - (byte[]) param.args[1]), (Context) param.args[2]); - } - }); - break; - case "[class java.lang.String, class java.lang.String, class android.content.Context]": - XposedBridge.hookMethod(md, new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(final MethodHookParam param) throws Throwable { - return saveImage((String) param.args[1], new FileInputStream( - (String) param.args[0]), (Context) param.args[2]); - } - }); - break; - } - } - } - - private int saveImage(final String url, final InputStream is, final Context context) { - final var appContext = context.getApplicationContext(); - final var fileName = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf(".")); - try { - final var bb = FileUtils.toByteBuffer(is); - final var imageDetails = new ContentValues(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - imageDetails.put(MediaStore.MediaColumns.RELATIVE_PATH, - Environment.DIRECTORY_PICTURES + File.separator + "tieba"); - } else { - final var path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), - "tieba"); - path.mkdirs(); - imageDetails.put(MediaStore.MediaColumns.DATA, path + File.separator - + fileName + "." + FileUtils.getExtension(bb)); - } - imageDetails.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName); - imageDetails.put(MediaStore.MediaColumns.MIME_TYPE, "image/" + FileUtils.getExtension(bb)); - final var resolver = appContext.getContentResolver(); - final var imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails); - final var descriptor = resolver.openFileDescriptor(imageUri, "w"); - FileUtils.copy(bb, descriptor.getFileDescriptor()); - is.close(); - return 0; - } catch (final IOException | NullPointerException e) { - XposedBridge.log(e); - return -1; - } - } -} diff --git a/settings.gradle b/settings.gradle index f511fde2..149890c2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.1.1' - id 'com.android.library' version '8.1.1' + id 'com.android.application' version '8.1.4' + id 'com.android.library' version '8.1.4' id 'org.jetbrains.kotlin.android' version '1.9.0' id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false } From a9fe19b0e7bee6d0f39f10af05ea0a02de7e6457 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 1 Feb 2024 04:44:37 -0800 Subject: [PATCH 023/158] feat: adapt to new frs (12.50+) --- .../tieba/tabswitch/hooker/auto/FrsTab.java | 27 ++++-- .../tabswitch/hooker/eliminate/Purge.java | 84 ++++++++++++++++++- 2 files changed, 101 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java index e1860441..b3d2f88d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java @@ -2,9 +2,12 @@ import androidx.annotation.NonNull; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.List; import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRules; @@ -24,17 +27,17 @@ public String key() { @Override public List matchers() { - return List.of(new StringMatcher("from_pb_or_person")); + return List.of(new StringMatcher("forum_tab_current_list")); } private int mPosition; @Override public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.FrsPage.NavTabInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override public void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final List list = (List) XposedHelpers.getObjectField(param.thisObject, "tab"); + final List list = (List) XposedHelpers.getObjectField(param.thisObject, "frs_main_tab_list"); if (list == null) return; for (int i = 0; i < list.size(); i++) { if ((Integer) XposedHelpers.getObjectField(list.get(i), "tab_type") == 14) { @@ -45,12 +48,20 @@ public void beforeHookedMethod(final MethodHookParam param) throws Throwable { } }); AcRules.findRule(matchers(), (matcher, clazz, method) -> { - if (!"com.baidu.tieba.frs.vc.FrsTabViewController".equals(clazz)) return; - XposedHelpers.findAndHookMethod("com.baidu.tieba.frs.vc.FrsTabViewController", sClassLoader, method, new XC_MethodHook() { + if (!"com.baidu.tieba.forum.controller.TopController".equals(clazz)) return; + Class topControllerClass = XposedHelpers.findClass("com.baidu.tieba.forum.controller.TopController", sClassLoader); + Method targetMethod = XposedHelpers.findMethodBestMatch( + topControllerClass, + method, + null, + XposedHelpers.findClass("com.baidu.tieba.forum.controller.TopController", sClassLoader) + ); + XposedBridge.hookMethod(targetMethod, new XC_MethodHook() { @Override - public void afterHookedMethod(final MethodHookParam param) throws Throwable { - final Object viewPager = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tieba.frs.FrsTabViewPager"); - XposedHelpers.callMethod(viewPager, "setCurrentItem", mPosition, false); + public void afterHookedMethod(MethodHookParam param) throws Throwable { + Class customViewPager = XposedHelpers.findClass("com.baidu.tbadk.widget.CustomViewPager", sClassLoader); + final Object viewPager = XposedHelpers.findFirstFieldByExactType(param.args[1].getClass(), customViewPager).get(param.args[1]); + XposedHelpers.callMethod(viewPager, "setCurrentItem", mPosition); } }); }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 42293e7e..cc17828a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -2,17 +2,23 @@ import android.app.Activity; import android.content.Intent; +import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; +import android.webkit.WebView; +import android.webkit.WebViewClient; import androidx.annotation.NonNull; +import org.json.JSONObject; + import java.io.Serializable; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; @@ -42,10 +48,38 @@ public List matchers() { new SmaliMatcher("Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V"), new StringMatcher("pic_amount"), new StringMatcher("key_frs_dialog_ad_last_show_time"), - new StringMatcher("准备展示精灵动画提示控件") + new StringMatcher("准备展示精灵动画提示控件"), + new StringMatcher("TbChannelJsInterfaceNew") ); } - + final String jsRemoveOtherCardResponse = """ + (function (send) { + XMLHttpRequest.prototype.send = function () { + var callback = this.onreadystatechange; + this.onreadystatechange = function () { + if ( + this.readyState == 4 && + this.responseURL.match( + /https?:\\/\\/tieba\\.baidu\\.com\\/mo\\/q\\/frs\\/bottomPage.*/g + ) + ) { + res = JSON.parse(this.response); + res.data.card_activity.small_card = []; + res.data.friend_forum = []; + Object.defineProperty(this, "response", { writable: true }); + Object.defineProperty(this, "responseText", { + writable: true, + }); + this.response = this.responseText = JSON.stringify(res); + } + if (callback) { + callback.apply(this, arguments); + } + }; + send.apply(this, arguments); + }; + })(XMLHttpRequest.prototype.send); + """; @Override public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { @@ -71,6 +105,18 @@ public void hook() throws Throwable { case "准备展示精灵动画提示控件": // 吧内%s新贴热议中 XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(false)); break; + case "TbChannelJsInterfaceNew": // 吧友直播 + if (method.equals("getInitData")) { + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + JSONObject resultJson = new JSONObject((String) param.getResult()); + resultJson.getJSONObject("baseData").put("clientVersion", "undefined"); + param.setResult(resultJson.toString()); + } + }); + } + break; } }); // 启动广告 @@ -153,6 +199,9 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable final Object worksInfo = XposedHelpers.getObjectField(o, "works_info"); return worksInfo != null && (Integer) XposedHelpers.getObjectField(worksInfo, "is_works") == 1; }); + + // 推荐置顶广告 + XposedHelpers.setObjectField(param.thisObject, "live_answer", null); } }); // 吧页面 @@ -175,6 +224,18 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable // 万人直播互动 吧友开黑组队中 XposedHelpers.setObjectField(param.thisObject, "live_fuse_forum", new ArrayList<>()); + + // AI 聊天 + XposedHelpers.setObjectField(param.thisObject, "ai_chatroom_guide", null); + + // 聊天室 + XposedHelpers.setObjectField(param.thisObject, "frs_bottom", null); + + // 吧友直播 + final List frsMainTabList = (List) XposedHelpers.getObjectField(param.thisObject, "frs_main_tab_list"); + if (frsMainTabList != null) { + frsMainTabList.removeIf(o -> (Integer) XposedHelpers.getObjectField(o, "tab_type") == 92); + } } }); // 吧小程序 @@ -234,5 +295,24 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(false)); } } + // 更多板块 (吧友直播,友情吧) + XposedHelpers.findAndHookMethod( + "com.baidu.tieba.browser.webview.monitor.MonitorWebView", + sClassLoader, + "loadUrl", + String.class, + Map.class, + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + WebView webView = (WebView) param.thisObject; + webView.setWebViewClient(new WebViewClient() { + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + webView.evaluateJavascript(jsRemoveOtherCardResponse, null); + } + }); + } + }); } } From c202356315538af1c753b049da4d5b1f7be6eb43 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Sat, 3 Feb 2024 21:52:47 -0800 Subject: [PATCH 024/158] feat: remove bubble config and ad tab --- .../tabswitch/hooker/eliminate/Purge.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index cc17828a..e9d5bfd5 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -11,6 +11,7 @@ import androidx.annotation.NonNull; +import org.json.JSONArray; import org.json.JSONObject; import java.io.Serializable; @@ -49,7 +50,9 @@ public List matchers() { new StringMatcher("pic_amount"), new StringMatcher("key_frs_dialog_ad_last_show_time"), new StringMatcher("准备展示精灵动画提示控件"), - new StringMatcher("TbChannelJsInterfaceNew") + new StringMatcher("TbChannelJsInterfaceNew"), + new StringMatcher("bottom_bubble_config"), + new StringMatcher("index_tab_info") ); } final String jsRemoveOtherCardResponse = """ @@ -117,6 +120,34 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); } break; + case "bottom_bubble_config": // 底部导航栏特殊图标 + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + syncData.put("bottom_bubble_config", null); + } + }); + break; + case "index_tab_info": // 首页特殊Tab + if (method.equals("invoke")) { + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + JSONArray indexTabInfo = syncData.getJSONArray("index_tab_info"); + JSONArray newIndexTabInfo = new JSONArray(); + for (int i = 0; i < indexTabInfo.length(); i++) { + JSONObject currTab = indexTabInfo.getJSONObject(i); + if (!currTab.getString("tab_type").equals("202")) { + newIndexTabInfo.put(currTab); + } + } + syncData.put("index_tab_info", newIndexTabInfo); + } + }); + } + break; } }); // 启动广告 From b4a763fc9691c2d878e8ca11acbc064d3b389641 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Sat, 3 Feb 2024 22:07:41 -0800 Subject: [PATCH 025/158] feat: remove AlaLiveTipView --- .../java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index e9d5bfd5..2228d3c7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -52,7 +52,8 @@ public List matchers() { new StringMatcher("准备展示精灵动画提示控件"), new StringMatcher("TbChannelJsInterfaceNew"), new StringMatcher("bottom_bubble_config"), - new StringMatcher("index_tab_info") + new StringMatcher("index_tab_info"), + new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V") ); } final String jsRemoveOtherCardResponse = """ @@ -148,6 +149,10 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } break; + case "Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V": // 首页左上直播 + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, "android.view.ViewGroup", + XC_MethodReplacement.returnConstant(null)); + break; } }); // 启动广告 From 7cac608a335f805fe2e81fc57a109529aef9bcef Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Sun, 4 Feb 2024 00:32:25 -0800 Subject: [PATCH 026/158] chore: bump version and drop armeabi-v7a support --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a8b195f9..b92edb86 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,12 +17,12 @@ android { minSdk 24 targetSdk sdk versionCode gitCommitCount - versionName '2.8.6-beta' + versionName '2.9.0' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { cmake { - abiFilters 'armeabi-v7a', 'arm64-v8a' + abiFilters 'arm64-v8a' arguments '-DANDROID_STL=none' } } From b9ace1bb53e17a93cdf4ff1548404a16ec9bbf85 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Sun, 4 Feb 2024 02:28:59 -0800 Subject: [PATCH 027/158] feat: remove recommend hot forum --- .../hooker/eliminate/PurgeEnter.java | 80 ++++++++++++------- 1 file changed, 52 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index b75ca72b..55763cdc 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -1,10 +1,17 @@ package gm.tieba.tabswitch.hooker.eliminate; +import android.app.AndroidAppHelper; +import android.content.res.Resources; +import android.view.View; +import android.widget.LinearLayout; + import androidx.annotation.NonNull; +import java.lang.reflect.Modifier; import java.util.List; import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XC_MethodReplacement; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; @@ -12,13 +19,11 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringResMatcher; +import gm.tieba.tabswitch.util.ReflectUtils; public class PurgeEnter extends XposedContext implements IHooker, Obfuscated { - - private Object mRecommendHotForumTitle; - @NonNull @Override public String key() { @@ -28,40 +33,59 @@ public String key() { @Override public List matchers() { return List.of( - new StringResMatcher("热门吧精选"), - new StringMatcher("c13378") + new StringMatcher("c/f/forum/getRecommendForumData"), + new StringMatcher("enter_forum_login_tip"), + new SmaliMatcher("Lcom/baidu/adp/widget/ListView/BdListView;->setNextPage(Lcom/baidu/tieba/di;)V") ); } + private String mEnterForumAdViewClassName; + private int mInitLayoutHeight = -1; + private final Resources currentRes = AndroidAppHelper.currentApplication().getApplicationContext().getResources(); + private final int mLayoutOffset = currentRes.getDimensionPixelSize(currentRes.getIdentifier("tbds50", "dimen", "com.baidu.tieba")); + @Override public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { switch (matcher) { - case "热门吧精选": - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - mRecommendHotForumTitle = param.getResult(); - } - }); + case "c/f/forum/getRecommendForumData": + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)); + break; + case "enter_forum_login_tip": + mEnterForumAdViewClassName = clazz; break; - case "c13378": - for (final var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { - final var paramTypes = md.getParameterTypes(); - if (paramTypes.length == 2 && paramTypes[0] == List.class) { - XposedBridge.hookMethod(md, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - if (mRecommendHotForumTitle != null) { - final var list = (List) param.args[0]; - final var index = list.indexOf(mRecommendHotForumTitle); - if (index != -1) { - while (list.size() > index) { - list.remove(index); + case "Lcom/baidu/adp/widget/ListView/BdListView;->setNextPage(Lcom/baidu/tieba/di;)V": + if (clazz.equals(mEnterForumAdViewClassName)) { + if (XposedHelpers.findMethodExact(clazz, sClassLoader, method).getParameterTypes().length == 0) { + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + Object pbListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView"); + + String viewConstructorName = ""; + for (final var method : XposedHelpers.findClass("com.baidu.tbadk.core.view.PbListView", sClassLoader).getSuperclass().getDeclaredMethods()) { + if (method.getReturnType().toString().endsWith("View") && !Modifier.isAbstract(method.getModifiers())) { + viewConstructorName = method.getName(); + break; + } + } + View view = (View) XposedHelpers.callMethod(pbListView, viewConstructorName); + + if (view.getParent() == null) { + Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); + XposedHelpers.callMethod(bdListView, "setNextPage", pbListView); + } + + LinearLayout linearLayout = (LinearLayout) ReflectUtils.getObjectField(pbListView, "android.widget.LinearLayout"); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(linearLayout.getLayoutParams()); + + if (mInitLayoutHeight == -1){ + mInitLayoutHeight = layoutParams.height + mLayoutOffset; } + layoutParams.height = mInitLayoutHeight; + linearLayout.setLayoutParams(layoutParams); + return null; } - } - } }); } } From 54bd35948f073c5c33ae4578f066fa3684a2a6d2 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Wed, 7 Feb 2024 20:16:47 -0800 Subject: [PATCH 028/158] feat: remove hot card --- .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 2228d3c7..af4bb820 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -238,6 +238,9 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable // 推荐置顶广告 XposedHelpers.setObjectField(param.thisObject, "live_answer", null); + + // 圈层热贴 + XposedHelpers.setObjectField(param.thisObject, "hot_card", null); } }); // 吧页面 From 8097cfc53827af7d7dafd6d968061475d8d2490c Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Wed, 7 Feb 2024 23:25:49 -0800 Subject: [PATCH 029/158] chore: bump minsdk to 28 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index b92edb86..1262dac2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { defaultConfig { applicationId 'gm.tieba.tabswitch' - minSdk 24 + minSdk 28 targetSdk sdk versionCode gitCommitCount versionName '2.9.0' From 817cbac35fcde5fe808448a846cc1d07d733206b Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Wed, 7 Feb 2024 23:26:12 -0800 Subject: [PATCH 030/158] fix: unable to open personal homepage under LSPatch --- app/build.gradle | 2 +- .../java/gm/tieba/tabswitch/XposedInit.java | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 1262dac2..f1b55987 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.0' + versionName '2.9.1' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 335efc69..e01368a4 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -2,6 +2,7 @@ import android.app.Activity; import android.app.AlertDialog; +import android.app.AppComponentFactory; import android.app.Application; import android.app.Instrumentation; import android.content.Intent; @@ -64,10 +65,33 @@ public void initZygote(final IXposedHookZygoteInit.StartupParam startupParam) th sPath = startupParam.modulePath; } + private AppComponentFactory mAppComponentFactory = null; + @Override public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!"com.baidu.tieba".equals(lpparam.packageName) && XposedHelpers.findClassIfExists( "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader) == null) return; + + // Workaround to address an issue with LSPatch (unable to open personal homepage) + // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory + // However, LSPatch incorrectly sets appComponentFactory to null, causing android.app.Instrumentation.getFactory to fall back to AppComponentFactory.DEFAULT + // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) + // TODO: Report issue to upstream + XposedHelpers.findAndHookMethod( + "android.app.Instrumentation", + lpparam.classLoader, + "getFactory", + String.class, + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (mAppComponentFactory == null) { + mAppComponentFactory = (AppComponentFactory) lpparam.classLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); + } + param.setResult(mAppComponentFactory); + } + }); + XposedHelpers.findAndHookMethod(Instrumentation.class, "callApplicationOnCreate", Application.class, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { From 2721e9aac1adce3baefb6197b5e4a27cc5d9587d Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 8 Feb 2024 03:01:35 -0800 Subject: [PATCH 031/158] style: fix style to match other hook functions --- app/src/main/java/gm/tieba/tabswitch/XposedInit.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index e01368a4..fe7b0385 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -71,6 +71,7 @@ public void initZygote(final IXposedHookZygoteInit.StartupParam startupParam) th public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!"com.baidu.tieba".equals(lpparam.packageName) && XposedHelpers.findClassIfExists( "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader) == null) return; + sClassLoader = lpparam.classLoader; // Workaround to address an issue with LSPatch (unable to open personal homepage) // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory @@ -78,15 +79,14 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) // TODO: Report issue to upstream XposedHelpers.findAndHookMethod( - "android.app.Instrumentation", - lpparam.classLoader, + Instrumentation.class, "getFactory", String.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (mAppComponentFactory == null) { - mAppComponentFactory = (AppComponentFactory) lpparam.classLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); + mAppComponentFactory = (AppComponentFactory) sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); } param.setResult(mAppComponentFactory); } @@ -97,7 +97,6 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { protected void afterHookedMethod(final MethodHookParam param) throws Throwable { if (!(param.args[0] instanceof Application)) return; attachBaseContext((Application) param.args[0]); - sClassLoader = lpparam.classLoader; Preferences.init(getContext()); AcRules.init(getContext()); From 88a1cd79a38aa5c483cf5a5ef22aa151004d0d3b Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 8 Feb 2024 03:02:49 -0800 Subject: [PATCH 032/158] feat: remove top_level_navi (special background on personal feed page) --- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index af4bb820..c107fb9e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -52,6 +52,7 @@ public List matchers() { new StringMatcher("准备展示精灵动画提示控件"), new StringMatcher("TbChannelJsInterfaceNew"), new StringMatcher("bottom_bubble_config"), + new StringMatcher("top_level_navi"), new StringMatcher("index_tab_info"), new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V") ); @@ -121,7 +122,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); } break; - case "bottom_bubble_config": // 底部导航栏特殊图标 + case "bottom_bubble_config": // 底部导航栏活动图标 XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @@ -130,7 +131,16 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } }); break; - case "index_tab_info": // 首页特殊Tab + case "top_level_navi": // 首页活动背景 + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + syncData.put("top_level_navi", null); + } + }); + break; + case "index_tab_info": // 首页活动Tab if (method.equals("invoke")) { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { @Override From 325a46d4c0162d3ec0b378e01ac14a59abb0fcc3 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 8 Feb 2024 03:42:08 -0800 Subject: [PATCH 033/158] fix: only replace AppComponentFactory for tieba app --- app/src/main/java/gm/tieba/tabswitch/XposedInit.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index fe7b0385..fdbcfa03 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -85,10 +85,12 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - if (mAppComponentFactory == null) { - mAppComponentFactory = (AppComponentFactory) sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); + if (param.args[0].toString().equals("com.baidu.tieba")) { + if (mAppComponentFactory == null) { + mAppComponentFactory = (AppComponentFactory) sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); + } + param.setResult(mAppComponentFactory); } - param.setResult(mAppComponentFactory); } }); From bf7d62a4da1f95e1af633dd17d08914508dd32ea Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 8 Feb 2024 18:24:19 -0800 Subject: [PATCH 034/158] feat: purge top thread --- .../java/gm/tieba/tabswitch/XposedInit.java | 4 ++- .../tieba/tabswitch/hooker/TSPreference.java | 1 + .../hooker/eliminate/FoldTopCardView.java | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index fdbcfa03..bc94e60d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -43,6 +43,7 @@ import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHooker; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.eliminate.ContentFilter; +import gm.tieba.tabswitch.hooker.eliminate.FoldTopCardView; import gm.tieba.tabswitch.hooker.eliminate.FollowFilter; import gm.tieba.tabswitch.hooker.eliminate.FragmentTab; import gm.tieba.tabswitch.hooker.eliminate.FrsPageFilter; @@ -129,7 +130,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { new FrsTab(), new Hide(), new StackTrace(), - new RemoveUpdate() + new RemoveUpdate(), + new FoldTopCardView() ); final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbDialog()); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 425bbc11..68b98ce6 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -192,6 +192,7 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "真正的净化界面", "purge", SwitchButtonHolder.TYPE_SWITCH)); } preferenceLayout.addView(new SwitchButtonHolder(activity, "净化进吧", "purge_enter", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "净化置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)); // preferenceLayout.addView(new SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏小红点", "red_tip", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用更新提示", "remove_update", SwitchButtonHolder.TYPE_SWITCH)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.java new file mode 100644 index 00000000..ab8566fe --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.java @@ -0,0 +1,32 @@ +package gm.tieba.tabswitch.hooker.eliminate; + +import androidx.annotation.NonNull; + +import java.util.List; + +import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.hooker.IHooker; + +public class FoldTopCardView extends XposedContext implements IHooker { + @NonNull + @Override + public String key() { + return "fold_top_card_view"; + } + + @Override + public void hook() throws Throwable { + // 总是折叠置顶帖 + for (final var method : XposedHelpers.findClass("com.baidu.tieba.forum.view.TopCardView", sClassLoader).getDeclaredMethods()) { + if (method.getReturnType() == boolean.class) { + final var currMethodParameterTypes = method.getParameterTypes(); + if (currMethodParameterTypes.length == 2 && currMethodParameterTypes[0] == List.class && currMethodParameterTypes[1] == boolean.class) { + XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(false)); + } + } + } + } +} From e82e776e7d1c41d90811c52051cd26a58d942cdb Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 8 Feb 2024 18:24:34 -0800 Subject: [PATCH 035/158] feat: update purge rules --- app/build.gradle | 2 +- .../tabswitch/hooker/eliminate/Purge.java | 38 +++++++++++++++---- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f1b55987..a6f92c53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.1' + versionName '2.9.2' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index c107fb9e..09416db7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -262,14 +262,9 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); if (threadList == null) return; - threadList.removeIf(o -> { - if (XposedHelpers.getObjectField(o, "ala_info") != null) { - return true; - } - final Object worksInfo = XposedHelpers.getObjectField(o, "works_info"); - return worksInfo != null && (Integer) XposedHelpers.getObjectField(worksInfo, "is_works") == 1; - }); + // 话题贴 + threadList.removeIf(o -> (Integer) XposedHelpers.getObjectField(o, "thread_type") == 41); // 万人直播互动 吧友开黑组队中 XposedHelpers.setObjectField(param.thisObject, "live_fuse_forum", new ArrayList<>()); @@ -285,6 +280,12 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable if (frsMainTabList != null) { frsMainTabList.removeIf(o -> (Integer) XposedHelpers.getObjectField(o, "tab_type") == 92); } + + // 弹出广告 + XposedHelpers.setObjectField(param.thisObject, "business_promot", null); + + // 顶部背景 + XposedHelpers.setObjectField(param.thisObject, "activityhead", null); } }); // 吧小程序 @@ -363,5 +364,28 @@ public void onPageStarted(WebView view, String url, Bitmap favicon) { }); } }); + // 吧页面头条贴 + XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + List feedList = (List) XposedHelpers.getObjectField(param.thisObject, "feed_list"); + if (feedList != null) { + feedList.removeIf( + o -> { + Object currFeed = XposedHelpers.getObjectField(o, "feed"); + if (currFeed != null) { + List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); + for (var feedKV : businessInfo) { + if (XposedHelpers.getObjectField(feedKV, "key").toString().equals("thread_type")) { + return XposedHelpers.getObjectField(feedKV, "value").toString().equals("41"); + } + } + } + return false; + } + ); + } + } + }); } } From 9d9504b1a5d4fa5f4e21c3ca20912458247d63a5 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 8 Feb 2024 19:17:24 -0800 Subject: [PATCH 036/158] feat: better FrsTab --- .../tieba/tabswitch/hooker/auto/FrsTab.java | 53 ++++++++++++------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java index b3d2f88d..e2e95bca 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java @@ -27,11 +27,13 @@ public String key() { @Override public List matchers() { - return List.of(new StringMatcher("forum_tab_current_list")); + return List.of( + new StringMatcher("forum_tab_current_list"), + new StringMatcher("c/f/frs/page?cmd=301001&format=protobuf") + ); } private int mPosition; - @Override public void hook() throws Throwable { XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @@ -42,28 +44,43 @@ public void beforeHookedMethod(final MethodHookParam param) throws Throwable { for (int i = 0; i < list.size(); i++) { if ((Integer) XposedHelpers.getObjectField(list.get(i), "tab_type") == 14) { mPosition = i; + XposedHelpers.setObjectField(param.thisObject, "frs_tab_default", (Integer) XposedHelpers.getObjectField(list.get(i), "tab_id")); return; } } } }); AcRules.findRule(matchers(), (matcher, clazz, method) -> { - if (!"com.baidu.tieba.forum.controller.TopController".equals(clazz)) return; - Class topControllerClass = XposedHelpers.findClass("com.baidu.tieba.forum.controller.TopController", sClassLoader); - Method targetMethod = XposedHelpers.findMethodBestMatch( - topControllerClass, - method, - null, - XposedHelpers.findClass("com.baidu.tieba.forum.controller.TopController", sClassLoader) - ); - XposedBridge.hookMethod(targetMethod, new XC_MethodHook() { - @Override - public void afterHookedMethod(MethodHookParam param) throws Throwable { - Class customViewPager = XposedHelpers.findClass("com.baidu.tbadk.widget.CustomViewPager", sClassLoader); - final Object viewPager = XposedHelpers.findFirstFieldByExactType(param.args[1].getClass(), customViewPager).get(param.args[1]); - XposedHelpers.callMethod(viewPager, "setCurrentItem", mPosition); - } - }); + switch (matcher) { + case "forum_tab_current_list": + if (!"com.baidu.tieba.forum.controller.TopController".equals(clazz)) return; + Class topControllerClass = XposedHelpers.findClass(clazz, sClassLoader); + Method targetMethod = XposedHelpers.findMethodBestMatch( + topControllerClass, + method, + null, + XposedHelpers.findClass(clazz, sClassLoader) + ); + XposedBridge.hookMethod(targetMethod, new XC_MethodHook() { + @Override + public void afterHookedMethod(MethodHookParam param) throws Throwable { + Class customViewPager = XposedHelpers.findClass("com.baidu.tbadk.widget.CustomViewPager", sClassLoader); + final Object viewPager = XposedHelpers.findFirstFieldByExactType(param.args[1].getClass(), customViewPager).get(param.args[1]); + XposedHelpers.callMethod(viewPager, "setCurrentItem", mPosition); + } + }); + break; + case "c/f/frs/page?cmd=301001&format=protobuf": + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, + "com.baidu.tieba.forum.model.FrsPageRequestMessage", + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + XposedHelpers.setObjectField(param.args[0], "sortType", 0); + } + }); + break; + } }); } } From 96af95d9078d96070767a3532d777b0db5fbbf0c Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 8 Feb 2024 19:48:31 -0800 Subject: [PATCH 037/158] fix: FrsTab ignoring last selected sort type --- .../main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java index e2e95bca..8ac041a3 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java @@ -76,7 +76,12 @@ public void afterHookedMethod(MethodHookParam param) throws Throwable { new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - XposedHelpers.setObjectField(param.args[0], "sortType", 0); + if ((Integer) XposedHelpers.getObjectField(param.args[0], "sortType") == -1) { + Object sharedPrefHelper = XposedHelpers.callStaticMethod( + XposedHelpers.findClass("com.baidu.tbadk.core.sharedPref.SharedPrefHelper", sClassLoader), "getInstance"); + Integer lastSortType = (Integer) XposedHelpers.callMethod(sharedPrefHelper, "getInt", "key_forum_last_sort_type", 0); + XposedHelpers.setObjectField(param.args[0], "sortType", lastSortType); + } } }); break; From b58c9e7ea48f2da4cbe7744137cc92a5484b962e Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Fri, 9 Feb 2024 03:20:29 -0800 Subject: [PATCH 038/158] feat: better hot splash removal --- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 09416db7..e439da06 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -176,16 +176,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } }); // 热启动闪屏 - XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.adp.framework.MessageManager", - sClassLoader), "dispatchResponsedMessage", new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Object responsedMessage = param.args[0]; - if ((int) XposedHelpers.getObjectField(responsedMessage, "mCmd") == 2016520) { - param.setResult(null); - } - } - }); + XposedHelpers.findAndHookMethod("com.baidu.tbadk.TbSingleton", sClassLoader, "isPushLaunch4SplashAd", XC_MethodReplacement.returnConstant(true)); + XposedHelpers.findAndHookMethod("com.baidu.tbadk.abtest.UbsABTestHelper", sClassLoader, "isPushLaunchWithoutSplashAdA", XC_MethodReplacement.returnConstant(true)); // 帖子底部推荐 Class clazz; try { From 559c34ca85d7595ea68155f397444c0aeeae137d Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Fri, 9 Feb 2024 17:38:54 -0800 Subject: [PATCH 039/158] feat: new matcher (match resource id by identifier) --- .../tabswitch/hooker/deobfuscation/Deobfuscation.java | 8 +++++++- .../gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index d43a5894..7ecd308f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -80,10 +80,13 @@ public void decodeArsc(final PublishSubject progress) progress.onNext(0F); final var strToResMatcher = new HashMap(); final var entryNameToZipEntryMatcher = new HashMap(); + final var resIdentifierToResMatcher = new HashMap(); for (final var matcher : matchers) { if (matcher instanceof ResMatcher) { if (matcher instanceof final ZipEntryMatcher zipEntryMatcher) { entryNameToZipEntryMatcher.put(zipEntryMatcher.getEntryName(), zipEntryMatcher); + } else if (matcher instanceof final ResIdentifierMatcher resIdentifierMatcher) { + resIdentifierToResMatcher.put(resIdentifierMatcher.toString(), resIdentifierMatcher); } else { strToResMatcher.put(matcher.toString(), (ResMatcher) matcher); } @@ -95,7 +98,10 @@ public void decodeArsc(final PublishSubject progress) try (final var in = zipFile.getInputStream(ze)) { final var pkg = ARSCDecoder.decode(in, true, true).getOnePackage(); forEachProgressed(progress, pkg.listResSpecs(), resResSpec -> { - if (resResSpec.hasDefaultResource()) { + final var identifierMatcher = resIdentifierToResMatcher.get(String.format("%s.%s", resResSpec.getType().getName(), resResSpec.getName())); + if (identifierMatcher != null) { + identifierMatcher.setId(resResSpec.getId().id); + } else if (resResSpec.hasDefaultResource()) { try { final var resValue = resResSpec.getDefaultResource().getValue(); if (resValue instanceof final ResStringValue resStringValue) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 3a42abbf..39487370 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -26,3 +26,7 @@ class ZipEntryMatcher(val size: Long) : ResMatcher() { var entryName: String = "" override fun toString(): String = size.toString() } + +class ResIdentifierMatcher(val name: String, val defType: String) : ResMatcher() { + override fun toString(): String = String.format("%s.%s", defType, name) +} \ No newline at end of file From 64e38506996536d5d33b8b234b9c4d8eab96bb9f Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Fri, 9 Feb 2024 17:39:06 -0800 Subject: [PATCH 040/158] fix: better matcher for PurgeEnter --- .../hooker/eliminate/PurgeEnter.java | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 55763cdc..08b2ae2e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -10,16 +10,14 @@ import java.lang.reflect.Modifier; import java.util.List; -import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; +import gm.tieba.tabswitch.hooker.deobfuscation.ResIdentifierMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; import gm.tieba.tabswitch.util.ReflectUtils; @@ -35,7 +33,7 @@ public List matchers() { return List.of( new StringMatcher("c/f/forum/getRecommendForumData"), new StringMatcher("enter_forum_login_tip"), - new SmaliMatcher("Lcom/baidu/adp/widget/ListView/BdListView;->setNextPage(Lcom/baidu/tieba/di;)V") + new ResIdentifierMatcher("tbds400", "dimen") ); } @@ -54,40 +52,38 @@ public void hook() throws Throwable { case "enter_forum_login_tip": mEnterForumAdViewClassName = clazz; break; - case "Lcom/baidu/adp/widget/ListView/BdListView;->setNextPage(Lcom/baidu/tieba/di;)V": + case "dimen.tbds400": if (clazz.equals(mEnterForumAdViewClassName)) { - if (XposedHelpers.findMethodExact(clazz, sClassLoader, method).getParameterTypes().length == 0) { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - Object pbListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView"); + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + Object pbListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView"); - String viewConstructorName = ""; - for (final var method : XposedHelpers.findClass("com.baidu.tbadk.core.view.PbListView", sClassLoader).getSuperclass().getDeclaredMethods()) { - if (method.getReturnType().toString().endsWith("View") && !Modifier.isAbstract(method.getModifiers())) { - viewConstructorName = method.getName(); - break; - } - } - View view = (View) XposedHelpers.callMethod(pbListView, viewConstructorName); + String viewConstructorName = ""; + for (final var method : XposedHelpers.findClass("com.baidu.tbadk.core.view.PbListView", sClassLoader).getSuperclass().getDeclaredMethods()) { + if (method.getReturnType().toString().endsWith("View") && !Modifier.isAbstract(method.getModifiers())) { + viewConstructorName = method.getName(); + break; + } + } + View view = (View) XposedHelpers.callMethod(pbListView, viewConstructorName); - if (view.getParent() == null) { - Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); - XposedHelpers.callMethod(bdListView, "setNextPage", pbListView); - } + if (view.getParent() == null) { + Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); + XposedHelpers.callMethod(bdListView, "setNextPage", pbListView); + } - LinearLayout linearLayout = (LinearLayout) ReflectUtils.getObjectField(pbListView, "android.widget.LinearLayout"); - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(linearLayout.getLayoutParams()); + LinearLayout linearLayout = (LinearLayout) ReflectUtils.getObjectField(pbListView, "android.widget.LinearLayout"); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(linearLayout.getLayoutParams()); - if (mInitLayoutHeight == -1){ - mInitLayoutHeight = layoutParams.height + mLayoutOffset; - } - layoutParams.height = mInitLayoutHeight; - linearLayout.setLayoutParams(layoutParams); - return null; - } - }); - } + if (mInitLayoutHeight == -1){ + mInitLayoutHeight = layoutParams.height + mLayoutOffset; + } + layoutParams.height = mInitLayoutHeight; + linearLayout.setLayoutParams(layoutParams); + return null; + } + }); } break; } From db567ef176b3802e2673468f9e265961f67a723c Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Sat, 10 Feb 2024 12:22:35 +0800 Subject: [PATCH 041/158] update dependencies --- app/build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a6f92c53..6effddc8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,15 +66,15 @@ android { dependencies { compileOnly 'de.robv.android.xposed:api:82' - api 'androidx.annotation:annotation:1.7.0' - def roomVersion = '2.6.0' + api 'androidx.annotation:annotation:1.7.1' + def roomVersion = '2.6.1' implementation "androidx.room:room-runtime:$roomVersion" annotationProcessor "androidx.room:room-compiler:$roomVersion" implementation "androidx.room:room-ktx:$roomVersion" ksp "androidx.room:room-compiler:$roomVersion" implementation 'io.reactivex.rxjava3:rxjava:3.1.7' - implementation 'org.luckypray:dexkit:2.0.0-rc8' + implementation 'org.luckypray:dexkit:2.0.0' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') implementation 'com.squareup.okhttp3:okhttp:4.12.0' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 05044f2d..12f175de 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Aug 24 21:31:51 CST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 149890c2..e073e541 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.1.4' - id 'com.android.library' version '8.1.4' + id 'com.android.application' version '8.2.2' + id 'com.android.library' version '8.2.2' id 'org.jetbrains.kotlin.android' version '1.9.0' id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false } From ad15f9d67f6023c9f68ff3e9663e97ba5432ecbf Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Sun, 11 Feb 2024 17:47:56 +0800 Subject: [PATCH 042/158] aichat_bot_comment_card --- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index e439da06..7a52d19d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -57,6 +57,7 @@ public List matchers() { new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V") ); } + final String jsRemoveOtherCardResponse = """ (function (send) { XMLHttpRequest.prototype.send = function () { @@ -85,6 +86,7 @@ public List matchers() { }; })(XMLHttpRequest.prototype.send); """; + @Override public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { @@ -245,6 +247,16 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "hot_card", null); } }); + // 帖子 AI 聊天 + XposedHelpers.findAndHookMethod("tbclient.PbPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var postList = (List) XposedHelpers.getObjectField(param.thisObject, "post_list"); + if (postList == null) return; + + postList.removeIf(o -> XposedHelpers.getObjectField(o, "aichat_bot_comment_card") != null); + } + }); // 吧页面 XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override From e20f1a28563e043d30399e8aace91b8e6881cf5a Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Sun, 11 Feb 2024 19:46:07 -0800 Subject: [PATCH 043/158] feat: add new matchers (limit search to a package and match by name) --- .../hooker/deobfuscation/Deobfuscation.java | 80 ++++++++++++------- .../tabswitch/hooker/deobfuscation/Matcher.kt | 10 +++ 2 files changed, 60 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 7ecd308f..89d5b53c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -3,8 +3,10 @@ import android.content.Context; import org.luckypray.dexkit.DexKitBridge; +import org.luckypray.dexkit.query.FindClass; import org.luckypray.dexkit.query.FindMethod; import org.luckypray.dexkit.query.matchers.MethodMatcher; +import org.luckypray.dexkit.result.ClassDataList; import org.luckypray.dexkit.result.MethodDataList; import java.io.IOException; @@ -82,13 +84,14 @@ public void decodeArsc(final PublishSubject progress) final var entryNameToZipEntryMatcher = new HashMap(); final var resIdentifierToResMatcher = new HashMap(); for (final var matcher : matchers) { - if (matcher instanceof ResMatcher) { - if (matcher instanceof final ZipEntryMatcher zipEntryMatcher) { + var currMatcher = matcher instanceof PackageMatcher ? ((PackageMatcher) matcher).getSubMatcher() : matcher; + if (currMatcher instanceof ResMatcher) { + if (currMatcher instanceof final ZipEntryMatcher zipEntryMatcher) { entryNameToZipEntryMatcher.put(zipEntryMatcher.getEntryName(), zipEntryMatcher); - } else if (matcher instanceof final ResIdentifierMatcher resIdentifierMatcher) { + } else if (currMatcher instanceof final ResIdentifierMatcher resIdentifierMatcher) { resIdentifierToResMatcher.put(resIdentifierMatcher.toString(), resIdentifierMatcher); } else { - strToResMatcher.put(matcher.toString(), (ResMatcher) matcher); + strToResMatcher.put(currMatcher.toString(), (ResMatcher) currMatcher); } } } @@ -132,39 +135,56 @@ public void dexkit(final PublishSubject progress) { Objects.requireNonNull(bridge); forEachProgressed(progress, matchers, matcher -> { - MethodDataList ret = null; - if (matcher instanceof final StringMatcher stringMatcher) { - ret = bridge.findMethod( - FindMethod.create().matcher( - MethodMatcher.create().usingStrings(stringMatcher.getStr()) - ) - ); - } else if (matcher instanceof final ResMatcher resMatcher) { - ret = bridge.findMethod( - FindMethod.create().matcher( - MethodMatcher.create().usingNumbers(resMatcher.getId()) - ) - ); - } else if (matcher instanceof final SmaliMatcher smaliMatcher) { - ret = bridge.findMethod( - FindMethod.create().matcher( - MethodMatcher.create().addInvoke( - MethodMatcher.create().descriptor(smaliMatcher.toString()) - ) - ) - ); - } - if (ret != null) { - for (final var methodData : ret) { - AcRules.putRule( - matcher.toString(), methodData.getClassName(), methodData.getName()); + MethodDataList ret = new MethodDataList(); + if (matcher instanceof final PackageMatcher packageMatcher) { + ClassDataList retClassList = bridge.findClass(FindClass.create().matcher(packageMatcher.getClassMatcher())); + for (var retClass: retClassList) { + ret.addAll(findMethod(bridge, FindMethod.create().searchPackages(retClass.getName()), packageMatcher.getSubMatcher())); } + } else { + ret.addAll(findMethod(bridge, FindMethod.create(), matcher)); + } + for (final var methodData : ret) { + AcRules.putRule( + matcher.toString(), methodData.getClassName(), methodData.getName()); } }); bridge.close(); } + private MethodDataList findMethod(DexKitBridge bridge, FindMethod baseMethodQuery, Matcher matcher) { + MethodDataList ret = null; + if (matcher instanceof final StringMatcher stringMatcher) { + ret = bridge.findMethod( + baseMethodQuery.matcher( + MethodMatcher.create().usingStrings(stringMatcher.getStr()) + ) + ); + } else if (matcher instanceof final ResMatcher resMatcher) { + ret = bridge.findMethod( + baseMethodQuery.matcher( + MethodMatcher.create().usingNumbers(resMatcher.getId()) + ) + ); + } else if (matcher instanceof final SmaliMatcher smaliMatcher) { + ret = bridge.findMethod( + baseMethodQuery.matcher( + MethodMatcher.create().addInvoke( + MethodMatcher.create().descriptor(smaliMatcher.toString()) + ) + ) + ); + } else if (matcher instanceof final MethodNameMatcher methodNameMatcher) { + ret = bridge.findMethod( + baseMethodQuery.matcher( + MethodMatcher.create().name(methodNameMatcher.getName()) + ) + ); + } + return ret; + } + public void saveDexSignatureHashCode() throws IOException { try (final var apk = new ZipFile(packageResource)) { try (final var in = apk.getInputStream(apk.getEntry("classes.dex"))) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 39487370..6cd7d1ea 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -1,5 +1,7 @@ package gm.tieba.tabswitch.hooker.deobfuscation +import org.luckypray.dexkit.query.matchers.ClassMatcher + abstract class Matcher { abstract override fun toString(): String } @@ -29,4 +31,12 @@ class ZipEntryMatcher(val size: Long) : ResMatcher() { class ResIdentifierMatcher(val name: String, val defType: String) : ResMatcher() { override fun toString(): String = String.format("%s.%s", defType, name) +} + +class PackageMatcher(val classMatcher: ClassMatcher, val classMatcherIdentifier: String, val subMatcher: Matcher) : Matcher() { + override fun toString(): String = String.format("%s/%s", classMatcherIdentifier, subMatcher.toString()) +} + +class MethodNameMatcher(val name: String) : Matcher() { + override fun toString(): String = name } \ No newline at end of file From a8ac19406acba764f6f079efd5426ae9f30664e2 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Sun, 11 Feb 2024 19:46:35 -0800 Subject: [PATCH 044/158] feat: better recommend hot forum removal --- .../hooker/eliminate/PurgeEnter.java | 110 +++++++++++------- 1 file changed, 67 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 08b2ae2e..6a590baf 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -1,12 +1,14 @@ package gm.tieba.tabswitch.hooker.eliminate; -import android.app.AndroidAppHelper; -import android.content.res.Resources; import android.view.View; import android.widget.LinearLayout; import androidx.annotation.NonNull; +import org.luckypray.dexkit.query.matchers.ClassMatcher; +import org.luckypray.dexkit.query.matchers.MethodMatcher; +import org.luckypray.dexkit.query.matchers.MethodsMatcher; + import java.lang.reflect.Modifier; import java.util.List; @@ -16,6 +18,8 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; +import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; +import gm.tieba.tabswitch.hooker.deobfuscation.PackageMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.ResIdentifierMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; @@ -28,63 +32,83 @@ public String key() { return "purge_enter"; } + private final ClassMatcher mRecForumClassMatcher = + ClassMatcher.create().methods( + MethodsMatcher.create().methods( + List.of(MethodMatcher.create().usingStrings("enter_forum_login_tip")))); + private int mInitLayoutHeight = -1; + private final int mLayoutOffset = (int) ReflectUtils.getDimen("tbds50"); + private String mRecForumClassName, mRecForumSetNextPageMethodName; + @Override public List matchers() { return List.of( - new StringMatcher("c/f/forum/getRecommendForumData"), - new StringMatcher("enter_forum_login_tip"), - new ResIdentifierMatcher("tbds400", "dimen") + new PackageMatcher(mRecForumClassMatcher, + "enter_forum_login_tip", + new ResIdentifierMatcher("tbds400", "dimen")), + new PackageMatcher(mRecForumClassMatcher, + "enter_forum_login_tip", + new MethodNameMatcher("onSuccess")) ); } - private String mEnterForumAdViewClassName; - private int mInitLayoutHeight = -1; - private final Resources currentRes = AndroidAppHelper.currentApplication().getApplicationContext().getResources(); - private final int mLayoutOffset = currentRes.getDimensionPixelSize(currentRes.getIdentifier("tbds50", "dimen", "com.baidu.tieba")); - @Override public void hook() throws Throwable { + XposedHelpers.findAndHookMethod( + "com.baidu.tieba.enterForum.recforum.message.RecommendForumRespondedMessage", + sClassLoader, + "getRecommendForumData", + XC_MethodReplacement.returnConstant(null)); + AcRules.findRule(matchers(), (matcher, clazz, method) -> { switch (matcher) { - case "c/f/forum/getRecommendForumData": - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)); - break; - case "enter_forum_login_tip": - mEnterForumAdViewClassName = clazz; - break; - case "dimen.tbds400": - if (clazz.equals(mEnterForumAdViewClassName)) { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - Object pbListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView"); + case "enter_forum_login_tip/dimen.tbds400": + mRecForumClassName = clazz; + mRecForumSetNextPageMethodName = method; + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + Object pbListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView"); - String viewConstructorName = ""; - for (final var method : XposedHelpers.findClass("com.baidu.tbadk.core.view.PbListView", sClassLoader).getSuperclass().getDeclaredMethods()) { - if (method.getReturnType().toString().endsWith("View") && !Modifier.isAbstract(method.getModifiers())) { - viewConstructorName = method.getName(); - break; - } + String viewConstructorName = ""; + for (final var method : XposedHelpers.findClass("com.baidu.tbadk.core.view.PbListView", sClassLoader).getSuperclass().getDeclaredMethods()) { + if (method.getReturnType().toString().endsWith("View") && !Modifier.isAbstract(method.getModifiers())) { + viewConstructorName = method.getName(); + break; } - View view = (View) XposedHelpers.callMethod(pbListView, viewConstructorName); + } + View view = (View) XposedHelpers.callMethod(pbListView, viewConstructorName); - if (view.getParent() == null) { - Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); - XposedHelpers.callMethod(bdListView, "setNextPage", pbListView); - } + if (view.getParent() == null) { + Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); + XposedHelpers.callMethod(bdListView, "setNextPage", pbListView); + } - LinearLayout linearLayout = (LinearLayout) ReflectUtils.getObjectField(pbListView, "android.widget.LinearLayout"); - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(linearLayout.getLayoutParams()); + LinearLayout linearLayout = (LinearLayout) ReflectUtils.getObjectField(pbListView, "android.widget.LinearLayout"); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(linearLayout.getLayoutParams()); - if (mInitLayoutHeight == -1){ - mInitLayoutHeight = layoutParams.height + mLayoutOffset; - } - layoutParams.height = mInitLayoutHeight; - linearLayout.setLayoutParams(layoutParams); - return null; + if (mInitLayoutHeight == -1){ + mInitLayoutHeight = layoutParams.height + mLayoutOffset; } - }); - } + layoutParams.height = mInitLayoutHeight; + linearLayout.setLayoutParams(layoutParams); + return null; + } + }); + break; + case "enter_forum_login_tip/onSuccess": + XposedHelpers.findAndHookMethod(clazz, + sClassLoader, + method, + boolean.class, + new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + Object enterForumRec = ReflectUtils.getObjectField(param.thisObject, mRecForumClassName); + XposedHelpers.callMethod(enterForumRec, mRecForumSetNextPageMethodName); + return null; + } + }); break; } }); From e93f88909920406906aeebbc34429fb56b39a346 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Sun, 11 Feb 2024 22:35:17 -0800 Subject: [PATCH 045/158] refactor: better class matcher api --- .../hooker/deobfuscation/Deobfuscation.java | 17 +++--- .../tabswitch/hooker/deobfuscation/Matcher.kt | 53 +++++++++++-------- .../hooker/eliminate/PurgeEnter.java | 20 ++----- 3 files changed, 44 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 89d5b53c..572fe697 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -84,14 +84,13 @@ public void decodeArsc(final PublishSubject progress) final var entryNameToZipEntryMatcher = new HashMap(); final var resIdentifierToResMatcher = new HashMap(); for (final var matcher : matchers) { - var currMatcher = matcher instanceof PackageMatcher ? ((PackageMatcher) matcher).getSubMatcher() : matcher; - if (currMatcher instanceof ResMatcher) { - if (currMatcher instanceof final ZipEntryMatcher zipEntryMatcher) { + if (matcher instanceof ResMatcher) { + if (matcher instanceof final ZipEntryMatcher zipEntryMatcher) { entryNameToZipEntryMatcher.put(zipEntryMatcher.getEntryName(), zipEntryMatcher); - } else if (currMatcher instanceof final ResIdentifierMatcher resIdentifierMatcher) { - resIdentifierToResMatcher.put(resIdentifierMatcher.toString(), resIdentifierMatcher); + } else if (matcher instanceof final ResIdentifierMatcher resIdentifierMatcher) { + resIdentifierToResMatcher.put(resIdentifierMatcher.toResIdentifier(), resIdentifierMatcher); } else { - strToResMatcher.put(currMatcher.toString(), (ResMatcher) currMatcher); + strToResMatcher.put(((StringResMatcher) matcher).toResIdentifier(), (ResMatcher) matcher); } } } @@ -136,10 +135,10 @@ public void dexkit(final PublishSubject progress) { forEachProgressed(progress, matchers, matcher -> { MethodDataList ret = new MethodDataList(); - if (matcher instanceof final PackageMatcher packageMatcher) { - ClassDataList retClassList = bridge.findClass(FindClass.create().matcher(packageMatcher.getClassMatcher())); + if (matcher.getClassMatcher() != null) { + ClassDataList retClassList = bridge.findClass(FindClass.create().matcher(matcher.getClassMatcher().getMatcher())); for (var retClass: retClassList) { - ret.addAll(findMethod(bridge, FindMethod.create().searchPackages(retClass.getName()), packageMatcher.getSubMatcher())); + ret.addAll(findMethod(bridge, FindMethod.create().searchPackages(retClass.getName()), matcher)); } } else { ret.addAll(findMethod(bridge, FindMethod.create(), matcher)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 6cd7d1ea..9d89dda5 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -2,41 +2,52 @@ package gm.tieba.tabswitch.hooker.deobfuscation import org.luckypray.dexkit.query.matchers.ClassMatcher -abstract class Matcher { - abstract override fun toString(): String +class ClassMatcherHelper(val matcher: ClassMatcher, val id: String) { + override fun toString(): String = "$id/" + + companion object { + @JvmStatic + fun fromString(str: String): ClassMatcherHelper { + val matcher = ClassMatcher.create().usingStrings(str) + return ClassMatcherHelper(matcher, str) + } + } } -class StringMatcher(val str: String) : Matcher() { - override fun toString(): String = str +abstract class Matcher(val classMatcher: ClassMatcherHelper? = null) { + override fun toString(): String = classMatcher?.toString().orEmpty() } -class SmaliMatcher(val str: String) : Matcher() { - override fun toString(): String = str +class StringMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { + override fun toString(): String = super.toString() + str } -open class ResMatcher(var id: Long = 0) : Matcher() { - override fun toString(): String { - throw UnsupportedOperationException() - } +class SmaliMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { + override fun toString(): String = super.toString() + str } -class StringResMatcher(val str: String) : ResMatcher() { - override fun toString(): String = str +class MethodNameMatcher @JvmOverloads constructor(val name: String, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { + override fun toString(): String = super.toString() + name } -class ZipEntryMatcher(val size: Long) : ResMatcher() { - var entryName: String = "" - override fun toString(): String = size.toString() +open class ResMatcher @JvmOverloads constructor(var id: Long = 0, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { + open fun toResIdentifier(): String { + throw UnsupportedOperationException() + } } -class ResIdentifierMatcher(val name: String, val defType: String) : ResMatcher() { - override fun toString(): String = String.format("%s.%s", defType, name) +class StringResMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherHelper? = null) : ResMatcher(classMatcher = classMatcher) { + override fun toString(): String = super.toString() + str + override fun toResIdentifier(): String = str } -class PackageMatcher(val classMatcher: ClassMatcher, val classMatcherIdentifier: String, val subMatcher: Matcher) : Matcher() { - override fun toString(): String = String.format("%s/%s", classMatcherIdentifier, subMatcher.toString()) +class ZipEntryMatcher @JvmOverloads constructor(val size: Long, classMatcher: ClassMatcherHelper? = null) : ResMatcher(classMatcher = classMatcher) { + var entryName: String = "" + override fun toString(): String = super.toString() + size.toString() + override fun toResIdentifier(): String = size.toString() } -class MethodNameMatcher(val name: String) : Matcher() { - override fun toString(): String = name +class ResIdentifierMatcher @JvmOverloads constructor(val name: String, val defType: String, classMatcher: ClassMatcherHelper? = null) : ResMatcher(classMatcher = classMatcher) { + override fun toString(): String = super.toString() + String.format("%s.%s", defType, name) + override fun toResIdentifier(): String = String.format("%s.%s", defType, name) } \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 6a590baf..51a75d17 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -5,24 +5,20 @@ import androidx.annotation.NonNull; -import org.luckypray.dexkit.query.matchers.ClassMatcher; -import org.luckypray.dexkit.query.matchers.MethodMatcher; -import org.luckypray.dexkit.query.matchers.MethodsMatcher; - import java.lang.reflect.Modifier; import java.util.List; import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; +import gm.tieba.tabswitch.hooker.deobfuscation.ClassMatcherHelper; import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.PackageMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.ResIdentifierMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; import gm.tieba.tabswitch.util.ReflectUtils; public class PurgeEnter extends XposedContext implements IHooker, Obfuscated { @@ -32,10 +28,6 @@ public String key() { return "purge_enter"; } - private final ClassMatcher mRecForumClassMatcher = - ClassMatcher.create().methods( - MethodsMatcher.create().methods( - List.of(MethodMatcher.create().usingStrings("enter_forum_login_tip")))); private int mInitLayoutHeight = -1; private final int mLayoutOffset = (int) ReflectUtils.getDimen("tbds50"); private String mRecForumClassName, mRecForumSetNextPageMethodName; @@ -43,12 +35,8 @@ public String key() { @Override public List matchers() { return List.of( - new PackageMatcher(mRecForumClassMatcher, - "enter_forum_login_tip", - new ResIdentifierMatcher("tbds400", "dimen")), - new PackageMatcher(mRecForumClassMatcher, - "enter_forum_login_tip", - new MethodNameMatcher("onSuccess")) + new ResIdentifierMatcher("tbds400", "dimen", ClassMatcherHelper.fromString("enter_forum_login_tip")), + new MethodNameMatcher("onSuccess", ClassMatcherHelper.fromString("enter_forum_login_tip")) ); } From e1a5f568d0d0b3cdbbf76e7f3a31db7013fe50a3 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 15 Feb 2024 19:55:44 -0800 Subject: [PATCH 046/158] fix: unable to exit app with back gesture --- .../tieba/tabswitch/hooker/deobfuscation/Matcher.kt | 2 +- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 12 ++++++++++-- .../tieba/tabswitch/hooker/eliminate/PurgeEnter.java | 4 ++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 9d89dda5..8becdeeb 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -7,7 +7,7 @@ class ClassMatcherHelper(val matcher: ClassMatcher, val id: String) { companion object { @JvmStatic - fun fromString(str: String): ClassMatcherHelper { + fun usingString(str: String): ClassMatcherHelper { val matcher = ClassMatcher.create().usingStrings(str) return ClassMatcherHelper(matcher, str) } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index e439da06..e00722f1 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -176,8 +176,16 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } }); // 热启动闪屏 - XposedHelpers.findAndHookMethod("com.baidu.tbadk.TbSingleton", sClassLoader, "isPushLaunch4SplashAd", XC_MethodReplacement.returnConstant(true)); - XposedHelpers.findAndHookMethod("com.baidu.tbadk.abtest.UbsABTestHelper", sClassLoader, "isPushLaunchWithoutSplashAdA", XC_MethodReplacement.returnConstant(true)); + XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.adp.framework.MessageManager", + sClassLoader), "dispatchResponsedMessage", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Object responsedMessage = param.args[0]; + if ((int) XposedHelpers.getObjectField(responsedMessage, "mCmd") == 2921812) { + param.setResult(null); + } + } + }); // 帖子底部推荐 Class clazz; try { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 51a75d17..6d8d23c8 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -35,8 +35,8 @@ public String key() { @Override public List matchers() { return List.of( - new ResIdentifierMatcher("tbds400", "dimen", ClassMatcherHelper.fromString("enter_forum_login_tip")), - new MethodNameMatcher("onSuccess", ClassMatcherHelper.fromString("enter_forum_login_tip")) + new ResIdentifierMatcher("tbds400", "dimen", ClassMatcherHelper.usingString("enter_forum_login_tip")), + new MethodNameMatcher("onSuccess", ClassMatcherHelper.usingString("enter_forum_login_tip")) ); } From 1d93ae1b93daceaf9c015863976805494d6e1ba7 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Thu, 15 Feb 2024 20:58:57 -0800 Subject: [PATCH 047/158] feat: update PurgeMy --- app/build.gradle | 2 +- .../java/gm/tieba/tabswitch/XposedInit.java | 3 +- .../tieba/tabswitch/hooker/TSPreference.java | 2 +- .../tabswitch/hooker/eliminate/PurgeMy.java | 67 +++++++++++-------- 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a6f92c53..daf73b1a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.2' + versionName '2.9.3' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index bc94e60d..0a75f8be 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -50,6 +50,7 @@ import gm.tieba.tabswitch.hooker.eliminate.PersonalizedFilter; import gm.tieba.tabswitch.hooker.eliminate.Purge; import gm.tieba.tabswitch.hooker.eliminate.PurgeEnter; +import gm.tieba.tabswitch.hooker.eliminate.PurgeMy; import gm.tieba.tabswitch.hooker.eliminate.RedTip; import gm.tieba.tabswitch.hooker.eliminate.RemoveUpdate; import gm.tieba.tabswitch.hooker.eliminate.SwitchManager; @@ -109,7 +110,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { new SwitchManager(), new Purge(), new PurgeEnter(), -// new PurgeMy(), + new PurgeMy(), new RedTip(), new FollowFilter(), new PersonalizedFilter(), diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 68b98ce6..90c43289 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -193,7 +193,7 @@ private LinearLayout createRootPreference(final Activity activity) { } preferenceLayout.addView(new SwitchButtonHolder(activity, "净化进吧", "purge_enter", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "净化置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)); -// preferenceLayout.addView(new SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏小红点", "red_tip", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用更新提示", "remove_update", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "只推荐已关注的吧", "follow_filter", SwitchButtonHolder.TYPE_SWITCH)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java index db59c389..cd9c431f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java @@ -5,6 +5,7 @@ import androidx.annotation.NonNull; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -16,9 +17,10 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; +import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; import gm.tieba.tabswitch.util.ReflectUtils; -@Deprecated public class PurgeMy extends XposedContext implements IHooker, Obfuscated { @NonNull @@ -27,43 +29,52 @@ public String key() { return "purge_my"; } + private final int mGridTopPadding = (int) ReflectUtils.getDimen("tbds25"); + @Override public List matchers() { - return null; + return List.of( + new SmaliMatcher("Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V") + ); } @Override public void hook() throws Throwable { + XposedHelpers.findAndHookMethod("tbclient.Profile.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + // 我的贴吧会员 + XposedHelpers.setObjectField(param.thisObject, "vip_banner", null); + + // 横幅广告 + XposedHelpers.setObjectField(param.thisObject, "banner", new ArrayList<>()); + + // 度小满 有钱花 + XposedHelpers.setObjectField(param.thisObject, "finance_tab", null); + + // 小程序 + XposedHelpers.setObjectField(param.thisObject, "recom_naws_list", new ArrayList<>()); + } + }); + XposedHelpers.findAndHookMethod("tbclient.User$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + // 贴吧成长等级 + XposedHelpers.setObjectField(param.thisObject, "user_growth", null); + } + }); + // Add padding to the top of 常用功能 AcRules.findRule(matchers(), (matcher, clazz, method) -> { - switch (matcher) { - case "Lcom/baidu/tieba/R$drawable;->icon_pure_topbar_store44_svg:I": // 商店 - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, int.class, new XC_MethodHook() { + XposedBridge.hookAllConstructors( + XposedHelpers.findClass(clazz, sClassLoader), + new XC_MethodHook() { @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - // R.id.person_navigation_dressup_img - final var imageView = (ImageView) ReflectUtils.getObjectField(param.thisObject, 4); - imageView.setVisibility(View.GONE); + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + View mView = ReflectUtils.getObjectField(param.thisObject, View.class); + mView.setPadding(mView.getPaddingLeft(), mGridTopPadding, mView.getPaddingRight(), 0); } - }); - break; - case "Lcom/baidu/tieba/R$drawable;->person_center_red_tip_shape:I": // 分割线 - if ("com.baidu.tieba.post.PersonPostActivity".equals(clazz)) { - break; } - for (final var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { - if (Arrays.toString(md.getParameterTypes()).equals("[interface com.baidu.tbadk.TbPageContext, int]")) { - XposedBridge.hookMethod(md, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - // R.id.function_item_bottom_divider - final var view = (View) ReflectUtils.getObjectField(param.thisObject, 10); - view.setVisibility(View.GONE); - } - }); - } - } - break; - } + ); }); } } From 19208de3719fa380995d80481f3263c283012d3e Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Sun, 11 Feb 2024 19:46:07 -0800 Subject: [PATCH 048/158] fix: cold splash ad --- .../tabswitch/hooker/eliminate/Purge.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index e00722f1..748db1fd 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -6,6 +6,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; +import android.view.KeyEvent; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -176,16 +177,19 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } }); // 热启动闪屏 - XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.adp.framework.MessageManager", - sClassLoader), "dispatchResponsedMessage", new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Object responsedMessage = param.args[0]; - if ((int) XposedHelpers.getObjectField(responsedMessage, "mCmd") == 2921812) { - param.setResult(null); - } - } - }); + XposedHelpers.findAndHookMethod( + "com.baidu.tieba.tblauncher.MainTabActivity", + sClassLoader, + "dispatchKeyEvent", + KeyEvent.class, + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + XposedHelpers.setStaticBooleanField(XposedHelpers.findClass("com.baidu.tbadk.core.atomData.MainTabActivityConfig", sClassLoader), "IS_MAIN_TAB_SPLASH_SHOW", false); + } + }); + XposedHelpers.findAndHookMethod("com.baidu.tbadk.TbSingleton", sClassLoader, "isPushLaunch4SplashAd", XC_MethodReplacement.returnConstant(true)); + XposedHelpers.findAndHookMethod("com.baidu.tbadk.abtest.UbsABTestHelper", sClassLoader, "isPushLaunchWithoutSplashAdA", XC_MethodReplacement.returnConstant(true)); // 帖子底部推荐 Class clazz; try { From dbb89655768cc4667b6ec541d66876ca11359412 Mon Sep 17 00:00:00 2001 From: Zhaoqian Wang Date: Fri, 16 Feb 2024 22:01:14 -0800 Subject: [PATCH 049/158] feat: remove live ad thread --- .../tieba/tabswitch/hooker/eliminate/Purge.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index b1d131aa..fd77bd66 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -277,10 +277,13 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "star_enter", new ArrayList<>()); final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); - if (threadList == null) return; - - // 话题贴 - threadList.removeIf(o -> (Integer) XposedHelpers.getObjectField(o, "thread_type") == 41); + if (threadList != null) { + // 吧页面头条贴(41), 直播贴(69) + threadList.removeIf(o -> { + var threadType = (Integer) XposedHelpers.getObjectField(o, "thread_type"); + return threadType == 41 || threadType == 69; + }); + } // 万人直播互动 吧友开黑组队中 XposedHelpers.setObjectField(param.thisObject, "live_fuse_forum", new ArrayList<>()); @@ -380,7 +383,7 @@ public void onPageStarted(WebView view, String url, Bitmap favicon) { }); } }); - // 吧页面头条贴 + // 吧页面头条贴(41), 直播贴(69) XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { @@ -393,7 +396,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); for (var feedKV : businessInfo) { if (XposedHelpers.getObjectField(feedKV, "key").toString().equals("thread_type")) { - return XposedHelpers.getObjectField(feedKV, "value").toString().equals("41"); + var threadType = XposedHelpers.getObjectField(feedKV, "value").toString(); + return threadType.equals("41") || threadType.equals("69"); } } } From 21157c2c5f898793000c3a710729fd38b390547a Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 17 Feb 2024 16:12:53 -0800 Subject: [PATCH 050/158] feat: remove reply suggestion --- .../java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index fd77bd66..596f2a99 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -55,7 +55,8 @@ public List matchers() { new StringMatcher("bottom_bubble_config"), new StringMatcher("top_level_navi"), new StringMatcher("index_tab_info"), - new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V") + new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), + new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V") ); } @@ -166,6 +167,10 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, "android.view.ViewGroup", XC_MethodReplacement.returnConstant(null)); break; + case "Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V": // 点我快速配图经验+3 + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, "android.content.Context", + XC_MethodReplacement.returnConstant(null)); + break; } }); // 启动广告 From 6224ffee97935abfb565b01d9a6588740bc193da Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 17 Feb 2024 23:33:13 -0800 Subject: [PATCH 051/158] feat: remove ai chatbot --- .../java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 596f2a99..931c843a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -412,5 +412,13 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } } }); + // 聊天-AI角色 + XposedHelpers.findAndHookMethod("com.baidu.tieba.immessagecenter.chatgroup.data.ChatGroupInfo", sClassLoader, "parse", JSONObject.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONObject chatGroupInfo = (JSONObject) param.args[0]; + chatGroupInfo.put("aichat_entrance_info", null); + } + }); } } From 576f4e7308bef6741d1080d8423a362ba251860f Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 18 Feb 2024 00:42:57 -0800 Subject: [PATCH 052/158] feat: message page always open with notification tab --- app/build.gradle | 2 +- .../java/gm/tieba/tabswitch/XposedInit.java | 4 ++- .../tieba/tabswitch/hooker/TSPreference.java | 1 + .../tabswitch/hooker/auto/MsgCenterTab.java | 32 +++++++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.java diff --git a/app/build.gradle b/app/build.gradle index 1f44e2da..b342b83d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.3' + versionName '2.9.4' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 0a75f8be..50c6407c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -37,6 +37,7 @@ import gm.tieba.tabswitch.hooker.auto.AgreeNum; import gm.tieba.tabswitch.hooker.auto.AutoSign; import gm.tieba.tabswitch.hooker.auto.FrsTab; +import gm.tieba.tabswitch.hooker.auto.MsgCenterTab; import gm.tieba.tabswitch.hooker.auto.OpenSign; import gm.tieba.tabswitch.hooker.auto.OriginSrc; import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; @@ -132,7 +133,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { new Hide(), new StackTrace(), new RemoveUpdate(), - new FoldTopCardView() + new FoldTopCardView(), + new MsgCenterTab() ); final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbDialog()); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 90c43289..56138038 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -232,6 +232,7 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(autoSign); preferenceLayout.addView(new SwitchButtonHolder(activity, "自动打开一键签到", "open_sign", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "吧页面起始页面改为最新", "frs_tab", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "消息页面起始页面改为通知", "msg_center_tab", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "自动查看原图", "origin_src", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "奇怪怪" : "其它")); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.java new file mode 100644 index 00000000..d62b884f --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.java @@ -0,0 +1,32 @@ +package gm.tieba.tabswitch.hooker.auto; + +import androidx.annotation.NonNull; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.hooker.IHooker; +import gm.tieba.tabswitch.util.ReflectUtils; + +public class MsgCenterTab extends XposedContext implements IHooker { + + @NonNull + @Override + public String key() { + return "msg_center_tab"; + } + + @Override + public void hook() throws Throwable { + for (final var method : XposedHelpers.findClass("com.baidu.tieba.immessagecenter.msgtab.ui.view.MsgCenterContainerView", sClassLoader).getDeclaredMethods()) { + if (method.getParameterTypes().length == 0 && method.getReturnType() == long.class) { + XposedHelpers.findAndHookMethod("com.baidu.tieba.immessagecenter.msgtab.ui.view.MsgCenterContainerView", sClassLoader, method.getName(), new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + ReflectUtils.setObjectField(param.thisObject, Long.class, -1L); + } + }); + } + } + } +} From a4928b8791b87bbcc5da4a780117e26250fdd7fe Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 18 Feb 2024 03:37:21 -0800 Subject: [PATCH 053/158] fix: unable to open personal page from search --- .../tabswitch/hooker/eliminate/Purge.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 931c843a..b6a92eb1 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -380,12 +380,21 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { WebView webView = (WebView) param.thisObject; - webView.setWebViewClient(new WebViewClient() { - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - webView.evaluateJavascript(jsRemoveOtherCardResponse, null); - } - }); + WebViewClient oldWebViewClient = webView.getWebViewClient(); + + // Only hook once + Boolean isHooked = (Boolean) XposedHelpers.getAdditionalInstanceField(oldWebViewClient, "isHooked"); + if (isHooked != null && !isHooked) { + webView.setWebViewClient(new WebViewClient() { + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + oldWebViewClient.onPageStarted(view, url, favicon); + webView.evaluateJavascript(jsRemoveOtherCardResponse, null); + } + }); + + XposedHelpers.setAdditionalInstanceField(oldWebViewClient, "isHooked", true); + } } }); // 吧页面头条贴(41), 直播贴(69) From 3cf93082b0a2d74bd159c3f28f65ba724b33fde7 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 18 Feb 2024 03:50:01 -0800 Subject: [PATCH 054/158] refactor: make previous fix more robust --- .../java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index b6a92eb1..be3d4a1d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -385,15 +385,15 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // Only hook once Boolean isHooked = (Boolean) XposedHelpers.getAdditionalInstanceField(oldWebViewClient, "isHooked"); if (isHooked != null && !isHooked) { - webView.setWebViewClient(new WebViewClient() { + WebViewClient newWebViewClient = new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { oldWebViewClient.onPageStarted(view, url, favicon); webView.evaluateJavascript(jsRemoveOtherCardResponse, null); } - }); - - XposedHelpers.setAdditionalInstanceField(oldWebViewClient, "isHooked", true); + }; + XposedHelpers.setAdditionalInstanceField(newWebViewClient, "isHooked", true); + webView.setWebViewClient(newWebViewClient); } } }); From 9f1c8f865ad80c35c4b4701db278d4237ed4034b Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 18 Feb 2024 06:47:19 -0800 Subject: [PATCH 055/158] fix: webview ad removal not working correctly --- .../tabswitch/hooker/eliminate/Purge.java | 34 ++++--------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index be3d4a1d..6adfc9e1 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -370,33 +370,13 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } } // 更多板块 (吧友直播,友情吧) - XposedHelpers.findAndHookMethod( - "com.baidu.tieba.browser.webview.monitor.MonitorWebView", - sClassLoader, - "loadUrl", - String.class, - Map.class, - new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - WebView webView = (WebView) param.thisObject; - WebViewClient oldWebViewClient = webView.getWebViewClient(); - - // Only hook once - Boolean isHooked = (Boolean) XposedHelpers.getAdditionalInstanceField(oldWebViewClient, "isHooked"); - if (isHooked != null && !isHooked) { - WebViewClient newWebViewClient = new WebViewClient() { - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - oldWebViewClient.onPageStarted(view, url, favicon); - webView.evaluateJavascript(jsRemoveOtherCardResponse, null); - } - }; - XposedHelpers.setAdditionalInstanceField(newWebViewClient, "isHooked", true); - webView.setWebViewClient(newWebViewClient); - } - } - }); + XposedHelpers.findAndHookMethod(WebViewClient.class, "onPageStarted", WebView.class, String.class, Bitmap.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + WebView webView = (WebView) param.args[0]; + webView.evaluateJavascript(jsRemoveOtherCardResponse, null); + } + }); // 吧页面头条贴(41), 直播贴(69) XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override From f38f46abf48bd8186acf6383c4c752ad9aadde9e Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 18 Feb 2024 17:39:41 -0800 Subject: [PATCH 056/158] fix: personal page empty line --- .../tabswitch/hooker/deobfuscation/Deobfuscation.java | 2 +- .../gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt | 1 + .../java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 9 +++++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 572fe697..fbcd412c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -170,7 +170,7 @@ private MethodDataList findMethod(DexKitBridge bridge, FindMethod baseMethodQuer ret = bridge.findMethod( baseMethodQuery.matcher( MethodMatcher.create().addInvoke( - MethodMatcher.create().descriptor(smaliMatcher.toString()) + MethodMatcher.create().descriptor(smaliMatcher.getDescriptor()) ) ) ); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 8becdeeb..3cc0e90a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -24,6 +24,7 @@ class StringMatcher @JvmOverloads constructor(val str: String, classMatcher: Cla class SmaliMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { override fun toString(): String = super.toString() + str + fun getDescriptor(): String = str; } class MethodNameMatcher @JvmOverloads constructor(val name: String, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 6adfc9e1..742f7ab1 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; @@ -30,6 +29,7 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; +import gm.tieba.tabswitch.hooker.deobfuscation.ClassMatcherHelper; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; @@ -56,7 +56,8 @@ public List matchers() { new StringMatcher("top_level_navi"), new StringMatcher("index_tab_info"), new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), - new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V") + new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V"), + new SmaliMatcher("Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;", ClassMatcherHelper.usingString("隐私设置")) ); } @@ -171,6 +172,10 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, "android.content.Context", XC_MethodReplacement.returnConstant(null)); break; + // 个人页面空行 + case "隐私设置/Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;": + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)); + break; } }); // 启动广告 From 878ed9bf6ee5b043b59732e6ab369eb8b173b954 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 18 Feb 2024 18:45:11 -0800 Subject: [PATCH 057/158] feat: remove ad for 12.55+ --- app/build.gradle | 2 +- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index b342b83d..970038c7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.4' + versionName '2.9.5' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 742f7ab1..67b67aa5 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -414,5 +414,19 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { chatGroupInfo.put("aichat_entrance_info", null); } }); + + // 12.55+ + try { + // 帖子内广告 + XposedHelpers.findAndHookMethod("com.fun.ad.sdk.internal.api.BaseNativeAd2", sClassLoader, "getNativeInfo", XC_MethodReplacement.returnConstant(null)); + } catch (final XposedHelpers.ClassNotFoundError ignored) {} + + // 相关推荐 + XposedHelpers.findAndHookMethod("tbclient.Post$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + XposedHelpers.setObjectField(param.thisObject, "outer_item", null); + } + }); } } From f5b8d726140e97792367861f7bc97119e0367d38 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 20 Feb 2024 00:11:52 -0800 Subject: [PATCH 058/158] refactor: migrate ClassMatcherHelper to java as ClassMatcherUtils --- .../tabswitch/hooker/deobfuscation/Matcher.kt | 30 +++++--------- .../tabswitch/hooker/eliminate/Purge.java | 8 +--- .../hooker/eliminate/PurgeEnter.java | 7 ++-- .../tabswitch/hooker/eliminate/PurgeMy.java | 39 ++++++++++++------- .../tabswitch/util/ClassMatcherUtils.java | 26 +++++++++++++ 5 files changed, 64 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 3cc0e90a..190c1ba7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -1,54 +1,42 @@ package gm.tieba.tabswitch.hooker.deobfuscation -import org.luckypray.dexkit.query.matchers.ClassMatcher +import gm.tieba.tabswitch.util.ClassMatcherUtils -class ClassMatcherHelper(val matcher: ClassMatcher, val id: String) { - override fun toString(): String = "$id/" - - companion object { - @JvmStatic - fun usingString(str: String): ClassMatcherHelper { - val matcher = ClassMatcher.create().usingStrings(str) - return ClassMatcherHelper(matcher, str) - } - } -} - -abstract class Matcher(val classMatcher: ClassMatcherHelper? = null) { +abstract class Matcher(val classMatcher: ClassMatcherUtils? = null) { override fun toString(): String = classMatcher?.toString().orEmpty() } -class StringMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { +class StringMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherUtils? = null) : Matcher(classMatcher) { override fun toString(): String = super.toString() + str } -class SmaliMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { +class SmaliMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherUtils? = null) : Matcher(classMatcher) { override fun toString(): String = super.toString() + str fun getDescriptor(): String = str; } -class MethodNameMatcher @JvmOverloads constructor(val name: String, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { +class MethodNameMatcher @JvmOverloads constructor(val name: String, classMatcher: ClassMatcherUtils? = null) : Matcher(classMatcher) { override fun toString(): String = super.toString() + name } -open class ResMatcher @JvmOverloads constructor(var id: Long = 0, classMatcher: ClassMatcherHelper? = null) : Matcher(classMatcher) { +open class ResMatcher @JvmOverloads constructor(var id: Long = 0, classMatcher: ClassMatcherUtils? = null) : Matcher(classMatcher) { open fun toResIdentifier(): String { throw UnsupportedOperationException() } } -class StringResMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherHelper? = null) : ResMatcher(classMatcher = classMatcher) { +class StringResMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherUtils? = null) : ResMatcher(classMatcher = classMatcher) { override fun toString(): String = super.toString() + str override fun toResIdentifier(): String = str } -class ZipEntryMatcher @JvmOverloads constructor(val size: Long, classMatcher: ClassMatcherHelper? = null) : ResMatcher(classMatcher = classMatcher) { +class ZipEntryMatcher @JvmOverloads constructor(val size: Long, classMatcher: ClassMatcherUtils? = null) : ResMatcher(classMatcher = classMatcher) { var entryName: String = "" override fun toString(): String = super.toString() + size.toString() override fun toResIdentifier(): String = size.toString() } -class ResIdentifierMatcher @JvmOverloads constructor(val name: String, val defType: String, classMatcher: ClassMatcherHelper? = null) : ResMatcher(classMatcher = classMatcher) { +class ResIdentifierMatcher @JvmOverloads constructor(val name: String, val defType: String, classMatcher: ClassMatcherUtils? = null) : ResMatcher(classMatcher = classMatcher) { override fun toString(): String = super.toString() + String.format("%s.%s", defType, name) override fun toResIdentifier(): String = String.format("%s.%s", defType, name) } \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 67b67aa5..f91ac63f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -29,7 +29,6 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.ClassMatcherHelper; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; @@ -56,8 +55,7 @@ public List matchers() { new StringMatcher("top_level_navi"), new StringMatcher("index_tab_info"), new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), - new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V"), - new SmaliMatcher("Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;", ClassMatcherHelper.usingString("隐私设置")) + new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V") ); } @@ -172,10 +170,6 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, "android.content.Context", XC_MethodReplacement.returnConstant(null)); break; - // 个人页面空行 - case "隐私设置/Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;": - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)); - break; } }); // 启动广告 diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 6d8d23c8..8eb94768 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -9,16 +9,15 @@ import java.util.List; import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.ClassMatcherHelper; import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.ResIdentifierMatcher; +import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; public class PurgeEnter extends XposedContext implements IHooker, Obfuscated { @@ -35,8 +34,8 @@ public String key() { @Override public List matchers() { return List.of( - new ResIdentifierMatcher("tbds400", "dimen", ClassMatcherHelper.usingString("enter_forum_login_tip")), - new MethodNameMatcher("onSuccess", ClassMatcherHelper.usingString("enter_forum_login_tip")) + new ResIdentifierMatcher("tbds400", "dimen", ClassMatcherUtils.usingString("enter_forum_login_tip")), + new MethodNameMatcher("onSuccess", ClassMatcherUtils.usingString("enter_forum_login_tip")) ); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java index cd9c431f..d7eac20c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java @@ -1,15 +1,14 @@ package gm.tieba.tabswitch.hooker.eliminate; import android.view.View; -import android.widget.ImageView; import androidx.annotation.NonNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XC_MethodReplacement; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; @@ -18,7 +17,7 @@ import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; +import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; public class PurgeMy extends XposedContext implements IHooker, Obfuscated { @@ -34,12 +33,14 @@ public String key() { @Override public List matchers() { return List.of( - new SmaliMatcher("Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V") + new SmaliMatcher("Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V"), + new SmaliMatcher("Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;", ClassMatcherUtils.usingString("隐私设置")) ); } @Override public void hook() throws Throwable { + XposedHelpers.findAndHookMethod("tbclient.Profile.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { @@ -56,6 +57,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "recom_naws_list", new ArrayList<>()); } }); + XposedHelpers.findAndHookMethod("tbclient.User$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { @@ -63,18 +65,27 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "user_growth", null); } }); + // Add padding to the top of 常用功能 AcRules.findRule(matchers(), (matcher, clazz, method) -> { - XposedBridge.hookAllConstructors( - XposedHelpers.findClass(clazz, sClassLoader), - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - View mView = ReflectUtils.getObjectField(param.thisObject, View.class); - mView.setPadding(mView.getPaddingLeft(), mGridTopPadding, mView.getPaddingRight(), 0); - } - } - ); + switch (matcher) { + case "Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V": + XposedBridge.hookAllConstructors( + XposedHelpers.findClass(clazz, sClassLoader), + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + View mView = ReflectUtils.getObjectField(param.thisObject, View.class); + mView.setPadding(mView.getPaddingLeft(), mGridTopPadding, mView.getPaddingRight(), 0); + } + } + ); + break; + // 个人页面空行 + case "隐私设置/Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;": + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)); + break; + } }); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java new file mode 100644 index 00000000..371e6cf6 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java @@ -0,0 +1,26 @@ +package gm.tieba.tabswitch.util; + +import org.luckypray.dexkit.query.matchers.ClassMatcher; + +public class ClassMatcherUtils { + private final ClassMatcher matcher; + private final String id; + public ClassMatcherUtils(ClassMatcher matcher, String id) { + this.matcher = matcher; + this.id = id; + } + + @Override + public String toString() { + return id + "/"; + } + + public static ClassMatcherUtils usingString(String str) { + ClassMatcher classMatcher = ClassMatcher.create().usingStrings(str); + return new ClassMatcherUtils(classMatcher, str); + } + + public ClassMatcher getMatcher() { + return this.matcher; + } +} From 6fce8af2d719e4a194c44058560aa51503e842ec Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 20 Feb 2024 01:22:19 -0800 Subject: [PATCH 059/158] fix: remove deprecated features --- .../gm/tieba/tabswitch/hooker/TSPreference.java | 15 ++++++++------- .../tieba/tabswitch/hooker/add/MyAttention.java | 1 + .../tieba/tabswitch/hooker/eliminate/Purge.java | 17 +++++++++-------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 56138038..450db117 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -192,8 +192,8 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "真正的净化界面", "purge", SwitchButtonHolder.TYPE_SWITCH)); } preferenceLayout.addView(new SwitchButtonHolder(activity, "净化进吧", "purge_enter", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "净化置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "净化置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏小红点", "red_tip", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用更新提示", "remove_update", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "只推荐已关注的吧", "follow_filter", SwitchButtonHolder.TYPE_SWITCH)); @@ -208,11 +208,11 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "搜索楼中楼增加查看主题贴", "new_sub", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(TSPreferenceHelper.createButton(NOTES, null, true, v -> { - final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); - intent.putExtra("proxyPage", NOTES); - activity.startActivity(intent); - })); +// preferenceLayout.addView(TSPreferenceHelper.createButton(NOTES, null, true, v -> { +// final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); +// intent.putExtra("proxyPage", NOTES); +// activity.startActivity(intent); +// })); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "垂手可得" : "自动化")); final SwitchButtonHolder autoSign = new SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH); @@ -283,7 +283,8 @@ private LinearLayout createModifyTabPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏进吧", "enter_forum", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏发帖", "write_thread", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏消息", "im_message", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用动态样式", "dynamic_style", SwitchButtonHolder.TYPE_SWITCH)); + // Merged with Purge +// preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用动态样式", "dynamic_style", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createTextView("禁用 Flutter")); preferenceLayout.addView(new SwitchButtonHolder(activity, "我关注的吧", "flutter_concern_forum_enable_android", SwitchButtonHolder.TYPE_SET_FLUTTER)); preferenceLayout.addView(new SwitchButtonHolder(activity, "吧资料", "flutter_forum_detail_enable_android_112", SwitchButtonHolder.TYPE_SET_FLUTTER)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java index 7617479a..5d38ee5c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java @@ -26,6 +26,7 @@ import gm.tieba.tabswitch.widget.TbDialog; import gm.tieba.tabswitch.widget.TbEditText; +@Deprecated public class MyAttention extends XposedContext implements IHooker { @NonNull diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index f91ac63f..deccb795 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -280,14 +280,15 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable // 吧公告 XposedHelpers.setObjectField(param.thisObject, "star_enter", new ArrayList<>()); - final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); - if (threadList != null) { - // 吧页面头条贴(41), 直播贴(69) - threadList.removeIf(o -> { - var threadType = (Integer) XposedHelpers.getObjectField(o, "thread_type"); - return threadType == 41 || threadType == 69; - }); - } + // thread_list is deprecated +// final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); +// if (threadList != null) { +// // 吧页面头条贴(41), 直播贴(69) +// threadList.removeIf(o -> { +// var threadType = (Integer) XposedHelpers.getObjectField(o, "thread_type"); +// return threadType == 41 || threadType == 69; +// }); +// } // 万人直播互动 吧友开黑组队中 XposedHelpers.setObjectField(param.thisObject, "live_fuse_forum", new ArrayList<>()); From 9b0878624fadb6053cc7a7c34e27016be00251a3 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 20 Feb 2024 01:22:30 -0800 Subject: [PATCH 060/158] fix: update thread filter to 12.53.1.0 --- .../hooker/eliminate/FrsPageFilter.java | 90 ++++++++++++++----- 1 file changed, 70 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java index 498d0fae..80a9695f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java @@ -2,14 +2,12 @@ import androidx.annotation.NonNull; -import java.util.Arrays; import java.util.List; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.Parser; public class FrsPageFilter extends XposedContext implements IHooker, RegexFilter { @@ -21,28 +19,80 @@ public String key() { @Override public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + // thread_list is deprecated +// XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { +// @Override +// protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { +// final var threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); +// if (threadList == null) return; +// final var pattern = getPattern(); +// threadList.removeIf(o -> { +// if (pattern.matcher(Parser.parsePbContent(o, "first_post_content")).find()) { +// return true; +// } +// +// final var strings = new String[]{(String) XposedHelpers.getObjectField(o, "title"), +// (String) XposedHelpers.getObjectField(o, "fname")}; +// if (Arrays.stream(strings).anyMatch(s -> pattern.matcher(s).find())) { +// return true; +// } +// +// final var author = XposedHelpers.getObjectField(o, "author"); +// final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), +// (String) XposedHelpers.getObjectField(author, "name_show")}; +// return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); +// }); +// } +// }); + XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); - if (threadList == null) return; + List feedList = (List) XposedHelpers.getObjectField(param.thisObject, "feed_list"); + if (feedList == null) return; final var pattern = getPattern(); - threadList.removeIf(o -> { - if (pattern.matcher(Parser.parsePbContent(o, "first_post_content")).find()) { - return true; - } + feedList.removeIf( + o -> { + Object currFeed = XposedHelpers.getObjectField(o, "feed"); + if (currFeed != null) { + List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); + for (var feedKV : businessInfo) { + String currKey = XposedHelpers.getObjectField(feedKV, "key").toString(); + if (currKey.equals("title") || currKey.equals("abstract")) { + String str = XposedHelpers.getObjectField(feedKV, "value").toString(); + if (pattern.matcher(str).find()) { + return true; + } + } + } - final var strings = new String[]{(String) XposedHelpers.getObjectField(o, "title"), - (String) XposedHelpers.getObjectField(o, "fname")}; - if (Arrays.stream(strings).anyMatch(s -> pattern.matcher(s).find())) { - return true; - } - - final var author = XposedHelpers.getObjectField(o, "author"); - final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), - (String) XposedHelpers.getObjectField(author, "name_show")}; - return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); - }); + List components = (List) XposedHelpers.getObjectField(currFeed, "components"); + if (components != null ){ + for (var component: components) { + if (XposedHelpers.getObjectField(component, "component").toString().equals("feed_head")) { + Object feedHead = XposedHelpers.getObjectField(component, "feed_head"); + List mainData = (List) XposedHelpers.getObjectField(feedHead, "main_data"); + if (mainData != null) { + for (var feedHeadSymbol: mainData) { + Object feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text"); + if (feedHeadText != null) { + String username = (String) XposedHelpers.getObjectField(feedHeadText, "text"); + if (username != null) { + if (pattern.matcher(username).find()) { + return true; + } + break; + } + } + } + } + break; + } + } + } + } + return false; + } + ); } }); } From c5a7d36ec4f17e332a3c51fb72d054a33c933431 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 20 Feb 2024 05:17:41 -0800 Subject: [PATCH 061/158] feat: add wifi only switch for always show original image --- .../tieba/tabswitch/hooker/TSPreference.java | 1 + .../tabswitch/hooker/auto/OriginSrc.java | 49 +++++++++++++++---- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 450db117..440d3714 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -234,6 +234,7 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "吧页面起始页面改为最新", "frs_tab", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "消息页面起始页面改为通知", "msg_center_tab", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "自动查看原图", "origin_src", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "自动查看原图仅WiFi下生效", "origin_src_only_wifi", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "奇怪怪" : "其它")); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java index b139e650..3eb8449e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java @@ -17,6 +17,7 @@ import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRules; +import gm.tieba.tabswitch.dao.Preferences; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; @@ -28,9 +29,15 @@ public String key() { return "origin_src"; } + private static boolean isHooked; + private static XC_MethodHook.Unhook picListUnhook; + private static XC_MethodHook.Unhook pbContentUnhook; + private static XC_MethodHook.Unhook mediaUnhook; + private static void doHook() { + if (isHooked) return; AcRules.findRule(new StringMatcher("pic_amount"), (matcher, clazz, method) -> - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, JSONObject.class, Boolean.class, new XC_MethodHook() { + picListUnhook = XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, JSONObject.class, Boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { final JSONObject jsonObject = (JSONObject) param.args[0]; @@ -48,7 +55,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable jsonObject.put("pic_list", picList); } })); - XposedHelpers.findAndHookMethod("tbclient.PbContent$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + pbContentUnhook = XposedHelpers.findAndHookMethod("tbclient.PbContent$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { XposedHelpers.setObjectField(param.thisObject, "show_original_btn", 0); @@ -59,7 +66,7 @@ protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) thr } } }); - XposedHelpers.findAndHookMethod("tbclient.Media$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + mediaUnhook = XposedHelpers.findAndHookMethod("tbclient.Media$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { XposedHelpers.setObjectField(param.thisObject, "show_original_btn", 0); @@ -70,17 +77,39 @@ protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) thr } } }); + isHooked = true; + } + + private static void doUnHook() { + if (!isHooked) return; + if (picListUnhook != null) { + picListUnhook.unhook(); + picListUnhook = null; + } + if (pbContentUnhook != null) { + pbContentUnhook.unhook(); + pbContentUnhook = null; + } + if (mediaUnhook != null) { + mediaUnhook.unhook(); + mediaUnhook = null; + } + isHooked = false; } @SuppressLint("MissingPermission") @Override public void hook() throws Throwable { - final NetworkCallbackImpl networkCallback = new NetworkCallbackImpl(); - final NetworkRequest.Builder builder = new NetworkRequest.Builder(); - final NetworkRequest request = builder.build(); - final ConnectivityManager connMgr = (ConnectivityManager) getContext().getSystemService( - Context.CONNECTIVITY_SERVICE); - if (connMgr != null) connMgr.registerNetworkCallback(request, networkCallback); + if (Preferences.getBoolean("origin_src_only_wifi")) { + final NetworkCallbackImpl networkCallback = new NetworkCallbackImpl(); + final NetworkRequest.Builder builder = new NetworkRequest.Builder(); + final NetworkRequest request = builder.build(); + final ConnectivityManager connMgr = (ConnectivityManager) getContext().getSystemService( + Context.CONNECTIVITY_SERVICE); + if (connMgr != null) connMgr.registerNetworkCallback(request, networkCallback); + } else { + doHook(); + } } private static class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback { @@ -93,6 +122,8 @@ public void onCapabilitiesChanged(final Network network, final NetworkCapabiliti if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { doHook(); + } else { + doUnHook(); } } } From c9b808b4ab9d50785e3d8e6269c35883574da52c Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 20 Feb 2024 21:43:47 -0800 Subject: [PATCH 062/158] fix: UI fix for perfectionists --- .../gm/tieba/tabswitch/dao/Preferences.java | 15 ++++- .../tieba/tabswitch/hooker/TSPreference.java | 62 +++++++++++-------- .../tabswitch/hooker/TSPreferenceHelper.java | 11 ++-- .../hooker/eliminate/FragmentTab.java | 25 ++++---- .../gm/tieba/tabswitch/util/ReflectUtils.java | 4 ++ .../tieba/tabswitch/widget/NavigationBar.java | 4 ++ .../gm/tieba/tabswitch/widget/Switch.java | 5 ++ 7 files changed, 84 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java index 2ffaa203..82175aca 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java @@ -81,7 +81,13 @@ public static boolean getIsEULAAccepted() { public static void putAutoSignEnabled() { final SharedPreferences.Editor editor = sTsConfig.edit(); editor.putBoolean("auto_sign", true); - editor.apply(); + editor.commit(); + } + + public static void putAutoSignDisabled() { + final SharedPreferences.Editor editor = sTsConfig.edit(); + editor.putBoolean("auto_sign", false); + editor.commit(); } public static boolean getIsAutoSignEnabled() { @@ -95,6 +101,13 @@ public static void putPurgeEnabled() { editor.commit(); } + @SuppressLint("ApplySharedPref") + public static void putPurgeDisabled() { + final SharedPreferences.Editor editor = sTsConfig.edit(); + editor.putBoolean("ze", false); + editor.commit(); + } + public static boolean getIsPurgeEnabled() { return sTsConfig.getBoolean("ze", false); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 440d3714..8b374f53 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -34,7 +34,6 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.dao.Preferences; import gm.tieba.tabswitch.hooker.TSPreferenceHelper.SwitchButtonHolder; -import gm.tieba.tabswitch.hooker.add.MyAttention; import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringResMatcher; @@ -47,7 +46,7 @@ public class TSPreference extends XposedContext implements IHooker, Obfuscated { public final static String MAIN = "贴吧TS设置"; public final static String MODIFY_TAB = "修改页面"; - public final static String NOTES = "备注关注的人"; +// public final static String NOTES = "备注关注的人"; public final static String TRACE = "痕迹"; private final static String PROXY_ACTIVITY = "com.baidu.tieba.setting.im.more.SecretSettingActivity"; private static int sCount = 0; @@ -110,9 +109,9 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { case MODIFY_TAB: proxyPage(activity, navigationBar, MODIFY_TAB, createModifyTabPreference(activity)); break; - case NOTES: - proxyPage(activity, navigationBar, NOTES, MyAttention.createNotesPreference(activity)); - break; +// case NOTES: +// proxyPage(activity, navigationBar, NOTES, MyAttention.createNotesPreference(activity)); +// break; case TRACE: proxyPage(activity, navigationBar, TRACE, createHidePreference(activity)); break; @@ -140,6 +139,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { private void proxyPage(final Activity activity, final NavigationBar navigationBar, final String title, final LinearLayout preferenceLayout) throws Throwable { navigationBar.setTitleText(title); + navigationBar.setCenterTextTitle(""); navigationBar.addTextButton("重启", v -> DisplayUtils.restart(activity)); final var contentView = (ViewGroup) activity.findViewById(android.R.id.content); final var parent = (LinearLayout) contentView.getChildAt(0); @@ -216,8 +216,8 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "垂手可得" : "自动化")); final SwitchButtonHolder autoSign = new SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH); - if (!Preferences.getIsAutoSignEnabled()) { - autoSign.setOnButtonClickListener(v -> { + autoSign.setOnButtonClickListener(v -> { + if (!Preferences.getIsAutoSignEnabled()) { final TbDialog bdalert = new TbDialog(activity, "提示", "这是一个需要网络请求并且有封号风险的功能,您需要自行承担使用此功能的风险,请谨慎使用!", true, null); bdalert.setOnNoButtonClickListener(v2 -> bdalert.dismiss()); @@ -227,14 +227,26 @@ private LinearLayout createRootPreference(final Activity activity) { bdalert.dismiss(); }); bdalert.show(); - }); - } + } else { + autoSign.bdSwitch.changeState(); + } + }); preferenceLayout.addView(autoSign); preferenceLayout.addView(new SwitchButtonHolder(activity, "自动打开一键签到", "open_sign", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "吧页面起始页面改为最新", "frs_tab", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "消息页面起始页面改为通知", "msg_center_tab", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "自动查看原图", "origin_src", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "自动查看原图仅WiFi下生效", "origin_src_only_wifi", SwitchButtonHolder.TYPE_SWITCH)); + + var originSrcOnlyWifiButton = new SwitchButtonHolder(activity, "自动查看原图仅WiFi下生效", "origin_src_only_wifi", SwitchButtonHolder.TYPE_SWITCH); + var originSrcButton = new SwitchButtonHolder(activity, "自动查看原图", "origin_src", SwitchButtonHolder.TYPE_SWITCH); + originSrcButton.setOnButtonClickListener(v -> { + originSrcButton.bdSwitch.changeState(); + originSrcOnlyWifiButton.switchButton.setVisibility(Preferences.getBoolean("origin_src") ? View.VISIBLE : View.GONE); + } + ); + originSrcOnlyWifiButton.switchButton.setVisibility(Preferences.getBoolean("origin_src") ? View.VISIBLE : View.GONE); + + preferenceLayout.addView(originSrcButton); + preferenceLayout.addView(originSrcOnlyWifiButton); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "奇怪怪" : "其它")); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)); @@ -246,11 +258,15 @@ private LinearLayout createRootPreference(final Activity activity) { })); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "关于就是关于" : "关于")); - preferenceLayout.addView(TSPreferenceHelper.createButton("版本", BuildConfig.VERSION_NAME, true, v -> { - final Intent intent = new Intent(); - intent.setAction("android.intent.action.VIEW"); - intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases/latest")); - activity.startActivity(intent); + preferenceLayout.addView(TSPreferenceHelper.createButton("作者", "GM", true, v -> { + sCount++; + if (sCount % 3 == 0) { + TbToast.showTbToast(TSPreferenceHelper.randomToast(), TbToast.LENGTH_SHORT); + } + if (!isPurgeEnabled && sCount >= 10) { + Preferences.putPurgeEnabled(); + activity.recreate(); + } })); preferenceLayout.addView(TSPreferenceHelper.createButton("源代码", "想要小星星", true, v -> { final Intent intent = new Intent(); @@ -264,15 +280,11 @@ private LinearLayout createRootPreference(final Activity activity) { intent.setData(Uri.parse("https://t.me/TabSwitch")); activity.startActivity(intent); })); - preferenceLayout.addView(TSPreferenceHelper.createButton("作者", "GM", true, v -> { - sCount++; - if (sCount % 3 == 0) { - TbToast.showTbToast(TSPreferenceHelper.randomToast(), TbToast.LENGTH_SHORT); - } - if (!isPurgeEnabled && sCount >= 10) { - Preferences.putPurgeEnabled(); - activity.recreate(); - } + preferenceLayout.addView(TSPreferenceHelper.createButton("版本", BuildConfig.VERSION_NAME, true, v -> { + final Intent intent = new Intent(); + intent.setAction("android.intent.action.VIEW"); + intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases/latest")); + activity.startActivity(intent); })); return preferenceLayout; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java index 79a14e38..e8994d09 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java @@ -41,12 +41,12 @@ public static TextView createTextView(final String text) { final TextView textView = new TextView(getContext()); textView.setText(text); textView.setTextColor(ReflectUtils.getColor("CAM_X0108")); - textView.setTextSize(ReflectUtils.getDimenDip("fontsize28")); + textView.setTextSize(ReflectUtils.getDimenDip("fontsize22")); final LinearLayout.LayoutParams layoutParams; if (text != null) { textView.setPaddingRelative((int) ReflectUtils.getDimen("ds30"), - (int) ReflectUtils.getDimen("ds32"), 0, - (int) ReflectUtils.getDimen("ds10")); + (int) ReflectUtils.getDimen("ds20"), 0, + (int) ReflectUtils.getDimen("ds20")); layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } else { @@ -154,7 +154,10 @@ static class SwitchButtonHolder { void setOnButtonClickListener(final View.OnClickListener l) { switchButton.setOnClickListener(l); - bdSwitch.bdSwitch.setOnTouchListener((View v, MotionEvent event) -> false); + bdSwitch.bdSwitch.setOnTouchListener((View v, MotionEvent event) -> { + XposedHelpers.callMethod(bdSwitch.getVibrator(), "vibrate", 30L); + return false; + }); } private void showRegexDialog(final Activity activity) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java index 4a71c1c0..8bf3d74e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java @@ -67,17 +67,18 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } }); }); - if (Preferences.getBoolean("dynamic_style")) { - XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.adp.framework.MessageManager", - sClassLoader), "dispatchResponsedMessage", new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Object responsedMessage = param.args[0]; - if ((int) XposedHelpers.getObjectField(responsedMessage, "mCmd") == 2921551) { - param.setResult(null); - } - } - }); - } + // Merged with Purge +// if (Preferences.getBoolean("dynamic_style")) { +// XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.adp.framework.MessageManager", +// sClassLoader), "dispatchResponsedMessage", new XC_MethodHook() { +// @Override +// protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { +// final Object responsedMessage = param.args[0]; +// if ((int) XposedHelpers.getObjectField(responsedMessage, "mCmd") == 2921551) { +// param.setResult(null); +// } +// } +// }); +// } } } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java index 59f8349d..f4353077 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java @@ -31,6 +31,8 @@ public static float getDimen(final String fieldName) { switch (fieldName) { case "ds10": return DisplayUtils.dipToPx(getContext(), 5F); + case "ds20": + return DisplayUtils.dipToPx(getContext(), 10F); case "ds30": return DisplayUtils.dipToPx(getContext(), 15F); case "ds32": @@ -43,6 +45,8 @@ public static float getDimen(final String fieldName) { public static float getDimenDip(final String fieldName) { switch (fieldName) { + case "fontsize22": + return 11F; case "fontsize28": return 14F; case "fontsize36": diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java index c8cc7c2f..13a106de 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java +++ b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java @@ -31,4 +31,8 @@ public void addTextButton(final String text, final View.OnClickListener l) { public void setTitleText(final String title) { XposedHelpers.callMethod(mNavigationBar, "setTitleText", title); } + + public void setCenterTextTitle(final String title) { + XposedHelpers.callMethod(mNavigationBar, "setCenterTextTitle", title); + } } diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java index 49d5646a..1a7cf781 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java +++ b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java @@ -1,5 +1,6 @@ package gm.tieba.tabswitch.widget; +import android.os.Vibrator; import android.view.View; import java.lang.reflect.InvocationHandler; @@ -66,4 +67,8 @@ public void turnOff() { ReflectUtils.callMethod(mMethods[8], bdSwitch); } } + + public Vibrator getVibrator() { + return ReflectUtils.getObjectField(bdSwitch, Vibrator.class); + } } From dd56b340e2c12906752a069dd1817234f99003ca Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 21 Feb 2024 02:04:13 -0800 Subject: [PATCH 063/158] feat: add version hint --- app/build.gradle | 1 + app/src/main/java/gm/tieba/tabswitch/Constants.kt | 4 ++-- .../main/java/gm/tieba/tabswitch/XposedInit.java | 15 ++++++++++----- .../gm/tieba/tabswitch/hooker/TSPreference.java | 2 +- .../gm/tieba/tabswitch/util/DisplayUtils.java | 4 ++++ 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 970038c7..d1cf68af 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,6 +18,7 @@ android { targetSdk sdk versionCode gitCommitCount versionName '2.9.5' + buildConfigField "String", "TARGET_VERSION", "\"12.53.1.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/Constants.kt b/app/src/main/java/gm/tieba/tabswitch/Constants.kt index 24768577..ef92633f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/Constants.kt +++ b/app/src/main/java/gm/tieba/tabswitch/Constants.kt @@ -8,8 +8,8 @@ object Constants { " ②本模块不会主动发起网络请求,不会上传任何用户数据,隐私泄露或者账号异常行为与本模块无关。\n" + " ③本模块主要用于学习和交流技术,任何人不得将本模块用于商业或非法用途。", "dev_tip" to "提示:您当前安装的是非正式版本,可能含有较多错误,如果您希望得到更稳定的使用体验,建议您安装正式版本。", - "exception_rules_incomplete" to "规则异常,建议您执行反混淆。若执行完后仍出现此对话框则应更新模块,若模块已是最新版本则应向作者反馈。", - "exception_init_preference" to "初始化设置失败,请尝试更换百度贴吧版本。", + "exception_rules_incomplete" to "规则异常,建议您执行反混淆。若执行完后仍出现此对话框则应更新模块或使用推荐贴吧版本%s,若已是最新版本则应向作者反馈。", + "exception_init_preference" to "初始化设置失败,请尝试更换贴吧版本。", "regex_hint" to "请输入正则表达式,如.*", ) } diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 50c6407c..5a9c2d3d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -8,6 +8,7 @@ import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; +import android.view.WindowManager; import java.util.ArrayList; import java.util.Collection; @@ -178,21 +179,25 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { final var activity = (Activity) param.thisObject; final var messages = new ArrayList(); - messages.add(Constants.getStrings().get("exception_rules_incomplete")); + messages.add(String.format(Constants.getStrings().get("exception_rules_incomplete"), BuildConfig.TARGET_VERSION)); messages.add(String.format(Locale.CHINA, "tbversion: %s, module version: %d", DeobfuscationHelper.getTbVersion(getContext()), BuildConfig.VERSION_CODE)); messages.add(String.format(Locale.CHINA, "%d rule(s) lost: %s", lostList.size(), lostList)); final var message = TextUtils.join("\n", messages); XposedBridge.log(message); - new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? - AlertDialog.THEME_DEVICE_DEFAULT_LIGHT : AlertDialog.THEME_DEVICE_DEFAULT_DARK) + AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? + android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) .setTitle("警告").setMessage(message).setCancelable(false) .setNegativeButton(activity.getString(android.R.string.cancel), null) .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> { Preferences.putSignature(0); DeobfuscationHelper.saveAndRestart(activity, "unknown", null); - }) - .show(); + }).create(); + alert.show(); + WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); + layoutParams.copyFrom(alert.getWindow().getAttributes()); + layoutParams.width = DisplayUtils.getDisplayWidth(getContext()); + alert.getWindow().setAttributes(layoutParams); } }); return; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 8b374f53..9c76626b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -280,7 +280,7 @@ private LinearLayout createRootPreference(final Activity activity) { intent.setData(Uri.parse("https://t.me/TabSwitch")); activity.startActivity(intent); })); - preferenceLayout.addView(TSPreferenceHelper.createButton("版本", BuildConfig.VERSION_NAME, true, v -> { + preferenceLayout.addView(TSPreferenceHelper.createButton("版本(适配版本)", String.format("%s_%d (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, BuildConfig.TARGET_VERSION), true, v -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases/latest")); diff --git a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java index b38dd3d4..8b84025e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java @@ -61,4 +61,8 @@ public static int pxToDip(final Context context, final float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } + + public static int getDisplayWidth(final Context context) { + return context.getResources().getDisplayMetrics().widthPixels; + } } From f537557464c7866ee887fd5cf81391658b0315c4 Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Thu, 22 Feb 2024 13:21:37 +0800 Subject: [PATCH 064/158] fix RuntimeException --- .../gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java index f68f2bf7..ba1357f7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java @@ -1,7 +1,5 @@ package gm.tieba.tabswitch.hooker.eliminate; -import android.os.Looper; - import androidx.annotation.NonNull; import java.util.List; @@ -30,9 +28,8 @@ public void hook() throws Throwable { public void beforeHookedMethod(final MethodHookParam param) throws Throwable { final Set forums = Preferences.getLikeForum(); if (forums == null) { - Looper.prepare(); - TbToast.showTbToast("暂未获取到关注列表", TbToast.LENGTH_LONG); - Looper.loop(); + runOnUiThread(() -> + TbToast.showTbToast("暂未获取到关注列表", TbToast.LENGTH_LONG)); return; } final List list = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); From 1111333735c211fb1ebb51177e3e74b81a369faf Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Thu, 22 Feb 2024 13:38:38 +0800 Subject: [PATCH 065/158] drop some features --- .../java/gm/tieba/tabswitch/XposedInit.java | 6 - .../tieba/tabswitch/hooker/TSPreference.java | 11 -- .../tabswitch/hooker/add/CreateView.java | 91 ------------ .../tabswitch/hooker/add/MyAttention.java | 112 --------------- .../tabswitch/hooker/add/ThreadStore.java | 133 ------------------ 5 files changed, 353 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/CreateView.java delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/ThreadStore.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 5a9c2d3d..b38cb722 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -28,13 +28,10 @@ import gm.tieba.tabswitch.dao.Preferences; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.TSPreference; -import gm.tieba.tabswitch.hooker.add.CreateView; import gm.tieba.tabswitch.hooker.add.HistoryCache; -import gm.tieba.tabswitch.hooker.add.MyAttention; import gm.tieba.tabswitch.hooker.add.NewSub; import gm.tieba.tabswitch.hooker.add.Ripple; import gm.tieba.tabswitch.hooker.add.SaveImages; -import gm.tieba.tabswitch.hooker.add.ThreadStore; import gm.tieba.tabswitch.hooker.auto.AgreeNum; import gm.tieba.tabswitch.hooker.auto.AutoSign; import gm.tieba.tabswitch.hooker.auto.FrsTab; @@ -118,13 +115,10 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { new PersonalizedFilter(), new ContentFilter(), new FrsPageFilter(), - new CreateView(), - new ThreadStore(), new HistoryCache(), new NewSub(), new Ripple(), new SaveImages(), - new MyAttention(), new AutoSign(), new OpenSign(), new OriginSrc(), diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 9c76626b..8d6cc9ae 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -46,7 +46,6 @@ public class TSPreference extends XposedContext implements IHooker, Obfuscated { public final static String MAIN = "贴吧TS设置"; public final static String MODIFY_TAB = "修改页面"; -// public final static String NOTES = "备注关注的人"; public final static String TRACE = "痕迹"; private final static String PROXY_ACTIVITY = "com.baidu.tieba.setting.im.more.SecretSettingActivity"; private static int sCount = 0; @@ -109,9 +108,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { case MODIFY_TAB: proxyPage(activity, navigationBar, MODIFY_TAB, createModifyTabPreference(activity)); break; -// case NOTES: -// proxyPage(activity, navigationBar, NOTES, MyAttention.createNotesPreference(activity)); -// break; case TRACE: proxyPage(activity, navigationBar, TRACE, createHidePreference(activity)); break; @@ -202,17 +198,10 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤吧页面", "frs_page_filter", SwitchButtonHolder.TYPE_DIALOG)); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "别出新意" : "增加功能")); - preferenceLayout.addView(new SwitchButtonHolder(activity, "进吧增加收藏、历史", "create_view", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "我的收藏增加搜索、吧名", "thread_store", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "浏览历史增加搜索", "history_cache", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "搜索楼中楼增加查看主题贴", "new_sub", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)); -// preferenceLayout.addView(TSPreferenceHelper.createButton(NOTES, null, true, v -> { -// final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); -// intent.putExtra("proxyPage", NOTES); -// activity.startActivity(intent); -// })); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "垂手可得" : "自动化")); final SwitchButtonHolder autoSign = new SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/CreateView.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/CreateView.java deleted file mode 100644 index ccaedf45..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/CreateView.java +++ /dev/null @@ -1,91 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.RelativeLayout; - -import androidx.annotation.NonNull; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class CreateView extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "create_view"; - } - - @Override - public void hook() throws Throwable { - var method = XposedHelpers.findMethodExactIfExists( - "com.baidu.tieba.enterForum.home.EnterForumTabFragment", sClassLoader, - "onCreateView", LayoutInflater.class, ViewGroup.class, Bundle.class - ); - if (method == null) { - // 12.25.4.1 + - method = ReflectUtils.findFirstMethodByExactType( - "com.baidu.tieba.enterForum.home.EnterForumTabFragment", View.class, Bundle.class - ); - } - XposedBridge.hookMethod(method, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var controller = ReflectUtils.getObjectField(param.thisObject, 1); - final var signButton = ReflectUtils.getObjectField(controller, ImageView.class); - final var activity = (Activity) XposedHelpers.callMethod(param.thisObject, "requireActivity"); - final var parent = (RelativeLayout) signButton.getParent(); - final var signButtonLayoutParams = (RelativeLayout.LayoutParams) signButton.getLayoutParams(); - signButtonLayoutParams.leftMargin = 0; - signButton.setLayoutParams(signButtonLayoutParams); - // historyButton - final var historyDrawable = new ImageView(activity); - historyDrawable.setImageResource( - ReflectUtils.getDrawableId("icon_mask_wo_list_history24_svg")); - final var historyButton = new RelativeLayout(activity); - final var historyLayoutParams = new RelativeLayout.LayoutParams( - signButtonLayoutParams.height, RelativeLayout.LayoutParams.MATCH_PARENT); - historyLayoutParams.addRule(RelativeLayout.LEFT_OF, signButton.getId()); - historyButton.setLayoutParams(historyLayoutParams); - historyButton.setId(View.generateViewId()); - historyButton.addView(historyDrawable); - final var drawableLayoutParams = (RelativeLayout.LayoutParams) historyDrawable.getLayoutParams(); - drawableLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); - historyDrawable.setLayoutParams(drawableLayoutParams); - parent.addView(historyButton); - historyButton.setOnClickListener(view -> { - final var intent = new Intent().setClassName(activity, - "com.baidu.tieba.myCollection.history.PbHistoryActivity"); - activity.startActivity(intent); - }); - // collectButton - final var collectDrawable = new ImageView(activity); - collectDrawable.setImageResource( - ReflectUtils.getDrawableId("icon_mask_wo_list_collect24_svg")); - final var collectButton = new RelativeLayout(activity); - final var collectButtonLayoutParams = new RelativeLayout.LayoutParams( - signButtonLayoutParams.height, RelativeLayout.LayoutParams.MATCH_PARENT); - collectButtonLayoutParams.addRule(RelativeLayout.LEFT_OF, historyButton.getId()); - collectButton.setLayoutParams(collectButtonLayoutParams); - collectButton.addView(collectDrawable); - collectDrawable.setLayoutParams(drawableLayoutParams); - parent.addView(collectButton); - collectButton.setOnClickListener(view -> { - final var intent = new Intent().setClassName(activity, - "com.baidu.tieba.myCollection.CollectTabActivity"); - activity.startActivity(intent); - }); - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java deleted file mode 100644 index 5d38ee5c..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/MyAttention.java +++ /dev/null @@ -1,112 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.app.Activity; -import android.content.SharedPreferences; -import android.text.TextUtils; -import android.util.Log; -import android.view.KeyEvent; -import android.view.WindowManager; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; -import android.widget.LinearLayout; - -import androidx.annotation.NonNull; - -import java.util.Collections; -import java.util.Set; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.Adp; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.TSPreferenceHelper; -import gm.tieba.tabswitch.widget.TbDialog; -import gm.tieba.tabswitch.widget.TbEditText; - -@Deprecated -public class MyAttention extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "my_attention"; - } - - public static LinearLayout createNotesPreference(final Activity activity) { - Preferences.putBoolean("my_attention", !Preferences.getNotes().isEmpty()); - final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); - Set follows = Collections.emptySet(); - try { - follows = Adp.getInstance().parseDatabase().follows; - preferenceLayout.addView(TSPreferenceHelper.createTextView(null)); - } catch (final Throwable e) { - XposedBridge.log(e); - preferenceLayout.addView(TSPreferenceHelper.createTextView("读取数据库缓存失败\n" - + Log.getStackTraceString(e))); - } - for (final String follow : follows) { - preferenceLayout.addView(TSPreferenceHelper.createButton(follow, Preferences.getNote(follow), - true, v -> showNoteDialog(activity, follow))); - } - - boolean isAdd = true; - for (final String follow : Preferences.getNotes().keySet()) { - if (follows.contains(follow)) continue; - if (isAdd) { - preferenceLayout.addView(TSPreferenceHelper.createTextView("已取消关注的人")); - isAdd = false; - } - preferenceLayout.addView(TSPreferenceHelper.createButton(follow, - Preferences.getNote(follow), true, v -> showNoteDialog(activity, follow))); - } - return preferenceLayout; - } - - private static void showNoteDialog(final Activity activity, final String name) { - final EditText editText = new TbEditText(activity); - final String note = Preferences.getNote(name); - editText.setText(note != null ? note : name); - final TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); - bdAlert.setOnNoButtonClickListener(v -> bdAlert.dismiss()); - bdAlert.setOnYesButtonClickListener(v -> { - final SharedPreferences.Editor editor = Preferences.getTsNotesEditor(); - if (TextUtils.isEmpty(editText.getText()) || editText.getText().toString().equals(name)) { - editor.remove(name); - } else editor.putString(name, editText.getText().toString()); - editor.commit(); - bdAlert.dismiss(); - activity.recreate(); - }); - bdAlert.show(); - bdAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); - editText.setSingleLine(); - editText.setImeOptions(EditorInfo.IME_ACTION_DONE); - editText.setOnEditorActionListener((v, actionId, event) -> { - if (actionId == EditorInfo.IME_ACTION_DONE || event != null - && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - bdAlert.findYesButton().performClick(); - return true; - } - return false; - }); - editText.selectAll(); - editText.requestFocus(); - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.User$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final String nameShow = (String) XposedHelpers.getObjectField(param.thisObject, "name_show"); - if (Preferences.getNote(nameShow) != null) { - XposedHelpers.setObjectField(param.thisObject, "name_show", - String.format("%s(%s)", Preferences.getNote(nameShow), nameShow)); - } - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/ThreadStore.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/ThreadStore.java deleted file mode 100644 index 3f6faf51..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/ThreadStore.java +++ /dev/null @@ -1,133 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.app.Activity; -import android.os.Bundle; -import android.text.Editable; -import android.text.TextWatcher; -import android.view.KeyEvent; -import android.view.WindowManager; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; - -import androidx.annotation.NonNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.Constants; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; -import gm.tieba.tabswitch.widget.NavigationBar; -import gm.tieba.tabswitch.widget.TbDialog; -import gm.tieba.tabswitch.widget.TbEditText; -import gm.tieba.tabswitch.widget.TbToast; - -public class ThreadStore extends XposedContext implements IHooker, Obfuscated { - - @NonNull - @Override - public String key() { - return "thread_store"; - } - - @Override - public List matchers() { - return List.of(new StringMatcher("c/f/post/threadstore")); - } - - private String mRegex = ""; - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("com.baidu.tieba.myCollection.CollectTabActivity", sClassLoader, - "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var controller = ReflectUtils.getObjectField(param.thisObject, 1); - final var activity = (Activity) param.thisObject; - new NavigationBar(controller) - .addTextButton("搜索", v -> showRegexDialog(activity)); - } - }); - AcRules.findRule(matchers(), (matcher, clazz, method) -> - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, Boolean[].class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var list = ReflectUtils.getObjectField(param.getResult(), ArrayList.class); - if (list == null) return; - final Pattern pattern = Pattern.compile(mRegex); - list.removeIf(o -> { - // com.baidu.tbadk.baseEditMark.MarkData - final String[] strings = new String[]{(String) XposedHelpers.getObjectField(o, "mTitle"), - (String) XposedHelpers.getObjectField(o, "mForumName"), - (String) XposedHelpers.getObjectField(o, "mAuthorName")}; - for (final String string : strings) { - if (pattern.matcher(string).find()) { - return false; - } - } - return true; - }); - for (int j = 0; j < list.size(); j++) { - XposedHelpers.setObjectField(list.get(j), "mAuthorName", String.format("%s - %s", - XposedHelpers.getObjectField(list.get(j), "mForumName"), - XposedHelpers.getObjectField(list.get(j), "mAuthorName"))); - } - } - })); - } - - private void showRegexDialog(final Activity activity) { - final EditText editText = new TbEditText(activity); - editText.setHint(Constants.getStrings().get("regex_hint")); - editText.setText(mRegex); - editText.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { - } - - @Override - public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { - } - - @Override - public void afterTextChanged(final Editable s) { - mRegex = s.toString(); - } - }); - final TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); - bdAlert.setOnNoButtonClickListener(v -> bdAlert.dismiss()); - bdAlert.setOnYesButtonClickListener(v -> { - try { - Pattern.compile(editText.getText().toString()); - bdAlert.dismiss(); - activity.recreate(); - } catch (final PatternSyntaxException e) { - TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); - } - }); - bdAlert.show(); - bdAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); - editText.setSingleLine(); - editText.setImeOptions(EditorInfo.IME_ACTION_SEARCH); - editText.setOnEditorActionListener((v, actionId, event) -> { - if (actionId == EditorInfo.IME_ACTION_SEARCH || event != null - && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - bdAlert.findYesButton().performClick(); - return true; - } - return false; - }); - editText.selectAll(); - editText.requestFocus(); - } -} From 484a3110ec64a62699ffde843d098c525f8873b7 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 21 Feb 2024 18:44:35 -0800 Subject: [PATCH 066/158] fix: improve UI consistency --- .../tabswitch/hooker/TSPreferenceHelper.java | 64 +++++++++++++++++-- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java index e8994d09..9512c312 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java @@ -3,6 +3,7 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; +import android.graphics.Color; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; @@ -25,6 +26,7 @@ import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.Constants; @@ -57,21 +59,73 @@ public static TextView createTextView(final String text) { return textView; } + @SuppressLint("ClickableViewAccessibility") public static LinearLayout createButton(final String text, final String tip, final boolean showArrow, final View.OnClickListener l) { final Object textTipView = XposedHelpers.newInstance(XposedHelpers.findClass( "com.baidu.tbadk.coreExtra.view.TbSettingTextTipView", sClassLoader), getContext()); XposedHelpers.callMethod(textTipView, "setText", text); XposedHelpers.callMethod(textTipView, "setTip", tip); - if (!showArrow) { - // R.id.arrow2 - final var imageView = ReflectUtils.getObjectField(textTipView, ImageView.class); - imageView.setVisibility(View.GONE); - } + + final var imageView = ReflectUtils.getObjectField(textTipView, ImageView.class); + imageView.setVisibility(showArrow ? View.VISIBLE : View.GONE); + Object svgManager = XposedHelpers.callStaticMethod(XposedHelpers.findClass("com.baidu.tbadk.core.util.SvgManager", sClassLoader), "getInstance"); + XposedHelpers.callMethod( + svgManager, + "setPureDrawableWithDayNightModeAutoChange", + imageView, + ReflectUtils.getDrawableId("icon_pure_list_arrow16_right_svg"), + ReflectUtils.getR("color", "CAM_X0109"), + null + ); final var newButton = ReflectUtils.getObjectField(textTipView, LinearLayout.class); ((ViewGroup) newButton.getParent()).removeView(newButton); newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); if (l != null) newButton.setOnClickListener(l); + + if (showArrow) { + newButton.setOnTouchListener((View v, MotionEvent event) -> { + float x = event.getX(); + float y = event.getY(); + + boolean isInside = x > 0 && x < v.getWidth() && y > 0 && y < v.getHeight(); + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + newButton.setBackgroundColor(Color.argb(128, Color.red(ReflectUtils.getColor("CAM_X0201")), Color.green(ReflectUtils.getColor("CAM_X0201")), Color.blue(ReflectUtils.getColor("CAM_X0201")))); + break; + + case MotionEvent.ACTION_MOVE: + if (!isInside) { + newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); + } + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); + break; + } + return false; + }); + } + + // Fix TS Preference button not changing background when skin type changed + XposedHelpers.findAndHookMethod("com.baidu.tieba.setting.more.MoreActivity", sClassLoader, "onChangeSkinType", int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); + XposedHelpers.callMethod( + svgManager, + "setPureDrawableWithDayNightModeAutoChange", + imageView, + ReflectUtils.getDrawableId("icon_pure_list_arrow16_right_svg"), + ReflectUtils.getR("color", "CAM_X0109"), + null + ); + } + }); + return newButton; } From e27abd145ea57869ee3284b557e1b6f5566704f4 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 25 Feb 2024 21:45:48 -0800 Subject: [PATCH 067/158] feat: remove ad thread for personalized page --- .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index deccb795..c856bfc0 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -252,6 +252,10 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable return true; } + if (XposedHelpers.getObjectField(o, "ala_info") != null) { + return true; + } + final Object worksInfo = XposedHelpers.getObjectField(o, "works_info"); return worksInfo != null && (Integer) XposedHelpers.getObjectField(worksInfo, "is_works") == 1; }); From a39c379f6e6a44b2c862813270900c957a0d28b3 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 26 Feb 2024 22:07:00 -0800 Subject: [PATCH 068/158] feat: improve live ad removal --- .../tieba/tabswitch/hooker/eliminate/Purge.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index c856bfc0..238bc4f7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -381,7 +381,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { webView.evaluateJavascript(jsRemoveOtherCardResponse, null); } }); - // 吧页面头条贴(41), 直播贴(69) + // 吧页面头条贴(41), 直播贴(69 / is_live_card) XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { @@ -393,9 +393,17 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable if (currFeed != null) { List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); for (var feedKV : businessInfo) { - if (XposedHelpers.getObjectField(feedKV, "key").toString().equals("thread_type")) { - var threadType = XposedHelpers.getObjectField(feedKV, "value").toString(); - return threadType.equals("41") || threadType.equals("69"); + String currentKey = XposedHelpers.getObjectField(feedKV, "key").toString(); + if (currentKey.equals("thread_type")) { + var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); + if (currValue.equals("41") || currValue.equals("69")) { + return true; + } + } else if (currentKey.equals("is_live_card")) { + var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); + if (currValue.equals("1")) { + return true; + } } } } From 2010972adbe455c6e153ebe55bfefebb75d97166 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 27 Feb 2024 03:10:02 -0800 Subject: [PATCH 069/158] feat: improve frs page ad removal --- .../tabswitch/hooker/eliminate/Purge.java | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 238bc4f7..90715587 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -64,20 +64,38 @@ public List matchers() { XMLHttpRequest.prototype.send = function () { var callback = this.onreadystatechange; this.onreadystatechange = function () { - if ( - this.readyState == 4 && - this.responseURL.match( - /https?:\\/\\/tieba\\.baidu\\.com\\/mo\\/q\\/frs\\/bottomPage.*/g - ) - ) { - res = JSON.parse(this.response); - res.data.card_activity.small_card = []; - res.data.friend_forum = []; - Object.defineProperty(this, "response", { writable: true }); - Object.defineProperty(this, "responseText", { - writable: true, - }); - this.response = this.responseText = JSON.stringify(res); + if (this.readyState == 4) { + const modifyResponse = (target, propertiesToDelete) => { + propertiesToDelete.forEach((property) => { + delete target[property]; + }); + Object.defineProperty(this, "response", { writable: true }); + Object.defineProperty(this, "responseText", { writable: true }); + this.response = this.responseText = JSON.stringify(target); + }; + if ( + this.responseURL.match( + /https?:\\/\\/tieba\\.baidu\\.com\\/c\\/f\\/frs\\/frsBottom.*/g + ) + ) { + modifyResponse(JSON.parse(this.response), [ + "frs_bottom", + "activityhead", + "live_fuse_forum", + "card_activity", + "ai_chatroom_guide", + "friend_forum", + ]); + } else if ( + this.responseURL.match( + /https?:\\/\\/tieba\\.baidu\\.com\\/mo\\/q\\/frs\\/bottomPage.*/g + ) + ) { + modifyResponse(JSON.parse(this.response)["data"], [ + "card_activity", + "friend_forum", + ]); + } } if (callback) { callback.apply(this, arguments); From 7ff84ea6abeb55b74289d2f9b3313830036b3a72 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 27 Feb 2024 05:43:51 -0800 Subject: [PATCH 070/158] refactor: move js hook to assets --- app/src/main/assets/PurgeFrsBottom.js | 35 ++++++++++++ .../gm/tieba/tabswitch/XposedContext.java | 3 +- .../java/gm/tieba/tabswitch/XposedInit.java | 2 + .../tabswitch/hooker/eliminate/Purge.java | 55 +++---------------- 4 files changed, 46 insertions(+), 49 deletions(-) create mode 100644 app/src/main/assets/PurgeFrsBottom.js diff --git a/app/src/main/assets/PurgeFrsBottom.js b/app/src/main/assets/PurgeFrsBottom.js new file mode 100644 index 00000000..b52d76b9 --- /dev/null +++ b/app/src/main/assets/PurgeFrsBottom.js @@ -0,0 +1,35 @@ +(function (send) { + XMLHttpRequest.prototype.send = function () { + var callback = this.onreadystatechange; + this.onreadystatechange = function () { + if ( + this.readyState == 4 && + this.responseURL.match( + /https?:\/\/tieba\.baidu\.com\/c\/f\/frs\/frsBottom.*/g + ) + ) { + res = JSON.parse(this.response); + let propertiesToDelete = [ + "frs_bottom", + "activityhead", + "live_fuse_forum", + "card_activity", + "ai_chatroom_guide", + "friend_forum", + ]; + propertiesToDelete.forEach((property) => { + delete res[property]; + }); + Object.defineProperty(this, "response", { writable: true }); + Object.defineProperty(this, "responseText", { + writable: true, + }); + this.response = this.responseText = JSON.stringify(res); + } + if (callback) { + callback.apply(this, arguments); + } + }; + send.apply(this, arguments); + }; +})(XMLHttpRequest.prototype.send); diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java index 30501d34..1f4bbcd0 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java @@ -1,6 +1,7 @@ package gm.tieba.tabswitch; import android.content.Context; +import android.content.res.AssetManager; import android.os.Build; import android.os.Handler; import android.os.Looper; @@ -18,8 +19,8 @@ public abstract class XposedContext { protected static ClassLoader sClassLoader; protected static Map sExceptions = new HashMap<>(0); protected static String sPath; + protected static AssetManager sAssetManager; private static Handler sHandler; - protected static void attachBaseContext(final Context context) { if (sContextRef != null) { throw new IllegalStateException("Base context already set"); diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index b38cb722..449f3c28 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -6,6 +6,7 @@ import android.app.Application; import android.app.Instrumentation; import android.content.Intent; +import android.content.res.XModuleResources; import android.os.Bundle; import android.text.TextUtils; import android.view.WindowManager; @@ -73,6 +74,7 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr if (!"com.baidu.tieba".equals(lpparam.packageName) && XposedHelpers.findClassIfExists( "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader) == null) return; sClassLoader = lpparam.classLoader; + sAssetManager = XModuleResources.createInstance(sPath, null).getAssets(); // Workaround to address an issue with LSPatch (unable to open personal homepage) // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 90715587..9cde5ffa 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Scanner; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; @@ -59,52 +60,7 @@ public List matchers() { ); } - final String jsRemoveOtherCardResponse = """ - (function (send) { - XMLHttpRequest.prototype.send = function () { - var callback = this.onreadystatechange; - this.onreadystatechange = function () { - if (this.readyState == 4) { - const modifyResponse = (target, propertiesToDelete) => { - propertiesToDelete.forEach((property) => { - delete target[property]; - }); - Object.defineProperty(this, "response", { writable: true }); - Object.defineProperty(this, "responseText", { writable: true }); - this.response = this.responseText = JSON.stringify(target); - }; - if ( - this.responseURL.match( - /https?:\\/\\/tieba\\.baidu\\.com\\/c\\/f\\/frs\\/frsBottom.*/g - ) - ) { - modifyResponse(JSON.parse(this.response), [ - "frs_bottom", - "activityhead", - "live_fuse_forum", - "card_activity", - "ai_chatroom_guide", - "friend_forum", - ]); - } else if ( - this.responseURL.match( - /https?:\\/\\/tieba\\.baidu\\.com\\/mo\\/q\\/frs\\/bottomPage.*/g - ) - ) { - modifyResponse(JSON.parse(this.response)["data"], [ - "card_activity", - "friend_forum", - ]); - } - } - if (callback) { - callback.apply(this, arguments); - } - }; - send.apply(this, arguments); - }; - })(XMLHttpRequest.prototype.send); - """; + private String jsPurgeFrsBottom; @Override public void hook() throws Throwable { @@ -392,11 +348,14 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } } // 更多板块 (吧友直播,友情吧) + try (Scanner scanner = new Scanner(sAssetManager.open("PurgeFrsBottom.js")).useDelimiter("\\A")) { + jsPurgeFrsBottom = scanner.hasNext() ? scanner.next() : ""; + } XposedHelpers.findAndHookMethod(WebViewClient.class, "onPageStarted", WebView.class, String.class, Bitmap.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - WebView webView = (WebView) param.args[0]; - webView.evaluateJavascript(jsRemoveOtherCardResponse, null); + WebView mWebView = (WebView) param.args[0]; + mWebView.evaluateJavascript(jsPurgeFrsBottom, null); } }); // 吧页面头条贴(41), 直播贴(69 / is_live_card) From a99ab8472e3732cfd4dd53a5856ab33ed907d971 Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Wed, 28 Feb 2024 17:18:12 +0800 Subject: [PATCH 071/158] remove NewSub since the new version of Baidu Tieba already includes this feature --- .../java/gm/tieba/tabswitch/XposedInit.java | 2 - .../tieba/tabswitch/hooker/TSPreference.java | 1 - .../gm/tieba/tabswitch/hooker/add/NewSub.java | 77 ------------------- 3 files changed, 80 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/NewSub.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 449f3c28..76963d27 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -30,7 +30,6 @@ import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.TSPreference; import gm.tieba.tabswitch.hooker.add.HistoryCache; -import gm.tieba.tabswitch.hooker.add.NewSub; import gm.tieba.tabswitch.hooker.add.Ripple; import gm.tieba.tabswitch.hooker.add.SaveImages; import gm.tieba.tabswitch.hooker.auto.AgreeNum; @@ -118,7 +117,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { new ContentFilter(), new FrsPageFilter(), new HistoryCache(), - new NewSub(), new Ripple(), new SaveImages(), new AutoSign(), diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 8d6cc9ae..ca416f4d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -199,7 +199,6 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "别出新意" : "增加功能")); preferenceLayout.addView(new SwitchButtonHolder(activity, "浏览历史增加搜索", "history_cache", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "搜索楼中楼增加查看主题贴", "new_sub", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/NewSub.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/NewSub.java deleted file mode 100644 index b6075db2..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/NewSub.java +++ /dev/null @@ -1,77 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.app.Activity; -import android.content.Intent; - -import androidx.annotation.NonNull; - -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; -import gm.tieba.tabswitch.widget.NavigationBar; - -public class NewSub extends XposedContext implements IHooker, Obfuscated { - - @NonNull - @Override - public String key() { - return "new_sub"; - } - - @Override - public List matchers() { - return List.of(new StringMatcher("c0132")); - } - - private Object mThreadId; - private Object mPostId; - - @Override - public void hook() throws Throwable { - AcRules.findRule(matchers(), (matcher, clazz, method) -> - XposedBridge.hookAllConstructors(XposedHelpers.findClass(clazz, sClassLoader), new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - try { - final var activity = (Activity) ReflectUtils.getObjectField(param.thisObject, - "com.baidu.tieba.pb.pb.sub.NewSubPbActivity"); - if (activity.getIntent().getStringExtra("st_type").equals("search_post")) { - new NavigationBar(param.thisObject) - .addTextButton("查看主题贴", v -> startPbActivity(activity)); - } - } catch (final NoSuchFieldError ignored) { - } - } - })); - XposedHelpers.findAndHookMethod("tbclient.PbFloor.DataRes$Builder", sClassLoader, - "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var thread = XposedHelpers.getObjectField(param.thisObject, "thread"); - final var post = XposedHelpers.getObjectField(param.thisObject, "post"); - // null when post is omitted - if (thread != null && post != null) { - mThreadId = XposedHelpers.getObjectField(thread, "id"); - mPostId = XposedHelpers.getObjectField(post, "id"); - } - } - }); - } - - // "com.baidu.tieba.pb.pb.main.PbModel", "initWithIntent" - private void startPbActivity(final Activity activity) { - final var intent = new Intent().setClassName(activity, "com.baidu.tieba.pb.pb.main.PbActivity"); - intent.putExtra("thread_id", String.valueOf(mThreadId)); - intent.putExtra("post_id", String.valueOf(mPostId)); - activity.startActivity(intent); - } -} From 05b9f7927a8d60bd6a9702d4779cc59591a39939 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 27 Feb 2024 18:40:34 -0800 Subject: [PATCH 072/158] chore: add version code to output apk filename --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index d1cf68af..c544b474 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,7 +30,7 @@ android { } applicationVariants.all { variant -> variant.outputs.all { output -> - outputFileName = "TS_${defaultConfig.versionName}-${variant.buildType.name}.apk" + outputFileName = "TS_${defaultConfig.versionName}_${defaultConfig.versionCode}-${variant.buildType.name}.apk" } } buildTypes { From 4c481200cae7be920d82548b036db4ccfbfd95e4 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 29 Feb 2024 01:38:49 -0800 Subject: [PATCH 073/158] refactor: move asset file loading to separate function --- .../tabswitch/hooker/eliminate/Purge.java | 21 +++++++++---------- .../gm/tieba/tabswitch/util/FileUtils.java | 13 +++++++++++- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 9cde5ffa..def1abb9 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -33,6 +33,7 @@ import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; +import gm.tieba.tabswitch.util.FileUtils; import gm.tieba.tabswitch.util.ReflectUtils; public class Purge extends XposedContext implements IHooker, Obfuscated { @@ -60,8 +61,6 @@ public List matchers() { ); } - private String jsPurgeFrsBottom; - @Override public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { @@ -348,16 +347,16 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } } // 更多板块 (吧友直播,友情吧) - try (Scanner scanner = new Scanner(sAssetManager.open("PurgeFrsBottom.js")).useDelimiter("\\A")) { - jsPurgeFrsBottom = scanner.hasNext() ? scanner.next() : ""; + final String jsPurgeFrsBottom = FileUtils.getAssetFileContent("PurgeFrsBottom.js"); + if (jsPurgeFrsBottom != null) { + XposedHelpers.findAndHookMethod(WebViewClient.class, "onPageStarted", WebView.class, String.class, Bitmap.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + WebView mWebView = (WebView) param.args[0]; + mWebView.evaluateJavascript(jsPurgeFrsBottom, null); + } + }); } - XposedHelpers.findAndHookMethod(WebViewClient.class, "onPageStarted", WebView.class, String.class, Bitmap.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - WebView mWebView = (WebView) param.args[0]; - mWebView.evaluateJavascript(jsPurgeFrsBottom, null); - } - }); // 吧页面头条贴(41), 直播贴(69 / is_live_card) XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override diff --git a/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java index 5390a922..6dbc586e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java @@ -9,8 +9,11 @@ import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.Scanner; -public class FileUtils { +import gm.tieba.tabswitch.XposedContext; + +public class FileUtils extends XposedContext { public static void copy(final Object input, final Object output) throws IOException { final InputStream is; if (input instanceof InputStream) { @@ -96,4 +99,12 @@ public static void deleteRecursively(final File file) { } file.delete(); } + + public static String getAssetFileContent(final String filename) { + String result = null; + try (Scanner scanner = new Scanner(sAssetManager.open(filename)).useDelimiter("\\A")) { + result = scanner.hasNext() ? scanner.next() : null; + } catch (final IOException ignored) {} + return result; + } } From 333169ed7b4e56337d5a0c2ca374ef7007a640b9 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 29 Feb 2024 02:11:48 -0800 Subject: [PATCH 074/158] [skip ci] fix: check isFirstApplication --- app/src/main/java/gm/tieba/tabswitch/XposedInit.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 76963d27..47fd7291 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -70,8 +70,8 @@ public void initZygote(final IXposedHookZygoteInit.StartupParam startupParam) th @Override public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!"com.baidu.tieba".equals(lpparam.packageName) && XposedHelpers.findClassIfExists( - "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader) == null) return; + if ((!"com.baidu.tieba".equals(lpparam.packageName) && XposedHelpers.findClassIfExists( + "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader) == null) || !lpparam.isFirstApplication) return; sClassLoader = lpparam.classLoader; sAssetManager = XModuleResources.createInstance(sPath, null).getAssets(); From bad26862f78bcf04cd0afa8910bf5eca1c10472d Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 29 Feb 2024 05:20:38 -0800 Subject: [PATCH 075/158] [skip ci] chore: exclude 32 bit libraries to reduce apk size --- app/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index c544b474..4468a66b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,6 +27,9 @@ android { arguments '-DANDROID_STL=none' } } + ndk { + abiFilters 'arm64-v8a' + } } applicationVariants.all { variant -> variant.outputs.all { output -> From c54bf1e048cd3141a0cf70e59eec3a0926a459e5 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 1 Mar 2024 00:56:40 -0800 Subject: [PATCH 076/158] fix: adapt to 12.56.1.0 --- app/build.gradle | 4 +-- .../tieba/tabswitch/hooker/auto/FrsTab.java | 16 ++++++++-- .../tabswitch/hooker/eliminate/Purge.java | 32 +++++++++++-------- .../tabswitch/hooker/eliminate/PurgeMy.java | 16 ++++++++++ 4 files changed, 50 insertions(+), 18 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4468a66b..e4fdef99 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.5' - buildConfigField "String", "TARGET_VERSION", "\"12.53.1.0\"" + versionName '2.9.6' + buildConfigField "String", "TARGET_VERSION", "\"12.56.1.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java index 8ac041a3..cda7dff7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java @@ -64,8 +64,20 @@ public void beforeHookedMethod(final MethodHookParam param) throws Throwable { XposedBridge.hookMethod(targetMethod, new XC_MethodHook() { @Override public void afterHookedMethod(MethodHookParam param) throws Throwable { - Class customViewPager = XposedHelpers.findClass("com.baidu.tbadk.widget.CustomViewPager", sClassLoader); - final Object viewPager = XposedHelpers.findFirstFieldByExactType(param.args[1].getClass(), customViewPager).get(param.args[1]); + Object viewPager; + try { + viewPager = XposedHelpers.findFirstFieldByExactType( + param.args[1].getClass(), + XposedHelpers.findClass("com.baidu.tbadk.widget.CustomViewPager", + sClassLoader) + ).get(param.args[1]); + } catch (NoSuchFieldError e) { // 12.56+ + viewPager = XposedHelpers.findFirstFieldByExactType( + param.args[1].getClass(), + XposedHelpers.findClass("androidx.viewpager.widget.ViewPager", + sClassLoader) + ).get(param.args[1]); + } XposedHelpers.callMethod(viewPager, "setCurrentItem", mPosition); } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index def1abb9..60d47738 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -99,22 +99,26 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } break; case "bottom_bubble_config": // 底部导航栏活动图标 - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); - syncData.put("bottom_bubble_config", null); - } - }); + if (method.equals("invoke")) { + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + syncData.put("bottom_bubble_config", null); + } + }); + } break; case "top_level_navi": // 首页活动背景 - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); - syncData.put("top_level_navi", null); - } - }); + if (method.equals("invoke")) { + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + syncData.put("top_level_navi", null); + } + }); + } break; case "index_tab_info": // 首页活动Tab if (method.equals("invoke")) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java index d7eac20c..12c0d009 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java @@ -1,6 +1,7 @@ package gm.tieba.tabswitch.hooker.eliminate; import android.view.View; +import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -87,5 +88,20 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { break; } }); + + // 12.56+ + Class personCenterMemberCardViewClass = XposedHelpers.findClassIfExists("com.baidu.tieba.personCenter.view.PersonCenterMemberCardView", sClassLoader); + if (personCenterMemberCardViewClass != null) { + XposedBridge.hookAllConstructors( + personCenterMemberCardViewClass, + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + View mView = ReflectUtils.getObjectField(param.thisObject, View.class); + ((ViewGroup) mView.getParent()).removeView(mView); + } + } + ); + } } } From b613fb288b0ff096e64c5a6cb41d972f392e71e9 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 1 Mar 2024 03:08:43 -0800 Subject: [PATCH 077/158] feat: remove meme recommendation --- .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 60d47738..2e425746 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -408,11 +408,14 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod("com.fun.ad.sdk.internal.api.BaseNativeAd2", sClassLoader, "getNativeInfo", XC_MethodReplacement.returnConstant(null)); } catch (final XposedHelpers.ClassNotFoundError ignored) {} - // 相关推荐 XposedHelpers.findAndHookMethod("tbclient.Post$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + // 相关推荐 XposedHelpers.setObjectField(param.thisObject, "outer_item", null); + + // 点击使用同系列表情 + XposedHelpers.setObjectField(param.thisObject, "sprite_meme_info", null); } }); } From 3ea4de6901b83d06755345d0cb6d1932e7dd65bc Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 1 Mar 2024 03:45:28 -0800 Subject: [PATCH 078/158] [skip ci] fix: add overscroll effect to enter forum --- app/build.gradle | 2 +- .../java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index e4fdef99..c529a240 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { targetSdk sdk versionCode gitCommitCount versionName '2.9.6' - buildConfigField "String", "TARGET_VERSION", "\"12.56.1.0\"" + buildConfigField "String", "TARGET_VERSION", "\"12.56.1.1\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 8eb94768..ce75f206 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -69,6 +69,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { if (view.getParent() == null) { Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); XposedHelpers.callMethod(bdListView, "setNextPage", pbListView); + XposedHelpers.callMethod(bdListView, "setOverScrollMode", View.OVER_SCROLL_ALWAYS); } LinearLayout linearLayout = (LinearLayout) ReflectUtils.getObjectField(pbListView, "android.widget.LinearLayout"); From 5bb9e333515115a5d3334837571b00b4bbc20bda Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Sat, 2 Mar 2024 19:49:27 +0800 Subject: [PATCH 079/158] AGP 8.3.0 --- .github/workflows/android.yml | 15 ++++++++------- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index b7514453..9fbf3f3f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -13,20 +13,20 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.1 with: submodules: 'recursive' fetch-depth: 0 + - name: Setup JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4.0.0 with: java-version: 17 distribution: 'temurin' - - name: Retrieve version - run: | - echo VERSION=$(echo ${{ github.event.head_commit.id }} | head -c 10) >> $GITHUB_ENV + - name: Build with Gradle - run: bash ./gradlew -PappVerName=${{ env.VERSION }} assembleRelease + run: bash ./gradlew assembleRelease + - name: Sign Android release if: success() id: sign @@ -39,12 +39,14 @@ jobs: alias: ${{ secrets.ALIAS }} keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} keyPassword: ${{ secrets.KEY_PASSWORD }} + - name: Upload built apk if: success() uses: actions/upload-artifact@v3 with: name: TS_${{ env.VERSION }}.apk path: ${{ steps.sign.outputs.signedReleaseFile }} + - name: Send commit to telegram uses: appleboy/telegram-action@master with: @@ -62,7 +64,6 @@ jobs: runs-on: ubuntu-latest if: ${{ startsWith(github.event.head_commit.message, '[skip ci]') }} steps: - - uses: actions/checkout@v2 - name: Send commit to telegram uses: appleboy/telegram-action@master with: diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 12f175de..e774b445 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Aug 24 21:31:51 CST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index e073e541..ee6f17c1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.2.2' - id 'com.android.library' version '8.2.2' + id 'com.android.application' version '8.3.0' + id 'com.android.library' version '8.3.0' id 'org.jetbrains.kotlin.android' version '1.9.0' id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false } From c3c843738ec21a1c01264f45731f54532350d538 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 2 Mar 2024 21:35:36 -0800 Subject: [PATCH 080/158] fix: bugs related to isPushLaunch4SplashAd --- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 2e425746..f6458409 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -6,7 +6,6 @@ import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; -import android.view.KeyEvent; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -20,7 +19,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Scanner; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; @@ -160,19 +158,20 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } }); // 热启动闪屏 + XposedHelpers.findAndHookMethod("com.baidu.tbadk.TbSingleton", sClassLoader, "isPushLaunch4SplashAd", XC_MethodReplacement.returnConstant(true)); + XposedHelpers.findAndHookMethod("com.baidu.tbadk.abtest.UbsABTestHelper", sClassLoader, "isPushLaunchWithoutSplashAdA", XC_MethodReplacement.returnConstant(true)); + // Fix bugs related to isPushLaunch4SplashAd XposedHelpers.findAndHookMethod( "com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, - "dispatchKeyEvent", - KeyEvent.class, + "onCreate", + Bundle.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { XposedHelpers.setStaticBooleanField(XposedHelpers.findClass("com.baidu.tbadk.core.atomData.MainTabActivityConfig", sClassLoader), "IS_MAIN_TAB_SPLASH_SHOW", false); } }); - XposedHelpers.findAndHookMethod("com.baidu.tbadk.TbSingleton", sClassLoader, "isPushLaunch4SplashAd", XC_MethodReplacement.returnConstant(true)); - XposedHelpers.findAndHookMethod("com.baidu.tbadk.abtest.UbsABTestHelper", sClassLoader, "isPushLaunchWithoutSplashAdA", XC_MethodReplacement.returnConstant(true)); // 帖子底部推荐 Class clazz; try { From 810e6350dae78d41d122e337e4d8d92019a1c8ff Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 3 Mar 2024 01:27:18 -0800 Subject: [PATCH 081/158] [skip ci] fix: improve performance of PurgeEnter --- .../hooker/eliminate/PurgeEnter.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index ce75f206..1d984fe1 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -29,7 +29,7 @@ public String key() { private int mInitLayoutHeight = -1; private final int mLayoutOffset = (int) ReflectUtils.getDimen("tbds50"); - private String mRecForumClassName, mRecForumSetNextPageMethodName; + private String mRecForumClassName, mRecForumSetNextPageMethodName, mPbListViewInnerViewConstructorName; @Override public List matchers() { @@ -47,6 +47,13 @@ public void hook() throws Throwable { "getRecommendForumData", XC_MethodReplacement.returnConstant(null)); + for (final var currMethod : XposedHelpers.findClass("com.baidu.tbadk.core.view.PbListView", sClassLoader).getSuperclass().getDeclaredMethods()) { + if (currMethod.getReturnType().toString().endsWith("View") && !Modifier.isAbstract(currMethod.getModifiers())) { + mPbListViewInnerViewConstructorName = currMethod.getName(); + break; + } + } + AcRules.findRule(matchers(), (matcher, clazz, method) -> { switch (matcher) { case "enter_forum_login_tip/dimen.tbds400": @@ -56,18 +63,10 @@ public void hook() throws Throwable { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { Object pbListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView"); + View pbListViewInnerView = (View) XposedHelpers.callMethod(pbListView, mPbListViewInnerViewConstructorName); - String viewConstructorName = ""; - for (final var method : XposedHelpers.findClass("com.baidu.tbadk.core.view.PbListView", sClassLoader).getSuperclass().getDeclaredMethods()) { - if (method.getReturnType().toString().endsWith("View") && !Modifier.isAbstract(method.getModifiers())) { - viewConstructorName = method.getName(); - break; - } - } - View view = (View) XposedHelpers.callMethod(pbListView, viewConstructorName); - - if (view.getParent() == null) { - Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); + Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); + if (pbListViewInnerView.getParent() == null) { XposedHelpers.callMethod(bdListView, "setNextPage", pbListView); XposedHelpers.callMethod(bdListView, "setOverScrollMode", View.OVER_SCROLL_ALWAYS); } @@ -80,6 +79,8 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } layoutParams.height = mInitLayoutHeight; linearLayout.setLayoutParams(layoutParams); + + XposedHelpers.callMethod(bdListView, "setExOnSrollToBottomListener", (Object) null); return null; } }); From 029b0e329daec98bf73e1fd959735d44084d6cea Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 3 Mar 2024 19:29:11 -0800 Subject: [PATCH 082/158] feat: add MatcherProperties and version requirement for Matcher --- .../java/gm/tieba/tabswitch/XposedInit.java | 44 +++++++++++++---- .../deobfuscation/DeobfuscationHelper.java | 20 ++++++++ .../tabswitch/hooker/deobfuscation/Matcher.kt | 48 +++++++++++++++---- .../hooker/eliminate/PurgeEnter.java | 5 +- .../tabswitch/hooker/eliminate/PurgeMy.java | 6 ++- 5 files changed, 101 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 47fd7291..04766ecc 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -103,6 +103,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { attachBaseContext((Application) param.args[0]); Preferences.init(getContext()); AcRules.init(getContext()); + String currTbVersion = DeobfuscationHelper.getTbVersion(getContext()); final var hookers = List.of( new TSPreference(), @@ -140,6 +141,34 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } } + List matchersList = matchers.stream() + .map(Obfuscated::matchers) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + + // Remove matchers that does not satisfy version requirement + matchersList.removeIf( + o -> { + if (o.getRequiredVersion() != null) { + boolean isVersionSatisfied = DeobfuscationHelper.isTbSatisfyVersionRequirement( + o.getRequiredVersion(), + currTbVersion + ); + if (!isVersionSatisfied) { + XposedBridge.log( + String.format( + "Skipping rule [%s] due to version mismatch (current version: %s)", + o.toString(), + currTbVersion + ) + ); + } + return !isVersionSatisfied; + } + return false; + } + ); + if (DeobfuscationHelper.isVersionChanged(getContext())) { if ("com.baidu.tieba".equals(lpparam.processName)) { XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @@ -153,17 +182,12 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { }); } XposedBridge.log("Deobfuscation"); - new DeobfuscationHooker( - matchers.stream() - .map(Obfuscated::matchers) - .flatMap(Collection::stream) - .collect(Collectors.toList()) - ).hook(); + + new DeobfuscationHooker(matchersList).hook(); return; } - final var lostList = matchers.stream() - .map(Obfuscated::matchers) - .flatMap(Collection::stream) + + final var lostList = matchersList.stream() .map(Matcher::toString) .filter(matcher -> !AcRules.isRuleFound(matcher)) .collect(Collectors.toList()); @@ -175,7 +199,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable final var messages = new ArrayList(); messages.add(String.format(Constants.getStrings().get("exception_rules_incomplete"), BuildConfig.TARGET_VERSION)); messages.add(String.format(Locale.CHINA, "tbversion: %s, module version: %d", - DeobfuscationHelper.getTbVersion(getContext()), BuildConfig.VERSION_CODE)); + currTbVersion, BuildConfig.VERSION_CODE)); messages.add(String.format(Locale.CHINA, "%d rule(s) lost: %s", lostList.size(), lostList)); final var message = TextUtils.join("\n", messages); XposedBridge.log(message); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java index f42db0c9..f87c1003 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java @@ -106,4 +106,24 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable activity.startActivity(intent); } } + + public static boolean isTbSatisfyVersionRequirement(final String requiredVersion, final String currentVersion) { + String[] currParts = currentVersion.split("\\."); + String[] reqParts = requiredVersion.split("\\."); + int length = Math.max(currParts.length, reqParts.length); + for(int i = 0; i < length; i++) { + try { + int currPart = i < currParts.length ? + Integer.parseInt(currParts[i]) : 0; + int reqPart = i < reqParts.length ? + Integer.parseInt(reqParts[i]) : 0; + if (currPart != reqPart) { + return currPart > reqPart; + } + } catch (NumberFormatException e) { + return false; + } + } + return true; + } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 190c1ba7..abc51ba8 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -2,41 +2,71 @@ package gm.tieba.tabswitch.hooker.deobfuscation import gm.tieba.tabswitch.util.ClassMatcherUtils -abstract class Matcher(val classMatcher: ClassMatcherUtils? = null) { - override fun toString(): String = classMatcher?.toString().orEmpty() +class MatcherProperties { + var classMatcher: ClassMatcherUtils? = null + var requiredVersion: String? = null + companion object { + @JvmStatic + fun create() : MatcherProperties { + return MatcherProperties() + } + } + override fun toString(): String { + val versionString = requiredVersion?.let { "$it@" } ?: "" + return versionString + classMatcher?.toString().orEmpty() + } + fun useClassMatcher(classMatcher: ClassMatcherUtils?) : MatcherProperties { + this.classMatcher = classMatcher + return this + } + fun requireVersion(requiredVersion: String) : MatcherProperties { + this.requiredVersion = requiredVersion + return this + } } -class StringMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherUtils? = null) : Matcher(classMatcher) { +abstract class Matcher(private val properties: MatcherProperties? = null) { + override fun toString(): String = properties?.toString().orEmpty() + fun getClassMatcher(): ClassMatcherUtils? = properties?.classMatcher + fun getRequiredVersion(): String? = properties?.requiredVersion + +} + +class StringMatcher @JvmOverloads constructor(val str: String, properties: MatcherProperties? = null) : Matcher(properties) { override fun toString(): String = super.toString() + str } -class SmaliMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherUtils? = null) : Matcher(classMatcher) { +class SmaliMatcher @JvmOverloads constructor(val str: String, properties: MatcherProperties? = null) : Matcher(properties) { override fun toString(): String = super.toString() + str fun getDescriptor(): String = str; } -class MethodNameMatcher @JvmOverloads constructor(val name: String, classMatcher: ClassMatcherUtils? = null) : Matcher(classMatcher) { +class MethodNameMatcher @JvmOverloads constructor(val name: String, properties: MatcherProperties? = null) : Matcher(properties) { override fun toString(): String = super.toString() + name } -open class ResMatcher @JvmOverloads constructor(var id: Long = 0, classMatcher: ClassMatcherUtils? = null) : Matcher(classMatcher) { +class ReturnTypeMatcher @JvmOverloads constructor(val returnType: Class, properties: MatcherProperties? = null) : Matcher(properties) { + override fun toString(): String = super.toString() + returnType.simpleName +} + +open class ResMatcher @JvmOverloads constructor(var id: Long = 0, properties: MatcherProperties? = null) : Matcher(properties) { open fun toResIdentifier(): String { throw UnsupportedOperationException() } } -class StringResMatcher @JvmOverloads constructor(val str: String, classMatcher: ClassMatcherUtils? = null) : ResMatcher(classMatcher = classMatcher) { +class StringResMatcher @JvmOverloads constructor(val str: String, properties: MatcherProperties? = null) : ResMatcher(properties = properties) { override fun toString(): String = super.toString() + str override fun toResIdentifier(): String = str } -class ZipEntryMatcher @JvmOverloads constructor(val size: Long, classMatcher: ClassMatcherUtils? = null) : ResMatcher(classMatcher = classMatcher) { +class ZipEntryMatcher @JvmOverloads constructor(val size: Long, properties: MatcherProperties? = null) : ResMatcher(properties = properties) { var entryName: String = "" override fun toString(): String = super.toString() + size.toString() override fun toResIdentifier(): String = size.toString() } -class ResIdentifierMatcher @JvmOverloads constructor(val name: String, val defType: String, classMatcher: ClassMatcherUtils? = null) : ResMatcher(classMatcher = classMatcher) { +class ResIdentifierMatcher @JvmOverloads constructor(val name: String, val defType: String, properties: MatcherProperties? = null) : ResMatcher(properties = properties) { override fun toString(): String = super.toString() + String.format("%s.%s", defType, name) override fun toResIdentifier(): String = String.format("%s.%s", defType, name) } \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 1d984fe1..d63a46d8 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -14,6 +14,7 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; +import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.ResIdentifierMatcher; @@ -34,8 +35,8 @@ public String key() { @Override public List matchers() { return List.of( - new ResIdentifierMatcher("tbds400", "dimen", ClassMatcherUtils.usingString("enter_forum_login_tip")), - new MethodNameMatcher("onSuccess", ClassMatcherUtils.usingString("enter_forum_login_tip")) + new ResIdentifierMatcher("tbds400", "dimen", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))), + new MethodNameMatcher("onSuccess", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))) ); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java index 12c0d009..225223a2 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java @@ -17,6 +17,7 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; +import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; @@ -35,7 +36,10 @@ public String key() { public List matchers() { return List.of( new SmaliMatcher("Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V"), - new SmaliMatcher("Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;", ClassMatcherUtils.usingString("隐私设置")) + new SmaliMatcher( + "Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;", + MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("隐私设置")) + ) ); } From 8dd6a9695f91be9619c6195986795284082d4368 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 3 Mar 2024 19:29:52 -0800 Subject: [PATCH 083/158] feat: disable webview enter forum page for 12.56.4.0 --- app/build.gradle | 2 +- .../tabswitch/hooker/deobfuscation/Deobfuscation.java | 6 ++++++ .../tieba/tabswitch/hooker/eliminate/PurgeEnter.java | 10 +++++++++- .../gm/tieba/tabswitch/util/ClassMatcherUtils.java | 6 ++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c529a240..f4bd5775 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { targetSdk sdk versionCode gitCommitCount versionName '2.9.6' - buildConfigField "String", "TARGET_VERSION", "\"12.56.1.1\"" + buildConfigField "String", "TARGET_VERSION", "\"12.56.4.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index fbcd412c..1601ddc4 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -180,6 +180,12 @@ private MethodDataList findMethod(DexKitBridge bridge, FindMethod baseMethodQuer MethodMatcher.create().name(methodNameMatcher.getName()) ) ); + } else if (matcher instanceof final ReturnTypeMatcher returnTypeMatcher) { + ret = bridge.findMethod( + baseMethodQuery.matcher( + MethodMatcher.create().returnType(returnTypeMatcher.getReturnType()) + ) + ); } return ret; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index d63a46d8..ac7eef13 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -18,6 +18,7 @@ import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.ResIdentifierMatcher; +import gm.tieba.tabswitch.hooker.deobfuscation.ReturnTypeMatcher; import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; @@ -36,7 +37,11 @@ public String key() { public List matchers() { return List.of( new ResIdentifierMatcher("tbds400", "dimen", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))), - new MethodNameMatcher("onSuccess", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))) + new MethodNameMatcher("onSuccess", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))), + new ReturnTypeMatcher<>( + boolean.class, + MatcherProperties.create().useClassMatcher(ClassMatcherUtils.className("com.baidu.tieba.enterForum.helper.HybridEnterForumHelper")).requireVersion("12.56.4.0") + ) ); } @@ -100,6 +105,9 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } }); break; + case "12.56.4.0@HybridEnterForumHelper/boolean": // 禁用Webview进吧页 + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(false)); + break; } }); } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java index 371e6cf6..6a4f3064 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java @@ -20,6 +20,12 @@ public static ClassMatcherUtils usingString(String str) { return new ClassMatcherUtils(classMatcher, str); } + public static ClassMatcherUtils className(String className) { + ClassMatcher classMatcher = ClassMatcher.create().className(className); + String simpleClassName = className.substring(className.lastIndexOf('.') + 1); + return new ClassMatcherUtils(classMatcher, simpleClassName); + } + public ClassMatcher getMatcher() { return this.matcher; } From 55dc918b65c62ac9862d1cfbe7f5e13a9888babc Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 3 Mar 2024 23:10:00 -0800 Subject: [PATCH 084/158] fix: add back 32 bit libdexkit for compatibility --- app/build.gradle | 3 --- .../tabswitch/hooker/deobfuscation/DeobfuscationHelper.java | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f4bd5775..1f5bd644 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,9 +27,6 @@ android { arguments '-DANDROID_STL=none' } } - ndk { - abiFilters 'arm64-v8a' - } } applicationVariants.all { variant -> variant.outputs.all { output -> diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java index f87c1003..2f85dd7a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java @@ -107,6 +107,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } } + // Adapted from https://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in-java public static boolean isTbSatisfyVersionRequirement(final String requiredVersion, final String currentVersion) { String[] currParts = currentVersion.split("\\."); String[] reqParts = requiredVersion.split("\\."); From be5b4bccb75cfabd0211ca43b78ab0bf4d538a61 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 6 Mar 2024 19:19:41 -0800 Subject: [PATCH 085/158] feat: remove obsolete features (flutter) --- .../java/gm/tieba/tabswitch/XposedInit.java | 2 - .../tieba/tabswitch/hooker/TSPreference.java | 8 +--- .../tabswitch/hooker/TSPreferenceHelper.java | 17 +------ .../tabswitch/hooker/deobfuscation/Matcher.kt | 2 +- .../hooker/eliminate/SwitchManager.java | 47 ------------------- 5 files changed, 4 insertions(+), 72 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/SwitchManager.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 04766ecc..aee86e92 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -52,7 +52,6 @@ import gm.tieba.tabswitch.hooker.eliminate.PurgeMy; import gm.tieba.tabswitch.hooker.eliminate.RedTip; import gm.tieba.tabswitch.hooker.eliminate.RemoveUpdate; -import gm.tieba.tabswitch.hooker.eliminate.SwitchManager; import gm.tieba.tabswitch.hooker.extra.ForbidGesture; import gm.tieba.tabswitch.hooker.extra.Hide; import gm.tieba.tabswitch.hooker.extra.StackTrace; @@ -108,7 +107,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { final var hookers = List.of( new TSPreference(), new FragmentTab(), - new SwitchManager(), new Purge(), new PurgeEnter(), new PurgeMy(), diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index ca416f4d..c3c6d9c5 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -271,7 +271,7 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(TSPreferenceHelper.createButton("版本(适配版本)", String.format("%s_%d (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, BuildConfig.TARGET_VERSION), true, v -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); - intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases/latest")); + intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/actions")); activity.startActivity(intent); })); return preferenceLayout; @@ -286,12 +286,6 @@ private LinearLayout createModifyTabPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏消息", "im_message", SwitchButtonHolder.TYPE_SWITCH)); // Merged with Purge // preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用动态样式", "dynamic_style", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(TSPreferenceHelper.createTextView("禁用 Flutter")); - preferenceLayout.addView(new SwitchButtonHolder(activity, "我关注的吧", "flutter_concern_forum_enable_android", SwitchButtonHolder.TYPE_SET_FLUTTER)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "吧资料", "flutter_forum_detail_enable_android_112", SwitchButtonHolder.TYPE_SET_FLUTTER)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "粉丝", "flutter_attention_enable_android_112", SwitchButtonHolder.TYPE_SET_FLUTTER)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "个人中心", "flutter_person_center_enable_android_12", SwitchButtonHolder.TYPE_SET_FLUTTER)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "一键签到", "flutter_signin_enable_android_119", SwitchButtonHolder.TYPE_SET_FLUTTER)); return preferenceLayout; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java index 9512c312..3f0f5f48 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java @@ -161,7 +161,6 @@ public void addView(final SwitchButtonHolder view) { static class SwitchButtonHolder { public final static int TYPE_SWITCH = 0; public final static int TYPE_DIALOG = 1; - public final static int TYPE_SET_FLUTTER = 2; public final static Map sIdToTag = new HashMap<>(); private final String mKey; public Switch bdSwitch; @@ -196,12 +195,6 @@ static class SwitchButtonHolder { if (Preferences.getString(key) != null) bdSwitch.turnOn(); else bdSwitch.turnOff(); break; - case TYPE_SET_FLUTTER: - switchButton = createButton(text, null, false, v -> bdSwitch.changeState()); - sIdToTag.put(bdSwitchView.getId(), TYPE_SET_FLUTTER + key); - if (Preferences.getStringSet("switch_manager").contains(key)) bdSwitch.turnOn(); - else bdSwitch.turnOff(); - break; } switchButton.addView(bdSwitchView); } @@ -256,14 +249,8 @@ public Object invoke(final Object proxy, final Method method, final Object[] arg final View view = (View) args[0]; final var tag = sIdToTag.get(view.getId()); if (tag != null) { - switch (Integer.parseInt(tag.substring(0, 1))) { - case TYPE_SWITCH: - Preferences.putBoolean(tag.substring(1), args[1].toString().equals("ON")); - break; - case TYPE_SET_FLUTTER: - Preferences.putStringSet("switch_manager", - tag.substring(1), args[1].toString().equals("ON")); - break; + if (Integer.parseInt(tag.substring(0, 1)) == TYPE_SWITCH) { + Preferences.putBoolean(tag.substring(1), args[1].toString().equals("ON")); } } return null; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index abc51ba8..67424d7c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -15,7 +15,7 @@ class MatcherProperties { val versionString = requiredVersion?.let { "$it@" } ?: "" return versionString + classMatcher?.toString().orEmpty() } - fun useClassMatcher(classMatcher: ClassMatcherUtils?) : MatcherProperties { + fun useClassMatcher(classMatcher: ClassMatcherUtils) : MatcherProperties { this.classMatcher = classMatcher return this } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/SwitchManager.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/SwitchManager.java deleted file mode 100644 index 69edf54a..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/SwitchManager.java +++ /dev/null @@ -1,47 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.IHooker; - -public class SwitchManager extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "switch_manager"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("com.baidu.adp.lib.featureSwitch.SwitchManager", sClassLoader, - "findType", String.class, new XC_MethodHook() { - @Override - public void beforeHookedMethod(final MethodHookParam param) throws Throwable { - if (Preferences.getStringSet("switch_manager").contains((String) param.args[0])) { - param.setResult(-1); - } - } - }); - if (Preferences.getStringSet("switch_manager").contains("flutter_person_center_enable_android_12")) { - XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.view.AgreeView", sClassLoader, - "setAgreeAlone", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final StackTraceElement[] stes = new Exception().getStackTrace(); - for (int i = 5; i < 20; i++) { - if (stes[i].getClassName().equals( - "com.baidu.tbadk.core.view.ThreadCommentAndPraiseInfoLayout")) { - param.args[0] = true; - return; - } - } - } - }); - } - } -} From af139d0674985abf220e197db704106d5fe31a4f Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 6 Mar 2024 19:28:41 -0800 Subject: [PATCH 086/158] fix: deobfuscation UI not showing correctly when host app updated --- .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index f6458409..984a3bf8 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -166,7 +166,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable sClassLoader, "onCreate", Bundle.class, - new XC_MethodHook() { + new XC_MethodHook(-1) { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { XposedHelpers.setStaticBooleanField(XposedHelpers.findClass("com.baidu.tbadk.core.atomData.MainTabActivityConfig", sClassLoader), "IS_MAIN_TAB_SPLASH_SHOW", false); From 4b592380e8ff532b8661934bd539a18823aaf9df Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 7 Mar 2024 02:04:30 -0800 Subject: [PATCH 087/158] [skip ci] Update android.yml --- .github/workflows/android.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 9fbf3f3f..8a7e203c 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -40,11 +40,15 @@ jobs: keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} keyPassword: ${{ secrets.KEY_PASSWORD }} + - name: Retrieve filename + run: echo "FILENAME=$(basename ${{ steps.sign.outputs.signedReleaseFile }})" >> $GITHUB_ENV + shell: bash + - name: Upload built apk if: success() uses: actions/upload-artifact@v3 with: - name: TS_${{ env.VERSION }}.apk + name: ${{ env.FILENAME }} path: ${{ steps.sign.outputs.signedReleaseFile }} - name: Send commit to telegram From 74516a557ec5dafb0376520f448a17942b127feb Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 8 Mar 2024 20:18:01 -0800 Subject: [PATCH 088/158] feat: better save all pics --- .../tieba/tabswitch/hooker/TSPreference.java | 2 +- .../tabswitch/hooker/add/SaveImages.java | 111 ++++++++++-------- 2 files changed, 66 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index c3c6d9c5..03a97757 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -268,7 +268,7 @@ private LinearLayout createRootPreference(final Activity activity) { intent.setData(Uri.parse("https://t.me/TabSwitch")); activity.startActivity(intent); })); - preferenceLayout.addView(TSPreferenceHelper.createButton("版本(适配版本)", String.format("%s_%d (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, BuildConfig.TARGET_VERSION), true, v -> { + preferenceLayout.addView(TSPreferenceHelper.createButton("版本(适配版本)", String.format(Locale.CHINA, "%s_%d (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, BuildConfig.TARGET_VERSION), true, v -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/actions")); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java index 6909ccad..823cbb8b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java @@ -13,8 +13,13 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Array; +import java.lang.reflect.Field; import java.net.URL; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.Locale; @@ -30,7 +35,7 @@ public class SaveImages extends XposedContext implements IHooker { private List mList; - private String mTitle; + private Field mDownloadImageViewField; @NonNull @Override @@ -48,67 +53,81 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mList = (ArrayList) param.args[0]; } }); - XposedHelpers.findAndHookMethod("com.baidu.tbadk.widget.richText.TbRichText", - sClassLoader, "toString", new XC_MethodHook() { - @Override - protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - if (param.getResult() != null) mTitle = (String) param.getResult(); - } - }); - XposedHelpers.findAndHookConstructor("com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout", - sClassLoader, Context.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - final var context = ((Context) param.args[0]).getApplicationContext(); - // R.id.download_icon - final var imageView = (ImageView) ReflectUtils.getObjectField(param.thisObject, 11); - imageView.setOnLongClickListener(v -> { - TbToast.showTbToast(String.format(Locale.CHINA, - "开始下载%d张图片", mList.size()), TbToast.LENGTH_SHORT); - new Thread(() -> { - try { - final var list = new ArrayList<>(mList); - final var title = mTitle; - for (var i = 0; i < list.size(); i++) { - var url = list.get(i); - url = StringsKt.substringBeforeLast(url, "*", url); - saveImage(url, title, i, context); + + Class imageViewerBottomLayoutClass = XposedHelpers.findClass("com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout", sClassLoader); + ArrayList declaredFields = new ArrayList<>(Arrays.asList(imageViewerBottomLayoutClass.getDeclaredFields())); + declaredFields.removeIf(o -> o.getType() != ImageView.class); + mDownloadImageViewField = declaredFields.get(declaredFields.size() - 1); + + if (mDownloadImageViewField != null) { + XposedHelpers.findAndHookConstructor("com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout", + sClassLoader, Context.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { + final var context = ((Context) param.args[0]).getApplicationContext(); + // R.id.download_icon + final var imageView = (ImageView) mDownloadImageViewField.get(param.thisObject); + imageView.setOnLongClickListener(v -> { + TbToast.showTbToast(String.format(Locale.CHINA, + "开始下载%d张图片", mList.size()), TbToast.LENGTH_SHORT); + + final long baseTime = System.currentTimeMillis(); + final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA); + final String formattedTime = dateFormat.format(new Date(baseTime)); + + new Thread(() -> { + try { + final var list = new ArrayList<>(mList); + for (var i = 0; i < list.size(); i++) { + var url = list.get(i); + url = StringsKt.substringBeforeLast(url, "*", url); + saveImage(url, formattedTime + "_" + String.format(Locale.CHINA, "%02d", i), context); + } + new Handler(Looper.getMainLooper()).post(() -> + TbToast.showTbToast(String.format(Locale.CHINA, + "已保存%d张图片至手机相册", list.size()), + TbToast.LENGTH_SHORT)); + } catch (final IOException | NullPointerException e) { + new Handler(Looper.getMainLooper()).post(() -> + TbToast.showTbToast("保存失败", TbToast.LENGTH_SHORT)); } - new Handler(Looper.getMainLooper()).post(() -> - TbToast.showTbToast(String.format(Locale.CHINA, - "已保存%d张图片至手机相册", list.size()), - TbToast.LENGTH_SHORT)); - } catch (final IOException | NullPointerException e) { - new Handler(Looper.getMainLooper()).post(() -> - TbToast.showTbToast("保存失败", TbToast.LENGTH_SHORT)); - } - }).start(); - return true; - }); - } - }); + }).start(); + return true; + }); + } + }); + } } - private static void saveImage(final String url, final String title, final int i, final Context context) throws IOException { + private static void saveImage(final String url, final String filename, final Context context) throws IOException { + XposedBridge.log(url); try (final var is = new URL(url).openStream()) { final var bb = FileUtils.toByteBuffer(is); final var imageDetails = new ContentValues(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { imageDetails.put(MediaStore.MediaColumns.RELATIVE_PATH, - Environment.DIRECTORY_PICTURES + File.separator + "tieba" + File.separator + title); + Environment.DIRECTORY_PICTURES + File.separator + "tieba"); } else { final var path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), - "tieba" + File.separator + title); + "tieba"); path.mkdirs(); imageDetails.put(MediaStore.MediaColumns.DATA, path + File.separator - + String.format(Locale.CHINA, "%02d", i) + "." + FileUtils.getExtension(bb)); + + filename + "." + FileUtils.getExtension(bb)); } - imageDetails.put(MediaStore.MediaColumns.DISPLAY_NAME, String.format(Locale.CHINA, "%02d", i)); + + imageDetails.put(MediaStore.MediaColumns.DISPLAY_NAME, filename); imageDetails.put(MediaStore.MediaColumns.MIME_TYPE, "image/" + FileUtils.getExtension(bb)); + + final long currentTime = System.currentTimeMillis(); + imageDetails.put(MediaStore.MediaColumns.DATE_ADDED, currentTime / 1000); + imageDetails.put(MediaStore.MediaColumns.DATE_MODIFIED, currentTime / 1000); + final var resolver = context.getContentResolver(); final var imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails); - final var descriptor = resolver.openFileDescriptor(imageUri, "w"); - FileUtils.copy(bb, descriptor.getFileDescriptor()); + try (var descriptor = resolver.openFileDescriptor(imageUri, "w")) { + FileUtils.copy(bb, descriptor.getFileDescriptor()); + } } } } From 3be9abe5f1011faf5aed0fa15d40d303ab1ceb34 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 8 Mar 2024 20:22:38 -0800 Subject: [PATCH 089/158] hotfix: remove unnecessary log --- app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java index 823cbb8b..d465ae1e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java @@ -13,7 +13,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Array; import java.lang.reflect.Field; import java.net.URL; import java.text.SimpleDateFormat; @@ -100,7 +99,6 @@ protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) thro } private static void saveImage(final String url, final String filename, final Context context) throws IOException { - XposedBridge.log(url); try (final var is = new URL(url).openStream()) { final var bb = FileUtils.toByteBuffer(is); final var imageDetails = new ContentValues(); From 1f0a99febbc16c96f94679b89d90d60e38579988 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 8 Mar 2024 21:02:23 -0800 Subject: [PATCH 090/158] refactor: simplify PurgeEnter --- .../tabswitch/hooker/eliminate/PurgeEnter.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index ac7eef13..0d090431 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -9,6 +9,7 @@ import java.util.List; import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRules; @@ -18,7 +19,6 @@ import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.ResIdentifierMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.ReturnTypeMatcher; import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; @@ -37,11 +37,7 @@ public String key() { public List matchers() { return List.of( new ResIdentifierMatcher("tbds400", "dimen", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))), - new MethodNameMatcher("onSuccess", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))), - new ReturnTypeMatcher<>( - boolean.class, - MatcherProperties.create().useClassMatcher(ClassMatcherUtils.className("com.baidu.tieba.enterForum.helper.HybridEnterForumHelper")).requireVersion("12.56.4.0") - ) + new MethodNameMatcher("onSuccess", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))) ); } @@ -105,10 +101,13 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } }); break; - case "12.56.4.0@HybridEnterForumHelper/boolean": // 禁用Webview进吧页 - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(false)); - break; } }); + + try { // 12.56.4.0+ 禁用WebView进吧页 + XposedBridge.hookMethod( + ReflectUtils.findFirstMethodByExactReturnType("com.baidu.tieba.enterForum.helper.HybridEnterForumHelper", boolean.class), + XC_MethodReplacement.returnConstant(false)); + } catch (final XposedHelpers.ClassNotFoundError ignored) {} } } From 8e45e10b7b6195c7e10e9c274a5d3807f97e6302 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 8 Mar 2024 21:02:32 -0800 Subject: [PATCH 091/158] feat: remove ad for image viewer --- .../gm/tieba/tabswitch/hooker/add/SaveImages.java | 8 ++++---- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 11 +++++++++++ .../java/gm/tieba/tabswitch/util/ReflectUtils.java | 13 +++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java index d465ae1e..0eee90dd 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; -import java.util.List; import java.util.Locale; import de.robv.android.xposed.XC_MethodHook; @@ -33,7 +32,7 @@ import kotlin.text.StringsKt; public class SaveImages extends XposedContext implements IHooker { - private List mList; + private ArrayList mList; private Field mDownloadImageViewField; @NonNull @@ -48,8 +47,9 @@ public void hook() throws Throwable { ); XposedBridge.hookMethod(method, new XC_MethodHook() { @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - mList = (ArrayList) param.args[0]; + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + mList = new ArrayList<>((ArrayList) param.args[0]); + mList.removeIf(o -> o.startsWith("####mLiveRoomPageProvider")); } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 984a3bf8..6d5f94db 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -417,5 +417,16 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "sprite_meme_info", null); } }); + + // 吧友都在看 + XposedBridge.hookMethod( + ReflectUtils.findFirstMethodByExactType("com.baidu.tbadk.coreExtra.view.ImagePagerAdapter", ArrayList.class), + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + ArrayList mList = (ArrayList) param.args[0]; + mList.removeIf(o -> o.startsWith("####mLiveRoomPageProvider")); + } + }); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java index f4353077..2de75211 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java @@ -191,6 +191,19 @@ public static Method findFirstMethodByExactType(final String className, final Cl return findFirstMethodByExactType(XposedHelpers.findClass(className, sClassLoader), paramTypes); } + public static Method findFirstMethodByExactReturnType(final Class cls, final Class returnType) { + for (final var method : cls.getDeclaredMethods()) { + if (method.getReturnType() == returnType) { + return method; + } + } + throw new NoSuchMethodError(returnType.toString()); + } + + public static Method findFirstMethodByExactReturnType(final String className, final Class returnType) { + return findFirstMethodByExactReturnType(XposedHelpers.findClass(className, sClassLoader), returnType); + } + public static Object callMethod(final Method method, final Object instance, final Object... args) { try { method.setAccessible(true); From 3b34c91f7e71a6728ab079276a20eebb0b45bd1a Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 8 Mar 2024 23:01:45 -0800 Subject: [PATCH 092/158] [skip ci] remove redundant code --- .../gm/tieba/tabswitch/hooker/eliminate/Purge.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 6d5f94db..984a3bf8 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -417,16 +417,5 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "sprite_meme_info", null); } }); - - // 吧友都在看 - XposedBridge.hookMethod( - ReflectUtils.findFirstMethodByExactType("com.baidu.tbadk.coreExtra.view.ImagePagerAdapter", ArrayList.class), - new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - ArrayList mList = (ArrayList) param.args[0]; - mList.removeIf(o -> o.startsWith("####mLiveRoomPageProvider")); - } - }); } } From 0b78b4435cdf9fa7bf1217800207d66de37a3856 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 8 Mar 2024 23:51:44 -0800 Subject: [PATCH 093/158] feat: better SaveImages --- .../tabswitch/hooker/add/SaveImages.java | 108 ++++++++++++------ 1 file changed, 70 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java index 0eee90dd..e6f6f149 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java @@ -7,7 +7,9 @@ import android.os.Handler; import android.os.Looper; import android.provider.MediaStore; +import android.view.View; import android.widget.ImageView; +import android.widget.LinearLayout; import androidx.annotation.NonNull; @@ -19,19 +21,26 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.List; import java.util.Locale; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; +import gm.tieba.tabswitch.hooker.Obfuscated; +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; +import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; +import gm.tieba.tabswitch.hooker.deobfuscation.ReturnTypeMatcher; +import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.FileUtils; import gm.tieba.tabswitch.util.ReflectUtils; import gm.tieba.tabswitch.widget.TbToast; import kotlin.text.StringsKt; -public class SaveImages extends XposedContext implements IHooker { +public class SaveImages extends XposedContext implements IHooker, Obfuscated { private ArrayList mList; private Field mDownloadImageViewField; @@ -41,18 +50,38 @@ public String key() { return "save_images"; } - public void hook() throws Throwable { - final var method = ReflectUtils.findFirstMethodByExactType( - "com.baidu.tbadk.coreExtra.view.ImagePagerAdapter", ArrayList.class + @Override + public List matchers() { + return List.of( + new ReturnTypeMatcher<>(LinearLayout.class, MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("分享弹窗触发分享:分享成功"))) ); - XposedBridge.hookMethod(method, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - mList = new ArrayList<>((ArrayList) param.args[0]); - mList.removeIf(o -> o.startsWith("####mLiveRoomPageProvider")); + } + + public void hook() throws Throwable { + AcRules.findRule(matchers(), (matcher, clazz, method) -> { + switch (matcher) { + case "分享弹窗触发分享:分享成功/LinearLayout": + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, int.class, int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + LinearLayout downloadIconView = (LinearLayout) param.getResult(); + downloadIconView.setOnLongClickListener(saveImageListener); + } + }); + break; } }); + XposedBridge.hookMethod( + ReflectUtils.findFirstMethodByExactType("com.baidu.tbadk.coreExtra.view.ImagePagerAdapter", ArrayList.class), + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + mList = new ArrayList<>((ArrayList) param.args[0]); + mList.removeIf(o -> o.startsWith("####mLiveRoomPageProvider")); + } + }); + Class imageViewerBottomLayoutClass = XposedHelpers.findClass("com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout", sClassLoader); ArrayList declaredFields = new ArrayList<>(Arrays.asList(imageViewerBottomLayoutClass.getDeclaredFields())); declaredFields.removeIf(o -> o.getType() != ImageView.class); @@ -63,41 +92,44 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable sClassLoader, Context.class, new XC_MethodHook() { @Override protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - final var context = ((Context) param.args[0]).getApplicationContext(); - // R.id.download_icon final var imageView = (ImageView) mDownloadImageViewField.get(param.thisObject); - imageView.setOnLongClickListener(v -> { - TbToast.showTbToast(String.format(Locale.CHINA, - "开始下载%d张图片", mList.size()), TbToast.LENGTH_SHORT); - - final long baseTime = System.currentTimeMillis(); - final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA); - final String formattedTime = dateFormat.format(new Date(baseTime)); - - new Thread(() -> { - try { - final var list = new ArrayList<>(mList); - for (var i = 0; i < list.size(); i++) { - var url = list.get(i); - url = StringsKt.substringBeforeLast(url, "*", url); - saveImage(url, formattedTime + "_" + String.format(Locale.CHINA, "%02d", i), context); - } - new Handler(Looper.getMainLooper()).post(() -> - TbToast.showTbToast(String.format(Locale.CHINA, - "已保存%d张图片至手机相册", list.size()), - TbToast.LENGTH_SHORT)); - } catch (final IOException | NullPointerException e) { - new Handler(Looper.getMainLooper()).post(() -> - TbToast.showTbToast("保存失败", TbToast.LENGTH_SHORT)); - } - }).start(); - return true; - }); + imageView.setOnLongClickListener(saveImageListener); } }); } } + final private View.OnLongClickListener saveImageListener = new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + TbToast.showTbToast(String.format(Locale.CHINA, + "开始下载%d张图片", mList.size()), TbToast.LENGTH_SHORT); + + final long baseTime = System.currentTimeMillis(); + final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA); + final String formattedTime = dateFormat.format(new Date(baseTime)); + + new Thread(() -> { + try { + final var list = new ArrayList<>(mList); + for (var i = 0; i < list.size(); i++) { + var url = list.get(i); + url = StringsKt.substringBeforeLast(url, "*", url); + saveImage(url, formattedTime + "_" + String.format(Locale.CHINA, "%02d", i), getContext()); + } + new Handler(Looper.getMainLooper()).post(() -> + TbToast.showTbToast(String.format(Locale.CHINA, + "已保存%d张图片至手机相册", list.size()), + TbToast.LENGTH_SHORT)); + } catch (final IOException | NullPointerException e) { + new Handler(Looper.getMainLooper()).post(() -> + TbToast.showTbToast("保存失败", TbToast.LENGTH_SHORT)); + } + }).start(); + return true; + } + }; + private static void saveImage(final String url, final String filename, final Context context) throws IOException { try (final var is = new URL(url).openStream()) { final var bb = FileUtils.toByteBuffer(is); From 22d56e2baa402a81f0f6af9729fa8d7ec3b6248a Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 9 Mar 2024 02:26:00 -0800 Subject: [PATCH 094/158] [skip ci] Update android.yml --- .github/workflows/android.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 8a7e203c..86691620 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -41,16 +41,23 @@ jobs: keyPassword: ${{ secrets.KEY_PASSWORD }} - name: Retrieve filename + if: success() run: echo "FILENAME=$(basename ${{ steps.sign.outputs.signedReleaseFile }})" >> $GITHUB_ENV shell: bash - name: Upload built apk if: success() - uses: actions/upload-artifact@v3 + id: upload + uses: actions/upload-artifact@v4 with: name: ${{ env.FILENAME }} path: ${{ steps.sign.outputs.signedReleaseFile }} + - name: Write job summary + if: success() + run: | + echo "### [下载链接](${{ steps.upload.outputs.artifact-url }})" >> $GITHUB_STEP_SUMMARY + - name: Send commit to telegram uses: appleboy/telegram-action@master with: From 19c54cad7fa2f55618e469f27df713420498d76c Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 10 Mar 2024 14:59:51 -0700 Subject: [PATCH 095/158] feat: update ad filtering rule --- .github/workflows/android.yml | 3 +-- .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 86691620..1ec89cde 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -55,8 +55,7 @@ jobs: - name: Write job summary if: success() - run: | - echo "### [下载链接](${{ steps.upload.outputs.artifact-url }})" >> $GITHUB_STEP_SUMMARY + run: echo "### [下载链接](${{ steps.upload.outputs.artifact-url }})" >> $GITHUB_STEP_SUMMARY - name: Send commit to telegram uses: appleboy/telegram-action@master diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 984a3bf8..47dba312 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -241,6 +241,9 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable // 圈层热贴 XposedHelpers.setObjectField(param.thisObject, "hot_card", null); + + // 添加兴趣,为你精准推荐相关内容~ + XposedHelpers.setObjectField(param.thisObject, "interest_class", null); } }); // 帖子 AI 聊天 From 6a70b021981a797c69fc80bbff209746b4084872 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 10 Mar 2024 21:19:28 -0700 Subject: [PATCH 096/158] [skip ci] fix: improve AppComponentFactory workaround --- .../java/gm/tieba/tabswitch/XposedInit.java | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index aee86e92..bd7879fb 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -2,10 +2,12 @@ import android.app.Activity; import android.app.AlertDialog; +import android.app.AndroidAppHelper; import android.app.AppComponentFactory; import android.app.Application; import android.app.Instrumentation; import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.res.XModuleResources; import android.os.Bundle; import android.text.TextUtils; @@ -73,27 +75,7 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader) == null) || !lpparam.isFirstApplication) return; sClassLoader = lpparam.classLoader; sAssetManager = XModuleResources.createInstance(sPath, null).getAssets(); - - // Workaround to address an issue with LSPatch (unable to open personal homepage) - // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory - // However, LSPatch incorrectly sets appComponentFactory to null, causing android.app.Instrumentation.getFactory to fall back to AppComponentFactory.DEFAULT - // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) - // TODO: Report issue to upstream - XposedHelpers.findAndHookMethod( - Instrumentation.class, - "getFactory", - String.class, - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - if (param.args[0].toString().equals("com.baidu.tieba")) { - if (mAppComponentFactory == null) { - mAppComponentFactory = (AppComponentFactory) sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); - } - param.setResult(mAppComponentFactory); - } - } - }); + mAppComponentFactory = (AppComponentFactory) sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); XposedHelpers.findAndHookMethod(Instrumentation.class, "callApplicationOnCreate", Application.class, new XC_MethodHook() { @Override @@ -104,6 +86,27 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { AcRules.init(getContext()); String currTbVersion = DeobfuscationHelper.getTbVersion(getContext()); + // Workaround to address an issue with LSPatch (unable to open personal homepage) + // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory + // However, LSPatch incorrectly sets appComponentFactory to null, causing android.app.Instrumentation.getFactory to fall back to AppComponentFactory.DEFAULT + // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) + // TODO: Report issue to upstream + if (getContext().getApplicationInfo().appComponentFactory == null) { + XposedBridge.log("Applying AppComponentFactory workaround"); + XposedHelpers.findAndHookMethod( + Instrumentation.class, + "getFactory", + String.class, + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (param.args[0].toString().equals("com.baidu.tieba")) { + param.setResult(mAppComponentFactory); + } + } + }); + } + final var hookers = List.of( new TSPreference(), new FragmentTab(), From fea9a6b344e176f44ce7272c1a0c6f2e5d39c402 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 10 Mar 2024 21:28:08 -0700 Subject: [PATCH 097/158] [skip ci] chore: remove unused library --- app/src/main/java/gm/tieba/tabswitch/XposedInit.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index bd7879fb..61cbd1a2 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -2,12 +2,10 @@ import android.app.Activity; import android.app.AlertDialog; -import android.app.AndroidAppHelper; import android.app.AppComponentFactory; import android.app.Application; import android.app.Instrumentation; import android.content.Intent; -import android.content.pm.ApplicationInfo; import android.content.res.XModuleResources; import android.os.Bundle; import android.text.TextUtils; @@ -90,7 +88,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory // However, LSPatch incorrectly sets appComponentFactory to null, causing android.app.Instrumentation.getFactory to fall back to AppComponentFactory.DEFAULT // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) - // TODO: Report issue to upstream if (getContext().getApplicationInfo().appComponentFactory == null) { XposedBridge.log("Applying AppComponentFactory workaround"); XposedHelpers.findAndHookMethod( From bf9edd8e66b823d071252f1a59a53408299546dc Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 11 Mar 2024 04:25:51 -0700 Subject: [PATCH 098/158] fix: unable to load flutter plugin with LSPatch --- .../java/gm/tieba/tabswitch/XposedInit.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 61cbd1a2..b0cfcead 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -75,6 +75,28 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr sAssetManager = XModuleResources.createInstance(sPath, null).getAssets(); mAppComponentFactory = (AppComponentFactory) sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); + // For some reason certain flutter page will not load in LSPatch unless we manually load the flutter plugin + XposedHelpers.findAndHookMethod( + "com.baidu.tieba.flutter.FlutterPluginManager", + sClassLoader, + "invokePlugin", + "com.baidu.nps.main.invoke.IInvokeCallback", + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + try { + Object npsManager = XposedHelpers.callStaticMethod(XposedHelpers.findClass("com.baidu.nps.main.manager.NPSManager", sClassLoader), "getInstance"); + XposedHelpers.callMethod(npsManager, "loadClazz", + "com.baidu.tieba.plugin.flutter", + "com.baidu.tieba.flutter.FlutterPluginImpl", + XposedHelpers.findClass("com.baidu.tieba.flutter.IFlutterPlugin", sClassLoader), + param.args[0] + ); + } catch (Error ignored) {} + } + } + ); + XposedHelpers.findAndHookMethod(Instrumentation.class, "callApplicationOnCreate", Application.class, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { From 7c0eb755cabce9e19291945e8e356d60f8112f4b Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 13 Mar 2024 01:27:08 -0700 Subject: [PATCH 099/158] feat: disable notification status check --- .../java/gm/tieba/tabswitch/XposedInit.java | 4 ++- .../tieba/tabswitch/hooker/TSPreference.java | 1 + .../hooker/auto/NotificationDetect.java | 26 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index b0cfcead..24208703 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -36,6 +36,7 @@ import gm.tieba.tabswitch.hooker.auto.AutoSign; import gm.tieba.tabswitch.hooker.auto.FrsTab; import gm.tieba.tabswitch.hooker.auto.MsgCenterTab; +import gm.tieba.tabswitch.hooker.auto.NotificationDetect; import gm.tieba.tabswitch.hooker.auto.OpenSign; import gm.tieba.tabswitch.hooker.auto.OriginSrc; import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; @@ -150,7 +151,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new StackTrace(), new RemoveUpdate(), new FoldTopCardView(), - new MsgCenterTab() + new MsgCenterTab(), + new NotificationDetect() ); final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbDialog()); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 03a97757..7bd8b667 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -239,6 +239,7 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "奇怪怪" : "其它")); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "用赞踩差数代替赞数", "agree_num", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "禁止检测通知开启状态", "notification_detect", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createButton(TRACE, "希望有一天不再需要贴吧TS", true, v -> { final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); intent.putExtra("proxyPage", TRACE); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java new file mode 100644 index 00000000..5e9bcb28 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java @@ -0,0 +1,26 @@ +package gm.tieba.tabswitch.hooker.auto; + +import androidx.annotation.NonNull; + +import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.hooker.IHooker; + +public class NotificationDetect extends XposedContext implements IHooker { + @NonNull + @Override + public String key() { + return "notification_detect"; + } + + public void hook() throws Throwable { + // 禁止检测通知开启状态 + XposedHelpers.findAndHookMethod( + "androidx.core.app.NotificationManagerCompat", + sClassLoader, + "areNotificationsEnabled", + XC_MethodReplacement.returnConstant(true) + ); + } +} From ecfa56e33c52b606ddf92d5956b09480f8150472 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 14 Mar 2024 00:45:20 -0700 Subject: [PATCH 100/158] feat: update ad removal rule --- .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 47dba312..6acc06c6 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -418,6 +418,9 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable // 点击使用同系列表情 XposedHelpers.setObjectField(param.thisObject, "sprite_meme_info", null); + + // 小说推荐 + XposedHelpers.setObjectField(param.thisObject, "novel_recom_card", null); } }); } From 9fdba4187e2b02ca33f2abb72c6ac87acfd251ef Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 14 Mar 2024 03:55:37 -0700 Subject: [PATCH 101/158] fix: FrsTab for 12.57.0.1 --- app/build.gradle | 2 +- .../gm/tieba/tabswitch/hooker/auto/FrsTab.java | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1f5bd644..3579a02a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { targetSdk sdk versionCode gitCommitCount versionName '2.9.6' - buildConfigField "String", "TARGET_VERSION", "\"12.56.4.0\"" + buildConfigField "String", "TARGET_VERSION", "\"12.57.0.1\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java index cda7dff7..ff4694c7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java @@ -55,12 +55,17 @@ public void beforeHookedMethod(final MethodHookParam param) throws Throwable { case "forum_tab_current_list": if (!"com.baidu.tieba.forum.controller.TopController".equals(clazz)) return; Class topControllerClass = XposedHelpers.findClass(clazz, sClassLoader); - Method targetMethod = XposedHelpers.findMethodBestMatch( - topControllerClass, - method, - null, - XposedHelpers.findClass(clazz, sClassLoader) - ); + Method targetMethod; + try { + targetMethod = XposedHelpers.findMethodBestMatch( + topControllerClass, + method, + null, + XposedHelpers.findClass(clazz, sClassLoader) + ); + } catch (NoSuchMethodError e) { // 12.57+ + break; + } XposedBridge.hookMethod(targetMethod, new XC_MethodHook() { @Override public void afterHookedMethod(MethodHookParam param) throws Throwable { From 00f4cee305f7b96d7906883ed59f06809c499463 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 15 Mar 2024 22:39:17 -0700 Subject: [PATCH 102/158] feat: remove h5 pop-ups --- .../tabswitch/hooker/eliminate/Purge.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 6acc06c6..0ef7b3f5 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -55,7 +55,8 @@ public List matchers() { new StringMatcher("top_level_navi"), new StringMatcher("index_tab_info"), new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), - new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V") + new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V"), + new StringMatcher("h5_pop_ups_config") ); } @@ -101,7 +102,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); syncData.put("bottom_bubble_config", null); } }); @@ -112,7 +113,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); syncData.put("top_level_navi", null); } }); @@ -123,7 +124,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = (JSONObject) ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); JSONArray indexTabInfo = syncData.getJSONArray("index_tab_info"); JSONArray newIndexTabInfo = new JSONArray(); for (int i = 0; i < indexTabInfo.length(); i++) { @@ -145,6 +146,18 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, "android.content.Context", XC_MethodReplacement.returnConstant(null)); break; + case "h5_pop_ups_config": // 各种云控弹窗 + if (method.equals("invoke")) { + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); + syncData.put("h5_pop_ups", null); + syncData.put("h5_pop_ups_config", null); + } + }); + } + break; } }); // 启动广告 From 879c937260c38d66804ac826687b74685721fe60 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 18 Mar 2024 20:50:15 -0700 Subject: [PATCH 103/158] fix: improve NotificationDetect --- .../tieba/tabswitch/hooker/auto/NotificationDetect.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java index 5e9bcb28..4fc71fb2 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java @@ -1,5 +1,7 @@ package gm.tieba.tabswitch.hooker.auto; +import android.app.NotificationManager; + import androidx.annotation.NonNull; import de.robv.android.xposed.XC_MethodReplacement; @@ -22,5 +24,11 @@ public void hook() throws Throwable { "areNotificationsEnabled", XC_MethodReplacement.returnConstant(true) ); + XposedHelpers.findAndHookMethod( + "android.app.NotificationChannel", + sClassLoader, + "getImportance", + XC_MethodReplacement.returnConstant(NotificationManager.IMPORTANCE_DEFAULT) + ); } } From 77daec699916049888aa56216236c3cdd0d1d778 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 18 Mar 2024 21:14:43 -0700 Subject: [PATCH 104/158] fix: improve NotificationDetect --- .../tieba/tabswitch/hooker/auto/NotificationDetect.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java index 4fc71fb2..1c37f8ff 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java @@ -1,7 +1,5 @@ package gm.tieba.tabswitch.hooker.auto; -import android.app.NotificationManager; - import androidx.annotation.NonNull; import de.robv.android.xposed.XC_MethodReplacement; @@ -25,10 +23,10 @@ public void hook() throws Throwable { XC_MethodReplacement.returnConstant(true) ); XposedHelpers.findAndHookMethod( - "android.app.NotificationChannel", + "com.baidu.tieba.push.PushSceneGroup", sClassLoader, - "getImportance", - XC_MethodReplacement.returnConstant(NotificationManager.IMPORTANCE_DEFAULT) + "getLimit", + XC_MethodReplacement.returnConstant(0) ); } } From 3ef61ee35fb0a57ab54698999014e168019a4db3 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 26 Mar 2024 01:46:31 -0700 Subject: [PATCH 105/158] feat: remove video from personalized feed --- app/build.gradle | 2 +- .../java/gm/tieba/tabswitch/XposedInit.java | 4 ++- .../tieba/tabswitch/hooker/TSPreference.java | 24 ++++++++++++--- .../hooker/eliminate/PurgeVideo.java | 30 +++++++++++++++++++ 4 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.java diff --git a/app/build.gradle b/app/build.gradle index 3579a02a..b74aa8fb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { targetSdk sdk versionCode gitCommitCount versionName '2.9.6' - buildConfigField "String", "TARGET_VERSION", "\"12.57.0.1\"" + buildConfigField "String", "TARGET_VERSION", "\"12.57.5.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 24208703..7ef4d289 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -51,6 +51,7 @@ import gm.tieba.tabswitch.hooker.eliminate.Purge; import gm.tieba.tabswitch.hooker.eliminate.PurgeEnter; import gm.tieba.tabswitch.hooker.eliminate.PurgeMy; +import gm.tieba.tabswitch.hooker.eliminate.PurgeVideo; import gm.tieba.tabswitch.hooker.eliminate.RedTip; import gm.tieba.tabswitch.hooker.eliminate.RemoveUpdate; import gm.tieba.tabswitch.hooker.extra.ForbidGesture; @@ -152,7 +153,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new RemoveUpdate(), new FoldTopCardView(), new MsgCenterTab(), - new NotificationDetect() + new NotificationDetect(), + new PurgeVideo() ); final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbDialog()); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 7bd8b667..e7ec790a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -190,9 +190,8 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "净化进吧", "purge_enter", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "净化置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏小红点", "red_tip", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用更新提示", "remove_update", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "只推荐已关注的吧", "follow_filter", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "屏蔽首页视频贴", "purge_video", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤首页推荐", "personalized_filter", SwitchButtonHolder.TYPE_DIALOG)); preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤帖子回复", "content_filter", SwitchButtonHolder.TYPE_DIALOG)); preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤吧页面", "frs_page_filter", SwitchButtonHolder.TYPE_DIALOG)); @@ -237,6 +236,8 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(originSrcOnlyWifiButton); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "奇怪怪" : "其它")); + preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏小红点", "red_tip", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用更新提示", "remove_update", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "用赞踩差数代替赞数", "agree_num", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁止检测通知开启状态", "notification_detect", SwitchButtonHolder.TYPE_SWITCH)); @@ -269,10 +270,10 @@ private LinearLayout createRootPreference(final Activity activity) { intent.setData(Uri.parse("https://t.me/TabSwitch")); activity.startActivity(intent); })); - preferenceLayout.addView(TSPreferenceHelper.createButton("版本(适配版本)", String.format(Locale.CHINA, "%s_%d (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, BuildConfig.TARGET_VERSION), true, v -> { + preferenceLayout.addView(TSPreferenceHelper.createButton("版本", String.format(Locale.CHINA, "%s_%d (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, abbreviateVersion(BuildConfig.TARGET_VERSION)), true, v -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); - intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/actions")); + intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases")); activity.startActivity(intent); })); return preferenceLayout; @@ -307,4 +308,19 @@ private LinearLayout createHidePreference(final Activity activity) { TraceChecker.sChildCount = preferenceLayout.getChildCount(); return preferenceLayout; } + + private static String abbreviateVersion(String version) { + // Split the version string by dot (.) + String[] parts = version.split("\\."); + + // Check if there are at least two version codes + if (parts.length >= 2) { + // Concatenate the first two version codes + return parts[0] + parts[1]; + } else { + // If there are less than two version codes, return the original string + return version; + } + } + } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.java new file mode 100644 index 00000000..fc0fb3e4 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.java @@ -0,0 +1,30 @@ +package gm.tieba.tabswitch.hooker.eliminate; + +import androidx.annotation.NonNull; + +import java.util.List; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.hooker.IHooker; + +public class PurgeVideo extends XposedContext implements IHooker { + @NonNull + @Override + public String key() { + return "purge_video"; + } + + @Override + public void hook() throws Throwable { + XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); + if (threadList == null) return; + threadList.removeIf(o -> XposedHelpers.getObjectField(o, "video_info") != null); + } + }); + } +} From f2cf1e04f95351bdc33782445562bba883c5fa04 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 27 Mar 2024 23:16:05 -0700 Subject: [PATCH 106/158] feat: remove live tab from personalized page --- .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 0ef7b3f5..d0df0d17 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -119,7 +119,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } break; - case "index_tab_info": // 首页活动Tab + case "index_tab_info": // 首页活动Tab (202), 直播Tab (6) if (method.equals("invoke")) { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { @Override @@ -129,7 +129,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { JSONArray newIndexTabInfo = new JSONArray(); for (int i = 0; i < indexTabInfo.length(); i++) { JSONObject currTab = indexTabInfo.getJSONObject(i); - if (!currTab.getString("tab_type").equals("202")) { + if (!currTab.getString("tab_type").equals("202") && !currTab.getString("tab_type").equals("6")) { newIndexTabInfo.put(currTab); } } From ff755a6177b893207f31145ec8e75f6d4c51bb8f Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 2 Apr 2024 06:31:26 -0700 Subject: [PATCH 107/158] feat: improve error notification text --- app/build.gradle | 1 + .../main/java/gm/tieba/tabswitch/Constants.kt | 3 ++- .../java/gm/tieba/tabswitch/XposedInit.java | 20 +++++++++++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b74aa8fb..8234eb01 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,6 +19,7 @@ android { versionCode gitCommitCount versionName '2.9.6' buildConfigField "String", "TARGET_VERSION", "\"12.57.5.0\"" + buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { diff --git a/app/src/main/java/gm/tieba/tabswitch/Constants.kt b/app/src/main/java/gm/tieba/tabswitch/Constants.kt index ef92633f..0eb31442 100644 --- a/app/src/main/java/gm/tieba/tabswitch/Constants.kt +++ b/app/src/main/java/gm/tieba/tabswitch/Constants.kt @@ -8,7 +8,8 @@ object Constants { " ②本模块不会主动发起网络请求,不会上传任何用户数据,隐私泄露或者账号异常行为与本模块无关。\n" + " ③本模块主要用于学习和交流技术,任何人不得将本模块用于商业或非法用途。", "dev_tip" to "提示:您当前安装的是非正式版本,可能含有较多错误,如果您希望得到更稳定的使用体验,建议您安装正式版本。", - "exception_rules_incomplete" to "规则异常,建议您执行反混淆。若执行完后仍出现此对话框则应更新模块或使用推荐贴吧版本%s,若已是最新版本则应向作者反馈。", + "exception_rules_incomplete" to "规则异常,请点击确定并重启应用以重新执行反混淆。若执行反混淆后仍出现此对话框则应尝试更新模块或向作者反馈。", + "version_mismatch" to "规则异常,当前贴吧版本不受支持。请使用受支持的贴吧版本(%s-%s)或尝试更新模块。", "exception_init_preference" to "初始化设置失败,请尝试更换贴吧版本。", "regex_hint" to "请输入正则表达式,如.*", ) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 7ef4d289..f97f235d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -7,6 +7,7 @@ import android.app.Instrumentation; import android.content.Intent; import android.content.res.XModuleResources; +import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import android.view.WindowManager; @@ -221,8 +222,17 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { final var activity = (Activity) param.thisObject; final var messages = new ArrayList(); - messages.add(String.format(Constants.getStrings().get("exception_rules_incomplete"), BuildConfig.TARGET_VERSION)); - messages.add(String.format(Locale.CHINA, "tbversion: %s, module version: %d", + + if (DeobfuscationHelper.isTbSatisfyVersionRequirement(BuildConfig.MIN_VERSION, currTbVersion) + && (!DeobfuscationHelper.isTbSatisfyVersionRequirement(BuildConfig.TARGET_VERSION, currTbVersion) || currTbVersion.equals(BuildConfig.TARGET_VERSION))) { + messages.add(Constants.getStrings().get("exception_rules_incomplete")); + } else { + messages.add(String.format(Locale.CHINA, + Constants.getStrings().get("version_mismatch"), + BuildConfig.MIN_VERSION, BuildConfig.TARGET_VERSION)); + } + + messages.add(String.format(Locale.CHINA, "贴吧版本:%s, 模块版本:%d", currTbVersion, BuildConfig.VERSION_CODE)); messages.add(String.format(Locale.CHINA, "%d rule(s) lost: %s", lostList.size(), lostList)); final var message = TextUtils.join("\n", messages); @@ -230,6 +240,12 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) .setTitle("警告").setMessage(message).setCancelable(false) + .setNeutralButton("更新模块", (dialogInterface, i) -> { + final Intent intent = new Intent(); + intent.setAction("android.intent.action.VIEW"); + intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases")); + activity.startActivity(intent); + }) .setNegativeButton(activity.getString(android.R.string.cancel), null) .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> { Preferences.putSignature(0); From cbd02ac85808b780fb896740925360311223c69f Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 2 Apr 2024 19:52:43 -0700 Subject: [PATCH 108/158] feat: new dialog for selectable copying --- .../java/gm/tieba/tabswitch/XposedInit.java | 4 +- .../tieba/tabswitch/hooker/TSPreference.java | 1 + .../tabswitch/hooker/add/SelectClipboard.java | 80 +++++++++++++++++++ .../gm/tieba/tabswitch/util/ReflectUtils.java | 17 ++++ 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index f97f235d..76d1ec4f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -33,6 +33,7 @@ import gm.tieba.tabswitch.hooker.add.HistoryCache; import gm.tieba.tabswitch.hooker.add.Ripple; import gm.tieba.tabswitch.hooker.add.SaveImages; +import gm.tieba.tabswitch.hooker.add.SelectClipboard; import gm.tieba.tabswitch.hooker.auto.AgreeNum; import gm.tieba.tabswitch.hooker.auto.AutoSign; import gm.tieba.tabswitch.hooker.auto.FrsTab; @@ -155,7 +156,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new FoldTopCardView(), new MsgCenterTab(), new NotificationDetect(), - new PurgeVideo() + new PurgeVideo(), + new SelectClipboard() ); final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbDialog()); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index e7ec790a..fe3239a1 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -200,6 +200,7 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "浏览历史增加搜索", "history_cache", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "弹窗自由复制", "select_clipboard", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "垂手可得" : "自动化")); final SwitchButtonHolder autoSign = new SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java new file mode 100644 index 00000000..7fb38d9b --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java @@ -0,0 +1,80 @@ +package gm.tieba.tabswitch.hooker.add; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ClipboardManager; +import android.content.Context; +import android.view.View; +import android.view.WindowManager; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import java.util.List; + +import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.dao.AcRules; +import gm.tieba.tabswitch.hooker.IHooker; +import gm.tieba.tabswitch.hooker.Obfuscated; +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; +import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; +import gm.tieba.tabswitch.util.ClassMatcherUtils; +import gm.tieba.tabswitch.util.DisplayUtils; +import gm.tieba.tabswitch.util.ReflectUtils; + +public class SelectClipboard extends XposedContext implements IHooker, Obfuscated { + @NonNull + @Override + public String key() { + return "select_clipboard"; + } + + @Override + public List matchers() { + return List.of( + new SmaliMatcher("Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V", + MatcherProperties.create().useClassMatcher(ClassMatcherUtils.className("com.baidu.tieba.tbadkCore.data.PostData"))) + ); + } + + public void hook() throws Throwable { + AcRules.findRule(matchers(), (matcher, clazz, method) -> { + switch (matcher) { + case "PostData/Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V": + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + Object tbRichText = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.widget.richText.TbRichText"); + + Activity currentActivity = ReflectUtils.getCurrentActivity(); + AlertDialog alert = new AlertDialog.Builder(currentActivity, DisplayUtils.isLightMode(getContext()) ? + android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) + .setTitle("自由复制").setMessage(tbRichText.toString()) + .setNeutralButton("复制全部", (dialogInterface, i) -> { + ClipboardManager clipboardManager = (ClipboardManager) ReflectUtils.getTbadkCoreApplicationInst().getSystemService(Context.CLIPBOARD_SERVICE); + clipboardManager.setText(tbRichText.toString()); + }) + .setPositiveButton("完成", null).create(); + alert.show(); + + View messageView = alert.findViewById(android.R.id.message); + if (messageView instanceof TextView) { + ((TextView) messageView).setTextIsSelectable(true); + } + + WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); + layoutParams.copyFrom(alert.getWindow().getAttributes()); + layoutParams.width = DisplayUtils.getDisplayWidth(getContext()); + alert.getWindow().setAttributes(layoutParams); + + return null; + } + }); + break; + } + }); + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java index 2de75211..9697a1a5 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java @@ -1,5 +1,8 @@ package gm.tieba.tabswitch.util; +import android.app.Activity; +import android.app.Application; + import androidx.annotation.ColorInt; import java.lang.reflect.Field; @@ -217,4 +220,18 @@ public static Object callMethod(final Method method, final Object instance, fina public static Object callStaticMethod(final Method method, final Object... args) { return callMethod(method, null, args); } + + public static Application getTbadkCoreApplicationInst() { + return (Application) XposedHelpers.callStaticMethod( + XposedHelpers.findClass("com.baidu.tbadk.core.TbadkCoreApplication", sClassLoader), + "getInst" + ); + } + + public static Activity getCurrentActivity() { + return (Activity) XposedHelpers.callMethod( + getTbadkCoreApplicationInst(), + "getCurrentActivity" + ); + } } From f670d105f432e02794e206be7f3ac15dc8a603e8 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 2 Apr 2024 23:37:17 -0700 Subject: [PATCH 109/158] feat: adapt to 12.58.1.0 --- app/build.gradle | 4 +- .../tieba/tabswitch/hooker/TSPreference.java | 17 +----- .../deobfuscation/DeobfuscationHooker.java | 2 +- .../tabswitch/hooker/eliminate/Purge.java | 54 +++++-------------- 4 files changed, 16 insertions(+), 61 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8234eb01..8f4d69e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.6' - buildConfigField "String", "TARGET_VERSION", "\"12.57.5.0\"" + versionName '2.9.7' + buildConfigField "String", "TARGET_VERSION", "\"12.58.1.0\"" buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index fe3239a1..f8910465 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -271,7 +271,7 @@ private LinearLayout createRootPreference(final Activity activity) { intent.setData(Uri.parse("https://t.me/TabSwitch")); activity.startActivity(intent); })); - preferenceLayout.addView(TSPreferenceHelper.createButton("版本", String.format(Locale.CHINA, "%s_%d (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, abbreviateVersion(BuildConfig.TARGET_VERSION)), true, v -> { + preferenceLayout.addView(TSPreferenceHelper.createButton("版本", String.format(Locale.CHINA, "%s_%d", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE), true, v -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases")); @@ -309,19 +309,4 @@ private LinearLayout createHidePreference(final Activity activity) { TraceChecker.sChildCount = preferenceLayout.getChildCount(); return preferenceLayout; } - - private static String abbreviateVersion(String version) { - // Split the version string by dot (.) - String[] parts = version.split("\\."); - - // Check if there are at least two version codes - if (parts.length >= 2) { - // Concatenate the first two version codes - return parts[0] + parts[1]; - } else { - // If there are less than two version codes, return the original string - return version; - } - } - } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java index 2ae05c30..c4d21ff2 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java @@ -95,7 +95,7 @@ public void afterHookedMethod(final MethodHookParam param) throws Throwable { setMessage("(3/3) 搜索字符串、资源 id 和方法调用"); viewModel.deobfuscateStep3(); - XposedBridge.log("deobfuscate accomplished, current version: " + XposedBridge.log("Deobfuscation complete, current version: " + DeobfuscationHelper.getTbVersion(mActivity)); hooks.forEach(Unhook::unhook); DeobfuscationHelper.saveAndRestart(mActivity, diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index d0df0d17..78cff176 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -48,7 +48,6 @@ public List matchers() { new SmaliMatcher("Lcom/baidu/tieba/recapp/lego/model/AdCard;->(Lorg/json/JSONObject;)V"), new SmaliMatcher("Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V"), new StringMatcher("pic_amount"), - new StringMatcher("key_frs_dialog_ad_last_show_time"), new StringMatcher("准备展示精灵动画提示控件"), new StringMatcher("TbChannelJsInterfaceNew"), new StringMatcher("bottom_bubble_config"), @@ -75,13 +74,6 @@ public void hook() throws Throwable { } } break; - case "key_frs_dialog_ad_last_show_time": // 吧推广弹窗 - for (final var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { - if (md.getName().equals(method) && md.getReturnType().equals(boolean.class)) { - XposedBridge.hookMethod(md, XC_MethodReplacement.returnConstant(true)); - } - } - break; case "准备展示精灵动画提示控件": // 吧内%s新贴热议中 XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(false)); break; @@ -308,8 +300,6 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "activityhead", null); } }); - // 吧小程序 - XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.tieba.frs.servicearea.ServiceAreaView", sClassLoader), "setData", XC_MethodReplacement.returnConstant(null)); // 吧友直播 XposedHelpers.findAndHookMethod("tbclient.FrsPage.NavTabInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override @@ -319,38 +309,18 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable list.removeIf(o -> (Integer) XposedHelpers.getObjectField(o, "tab_type") == 92); } }); - // 你可能感兴趣的人:initUI() - final var md = ReflectUtils.findFirstMethodByExactType("com.baidu.tieba.homepage.concern.view.ConcernRecommendLayout"); - XposedBridge.hookMethod(md, XC_MethodReplacement.returnConstant(null)); - try { - // 12.41.5.1+ - XposedHelpers.findAndHookMethod("com.baidu.tieba.feed.list.TemplateAdapter", sClassLoader, "setList", List.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var list = (List) param.args[0]; - list.removeIf(o -> { - final var type = (String) XposedHelpers.callMethod(o, "a"); - return "sideway_card".equals(type); - }); - } - }); - } catch (final XposedHelpers.ClassNotFoundError ignored) { - } - // 首页任务中心:R.id.task TbImageView -// XposedHelpers.findAndHookMethod("com.baidu.tieba.homepage.framework.indicator.NestedScrollHeader", sClassLoader, "onAttachedToWindow", new XC_MethodHook() { -// @Override -// protected void beforeHookedMethod(MethodHookParam param) throws Throwable { -// ReflectUtils.walkObjectFields(param.thisObject, ImageView.class, objField -> { -// ImageView iv = (ImageView) objField; -// iv.setVisibility(View.GONE); -// return false; -// }); -// } -// }); - // 首页大家都在搜 - XposedHelpers.findAndHookMethod("com.baidu.tieba.enterForum.view.ForumHeaderView", sClassLoader, "setSearchHint", String.class, XC_MethodReplacement.returnConstant(null)); - // 进吧大家都在搜 -// XposedHelpers.findAndHookMethod("com.baidu.tieba.homepage.framework.indicator.NestedScrollHeader", sClassLoader, "setSearchHint", String.class, XC_MethodReplacement.returnConstant(null)); + // 你可能感兴趣的人 + XposedHelpers.findAndHookMethod("com.baidu.tieba.feed.list.TemplateAdapter", sClassLoader, "setList", List.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var list = (List) param.args[0]; + list.removeIf(o -> { + final var md = ReflectUtils.findFirstMethodByExactReturnType(o.getClass(), String.class); + final var type = XposedHelpers.callMethod(o, md.getName()); + return "sideway_card".equals(type); + }); + } + }); // 一键签到广告 XposedHelpers.findAndHookMethod("com.baidu.tieba.signall.SignAllForumAdvertActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override From 3e435a99c5f793f37d52de4fd336b2aef4020137 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 3 Apr 2024 00:07:25 -0700 Subject: [PATCH 110/158] fix: SelectClipboard compatibility before 12.56 --- .../gm/tieba/tabswitch/hooker/add/SelectClipboard.java | 4 ++-- .../gm/tieba/tabswitch/util/ClassMatcherUtils.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java index 7fb38d9b..6f4a6dc0 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java @@ -36,14 +36,14 @@ public String key() { public List matchers() { return List.of( new SmaliMatcher("Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V", - MatcherProperties.create().useClassMatcher(ClassMatcherUtils.className("com.baidu.tieba.tbadkCore.data.PostData"))) + MatcherProperties.create().useClassMatcher(ClassMatcherUtils.invokeMethod("Lcom/baidu/tieba/tbadkCore/data/ThemeBubbleData;->(Ltbclient/ThemeBubble;)V"))) ); } public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { switch (matcher) { - case "PostData/Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V": + case "Lcom/baidu/tieba/tbadkCore/data/ThemeBubbleData;->(Ltbclient/ThemeBubble;)V/Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V": XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java index 6a4f3064..1a2d060c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java @@ -1,6 +1,8 @@ package gm.tieba.tabswitch.util; import org.luckypray.dexkit.query.matchers.ClassMatcher; +import org.luckypray.dexkit.query.matchers.MethodMatcher; +import org.luckypray.dexkit.query.matchers.MethodsMatcher; public class ClassMatcherUtils { private final ClassMatcher matcher; @@ -26,6 +28,14 @@ public static ClassMatcherUtils className(String className) { return new ClassMatcherUtils(classMatcher, simpleClassName); } + public static ClassMatcherUtils invokeMethod(String smali) { + MethodMatcher invokeMatcher = MethodMatcher.create().addInvoke( + MethodMatcher.create().descriptor(smali) + ); + ClassMatcher classMatcher = ClassMatcher.create().methods(MethodsMatcher.create().add(invokeMatcher)); + return new ClassMatcherUtils(classMatcher, smali); + } + public ClassMatcher getMatcher() { return this.matcher; } From eda7e563b50fb8bf203fef3d08efbd37be57329c Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 3 Apr 2024 20:40:42 -0700 Subject: [PATCH 111/158] fix: removing top_level_navi causes various visual issues --- .../tieba/tabswitch/hooker/TSPreference.java | 2 +- .../tabswitch/hooker/eliminate/Purge.java | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index f8910465..94539eb3 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -189,7 +189,7 @@ private LinearLayout createRootPreference(final Activity activity) { } preferenceLayout.addView(new SwitchButtonHolder(activity, "净化进吧", "purge_enter", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "净化置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "默认折叠置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "只推荐已关注的吧", "follow_filter", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "屏蔽首页视频贴", "purge_video", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤首页推荐", "personalized_filter", SwitchButtonHolder.TYPE_DIALOG)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 78cff176..639be42e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -51,7 +51,7 @@ public List matchers() { new StringMatcher("准备展示精灵动画提示控件"), new StringMatcher("TbChannelJsInterfaceNew"), new StringMatcher("bottom_bubble_config"), - new StringMatcher("top_level_navi"), +// new StringMatcher("top_level_navi"), new StringMatcher("index_tab_info"), new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V"), @@ -100,17 +100,17 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } break; - case "top_level_navi": // 首页活动背景 - if (method.equals("invoke")) { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); - syncData.put("top_level_navi", null); - } - }); - } - break; +// case "top_level_navi": // 首页活动背景 +// if (method.equals("invoke")) { +// XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { +// @Override +// protected void beforeHookedMethod(MethodHookParam param) throws Throwable { +// JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); +// syncData.put("top_level_navi", null); +// } +// }); +// } +// break; case "index_tab_info": // 首页活动Tab (202), 直播Tab (6) if (method.equals("invoke")) { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { From 7e44becb9b60c5be8f034699f811f4eba3a70a81 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 6 Apr 2024 02:29:21 -0700 Subject: [PATCH 112/158] fix: commit all shared pref changes before restarting --- .../gm/tieba/tabswitch/dao/Preferences.java | 32 +++---------------- .../tieba/tabswitch/hooker/TSPreference.java | 5 ++- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java index 82175aca..5e6a124d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java @@ -14,12 +14,10 @@ public class Preferences { private static SharedPreferences sTsPreferences; private static SharedPreferences sTsConfig; - private static SharedPreferences sTsNotes; public static void init(final Context context) { sTsPreferences = context.getSharedPreferences("TS_preferences", Context.MODE_PRIVATE); sTsConfig = context.getSharedPreferences("TS_config", Context.MODE_PRIVATE); - sTsNotes = context.getSharedPreferences("TS_notes", Context.MODE_PRIVATE); } // Preferences @@ -81,13 +79,7 @@ public static boolean getIsEULAAccepted() { public static void putAutoSignEnabled() { final SharedPreferences.Editor editor = sTsConfig.edit(); editor.putBoolean("auto_sign", true); - editor.commit(); - } - - public static void putAutoSignDisabled() { - final SharedPreferences.Editor editor = sTsConfig.edit(); - editor.putBoolean("auto_sign", false); - editor.commit(); + editor.apply(); } public static boolean getIsAutoSignEnabled() { @@ -101,13 +93,6 @@ public static void putPurgeEnabled() { editor.commit(); } - @SuppressLint("ApplySharedPref") - public static void putPurgeDisabled() { - final SharedPreferences.Editor editor = sTsConfig.edit(); - editor.putBoolean("ze", false); - editor.commit(); - } - public static boolean getIsPurgeEnabled() { return sTsConfig.getBoolean("ze", false); } @@ -143,16 +128,9 @@ public static boolean getIsSigned() { return Calendar.getInstance().get(Calendar.DAY_OF_YEAR) == sTsConfig.getInt("sign_date", 0); } - // Notes - public static Map getNotes() { - return sTsNotes.getAll(); - } - - public static String getNote(final String name) { - return sTsNotes.getString(name, null); - } - - public static SharedPreferences.Editor getTsNotesEditor() { - return sTsNotes.edit(); + @SuppressLint("ApplySharedPref") + public static void commit() { + sTsConfig.edit().commit(); + sTsPreferences.edit().commit(); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 94539eb3..21b96614 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -136,7 +136,10 @@ private void proxyPage(final Activity activity, final NavigationBar navigationBa final LinearLayout preferenceLayout) throws Throwable { navigationBar.setTitleText(title); navigationBar.setCenterTextTitle(""); - navigationBar.addTextButton("重启", v -> DisplayUtils.restart(activity)); + navigationBar.addTextButton("重启", v -> { + Preferences.commit(); + DisplayUtils.restart(activity); + }); final var contentView = (ViewGroup) activity.findViewById(android.R.id.content); final var parent = (LinearLayout) contentView.getChildAt(0); final var mainScroll = (ScrollView) parent.getChildAt(1); From 2648403cf124e8d4afdc58f91fd08321313b41b0 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 6 Apr 2024 02:29:49 -0700 Subject: [PATCH 113/158] fix: frs page filter not working when loading more pages --- app/build.gradle | 2 +- .../hooker/eliminate/FrsPageFilter.java | 112 ++++++++---------- .../tabswitch/hooker/eliminate/Purge.java | 65 +++++----- 3 files changed, 88 insertions(+), 91 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8f4d69e1..5008f981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.7' + versionName '2.9.7.1' buildConfigField "String", "TARGET_VERSION", "\"12.58.1.0\"" buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java index 80a9695f..9e364abc 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java @@ -19,81 +19,67 @@ public String key() { @Override public void hook() throws Throwable { - // thread_list is deprecated -// XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { -// @Override -// protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { -// final var threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); -// if (threadList == null) return; -// final var pattern = getPattern(); -// threadList.removeIf(o -> { -// if (pattern.matcher(Parser.parsePbContent(o, "first_post_content")).find()) { -// return true; -// } -// -// final var strings = new String[]{(String) XposedHelpers.getObjectField(o, "title"), -// (String) XposedHelpers.getObjectField(o, "fname")}; -// if (Arrays.stream(strings).anyMatch(s -> pattern.matcher(s).find())) { -// return true; -// } -// -// final var author = XposedHelpers.getObjectField(o, "author"); -// final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), -// (String) XposedHelpers.getObjectField(author, "name_show")}; -// return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); -// }); -// } -// }); XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - List feedList = (List) XposedHelpers.getObjectField(param.thisObject, "feed_list"); - if (feedList == null) return; - final var pattern = getPattern(); - feedList.removeIf( - o -> { - Object currFeed = XposedHelpers.getObjectField(o, "feed"); - if (currFeed != null) { - List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); - for (var feedKV : businessInfo) { - String currKey = XposedHelpers.getObjectField(feedKV, "key").toString(); - if (currKey.equals("title") || currKey.equals("abstract")) { - String str = XposedHelpers.getObjectField(feedKV, "value").toString(); - if (pattern.matcher(str).find()) { - return true; - } - } + filterPageData(param.thisObject); + } + }); + + XposedHelpers.findAndHookMethod("tbclient.ThreadList.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + filterPageData(param.thisObject); + } + }); + } + + private void filterPageData(Object pageData) { + List feedList = (List) XposedHelpers.getObjectField(pageData, "feed_list"); + if (feedList == null) return; + final var pattern = getPattern(); + feedList.removeIf( + o -> { + Object currFeed = XposedHelpers.getObjectField(o, "feed"); + if (currFeed != null) { + List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); + for (var feedKV : businessInfo) { + String currKey = XposedHelpers.getObjectField(feedKV, "key").toString(); + if (currKey.equals("title") || currKey.equals("abstract")) { + String str = XposedHelpers.getObjectField(feedKV, "value").toString(); + if (pattern.matcher(str).find()) { + return true; } + } + } - List components = (List) XposedHelpers.getObjectField(currFeed, "components"); - if (components != null ){ - for (var component: components) { - if (XposedHelpers.getObjectField(component, "component").toString().equals("feed_head")) { - Object feedHead = XposedHelpers.getObjectField(component, "feed_head"); - List mainData = (List) XposedHelpers.getObjectField(feedHead, "main_data"); - if (mainData != null) { - for (var feedHeadSymbol: mainData) { - Object feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text"); - if (feedHeadText != null) { - String username = (String) XposedHelpers.getObjectField(feedHeadText, "text"); - if (username != null) { - if (pattern.matcher(username).find()) { - return true; - } - break; - } + List components = (List) XposedHelpers.getObjectField(currFeed, "components"); + if (components != null ){ + for (var component: components) { + if (XposedHelpers.getObjectField(component, "component").toString().equals("feed_head")) { + Object feedHead = XposedHelpers.getObjectField(component, "feed_head"); + List mainData = (List) XposedHelpers.getObjectField(feedHead, "main_data"); + if (mainData != null) { + for (var feedHeadSymbol: mainData) { + Object feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text"); + if (feedHeadText != null) { + String username = (String) XposedHelpers.getObjectField(feedHeadText, "text"); + if (username != null) { + if (pattern.matcher(username).find()) { + return true; } + break; } } - break; } } + break; } } - return false; } - ); - } - }); + } + return false; + } + ); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 639be42e..af6bade2 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -346,36 +346,17 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } }); } - // 吧页面头条贴(41), 直播贴(69 / is_live_card) + // 吧页面 XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - List feedList = (List) XposedHelpers.getObjectField(param.thisObject, "feed_list"); - if (feedList != null) { - feedList.removeIf( - o -> { - Object currFeed = XposedHelpers.getObjectField(o, "feed"); - if (currFeed != null) { - List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); - for (var feedKV : businessInfo) { - String currentKey = XposedHelpers.getObjectField(feedKV, "key").toString(); - if (currentKey.equals("thread_type")) { - var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); - if (currValue.equals("41") || currValue.equals("69")) { - return true; - } - } else if (currentKey.equals("is_live_card")) { - var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); - if (currValue.equals("1")) { - return true; - } - } - } - } - return false; - } - ); - } + purgePageData(param.thisObject); + } + }); + XposedHelpers.findAndHookMethod("tbclient.ThreadList.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + purgePageData(param.thisObject); } }); // 聊天-AI角色 @@ -407,4 +388,34 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } }); } + + // 吧页面头条贴(41), 直播贴(69 / is_live_card) + private void purgePageData(Object pageData) { + List feedList = (List) XposedHelpers.getObjectField(pageData, "feed_list"); + if (feedList != null) { + feedList.removeIf( + o -> { + Object currFeed = XposedHelpers.getObjectField(o, "feed"); + if (currFeed != null) { + List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); + for (var feedKV : businessInfo) { + String currentKey = XposedHelpers.getObjectField(feedKV, "key").toString(); + if (currentKey.equals("thread_type")) { + var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); + if (currValue.equals("41") || currValue.equals("69")) { + return true; + } + } else if (currentKey.equals("is_live_card")) { + var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); + if (currValue.equals("1")) { + return true; + } + } + } + } + return false; + } + ); + } + } } From abd50409653a493f6aa5d431e6d7a4eb3bdf0f88 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 7 Apr 2024 15:07:26 -0700 Subject: [PATCH 114/158] feat: migrate TbDialog to native --- .../main/java/gm/tieba/tabswitch/Constants.kt | 4 +- .../java/gm/tieba/tabswitch/XposedInit.java | 10 +- .../tieba/tabswitch/hooker/TSPreference.java | 59 +++---- .../tabswitch/hooker/TSPreferenceHelper.java | 80 ++++++--- .../tabswitch/hooker/add/HistoryCache.java | 71 ++++++-- .../tabswitch/hooker/add/SelectClipboard.java | 7 +- .../hooker/eliminate/RegexFilter.java | 2 +- .../gm/tieba/tabswitch/util/DisplayUtils.java | 9 + .../java/gm/tieba/tabswitch/util/Parser.java | 3 +- .../gm/tieba/tabswitch/widget/TbDialog.java | 167 ------------------ 10 files changed, 157 insertions(+), 255 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/widget/TbDialog.java diff --git a/app/src/main/java/gm/tieba/tabswitch/Constants.kt b/app/src/main/java/gm/tieba/tabswitch/Constants.kt index 0eb31442..2d91a554 100644 --- a/app/src/main/java/gm/tieba/tabswitch/Constants.kt +++ b/app/src/main/java/gm/tieba/tabswitch/Constants.kt @@ -8,8 +8,8 @@ object Constants { " ②本模块不会主动发起网络请求,不会上传任何用户数据,隐私泄露或者账号异常行为与本模块无关。\n" + " ③本模块主要用于学习和交流技术,任何人不得将本模块用于商业或非法用途。", "dev_tip" to "提示:您当前安装的是非正式版本,可能含有较多错误,如果您希望得到更稳定的使用体验,建议您安装正式版本。", - "exception_rules_incomplete" to "规则异常,请点击确定并重启应用以重新执行反混淆。若执行反混淆后仍出现此对话框则应尝试更新模块或向作者反馈。", - "version_mismatch" to "规则异常,当前贴吧版本不受支持。请使用受支持的贴吧版本(%s-%s)或尝试更新模块。", + "exception_rules_incomplete" to "请点击确定并重启应用以重新执行反混淆。若执行反混淆后仍出现此对话框则应尝试更新模块或向作者反馈。", + "version_mismatch" to "当前贴吧版本不受支持。请使用受支持的贴吧版本(%s-%s)或尝试更新模块。", "exception_init_preference" to "初始化设置失败,请尝试更换贴吧版本。", "regex_hint" to "请输入正则表达式,如.*", ) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 76d1ec4f..967f7e8c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -10,7 +10,6 @@ import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; -import android.view.WindowManager; import java.util.ArrayList; import java.util.Collection; @@ -60,7 +59,6 @@ import gm.tieba.tabswitch.hooker.extra.Hide; import gm.tieba.tabswitch.hooker.extra.StackTrace; import gm.tieba.tabswitch.util.DisplayUtils; -import gm.tieba.tabswitch.widget.TbDialog; import gm.tieba.tabswitch.widget.TbToast; public class XposedInit extends XposedContext implements IXposedHookZygoteInit, IXposedHookLoadPackage { @@ -160,7 +158,6 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new SelectClipboard() ); final var matchers = new ArrayList(hookers.size() + 2); - matchers.add(new TbDialog()); matchers.add(new TbToast()); for (final var hooker : hookers) { if (hooker instanceof Obfuscated) { @@ -241,7 +238,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedBridge.log(message); AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) - .setTitle("警告").setMessage(message).setCancelable(false) + .setTitle("规则异常").setMessage(message).setCancelable(false) .setNeutralButton("更新模块", (dialogInterface, i) -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); @@ -254,10 +251,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable DeobfuscationHelper.saveAndRestart(activity, "unknown", null); }).create(); alert.show(); - WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); - layoutParams.copyFrom(alert.getWindow().getAttributes()); - layoutParams.width = DisplayUtils.getDisplayWidth(getContext()); - alert.getWindow().setAttributes(layoutParams); + DisplayUtils.fixAlertDialogWidth(alert); } }); return; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 21b96614..dd0d4923 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull; -import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -40,7 +39,6 @@ import gm.tieba.tabswitch.hooker.extra.TraceChecker; import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.widget.NavigationBar; -import gm.tieba.tabswitch.widget.TbDialog; import gm.tieba.tabswitch.widget.TbToast; public class TSPreference extends XposedContext implements IHooker, Obfuscated { @@ -115,15 +113,18 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } catch (final Throwable tr) { final var messages = new ArrayList(); messages.add(Constants.getStrings().get("exception_init_preference")); - messages.add(String.format(Locale.CHINA, "tbversion: %s, module version: %d", + messages.add(String.format(Locale.CHINA, "贴吧版本:%s, 模块版本:%d", DeobfuscationHelper.getTbVersion(getContext()), BuildConfig.VERSION_CODE)); messages.add(Log.getStackTraceString(tr)); final var message = TextUtils.join("\n", messages); XposedBridge.log(message); - new AlertDialog.Builder(activity, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT) - .setTitle("警告").setMessage(message).setCancelable(false) + AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? + android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) + .setTitle("规则异常").setMessage(message).setCancelable(false) .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> activity.finish()) - .show(); + .create(); + alert.show(); + DisplayUtils.fixAlertDialogWidth(alert); } } }); @@ -154,21 +155,17 @@ private void startRootPreferenceActivity(final Activity activity) { if (BuildConfig.VERSION_NAME.contains("alpha") || BuildConfig.VERSION_NAME.contains("beta")) { stringBuilder.append("\n\n").append(Constants.getStrings().get("dev_tip")); } - final TbDialog bdAlert = new TbDialog(activity, "使用协议", stringBuilder.toString(), true, null); - bdAlert.setOnNoButtonClickListener(v -> { - final Intent intent = new Intent(); - intent.setAction(Intent.ACTION_DELETE); - intent.setData(Uri.parse("package:" + (sPath.contains(BuildConfig.APPLICATION_ID) - && new File(sPath).exists() ? - BuildConfig.APPLICATION_ID : activity.getPackageName()))); - activity.startActivity(intent); - }); - bdAlert.setOnYesButtonClickListener(v -> { - Preferences.putEULAAccepted(); - startRootPreferenceActivity(activity); - bdAlert.dismiss(); - }); - bdAlert.show(); + AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? + android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) + .setTitle("使用协议").setMessage(stringBuilder.toString()) + .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> { + Preferences.putEULAAccepted(); + startRootPreferenceActivity(activity); + }) + .create(); + alert.show(); + DisplayUtils.fixAlertDialogWidth(alert); } else { final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); intent.putExtra("proxyPage", MAIN); @@ -209,15 +206,17 @@ private LinearLayout createRootPreference(final Activity activity) { final SwitchButtonHolder autoSign = new SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH); autoSign.setOnButtonClickListener(v -> { if (!Preferences.getIsAutoSignEnabled()) { - final TbDialog bdalert = new TbDialog(activity, "提示", - "这是一个需要网络请求并且有封号风险的功能,您需要自行承担使用此功能的风险,请谨慎使用!", true, null); - bdalert.setOnNoButtonClickListener(v2 -> bdalert.dismiss()); - bdalert.setOnYesButtonClickListener(v2 -> { - Preferences.putAutoSignEnabled(); - autoSign.bdSwitch.turnOn(); - bdalert.dismiss(); - }); - bdalert.show(); + AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? + android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) + .setTitle("提示").setMessage("这是一个需要网络请求并且有封号风险的功能,您需要自行承担使用此功能的风险,请谨慎使用!") + .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> { + Preferences.putAutoSignEnabled(); + autoSign.bdSwitch.turnOn(); + }) + .create(); + alert.show(); + DisplayUtils.fixAlertDialogWidth(alert); } else { autoSign.bdSwitch.changeState(); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java index 3f0f5f48..a45aaaa5 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java @@ -2,16 +2,20 @@ import android.annotation.SuppressLint; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; import android.graphics.Color; +import android.text.InputType; import android.text.TextUtils; import android.util.Log; +import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.inputmethod.EditorInfo; +import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; @@ -32,10 +36,9 @@ import gm.tieba.tabswitch.Constants; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.Preferences; +import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.util.ReflectUtils; import gm.tieba.tabswitch.widget.Switch; -import gm.tieba.tabswitch.widget.TbDialog; -import gm.tieba.tabswitch.widget.TbEditText; import gm.tieba.tabswitch.widget.TbToast; public class TSPreferenceHelper extends XposedContext { @@ -190,7 +193,7 @@ static class SwitchButtonHolder { else bdSwitch.turnOff(); break; case TYPE_DIALOG: - switchButton = createButton(text, null, false, v -> showRegexDialog(activity)); + switchButton = createButton(text, null, false, v -> showRegexDialog(activity, text)); bdSwitchView.setOnTouchListener((v, event) -> false); if (Preferences.getString(key) != null) bdSwitch.turnOn(); else bdSwitch.turnOff(); @@ -207,34 +210,65 @@ void setOnButtonClickListener(final View.OnClickListener l) { }); } - private void showRegexDialog(final Activity activity) { - final EditText editText = new TbEditText(getContext()); + private void showRegexDialog(final Activity activity, final String title) { + Activity currentActivity = ReflectUtils.getCurrentActivity(); + boolean isLightMode = DisplayUtils.isLightMode(getContext()); + + final EditText editText = new EditText(currentActivity); editText.setHint(Constants.getStrings().get("regex_hint")); editText.setText(Preferences.getString(mKey)); - final TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); - bdAlert.setOnNoButtonClickListener(v -> bdAlert.dismiss()); - bdAlert.setOnYesButtonClickListener(v -> { - try { - if (TextUtils.isEmpty(editText.getText())) { - Preferences.remove(mKey); - bdSwitch.turnOff(); - } else { - Pattern.compile(editText.getText().toString()); - Preferences.putString(mKey, editText.getText().toString()); - bdSwitch.turnOn(); + if (!isLightMode) { + editText.setTextColor(Color.WHITE); + editText.setHintTextColor(Color.GRAY); + } + editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); + + final LinearLayout linearLayout = new LinearLayout(currentActivity); + linearLayout.setGravity(Gravity.CENTER_HORIZONTAL); + + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT + ); + layoutParams.leftMargin = DisplayUtils.dipToPx(currentActivity, 20F); + layoutParams.rightMargin = DisplayUtils.dipToPx(currentActivity, 20F); + editText.setLayoutParams(layoutParams); + + linearLayout.addView(editText); + + AlertDialog alert = new AlertDialog.Builder(currentActivity, isLightMode ? + android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) + .setTitle(title).setView(linearLayout) + .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setPositiveButton(activity.getString(android.R.string.ok), null).create(); + + alert.setOnShowListener(dialogInterface -> { + Button button = alert.getButton(AlertDialog.BUTTON_POSITIVE); + button.setOnClickListener(view -> { + try { + if (TextUtils.isEmpty(editText.getText())) { + Preferences.remove(mKey); + bdSwitch.turnOff(); + } else { + Pattern.compile(editText.getText().toString()); + Preferences.putString(mKey, editText.getText().toString()); + bdSwitch.turnOn(); + } + alert.dismiss(); + } catch (final PatternSyntaxException e) { + TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); } - bdAlert.dismiss(); - } catch (final PatternSyntaxException e) { - TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); - } + }); }); - bdAlert.show(); - bdAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + + alert.show(); + DisplayUtils.fixAlertDialogWidth(alert); + + alert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); editText.setImeOptions(EditorInfo.IME_ACTION_DONE); editText.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_DONE || event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - bdAlert.findYesButton().performClick(); + alert.getButton(AlertDialog.BUTTON_POSITIVE).performClick(); return true; } return false; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java index adff20fc..9cb525cd 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java @@ -1,13 +1,19 @@ package gm.tieba.tabswitch.hooker.add; import android.app.Activity; +import android.app.AlertDialog; +import android.graphics.Color; import android.os.Bundle; import android.text.Editable; +import android.text.InputType; import android.text.TextWatcher; +import android.view.Gravity; import android.view.KeyEvent; import android.view.WindowManager; import android.view.inputmethod.EditorInfo; +import android.widget.Button; import android.widget.EditText; +import android.widget.LinearLayout; import androidx.annotation.NonNull; @@ -21,10 +27,9 @@ import gm.tieba.tabswitch.Constants; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.hooker.IHooker; +import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.util.ReflectUtils; import gm.tieba.tabswitch.widget.NavigationBar; -import gm.tieba.tabswitch.widget.TbDialog; -import gm.tieba.tabswitch.widget.TbEditText; import gm.tieba.tabswitch.widget.TbToast; public class HistoryCache extends XposedContext implements IHooker { @@ -56,7 +61,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable final var list = (List) param.args[0]; if (list == null) return; - final var pattern = Pattern.compile(mRegex); + final var pattern = Pattern.compile(mRegex, Pattern.CASE_INSENSITIVE); list.removeIf(o -> { String[] strings; try { @@ -78,9 +83,18 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } private void showRegexDialog(final Activity activity) { - final EditText editText = new TbEditText(activity); + Activity currentActivity = ReflectUtils.getCurrentActivity(); + boolean isLightMode = DisplayUtils.isLightMode(getContext()); + + final EditText editText = new EditText(currentActivity); editText.setHint(Constants.getStrings().get("regex_hint")); editText.setText(mRegex); + if (!isLightMode) { + editText.setTextColor(Color.WHITE); + editText.setHintTextColor(Color.GRAY); + } + editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); + editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { @@ -95,25 +109,48 @@ public void afterTextChanged(final Editable s) { mRegex = s.toString(); } }); - final TbDialog bdAlert = new TbDialog(activity, null, null, true, editText); - bdAlert.setOnNoButtonClickListener(v -> bdAlert.dismiss()); - bdAlert.setOnYesButtonClickListener(v -> { - try { - Pattern.compile(editText.getText().toString()); - bdAlert.dismiss(); - activity.recreate(); - } catch (final PatternSyntaxException e) { - TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); - } + + final LinearLayout linearLayout = new LinearLayout(currentActivity); + linearLayout.setGravity(Gravity.CENTER_HORIZONTAL); + + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT + ); + layoutParams.leftMargin = DisplayUtils.dipToPx(currentActivity, 20F); + layoutParams.rightMargin = DisplayUtils.dipToPx(currentActivity, 20F); + editText.setLayoutParams(layoutParams); + + linearLayout.addView(editText); + + AlertDialog alert = new AlertDialog.Builder(currentActivity, isLightMode ? + android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) + .setTitle("搜索").setView(linearLayout) + .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setPositiveButton(activity.getString(android.R.string.ok), null).create(); + + alert.setOnShowListener(dialogInterface -> { + Button button = alert.getButton(AlertDialog.BUTTON_POSITIVE); + button.setOnClickListener(view -> { + try { + Pattern.compile(editText.getText().toString()); + alert.dismiss(); + activity.recreate(); + } catch (final PatternSyntaxException e) { + TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); + } + }); }); - bdAlert.show(); - bdAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + + alert.show(); + DisplayUtils.fixAlertDialogWidth(alert); + + alert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); editText.setSingleLine(); editText.setImeOptions(EditorInfo.IME_ACTION_SEARCH); editText.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_SEARCH || event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - bdAlert.findYesButton().performClick(); + alert.getButton(AlertDialog.BUTTON_POSITIVE).performClick(); return true; } return false; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java index 6f4a6dc0..df150ca9 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java @@ -5,7 +5,6 @@ import android.content.ClipboardManager; import android.content.Context; import android.view.View; -import android.view.WindowManager; import android.widget.TextView; import androidx.annotation.NonNull; @@ -65,11 +64,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { ((TextView) messageView).setTextIsSelectable(true); } - WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); - layoutParams.copyFrom(alert.getWindow().getAttributes()); - layoutParams.width = DisplayUtils.getDisplayWidth(getContext()); - alert.getWindow().setAttributes(layoutParams); - + DisplayUtils.fixAlertDialogWidth(alert); return null; } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.java index 45d4d191..15d328fc 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.java @@ -17,7 +17,7 @@ default Pattern getPattern() { final var _regex = Preferences.getString(key()); if (!_regex.equals(regex[0])) { regex[0] = _regex; - pattern[0] = Pattern.compile(_regex); + pattern[0] = Pattern.compile(_regex, Pattern.CASE_INSENSITIVE); } return pattern[0]; } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java index 8b84025e..0abf5afa 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java @@ -1,9 +1,11 @@ package gm.tieba.tabswitch.util; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; +import android.view.WindowManager; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; @@ -65,4 +67,11 @@ public static int pxToDip(final Context context, final float pxValue) { public static int getDisplayWidth(final Context context) { return context.getResources().getDisplayMetrics().widthPixels; } + + public static void fixAlertDialogWidth(AlertDialog alert) { + WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); + layoutParams.copyFrom(alert.getWindow().getAttributes()); + layoutParams.width = DisplayUtils.getDisplayWidth(getContext()); + alert.getWindow().setAttributes(layoutParams); + } } diff --git a/app/src/main/java/gm/tieba/tabswitch/util/Parser.java b/app/src/main/java/gm/tieba/tabswitch/util/Parser.java index 0abad942..13f23034 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/Parser.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/Parser.java @@ -1,6 +1,7 @@ package gm.tieba.tabswitch.util; import java.util.List; +import java.util.Locale; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; @@ -12,6 +13,6 @@ public static String parsePbContent(final Object instance, final String fieldNam for (int i = 0; i < contents.size(); i++) { pbContent.append(XposedHelpers.getObjectField(contents.get(i), "text")); } - return pbContent.toString(); + return pbContent.toString().toLowerCase(Locale.CHINA); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/TbDialog.java b/app/src/main/java/gm/tieba/tabswitch/widget/TbDialog.java deleted file mode 100644 index bf52eba8..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/widget/TbDialog.java +++ /dev/null @@ -1,167 +0,0 @@ -package gm.tieba.tabswitch.widget; - -import android.app.Activity; -import android.view.View; -import android.view.Window; -import android.widget.TextView; - -import java.util.Arrays; -import java.util.List; -import java.util.function.Consumer; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class TbDialog extends XposedContext implements Obfuscated { - private Class mClass; - private Object mBdAlert; - private Object mPageContext; - private Object mDialog; - - @Override - public List matchers() { - return List.of(new StringMatcher("Dialog must be created by function create()!")); - } - - public TbDialog() { - } - - public TbDialog(final Activity activity, final String title, final String message, final boolean cancelable, final View contentView) { - XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.BaseFragment", sClassLoader, - "getPageContext", new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - mPageContext = param.getResult(); - } - }); - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - final var cls = XposedHelpers.findClass(clazz, sClassLoader); - if (cls.getDeclaredMethods().length < 20) { - return; - } - mClass = cls; - mBdAlert = XposedHelpers.newInstance(mClass, activity); - try { - XposedHelpers.setObjectField(mBdAlert, "mTitle", title); - XposedHelpers.setObjectField(mBdAlert, "mMessage", message); - XposedHelpers.setObjectField(mBdAlert, "mCancelable", cancelable); - XposedHelpers.setObjectField(mBdAlert, "mContentView", contentView); - } catch (final NoSuchFieldError e) { - XposedHelpers.setObjectField(mBdAlert, "f", title); - XposedHelpers.setObjectField(mBdAlert, "h", message); - XposedHelpers.setObjectField(mBdAlert, "C", cancelable); - XposedHelpers.setObjectField(mBdAlert, "g", contentView); - } - - initButtonStyle(param -> { - final int color = ReflectUtils.getColor("CAM_X0204"); - // R.id.bdDialog_divider_line - final var bdDialogDividerLine = (View) XposedHelpers.getObjectField(mBdAlert, "bdDialog_divider_line"); - if (bdDialogDividerLine != null) { - bdDialogDividerLine.setBackgroundColor(color); - } - // R.id.divider_yes_no_button - final var dividerWithButton = (View) XposedHelpers.getObjectField(mBdAlert, "dividerWithButton"); - if (dividerWithButton != null) { - dividerWithButton.setBackgroundColor(color); - } - }); - }); - } - - // called in create() - private void initButtonStyle(final Consumer consumer) { - XposedHelpers.findAndHookMethod(mClass, "initButtonStyle", new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - consumer.accept(param); - } - }); - } - - public void setOnNoButtonClickListener(final View.OnClickListener l) { - initButtonStyle(param -> { - final var cancel = getContext().getString(android.R.string.cancel); - try { - XposedHelpers.setObjectField(mBdAlert, "mNegativeButtonTip", cancel); - } catch (final NoSuchFieldError e) { - XposedHelpers.setObjectField(mBdAlert, "m", cancel); - } - // R.id.no - final var noButton = (TextView) XposedHelpers.getObjectField(mBdAlert, "noButton"); - if (noButton != null) { - noButton.setOnClickListener(l); - } - }); - } - - public void setOnYesButtonClickListener(final View.OnClickListener l) { - initButtonStyle(param -> { - final var ok = getContext().getString(android.R.string.ok); - try { - XposedHelpers.setObjectField(mBdAlert, "mPositiveButtonTip", ok); - } catch (final NoSuchFieldError e) { - XposedHelpers.setObjectField(mBdAlert, "l", ok); - } - final var yesButton = (TextView) findYesButton(); - if (yesButton != null) { - yesButton.setOnClickListener(l); - } - }); - } - - public TextView findYesButton() { - // R.id.yes - return (TextView) XposedHelpers.getObjectField(mBdAlert, "yesButton"); - } - - public void show() { - for (final var md : mClass.getDeclaredMethods()) { - final var parameterTypesString = Arrays.toString(md.getParameterTypes()); - if (parameterTypesString.startsWith("[interface") && - !parameterTypesString.contains("$")) { - ReflectUtils.callMethod(md, mBdAlert, mPageContext); // create() - } - } -// LinearLayout parent = mRootView.findViewById(ReflectUtils.getId("dialog_content")); -// if (parent.getChildAt(0) instanceof LinearLayout) { -// LinearLayout linearLayout = (LinearLayout) parent.getChildAt(0); -// for (int i = 0, childCount = linearLayout.getChildCount(); i < childCount; i++) { -// View view = linearLayout.getChildAt(i); -// if (view instanceof TextView) { -// ((TextView) view).setTextColor(ReflectUtils.getColor("CAM_X0105")); -// } -// } -// } - for (final var method : mClass.getDeclaredMethods()) { - if (method.getParameterTypes().length == 0 && mClass.equals(method.getReturnType())) { - ReflectUtils.callMethod(method, mBdAlert); // show() - break; - } - } - try { - mDialog = XposedHelpers.getObjectField(mBdAlert, "mDialog"); - } catch (final NoSuchFieldError e) { - mDialog = XposedHelpers.getObjectField(mBdAlert, "w"); - } - } - - public Window getWindow() { - if (mDialog == null) throw new IllegalStateException("you must call show before getWindow"); - else return (Window) XposedHelpers.callMethod(mDialog, "getWindow"); - } - - public void dismiss() { - try { - XposedHelpers.callMethod(mBdAlert, "dismiss"); - } catch (final NoSuchMethodError e) { - XposedHelpers.callMethod(mBdAlert, "k"); - } - } -} From 4ab9e54b9495e774a95c7b42479d3155a7334249 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 7 Apr 2024 19:09:13 -0700 Subject: [PATCH 115/158] feat: move user filter to separate switch --- app/build.gradle | 2 +- .../java/gm/tieba/tabswitch/XposedInit.java | 4 +- .../tieba/tabswitch/hooker/TSPreference.java | 3 +- .../tabswitch/hooker/add/HistoryCache.java | 6 +- .../hooker/eliminate/ContentFilter.java | 34 +---- .../hooker/eliminate/FrsPageFilter.java | 25 --- .../hooker/eliminate/PersonalizedFilter.java | 12 +- .../hooker/eliminate/UserFilter.java | 144 ++++++++++++++++++ .../java/gm/tieba/tabswitch/util/Parser.java | 3 +- .../gm/tieba/tabswitch/widget/TbEditText.java | 26 ---- 10 files changed, 160 insertions(+), 99 deletions(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.java delete mode 100644 app/src/main/java/gm/tieba/tabswitch/widget/TbEditText.java diff --git a/app/build.gradle b/app/build.gradle index 5008f981..402f0429 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.7.1' + versionName '2.9.8' buildConfigField "String", "TARGET_VERSION", "\"12.58.1.0\"" buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 967f7e8c..2903ea67 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -55,6 +55,7 @@ import gm.tieba.tabswitch.hooker.eliminate.PurgeVideo; import gm.tieba.tabswitch.hooker.eliminate.RedTip; import gm.tieba.tabswitch.hooker.eliminate.RemoveUpdate; +import gm.tieba.tabswitch.hooker.eliminate.UserFilter; import gm.tieba.tabswitch.hooker.extra.ForbidGesture; import gm.tieba.tabswitch.hooker.extra.Hide; import gm.tieba.tabswitch.hooker.extra.StackTrace; @@ -155,7 +156,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new MsgCenterTab(), new NotificationDetect(), new PurgeVideo(), - new SelectClipboard() + new SelectClipboard(), + new UserFilter() ); final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbToast()); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index dd0d4923..5ac716cd 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -193,8 +193,9 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "只推荐已关注的吧", "follow_filter", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "屏蔽首页视频贴", "purge_video", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤首页推荐", "personalized_filter", SwitchButtonHolder.TYPE_DIALOG)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤帖子回复", "content_filter", SwitchButtonHolder.TYPE_DIALOG)); preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤吧页面", "frs_page_filter", SwitchButtonHolder.TYPE_DIALOG)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤帖子回复", "content_filter", SwitchButtonHolder.TYPE_DIALOG)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤用户", "user_filter", SwitchButtonHolder.TYPE_DIALOG)); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "别出新意" : "增加功能")); preferenceLayout.addView(new SwitchButtonHolder(activity, "浏览历史增加搜索", "history_cache", SwitchButtonHolder.TYPE_SWITCH)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java index 9cb525cd..e8e2d946 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java @@ -2,6 +2,7 @@ import android.app.Activity; import android.app.AlertDialog; +import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; import android.text.Editable; @@ -122,10 +123,13 @@ public void afterTextChanged(final Editable s) { linearLayout.addView(editText); + String currRegex = mRegex; + AlertDialog alert = new AlertDialog.Builder(currentActivity, isLightMode ? android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) .setTitle("搜索").setView(linearLayout) - .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setOnCancelListener(dialog -> mRegex = currRegex) + .setNegativeButton(activity.getString(android.R.string.cancel), (dialogInterface, i) -> mRegex = currRegex) .setPositiveButton(activity.getString(android.R.string.ok), null).create(); alert.setOnShowListener(dialogInterface -> { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java index 09bd5879..cb270b7e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java @@ -2,11 +2,7 @@ import androidx.annotation.NonNull; -import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Set; -import java.util.regex.Pattern; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; @@ -15,7 +11,6 @@ import gm.tieba.tabswitch.util.Parser; public class ContentFilter extends XposedContext implements IHooker, RegexFilter { - private final Set mIds = new HashSet<>(); @NonNull @Override @@ -32,11 +27,9 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable final var postList = (List) XposedHelpers.getObjectField(param.thisObject, "post_list"); if (postList == null) return; final var pattern = getPattern(); - initIdList(param.thisObject, pattern); postList.removeIf(o -> ((Integer) XposedHelpers.getObjectField(o, "floor") != 1) - && (pattern.matcher(Parser.parsePbContent(o, "content")).find() - || mIds.contains(XposedHelpers.getObjectField(o, "author_id")))); + && (pattern.matcher(Parser.parsePbContent(o, "content")).find())); } }); // 楼中楼:[\u202e|\ud83c\udd10-\ud83c\udd89] @@ -46,8 +39,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable final var subPostList = (List) XposedHelpers.getObjectField(param.thisObject, "sub_post_list"); if (subPostList == null) return; final var pattern = getPattern(); - subPostList.removeIf(o -> pattern.matcher(Parser.parsePbContent(o, "content")).find() - || mIds.contains(XposedHelpers.getObjectField(o, "author_id"))); + subPostList.removeIf(o -> pattern.matcher(Parser.parsePbContent(o, "content")).find()); } }); // 楼层回复 @@ -57,28 +49,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable final var subpostList = (List) XposedHelpers.getObjectField(param.thisObject, "subpost_list"); if (subpostList == null) return; final var pattern = getPattern(); - subpostList.removeIf(o -> { - if (pattern.matcher(Parser.parsePbContent(o, "content")).find()) { - return true; - } - - final var author = XposedHelpers.getObjectField(o, "author"); - final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), - (String) XposedHelpers.getObjectField(author, "name_show")}; - return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); - }); + subpostList.removeIf(o -> pattern.matcher(Parser.parsePbContent(o, "content")).find()); } }); } - - private void initIdList(final Object thisObject, final Pattern pattern) { - final var userList = (List) XposedHelpers.getObjectField(thisObject, "user_list"); - for (final var user : userList) { - final var authors = new String[]{(String) XposedHelpers.getObjectField(user, "name"), - (String) XposedHelpers.getObjectField(user, "name_show")}; - if (Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find())) { - mIds.add(XposedHelpers.getObjectField(user, "id")); - } - } - } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java index 9e364abc..a816e363 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java @@ -52,31 +52,6 @@ private void filterPageData(Object pageData) { } } } - - List components = (List) XposedHelpers.getObjectField(currFeed, "components"); - if (components != null ){ - for (var component: components) { - if (XposedHelpers.getObjectField(component, "component").toString().equals("feed_head")) { - Object feedHead = XposedHelpers.getObjectField(component, "feed_head"); - List mainData = (List) XposedHelpers.getObjectField(feedHead, "main_data"); - if (mainData != null) { - for (var feedHeadSymbol: mainData) { - Object feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text"); - if (feedHeadText != null) { - String username = (String) XposedHelpers.getObjectField(feedHeadText, "text"); - if (username != null) { - if (pattern.matcher(username).find()) { - return true; - } - break; - } - } - } - } - break; - } - } - } } return false; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java index d42aad47..3f6d4f50 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java @@ -2,7 +2,6 @@ import androidx.annotation.NonNull; -import java.util.Arrays; import java.util.List; import de.robv.android.xposed.XC_MethodHook; @@ -32,16 +31,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable return true; } - final var strings = new String[]{(String) XposedHelpers.getObjectField(o, "title"), - (String) XposedHelpers.getObjectField(o, "fname")}; - if (Arrays.stream(strings).anyMatch(s -> pattern.matcher(s).find())) { - return true; - } - - final var author = XposedHelpers.getObjectField(o, "author"); - final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), - (String) XposedHelpers.getObjectField(author, "name_show")}; - return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); + return pattern.matcher((String) XposedHelpers.getObjectField(o, "title")).find(); }); } }); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.java new file mode 100644 index 00000000..b77ee616 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.java @@ -0,0 +1,144 @@ +package gm.tieba.tabswitch.hooker.eliminate; + +import androidx.annotation.NonNull; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.hooker.IHooker; + +public class UserFilter extends XposedContext implements IHooker, RegexFilter { + private final Set mIds = new HashSet<>(); + + @NonNull + @Override + public String key() { + return "user_filter"; + } + + @Override + public void hook() throws Throwable { + XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); + if (threadList == null) return; + final var pattern = getPattern(); + threadList.removeIf(o -> { + final var author = XposedHelpers.getObjectField(o, "author"); + final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), + (String) XposedHelpers.getObjectField(author, "name_show")}; + return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); + }); + } + }); + + XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + filterPageData(param.thisObject); + } + }); + + XposedHelpers.findAndHookMethod("tbclient.ThreadList.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + filterPageData(param.thisObject); + } + }); + + // 楼层 + XposedHelpers.findAndHookMethod("tbclient.PbPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var postList = (List) XposedHelpers.getObjectField(param.thisObject, "post_list"); + if (postList == null) return; + final var pattern = getPattern(); + initIdList(param.thisObject, pattern); + + postList.removeIf(o -> ((Integer) XposedHelpers.getObjectField(o, "floor") != 1) + && mIds.contains(XposedHelpers.getObjectField(o, "author_id"))); + } + }); + // 楼中楼:[\u202e|\ud83c\udd10-\ud83c\udd89] + XposedHelpers.findAndHookMethod("tbclient.SubPost$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var subPostList = (List) XposedHelpers.getObjectField(param.thisObject, "sub_post_list"); + if (subPostList == null) return; + subPostList.removeIf(o -> mIds.contains(XposedHelpers.getObjectField(o, "author_id"))); + } + }); + // 楼层回复 + XposedHelpers.findAndHookMethod("tbclient.PbFloor.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final var subpostList = (List) XposedHelpers.getObjectField(param.thisObject, "subpost_list"); + if (subpostList == null) return; + final var pattern = getPattern(); + subpostList.removeIf(o -> { + final var author = XposedHelpers.getObjectField(o, "author"); + final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), + (String) XposedHelpers.getObjectField(author, "name_show")}; + return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); + }); + } + }); + } + + private void filterPageData(Object pageData) { + List feedList = (List) XposedHelpers.getObjectField(pageData, "feed_list"); + if (feedList == null) return; + final var pattern = getPattern(); + feedList.removeIf( + o -> { + Object currFeed = XposedHelpers.getObjectField(o, "feed"); + if (currFeed != null) { + List components = (List) XposedHelpers.getObjectField(currFeed, "components"); + if (components != null ){ + for (var component: components) { + if (XposedHelpers.getObjectField(component, "component").toString().equals("feed_head")) { + Object feedHead = XposedHelpers.getObjectField(component, "feed_head"); + List mainData = (List) XposedHelpers.getObjectField(feedHead, "main_data"); + if (mainData != null) { + for (var feedHeadSymbol: mainData) { + Object feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text"); + if (feedHeadText != null) { + String username = (String) XposedHelpers.getObjectField(feedHeadText, "text"); + if (username != null) { + if (pattern.matcher(username).find()) { + return true; + } + break; + } + } + } + } + break; + } + } + } + } + return false; + } + ); + } + + private void initIdList(final Object thisObject, final Pattern pattern) { + final var userList = (List) XposedHelpers.getObjectField(thisObject, "user_list"); + for (final var user : userList) { + final var authors = new String[]{(String) XposedHelpers.getObjectField(user, "name"), + (String) XposedHelpers.getObjectField(user, "name_show")}; + if (Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find())) { + mIds.add(XposedHelpers.getObjectField(user, "id")); + } + } + } + +} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/Parser.java b/app/src/main/java/gm/tieba/tabswitch/util/Parser.java index 13f23034..0abad942 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/Parser.java +++ b/app/src/main/java/gm/tieba/tabswitch/util/Parser.java @@ -1,7 +1,6 @@ package gm.tieba.tabswitch.util; import java.util.List; -import java.util.Locale; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; @@ -13,6 +12,6 @@ public static String parsePbContent(final Object instance, final String fieldNam for (int i = 0; i < contents.size(); i++) { pbContent.append(XposedHelpers.getObjectField(contents.get(i), "text")); } - return pbContent.toString().toLowerCase(Locale.CHINA); + return pbContent.toString(); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/TbEditText.java b/app/src/main/java/gm/tieba/tabswitch/widget/TbEditText.java deleted file mode 100644 index 88723749..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/widget/TbEditText.java +++ /dev/null @@ -1,26 +0,0 @@ -package gm.tieba.tabswitch.widget; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.LinearLayout; - -import gm.tieba.tabswitch.util.ReflectUtils; - -@SuppressLint("AppCompatCustomView") -public class TbEditText extends EditText { - public TbEditText(final Context context) { - super(context); - setFocusable(true); - setFocusableInTouchMode(true); - final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - setLayoutParams(layoutParams); - setTextColor(ReflectUtils.getColor("CAM_X0105")); - setHintTextColor(ReflectUtils.getColor("CAM_X0108")); - setTextSize(ReflectUtils.getDimenDip("fontsize36")); - setBackgroundResource(ReflectUtils.getDrawableId("blue_rectangle_input_bg")); - setMinWidth((int) ReflectUtils.getDimen("ds140")); - } -} From bbcdf8fb947c3db1f896bd6ffa70b508f971558c Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 8 Apr 2024 20:26:54 -0700 Subject: [PATCH 116/158] fix: unify toast --- .../java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java index a45aaaa5..1c971016 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java @@ -20,7 +20,6 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import android.widget.Toast; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; @@ -175,7 +174,7 @@ static class SwitchButtonHolder { switchButton = createButton(text, "此功能初始化失败", false, v -> { final Throwable tr = sExceptions.get(key); XposedBridge.log(tr); - Toast.makeText(activity, Log.getStackTraceString(tr), Toast.LENGTH_SHORT).show(); + TbToast.showTbToast(Log.getStackTraceString(tr), TbToast.LENGTH_SHORT); }); return; } From 371a58bd40c5d0fed4025297b048770d15be4511 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 8 Apr 2024 20:38:42 -0700 Subject: [PATCH 117/158] [skip ci] fix: 12.58.2.1 compatibility --- app/build.gradle | 2 +- .../java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 402f0429..6888885f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { targetSdk sdk versionCode gitCommitCount versionName '2.9.8' - buildConfigField "String", "TARGET_VERSION", "\"12.58.1.0\"" + buildConfigField "String", "TARGET_VERSION", "\"12.58.2.1\"" buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java index df150ca9..c6ba0602 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java @@ -35,14 +35,14 @@ public String key() { public List matchers() { return List.of( new SmaliMatcher("Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V", - MatcherProperties.create().useClassMatcher(ClassMatcherUtils.invokeMethod("Lcom/baidu/tieba/tbadkCore/data/ThemeBubbleData;->(Ltbclient/ThemeBubble;)V"))) + MatcherProperties.create().useClassMatcher(ClassMatcherUtils.invokeMethod("Lcom/baidu/tbadk/core/data/SmallTailInfo;->()V"))) ); } public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { switch (matcher) { - case "Lcom/baidu/tieba/tbadkCore/data/ThemeBubbleData;->(Ltbclient/ThemeBubble;)V/Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V": + case "Lcom/baidu/tbadk/core/data/SmallTailInfo;->()V/Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V": XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { From 912f2dabd8c2a34c3f906f3b34aa4b11c3785e98 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 8 Apr 2024 22:45:33 -0700 Subject: [PATCH 118/158] fix: improve EditText line spacing --- .../java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java | 2 ++ .../main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java index 1c971016..29c04192 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java @@ -221,6 +221,8 @@ private void showRegexDialog(final Activity activity, final String title) { editText.setHintTextColor(Color.GRAY); } editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); + editText.setFallbackLineSpacing(false); + editText.setLineSpacing(0, 1.2F); final LinearLayout linearLayout = new LinearLayout(currentActivity); linearLayout.setGravity(Gravity.CENTER_HORIZONTAL); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java index e8e2d946..c316a4a1 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java @@ -2,7 +2,6 @@ import android.app.Activity; import android.app.AlertDialog; -import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; import android.text.Editable; @@ -95,6 +94,8 @@ private void showRegexDialog(final Activity activity) { editText.setHintTextColor(Color.GRAY); } editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); + editText.setFallbackLineSpacing(false); + editText.setLineSpacing(0, 1.2F); editText.addTextChangedListener(new TextWatcher() { @Override From ce08f27437d52516a1d9729ba9b8910cad7bc1fc Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 11 Apr 2024 01:55:56 -0700 Subject: [PATCH 119/158] fix: 12.59 compatibility --- app/build.gradle | 2 +- .../tieba/tabswitch/hooker/TSPreference.java | 2 - .../hooker/eliminate/FragmentTab.java | 41 +++++++++++-------- .../tabswitch/hooker/eliminate/Purge.java | 15 +++++++ 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6888885f..4c908d38 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { targetSdk sdk versionCode gitCommitCount versionName '2.9.8' - buildConfigField "String", "TARGET_VERSION", "\"12.58.2.1\"" + buildConfigField "String", "TARGET_VERSION", "\"12.59.0.1\"" buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 5ac716cd..7827879b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -290,8 +290,6 @@ private LinearLayout createModifyTabPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏进吧", "enter_forum", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏发帖", "write_thread", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏消息", "im_message", SwitchButtonHolder.TYPE_SWITCH)); - // Merged with Purge -// preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用动态样式", "dynamic_style", SwitchButtonHolder.TYPE_SWITCH)); return preferenceLayout; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java index 8bf3d74e..623ee663 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java @@ -2,6 +2,7 @@ import androidx.annotation.NonNull; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -16,8 +17,10 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; +import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.ZipEntryMatcher; +import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; public class FragmentTab extends XposedContext implements IHooker, Obfuscated { @@ -32,7 +35,11 @@ public String key() { public List matchers() { return List.of( new StringMatcher("has_show_message_tab_tips"), - new ZipEntryMatcher(5580) + new SmaliMatcher("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V", + MatcherProperties.create().useClassMatcher( + ClassMatcherUtils.usingString("has_show_message_tab_tips") + ) + ) ); } @@ -52,9 +59,20 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } if (Preferences.getBoolean("write_thread")) { tabsToRemove.add("com.baidu.tieba.write.bottomButton.WriteThreadDelegateStatic"); - AcRules.findRule(new ZipEntryMatcher(5580), (matcher, clazz, method) -> { - if (!"com.baidu.tieba.write.bottomButton.WriteThreadDelegateStatic".equals(clazz)) { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)); + AcRules.findRule(new SmaliMatcher("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V", + MatcherProperties.create().useClassMatcher( + ClassMatcherUtils.usingString("has_show_message_tab_tips") + ) + ), (matcher, clazz, method) -> { + Method md = XposedHelpers.findMethodExactIfExists(clazz, sClassLoader, method); + if (md != null) { + XposedBridge.hookMethod(md, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + ReflectUtils.setObjectField(param.thisObject, "com.baidu.tbadk.widget.lottie.TBLottieAnimationView", null); + param.setResult(null); + } + }); } }); } @@ -67,18 +85,5 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } }); }); - // Merged with Purge -// if (Preferences.getBoolean("dynamic_style")) { -// XposedBridge.hookAllMethods(XposedHelpers.findClass("com.baidu.adp.framework.MessageManager", -// sClassLoader), "dispatchResponsedMessage", new XC_MethodHook() { -// @Override -// protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { -// final Object responsedMessage = param.args[0]; -// if ((int) XposedHelpers.getObjectField(responsedMessage, "mCmd") == 2921551) { -// param.setResult(null); -// } -// } -// }); -// } } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index af6bade2..05f1907e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -251,6 +251,21 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "interest_class", null); } }); + // 你可能感兴趣的吧 + XposedHelpers.findAndHookMethod("tbclient.Personalized.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final List feed_list = (List) XposedHelpers.getObjectField(param.thisObject, "feed_list"); + if (feed_list != null) { + feed_list.removeIf( + o -> { + String layout = (String) XposedHelpers.getObjectField(o, "layout"); + return layout.equals("sideway"); + } + ); + } + } + }); // 帖子 AI 聊天 XposedHelpers.findAndHookMethod("tbclient.PbPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { @Override From 8e164286cfc38e0d4c746bbf573befd1288d761a Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 11 Apr 2024 02:49:17 -0700 Subject: [PATCH 120/158] refactor: remove ZipEntryMatcher --- .../hooker/deobfuscation/Deobfuscation.java | 43 ++----------------- .../deobfuscation/DeobfuscationHooker.java | 7 +-- .../deobfuscation/DeobfuscationViewModel.java | 10 ++--- .../tabswitch/hooker/deobfuscation/Matcher.kt | 6 --- 4 files changed, 8 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 1601ddc4..8875f28a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -20,7 +20,6 @@ import java.util.zip.ZipFile; import brut.androlib.AndrolibException; -import brut.androlib.res.data.value.ResFileValue; import brut.androlib.res.data.value.ResStringValue; import brut.androlib.res.decoder.ARSCDecoder; import gm.tieba.tabswitch.XposedContext; @@ -37,34 +36,6 @@ public void setMatchers(final List matchers) { this.matchers.addAll(matchers); } - public void unzip(final PublishSubject progress, final Context context) - throws IOException { - packageResource = context.getPackageResourcePath(); - - final var sizeToZipEntryMatcher = new HashMap(); - for (final var matcher : matchers) { - if (matcher instanceof final ZipEntryMatcher zipEntryMatcher) { - sizeToZipEntryMatcher.put(zipEntryMatcher.getSize(), zipEntryMatcher); - } - } - - final var zipFile = new ZipFile(packageResource); - final var enumeration = zipFile.entries(); - var entryCount = 0; - final var entrySize = zipFile.size(); - while (enumeration.hasMoreElements()) { - entryCount++; - progress.onNext((float) entryCount / entrySize); - - final var ze = enumeration.nextElement(); - final var matcher = sizeToZipEntryMatcher.get(ze.getSize()); - if (matcher != null) { - matcher.setEntryName(ze.getName()); - } - } - zipFile.close(); - } - private void forEachProgressed(final PublishSubject progress, final Collection collection, final Consumer action) { @@ -77,17 +48,15 @@ private void forEachProgressed(final PublishSubject progress, } } - public void decodeArsc(final PublishSubject progress) + public void decodeArsc(final PublishSubject progress, final Context context) throws IOException, AndrolibException { + packageResource = context.getPackageResourcePath(); progress.onNext(0F); final var strToResMatcher = new HashMap(); - final var entryNameToZipEntryMatcher = new HashMap(); final var resIdentifierToResMatcher = new HashMap(); for (final var matcher : matchers) { if (matcher instanceof ResMatcher) { - if (matcher instanceof final ZipEntryMatcher zipEntryMatcher) { - entryNameToZipEntryMatcher.put(zipEntryMatcher.getEntryName(), zipEntryMatcher); - } else if (matcher instanceof final ResIdentifierMatcher resIdentifierMatcher) { + if (matcher instanceof final ResIdentifierMatcher resIdentifierMatcher) { resIdentifierToResMatcher.put(resIdentifierMatcher.toResIdentifier(), resIdentifierMatcher); } else { strToResMatcher.put(((StringResMatcher) matcher).toResIdentifier(), (ResMatcher) matcher); @@ -112,12 +81,6 @@ public void decodeArsc(final PublishSubject progress) if (matcher != null) { matcher.setId(resResSpec.getId().id); } - } else if (resValue instanceof ResFileValue) { - final var path = resValue.toString(); - final var matcher = entryNameToZipEntryMatcher.get(path); - if (matcher != null) { - matcher.setId(resResSpec.getId().id); - } } } catch (final AndrolibException e) { // should not happen diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java index c4d21ff2..a0156392 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java @@ -86,15 +86,12 @@ public void afterHookedMethod(final MethodHookParam param) throws Throwable { new Thread(() -> { try { - setMessage("(1/3) 解析安装包"); + setMessage("(1/2) 解析安装包资源"); viewModel.deobfuscateStep1(mActivity, mMatchers); - setMessage("(2/3) 解析资源"); + setMessage("(2/2) 搜索资源,字符串和方法调用"); viewModel.deobfuscateStep2(); - setMessage("(3/3) 搜索字符串、资源 id 和方法调用"); - viewModel.deobfuscateStep3(); - XposedBridge.log("Deobfuscation complete, current version: " + DeobfuscationHelper.getTbVersion(mActivity)); hooks.forEach(Unhook::unhook); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java index 79b72935..ac027c3b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java @@ -14,16 +14,12 @@ public class DeobfuscationViewModel { public final Observable progress = _progress; private final Deobfuscation deobfuscation = new Deobfuscation(); - public void deobfuscateStep1(final Context context, final List matchers) throws IOException { + public void deobfuscateStep1(final Context context, final List matchers) throws IOException, AndrolibException { deobfuscation.setMatchers(matchers); - deobfuscation.unzip(_progress, context); + deobfuscation.decodeArsc(_progress, context); } - public void deobfuscateStep2() throws IOException, AndrolibException { - deobfuscation.decodeArsc(_progress); - } - - public void deobfuscateStep3() throws IOException { + public void deobfuscateStep2() throws IOException { deobfuscation.dexkit(_progress); deobfuscation.saveDexSignatureHashCode(); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 67424d7c..756516a7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -60,12 +60,6 @@ class StringResMatcher @JvmOverloads constructor(val str: String, properties: Ma override fun toResIdentifier(): String = str } -class ZipEntryMatcher @JvmOverloads constructor(val size: Long, properties: MatcherProperties? = null) : ResMatcher(properties = properties) { - var entryName: String = "" - override fun toString(): String = super.toString() + size.toString() - override fun toResIdentifier(): String = size.toString() -} - class ResIdentifierMatcher @JvmOverloads constructor(val name: String, val defType: String, properties: MatcherProperties? = null) : ResMatcher(properties = properties) { override fun toString(): String = super.toString() + String.format("%s.%s", defType, name) override fun toResIdentifier(): String = String.format("%s.%s", defType, name) From 191aa7987a76ce8cec678b272852175bc0558679 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 11 Apr 2024 03:41:55 -0700 Subject: [PATCH 121/158] feat: fix transition animation for android 14+ --- .../java/gm/tieba/tabswitch/XposedInit.java | 6 +- .../tieba/tabswitch/hooker/TSPreference.java | 12 +- .../gm/tieba/tabswitch/hooker/add/Ripple.java | 82 ---------- .../hooker/auto/TransitionAnimation.java | 151 ++++++++++++++++++ 4 files changed, 165 insertions(+), 86 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 2903ea67..70b6bbeb 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -30,7 +30,6 @@ import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.TSPreference; import gm.tieba.tabswitch.hooker.add.HistoryCache; -import gm.tieba.tabswitch.hooker.add.Ripple; import gm.tieba.tabswitch.hooker.add.SaveImages; import gm.tieba.tabswitch.hooker.add.SelectClipboard; import gm.tieba.tabswitch.hooker.auto.AgreeNum; @@ -40,6 +39,7 @@ import gm.tieba.tabswitch.hooker.auto.NotificationDetect; import gm.tieba.tabswitch.hooker.auto.OpenSign; import gm.tieba.tabswitch.hooker.auto.OriginSrc; +import gm.tieba.tabswitch.hooker.auto.TransitionAnimation; import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHooker; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; @@ -141,7 +141,6 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new ContentFilter(), new FrsPageFilter(), new HistoryCache(), - new Ripple(), new SaveImages(), new AutoSign(), new OpenSign(), @@ -157,7 +156,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new NotificationDetect(), new PurgeVideo(), new SelectClipboard(), - new UserFilter() + new UserFilter(), + new TransitionAnimation() ); final var matchers = new ArrayList(hookers.size() + 2); matchers.add(new TbToast()); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 7827879b..8aae1bc6 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -5,6 +5,7 @@ import android.app.Dialog; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Process; import android.text.TextUtils; @@ -199,7 +200,6 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "别出新意" : "增加功能")); preferenceLayout.addView(new SwitchButtonHolder(activity, "浏览历史增加搜索", "history_cache", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "弹窗自由复制", "select_clipboard", SwitchButtonHolder.TYPE_SWITCH)); @@ -290,6 +290,16 @@ private LinearLayout createModifyTabPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏进吧", "enter_forum", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏发帖", "write_thread", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏消息", "im_message", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(TSPreferenceHelper.createTextView("其他")); + SwitchButtonHolder transitionAnimation = new SwitchButtonHolder(activity, "修复过渡动画", "transition_animation", SwitchButtonHolder.TYPE_SWITCH); + transitionAnimation.setOnButtonClickListener(v -> { + if (!(Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1", DeobfuscationHelper.getTbVersion(getContext())))) { + TbToast.showTbToast("当前贴吧版本不支持此功能", TbToast.LENGTH_SHORT); + } else { + transitionAnimation.bdSwitch.changeState(); + } + }); + preferenceLayout.addView(transitionAnimation); return preferenceLayout; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java deleted file mode 100644 index 9ea0b481..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java +++ /dev/null @@ -1,82 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.StateListDrawable; -import android.util.AttributeSet; -import android.util.SparseArray; -import android.view.View; -import android.widget.RelativeLayout; - -import androidx.annotation.NonNull; - -import java.lang.reflect.Method; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.DisplayUtils; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class Ripple extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "ripple"; - } - - public void hook() throws Throwable { - final var subPbLayoutClass = XposedHelpers.findClass("com.baidu.tieba.pb.pb.sub.SubPbLayout", sClassLoader); - // 楼中楼 - try { - Method md; - try { - md = subPbLayoutClass.getDeclaredFields()[4].getType().getDeclaredMethod("createView"); - } catch (final NoSuchMethodException e) { - md = subPbLayoutClass.getDeclaredFields()[4].getType().getDeclaredMethod("b"); - } - XposedBridge.hookMethod(md, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var newSubPbListItem = (View) param.getResult(); - final var tag = (SparseArray) newSubPbListItem.getTag(); - final var b = tag.valueAt(0); - // R.id.new_sub_pb_list_richText - final var view = (View) ReflectUtils.getObjectField(b, "com.baidu.tbadk.widget.richText.TbRichTextView"); - view.setBackground(createSubPbBackground()); - } - }); - } catch (final NoSuchMethodException e) { - XposedBridge.log(e); - } - // 查看全部回复 - XposedHelpers.findAndHookConstructor(subPbLayoutClass, Context.class, AttributeSet.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var view = ReflectUtils.getObjectField(param.thisObject, RelativeLayout.class); - view.setBackground(createSubPbBackground()); - } - }); - } - - private StateListDrawable createBackground() { - final StateListDrawable sld = new StateListDrawable(); - sld.addState(new int[]{android.R.attr.state_pressed}, - new ColorDrawable(ReflectUtils.getColor("CAM_X0204"))); - return sld; - } - - private StateListDrawable createSubPbBackground() { - if (!DisplayUtils.getTbSkin(getContext()).equals("")) { - return createBackground(); - } else { - final StateListDrawable sld = new StateListDrawable(); - sld.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(Color.WHITE)); - return sld; - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java new file mode 100644 index 00000000..59dbb64b --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java @@ -0,0 +1,151 @@ +package gm.tieba.tabswitch.hooker.auto; + +import android.app.Activity; + +import androidx.annotation.NonNull; + +import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.hooker.IHooker; + +public class TransitionAnimation extends XposedContext implements IHooker { + + private Class activityPendingTransitionFactory; + private int CHAT_SQUARE_FADE_IN; + private int CHAT_SQUARE_FADE_OUT; + private int RES_BIG_IMAGE_IN_FROM_RIGHT; + private int RES_BIG_IMAGE_OUT_TO_RIGHT; + private int RES_CUSTOM_FADE_IN; + private int RES_CUSTOM_FADE_OUT; + private int RES_CUSTOM_IN_FROM_RIGHT; + private int RES_CUSTOM_OUT_TO_RIGHT; + private int RES_FADE_OUT; + private int RES_NFADE_IN; + private int RES_NORMAL_IN_FROM_BOTTOM; + private int RES_NORMAL_IN_FROM_LEFT; + private int RES_NORMAL_IN_FROM_RIGHT; + private int RES_NORMAL_OUT_TO_BOTTOM; + private int RES_NORMAL_OUT_TO_LEFT; + private int RES_NORMAL_OUT_TO_RIGHT; + + @NonNull + @Override + public String key() { + return "transition_animation"; + } + + @Override + public void hook() throws Throwable { + activityPendingTransitionFactory = XposedHelpers.findClass("com.baidu.tbadk.ActivityPendingTransitionFactory", sClassLoader); + + CHAT_SQUARE_FADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "CHAT_SQUARE_FADE_IN"); + CHAT_SQUARE_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "CHAT_SQUARE_FADE_OUT"); + RES_BIG_IMAGE_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_BIG_IMAGE_IN_FROM_RIGHT"); + RES_BIG_IMAGE_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_BIG_IMAGE_OUT_TO_RIGHT"); + RES_CUSTOM_FADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_FADE_IN"); + RES_CUSTOM_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_FADE_OUT"); + RES_CUSTOM_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_IN_FROM_RIGHT"); + RES_CUSTOM_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_OUT_TO_RIGHT"); + RES_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_FADE_OUT"); + RES_NFADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NFADE_IN"); + RES_NORMAL_IN_FROM_BOTTOM = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_BOTTOM"); + RES_NORMAL_IN_FROM_LEFT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_LEFT"); + RES_NORMAL_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_RIGHT"); + RES_NORMAL_OUT_TO_BOTTOM = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_BOTTOM"); + RES_NORMAL_OUT_TO_LEFT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_LEFT"); + RES_NORMAL_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_RIGHT"); + + XposedHelpers.findAndHookMethod( + activityPendingTransitionFactory, + "enterExitAnimation", + "com.baidu.tbadk.TbPageContext", int.class, + new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + enterExitAnimation(param.args[0], (int) param.args[1]); + return null; + } + } + ); + + XposedHelpers.findAndHookMethod( + activityPendingTransitionFactory, + "closeAnimation", + "com.baidu.tbadk.TbPageContext", int.class, + new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + closeAnimation(param.args[0], (int) param.args[1]); + return null; + } + } + ); + } + + private void enterExitAnimation(Object tbPageContext, int i) { + Activity pageActivity = (Activity) XposedHelpers.callMethod(tbPageContext, "getPageActivity"); + if (XposedHelpers.getStaticBooleanField(activityPendingTransitionFactory, "IS_CUSTOM_FROM_THIRD_PARTY")) { + i = 3; + } + switch (i) { + case 0: + pageActivity.overridePendingTransition(0, 0); + return; + case 1: + pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_RIGHT, RES_FADE_OUT); + return; + case 2: + pageActivity.overridePendingTransition(RES_BIG_IMAGE_IN_FROM_RIGHT, RES_FADE_OUT); + return; + case 3: + pageActivity.overridePendingTransition(RES_CUSTOM_IN_FROM_RIGHT, RES_CUSTOM_FADE_OUT); + return; + case 4: + pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_BOTTOM, RES_FADE_OUT); + return; + case 5: + pageActivity.overridePendingTransition(CHAT_SQUARE_FADE_IN, CHAT_SQUARE_FADE_OUT); + return; + case 6: + pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_LEFT, RES_FADE_OUT); + return; + default: + pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_RIGHT, RES_FADE_OUT); + return; + } + } + + private void closeAnimation(Object tbPageContext, int i) { + Activity pageActivity = (Activity) XposedHelpers.callMethod(tbPageContext, "getPageActivity"); + if (XposedHelpers.getStaticBooleanField(activityPendingTransitionFactory, "IS_CUSTOM_FROM_THIRD_PARTY")) { + i = 3; + } + switch (i) { + case 0: + pageActivity.overridePendingTransition(0, 0); + return; + case 1: + pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_RIGHT); + return; + case 2: + pageActivity.overridePendingTransition(RES_NFADE_IN, RES_BIG_IMAGE_OUT_TO_RIGHT); + return; + case 3: + pageActivity.overridePendingTransition(RES_CUSTOM_FADE_IN, RES_CUSTOM_OUT_TO_RIGHT); + return; + case 4: + pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_BOTTOM); + return; + case 5: + pageActivity.overridePendingTransition(CHAT_SQUARE_FADE_IN, CHAT_SQUARE_FADE_OUT); + return; + case 6: + pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_LEFT); + return; + default: + pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_RIGHT); + return; + } + } +} From 6f58f1f56af117d6df3eea5bf6dd4e52b47b7d98 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 11 Apr 2024 04:40:37 -0700 Subject: [PATCH 122/158] fix: purge rules --- .../gm/tieba/tabswitch/dao/Preferences.java | 4 ++++ .../tieba/tabswitch/hooker/TSPreference.java | 10 +++++++++- .../hooker/auto/TransitionAnimation.java | 6 ++++++ .../tabswitch/hooker/eliminate/Purge.java | 18 +++--------------- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java index 5e6a124d..1c63e3ea 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java @@ -86,6 +86,10 @@ public static boolean getIsAutoSignEnabled() { return sTsConfig.getBoolean("auto_sign", false); } + public static boolean getTransitionAnimationEnabled() { + return sTsPreferences.getBoolean("transition_animation", false); + } + @SuppressLint("ApplySharedPref") public static void putPurgeEnabled() { final SharedPreferences.Editor editor = sTsConfig.edit(); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 8aae1bc6..e1abd347 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -290,16 +290,24 @@ private LinearLayout createModifyTabPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏进吧", "enter_forum", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏发帖", "write_thread", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏消息", "im_message", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(TSPreferenceHelper.createTextView("其他")); SwitchButtonHolder transitionAnimation = new SwitchButtonHolder(activity, "修复过渡动画", "transition_animation", SwitchButtonHolder.TYPE_SWITCH); + + boolean shouldEnableTransitionAnimationFix = Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1", DeobfuscationHelper.getTbVersion(getContext())); + if (!shouldEnableTransitionAnimationFix && Preferences.getTransitionAnimationEnabled()) { + transitionAnimation.bdSwitch.turnOff(); + } + transitionAnimation.setOnButtonClickListener(v -> { - if (!(Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1", DeobfuscationHelper.getTbVersion(getContext())))) { + if (!shouldEnableTransitionAnimationFix) { TbToast.showTbToast("当前贴吧版本不支持此功能", TbToast.LENGTH_SHORT); } else { transitionAnimation.bdSwitch.changeState(); } }); preferenceLayout.addView(transitionAnimation); + return preferenceLayout; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java index 59dbb64b..c425670f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java @@ -1,6 +1,7 @@ package gm.tieba.tabswitch.hooker.auto; import android.app.Activity; +import android.os.Build; import androidx.annotation.NonNull; @@ -8,6 +9,7 @@ import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.hooker.IHooker; +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; public class TransitionAnimation extends XposedContext implements IHooker { @@ -37,6 +39,10 @@ public String key() { @Override public void hook() throws Throwable { + if (!(Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1", DeobfuscationHelper.getTbVersion(getContext())))) { + return; + } + activityPendingTransitionFactory = XposedHelpers.findClass("com.baidu.tbadk.ActivityPendingTransitionFactory", sClassLoader); CHAT_SQUARE_FADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "CHAT_SQUARE_FADE_IN"); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 05f1907e..62972124 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -249,21 +249,9 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable // 添加兴趣,为你精准推荐相关内容~ XposedHelpers.setObjectField(param.thisObject, "interest_class", null); - } - }); - // 你可能感兴趣的吧 - XposedHelpers.findAndHookMethod("tbclient.Personalized.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final List feed_list = (List) XposedHelpers.getObjectField(param.thisObject, "feed_list"); - if (feed_list != null) { - feed_list.removeIf( - o -> { - String layout = (String) XposedHelpers.getObjectField(o, "layout"); - return layout.equals("sideway"); - } - ); - } + + // 你可能感兴趣的吧 + XposedHelpers.setObjectField(param.thisObject, "hot_recomforum_top", null); } }); // 帖子 AI 聊天 From 5735970940b849fbc21bece23e5b926fd9298b7f Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 11 Apr 2024 20:37:09 -0700 Subject: [PATCH 123/158] fix: add back Ripple --- .../java/gm/tieba/tabswitch/XposedInit.java | 2 + .../tieba/tabswitch/hooker/TSPreference.java | 1 + .../gm/tieba/tabswitch/hooker/add/Ripple.java | 86 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 70b6bbeb..8d0f9127 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -30,6 +30,7 @@ import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.TSPreference; import gm.tieba.tabswitch.hooker.add.HistoryCache; +import gm.tieba.tabswitch.hooker.add.Ripple; import gm.tieba.tabswitch.hooker.add.SaveImages; import gm.tieba.tabswitch.hooker.add.SelectClipboard; import gm.tieba.tabswitch.hooker.auto.AgreeNum; @@ -141,6 +142,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new ContentFilter(), new FrsPageFilter(), new HistoryCache(), + new Ripple(), new SaveImages(), new AutoSign(), new OpenSign(), diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index e1abd347..e853e279 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -200,6 +200,7 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "别出新意" : "增加功能")); preferenceLayout.addView(new SwitchButtonHolder(activity, "浏览历史增加搜索", "history_cache", SwitchButtonHolder.TYPE_SWITCH)); + preferenceLayout.addView(new SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "弹窗自由复制", "select_clipboard", SwitchButtonHolder.TYPE_SWITCH)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java new file mode 100644 index 00000000..34949757 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java @@ -0,0 +1,86 @@ +package gm.tieba.tabswitch.hooker.add; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.InsetDrawable; +import android.graphics.drawable.LayerDrawable; +import android.graphics.drawable.PaintDrawable; +import android.graphics.drawable.StateListDrawable; +import android.util.AttributeSet; +import android.util.SparseArray; +import android.view.View; +import android.widget.RelativeLayout; + +import androidx.annotation.NonNull; + +import java.lang.reflect.Method; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; +import gm.tieba.tabswitch.XposedContext; +import gm.tieba.tabswitch.hooker.IHooker; +import gm.tieba.tabswitch.util.DisplayUtils; +import gm.tieba.tabswitch.util.ReflectUtils; + +public class Ripple extends XposedContext implements IHooker { + + @NonNull + @Override + public String key() { + return "ripple"; + } + + public void hook() throws Throwable { + final var subPbLayoutClass = XposedHelpers.findClass("com.baidu.tieba.pb.pb.sub.SubPbLayout", sClassLoader); + // 楼中楼 + try { + Method md; + try { + md = subPbLayoutClass.getDeclaredFields()[4].getType().getDeclaredMethod("createView"); + } catch (final NoSuchMethodException e) { + md = subPbLayoutClass.getDeclaredFields()[4].getType().getDeclaredMethod("b"); + } + XposedBridge.hookMethod(md, new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var newSubPbListItem = (View) param.getResult(); + final var tag = (SparseArray) newSubPbListItem.getTag(); + final var b = tag.valueAt(0); + // R.id.new_sub_pb_list_richText + final var view = (View) ReflectUtils.getObjectField(b, "com.baidu.tbadk.widget.richText.TbRichTextView"); + view.setBackground(createSubPbBackground(DisplayUtils.dipToPx(getContext(), 5F))); + } + }); + } catch (final NoSuchMethodException e) { + XposedBridge.log(e); + } + // 查看全部回复 + XposedHelpers.findAndHookConstructor(subPbLayoutClass, Context.class, AttributeSet.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final var view = ReflectUtils.getObjectField(param.thisObject, RelativeLayout.class); + view.setBackground(createSubPbBackground(DisplayUtils.dipToPx(getContext(), 3.5F))); + } + }); + } + + private StateListDrawable createSubPbBackground(int bottomInset) { + final StateListDrawable sld = new StateListDrawable(); + + PaintDrawable bg = new PaintDrawable(Color.argb(192, + Color.red(ReflectUtils.getColor("CAM_X0201")), + Color.green(ReflectUtils.getColor("CAM_X0201")), + Color.blue(ReflectUtils.getColor("CAM_X0201")) + )); + bg.setCornerRadius(DisplayUtils.dipToPx(getContext(), 2F)); + + LayerDrawable layerBg = new LayerDrawable(new Drawable[]{bg}); + layerBg.setLayerInset(0, 0, 0, 0, bottomInset); + + sld.addState(new int[]{android.R.attr.state_pressed}, layerBg); + return sld; + } +} From 49f1b1c745f52bbd98c56065913760677e2cd497 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 12 Apr 2024 16:45:13 -0700 Subject: [PATCH 124/158] fix: certain webview pages not showing correctly --- .../tabswitch/hooker/eliminate/Purge.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 62972124..0a0a593e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -49,7 +49,7 @@ public List matchers() { new SmaliMatcher("Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V"), new StringMatcher("pic_amount"), new StringMatcher("准备展示精灵动画提示控件"), - new StringMatcher("TbChannelJsInterfaceNew"), +// new StringMatcher("TbChannelJsInterfaceNew"), new StringMatcher("bottom_bubble_config"), // new StringMatcher("top_level_navi"), new StringMatcher("index_tab_info"), @@ -77,18 +77,18 @@ public void hook() throws Throwable { case "准备展示精灵动画提示控件": // 吧内%s新贴热议中 XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(false)); break; - case "TbChannelJsInterfaceNew": // 吧友直播 - if (method.equals("getInitData")) { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - JSONObject resultJson = new JSONObject((String) param.getResult()); - resultJson.getJSONObject("baseData").put("clientVersion", "undefined"); - param.setResult(resultJson.toString()); - } - }); - } - break; +// case "TbChannelJsInterfaceNew": // 吧友直播 +// if (method.equals("getInitData")) { +// XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { +// @Override +// protected void afterHookedMethod(MethodHookParam param) throws Throwable { +// JSONObject resultJson = new JSONObject((String) param.getResult()); +// resultJson.getJSONObject("baseData").put("clientVersion", "undefined"); +// param.setResult(resultJson.toString()); +// } +// }); +// } +// break; case "bottom_bubble_config": // 底部导航栏活动图标 if (method.equals("invoke")) { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { From 3eb17d9e2662e7d4789f646f626ea86ae0c4e214 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 12 Apr 2024 20:15:05 -0700 Subject: [PATCH 125/158] feat: update purge rules --- app/build.gradle | 3 +- app/src/main/assets/PurgeFrsBottom.js | 1 + .../java/gm/tieba/tabswitch/XposedInit.java | 1 - .../tabswitch/hooker/eliminate/Purge.java | 65 ++++++++++++++----- gradle.properties | 3 +- 5 files changed, 51 insertions(+), 22 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4c908d38..2e4ffa03 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { targetSdk sdk versionCode gitCommitCount versionName '2.9.8' - buildConfigField "String", "TARGET_VERSION", "\"12.59.0.1\"" + buildConfigField "String", "TARGET_VERSION", "\"12.59.0.3\"" buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' @@ -59,6 +59,7 @@ android { } buildFeatures { prefab true + buildConfig true } lint { checkDependencies true diff --git a/app/src/main/assets/PurgeFrsBottom.js b/app/src/main/assets/PurgeFrsBottom.js index b52d76b9..3bed7ebc 100644 --- a/app/src/main/assets/PurgeFrsBottom.js +++ b/app/src/main/assets/PurgeFrsBottom.js @@ -16,6 +16,7 @@ "card_activity", "ai_chatroom_guide", "friend_forum", + "game_card_guide" ]; propertiesToDelete.forEach((property) => { delete res[property]; diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 8d0f9127..dd585e27 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -115,7 +115,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { // However, LSPatch incorrectly sets appComponentFactory to null, causing android.app.Instrumentation.getFactory to fall back to AppComponentFactory.DEFAULT // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) if (getContext().getApplicationInfo().appComponentFactory == null) { - XposedBridge.log("Applying AppComponentFactory workaround"); XposedHelpers.findAndHookMethod( Instrumentation.class, "getFactory", diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 0a0a593e..59c12c83 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -28,6 +28,7 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; @@ -49,13 +50,13 @@ public List matchers() { new SmaliMatcher("Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V"), new StringMatcher("pic_amount"), new StringMatcher("准备展示精灵动画提示控件"), -// new StringMatcher("TbChannelJsInterfaceNew"), new StringMatcher("bottom_bubble_config"), // new StringMatcher("top_level_navi"), new StringMatcher("index_tab_info"), new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V"), - new StringMatcher("h5_pop_ups_config") + new StringMatcher("h5_pop_ups_config"), + new StringMatcher("sign_max_num") ); } @@ -77,18 +78,6 @@ public void hook() throws Throwable { case "准备展示精灵动画提示控件": // 吧内%s新贴热议中 XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(false)); break; -// case "TbChannelJsInterfaceNew": // 吧友直播 -// if (method.equals("getInitData")) { -// XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { -// @Override -// protected void afterHookedMethod(MethodHookParam param) throws Throwable { -// JSONObject resultJson = new JSONObject((String) param.getResult()); -// resultJson.getJSONObject("baseData").put("clientVersion", "undefined"); -// param.setResult(resultJson.toString()); -// } -// }); -// } -// break; case "bottom_bubble_config": // 底部导航栏活动图标 if (method.equals("invoke")) { XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { @@ -119,10 +108,19 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); JSONArray indexTabInfo = syncData.getJSONArray("index_tab_info"); JSONArray newIndexTabInfo = new JSONArray(); - for (int i = 0; i < indexTabInfo.length(); i++) { - JSONObject currTab = indexTabInfo.getJSONObject(i); - if (!currTab.getString("tab_type").equals("202") && !currTab.getString("tab_type").equals("6")) { - newIndexTabInfo.put(currTab); + if (DeobfuscationHelper.isTbSatisfyVersionRequirement("12.59", DeobfuscationHelper.getTbVersion(getContext()))) { + for (int i = 0; i < indexTabInfo.length(); i++) { + JSONObject currTab = indexTabInfo.getJSONObject(i); + if (currTab.getString("is_main_tab").equals("1") && !currTab.getString("tab_type").equals("6")) { + newIndexTabInfo.put(currTab); + } + } + } else { + for (int i = 0; i < indexTabInfo.length(); i++) { + JSONObject currTab = indexTabInfo.getJSONObject(i); + if (!currTab.getString("tab_type").equals("202") && !currTab.getString("tab_type").equals("6")) { + newIndexTabInfo.put(currTab); + } } } syncData.put("index_tab_info", newIndexTabInfo); @@ -150,6 +148,15 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } break; + case "sign_max_num": // 一键签到弹窗广告 + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, JSONObject.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONObject jsonObject = (JSONObject) param.args[0]; + jsonObject.put("advert", null); + } + }); + break; } }); // 启动广告 @@ -390,6 +397,28 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedHelpers.setObjectField(param.thisObject, "novel_recom_card", null); } }); + + // 首页样式 AB test + XposedHelpers.findAndHookMethod( + "com.baidu.tbadk.abtest.UbsABTestDataManager", + sClassLoader, + "parseJSONArray", + JSONArray.class, + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + JSONArray currentABTestJson = (JSONArray) param.args[0]; + JSONArray newABTestJson = new JSONArray(); + for (int i = 0; i < currentABTestJson.length(); i++) { + JSONObject currTest = currentABTestJson.getJSONObject(i); + if (!currTest.getString("sid").startsWith("12_57_5_home_search")) { + newABTestJson.put(currTest); + } + } + param.args[0] = newABTestJson; + } + } + ); } // 吧页面头条贴(41), 直播贴(69 / is_live_card) diff --git a/gradle.properties b/gradle.properties index 44c2bf3f..9ade8f71 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true +android.enableJetifier=false # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the @@ -26,5 +26,4 @@ android.nonTransitiveRClass=true android.experimental.enableNewResourceShrinker=true android.experimental.enableNewResourceShrinker.preciseShrinking=true android.enableR8.fullMode=true -android.defaults.buildfeatures.buildconfig=true android.nonFinalResIds=false From 555b88bdadd72ed4f9d1f0f8042f9ea0c5e6dcd3 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 13 Apr 2024 18:18:17 -0700 Subject: [PATCH 126/158] chore: update version naming scheme --- app/build.gradle | 9 +++++++-- .../java/gm/tieba/tabswitch/hooker/TSPreference.java | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2e4ffa03..cd5d2d3c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,6 +5,8 @@ plugins { } def gitCommitCount = Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim()) +def latestTag = String.valueOf('git describe --abbrev=0 --tags'.execute([], project.rootDir).text.trim()) +def commitCountSinceLatestTag = String.valueOf(('git rev-list --count ' + latestTag + '..HEAD').execute([], project.rootDir).text.trim()) def sdk = 34 android { @@ -17,7 +19,10 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.8' + versionName '2.9.9-beta' + if (versionName.contains('beta')) { + versionNameSuffix = '.' + commitCountSinceLatestTag + } buildConfigField "String", "TARGET_VERSION", "\"12.59.0.3\"" buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" @@ -31,7 +36,7 @@ android { } applicationVariants.all { variant -> variant.outputs.all { output -> - outputFileName = "TS_${defaultConfig.versionName}_${defaultConfig.versionCode}-${variant.buildType.name}.apk" + outputFileName = "TS_${defaultConfig.versionName}${defaultConfig.versionNameSuffix ?: ''}_${variant.buildType.name}.apk" } } buildTypes { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index e853e279..b23de1a4 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -153,7 +153,7 @@ private void proxyPage(final Activity activity, final NavigationBar navigationBa private void startRootPreferenceActivity(final Activity activity) { if (!Preferences.getIsEULAAccepted()) { final StringBuilder stringBuilder = new StringBuilder().append(Constants.getStrings().get("EULA")); - if (BuildConfig.VERSION_NAME.contains("alpha") || BuildConfig.VERSION_NAME.contains("beta")) { + if (BuildConfig.VERSION_NAME.contains("beta")) { stringBuilder.append("\n\n").append(Constants.getStrings().get("dev_tip")); } AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? @@ -275,7 +275,7 @@ private LinearLayout createRootPreference(final Activity activity) { intent.setData(Uri.parse("https://t.me/TabSwitch")); activity.startActivity(intent); })); - preferenceLayout.addView(TSPreferenceHelper.createButton("版本", String.format(Locale.CHINA, "%s_%d", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE), true, v -> { + preferenceLayout.addView(TSPreferenceHelper.createButton("版本", String.format(Locale.CHINA, "%s", BuildConfig.VERSION_NAME), true, v -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases")); From 80b801d8ece76c5390ea1525ebd146e67a606cd4 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 13 Apr 2024 22:13:30 -0700 Subject: [PATCH 127/158] fix: update purge rules --- app/src/main/assets/Purge.js | 46 +++++++++++++++++++ app/src/main/assets/PurgeFrsBottom.js | 36 --------------- .../tabswitch/hooker/eliminate/Purge.java | 14 +----- 3 files changed, 48 insertions(+), 48 deletions(-) create mode 100644 app/src/main/assets/Purge.js delete mode 100644 app/src/main/assets/PurgeFrsBottom.js diff --git a/app/src/main/assets/Purge.js b/app/src/main/assets/Purge.js new file mode 100644 index 00000000..4ea8055e --- /dev/null +++ b/app/src/main/assets/Purge.js @@ -0,0 +1,46 @@ +(function (send) { + XMLHttpRequest.prototype.send = function () { + var callback = this.onreadystatechange; + this.onreadystatechange = function () { + if (this.readyState == 4) { + let propertiesToDelete = []; + if ( + this.responseURL.match( + /https?:\/\/tieba\.baidu\.com\/c\/f\/frs\/frsBottom.*/g + ) + ) { + propertiesToDelete = [ + "frs_bottom", + "activityhead", + "live_fuse_forum", + "card_activity", + "ai_chatroom_guide", + "friend_forum", + "game_card_guide", + ]; + } else if ( + this.responseURL.match( + /https?:\/\/tieba\.baidu\.com\/c\/f\/forum\/getforumlist.*/g + ) + ) { + propertiesToDelete = ["advert"]; + } + if (propertiesToDelete.length > 0) { + res = JSON.parse(this.response); + propertiesToDelete.forEach((property) => { + delete res[property]; + }); + Object.defineProperty(this, "response", { writable: true }); + Object.defineProperty(this, "responseText", { + writable: true, + }); + this.response = this.responseText = JSON.stringify(res); + } + } + if (callback) { + callback.apply(this, arguments); + } + }; + send.apply(this, arguments); + }; +})(XMLHttpRequest.prototype.send); diff --git a/app/src/main/assets/PurgeFrsBottom.js b/app/src/main/assets/PurgeFrsBottom.js deleted file mode 100644 index 3bed7ebc..00000000 --- a/app/src/main/assets/PurgeFrsBottom.js +++ /dev/null @@ -1,36 +0,0 @@ -(function (send) { - XMLHttpRequest.prototype.send = function () { - var callback = this.onreadystatechange; - this.onreadystatechange = function () { - if ( - this.readyState == 4 && - this.responseURL.match( - /https?:\/\/tieba\.baidu\.com\/c\/f\/frs\/frsBottom.*/g - ) - ) { - res = JSON.parse(this.response); - let propertiesToDelete = [ - "frs_bottom", - "activityhead", - "live_fuse_forum", - "card_activity", - "ai_chatroom_guide", - "friend_forum", - "game_card_guide" - ]; - propertiesToDelete.forEach((property) => { - delete res[property]; - }); - Object.defineProperty(this, "response", { writable: true }); - Object.defineProperty(this, "responseText", { - writable: true, - }); - this.response = this.responseText = JSON.stringify(res); - } - if (callback) { - callback.apply(this, arguments); - } - }; - send.apply(this, arguments); - }; -})(XMLHttpRequest.prototype.send); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 59c12c83..395dd365 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -55,8 +55,7 @@ public List matchers() { new StringMatcher("index_tab_info"), new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V"), - new StringMatcher("h5_pop_ups_config"), - new StringMatcher("sign_max_num") + new StringMatcher("h5_pop_ups_config") ); } @@ -148,15 +147,6 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } break; - case "sign_max_num": // 一键签到弹窗广告 - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, JSONObject.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject jsonObject = (JSONObject) param.args[0]; - jsonObject.put("advert", null); - } - }); - break; } }); // 启动广告 @@ -346,7 +336,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } } // 更多板块 (吧友直播,友情吧) - final String jsPurgeFrsBottom = FileUtils.getAssetFileContent("PurgeFrsBottom.js"); + final String jsPurgeFrsBottom = FileUtils.getAssetFileContent("Purge.js"); if (jsPurgeFrsBottom != null) { XposedHelpers.findAndHookMethod(WebViewClient.class, "onPageStarted", WebView.class, String.class, Bitmap.class, new XC_MethodHook() { @Override From 0cae3d01c4a89ee10727736affbe5ec0479d54c6 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 13 Apr 2024 22:29:35 -0700 Subject: [PATCH 128/158] fix: reduce redundant code related to version check --- app/src/main/assets/Purge.js | 2 ++ .../main/java/gm/tieba/tabswitch/Constants.kt | 6 ++++-- .../gm/tieba/tabswitch/XposedContext.java | 1 + .../java/gm/tieba/tabswitch/XposedInit.java | 19 +++++++++++-------- .../tieba/tabswitch/hooker/TSPreference.java | 10 +++++++--- .../hooker/auto/TransitionAnimation.java | 2 +- .../deobfuscation/DeobfuscationHelper.java | 11 +++++++++-- .../tabswitch/hooker/eliminate/Purge.java | 10 +++++----- 8 files changed, 40 insertions(+), 21 deletions(-) diff --git a/app/src/main/assets/Purge.js b/app/src/main/assets/Purge.js index 4ea8055e..8ec64116 100644 --- a/app/src/main/assets/Purge.js +++ b/app/src/main/assets/Purge.js @@ -5,6 +5,7 @@ if (this.readyState == 4) { let propertiesToDelete = []; if ( + // 吧页面更多板块 this.responseURL.match( /https?:\/\/tieba\.baidu\.com\/c\/f\/frs\/frsBottom.*/g ) @@ -19,6 +20,7 @@ "game_card_guide", ]; } else if ( + // 一键签到页面 this.responseURL.match( /https?:\/\/tieba\.baidu\.com\/c\/f\/forum\/getforumlist.*/g ) diff --git a/app/src/main/java/gm/tieba/tabswitch/Constants.kt b/app/src/main/java/gm/tieba/tabswitch/Constants.kt index 2d91a554..33f1afbd 100644 --- a/app/src/main/java/gm/tieba/tabswitch/Constants.kt +++ b/app/src/main/java/gm/tieba/tabswitch/Constants.kt @@ -8,9 +8,11 @@ object Constants { " ②本模块不会主动发起网络请求,不会上传任何用户数据,隐私泄露或者账号异常行为与本模块无关。\n" + " ③本模块主要用于学习和交流技术,任何人不得将本模块用于商业或非法用途。", "dev_tip" to "提示:您当前安装的是非正式版本,可能含有较多错误,如果您希望得到更稳定的使用体验,建议您安装正式版本。", - "exception_rules_incomplete" to "请点击确定并重启应用以重新执行反混淆。若执行反混淆后仍出现此对话框则应尝试更新模块或向作者反馈。", - "version_mismatch" to "当前贴吧版本不受支持。请使用受支持的贴吧版本(%s-%s)或尝试更新模块。", + "exception_rules_incomplete" to "请点击确定并重启应用以重新执行反混淆。若执行反混淆后仍出现此对话框则应尝试更新模块或向作者反馈。\n", + "version_mismatch" to "当前贴吧版本不受支持。请使用受支持的贴吧版本(%s-%s)或尝试更新模块。\n", "exception_init_preference" to "初始化设置失败,请尝试更换贴吧版本。", "regex_hint" to "请输入正则表达式,如.*", + "release_uri" to "https://github.com/GuhDoy/TiebaTS/releases", + "ci_uri" to "https://github.com/GuhDoy/TiebaTS/actions", ) } diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java index 1f4bbcd0..aefb681b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java @@ -21,6 +21,7 @@ public abstract class XposedContext { protected static String sPath; protected static AssetManager sAssetManager; private static Handler sHandler; + protected static boolean sIsModuleBetaVersion; protected static void attachBaseContext(final Context context) { if (sContextRef != null) { throw new IllegalStateException("Base context already set"); diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index dd585e27..14434e54 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -78,6 +78,7 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr sClassLoader = lpparam.classLoader; sAssetManager = XModuleResources.createInstance(sPath, null).getAssets(); mAppComponentFactory = (AppComponentFactory) sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); + sIsModuleBetaVersion = BuildConfig.VERSION_NAME.contains("beta"); // For some reason certain flutter page will not load in LSPatch unless we manually load the flutter plugin XposedHelpers.findAndHookMethod( @@ -108,7 +109,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { attachBaseContext((Application) param.args[0]); Preferences.init(getContext()); AcRules.init(getContext()); - String currTbVersion = DeobfuscationHelper.getTbVersion(getContext()); + DeobfuscationHelper.sCurrentTbVersion = DeobfuscationHelper.getTbVersion(getContext()); // Workaround to address an issue with LSPatch (unable to open personal homepage) // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory @@ -178,15 +179,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { o -> { if (o.getRequiredVersion() != null) { boolean isVersionSatisfied = DeobfuscationHelper.isTbSatisfyVersionRequirement( - o.getRequiredVersion(), - currTbVersion + o.getRequiredVersion() ); if (!isVersionSatisfied) { XposedBridge.log( String.format( "Skipping rule [%s] due to version mismatch (current version: %s)", o.toString(), - currTbVersion + DeobfuscationHelper.sCurrentTbVersion ) ); } @@ -225,8 +225,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable final var activity = (Activity) param.thisObject; final var messages = new ArrayList(); - if (DeobfuscationHelper.isTbSatisfyVersionRequirement(BuildConfig.MIN_VERSION, currTbVersion) - && (!DeobfuscationHelper.isTbSatisfyVersionRequirement(BuildConfig.TARGET_VERSION, currTbVersion) || currTbVersion.equals(BuildConfig.TARGET_VERSION))) { + if (DeobfuscationHelper.isTbBetweenVersionRequirement(BuildConfig.MIN_VERSION, BuildConfig.TARGET_VERSION)) { messages.add(Constants.getStrings().get("exception_rules_incomplete")); } else { messages.add(String.format(Locale.CHINA, @@ -235,7 +234,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } messages.add(String.format(Locale.CHINA, "贴吧版本:%s, 模块版本:%d", - currTbVersion, BuildConfig.VERSION_CODE)); + DeobfuscationHelper.sCurrentTbVersion, BuildConfig.VERSION_CODE)); messages.add(String.format(Locale.CHINA, "%d rule(s) lost: %s", lostList.size(), lostList)); final var message = TextUtils.join("\n", messages); XposedBridge.log(message); @@ -245,7 +244,11 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable .setNeutralButton("更新模块", (dialogInterface, i) -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); - intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases")); + if (sIsModuleBetaVersion) { + intent.setData(Uri.parse(Constants.getStrings().get("ci_uri"))); + } else { + intent.setData(Uri.parse(Constants.getStrings().get("release_uri"))); + } activity.startActivity(intent); }) .setNegativeButton(activity.getString(android.R.string.cancel), null) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index b23de1a4..314e8a55 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -153,7 +153,7 @@ private void proxyPage(final Activity activity, final NavigationBar navigationBa private void startRootPreferenceActivity(final Activity activity) { if (!Preferences.getIsEULAAccepted()) { final StringBuilder stringBuilder = new StringBuilder().append(Constants.getStrings().get("EULA")); - if (BuildConfig.VERSION_NAME.contains("beta")) { + if (sIsModuleBetaVersion) { stringBuilder.append("\n\n").append(Constants.getStrings().get("dev_tip")); } AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? @@ -278,7 +278,11 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(TSPreferenceHelper.createButton("版本", String.format(Locale.CHINA, "%s", BuildConfig.VERSION_NAME), true, v -> { final Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); - intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS/releases")); + if (sIsModuleBetaVersion) { + intent.setData(Uri.parse(Constants.getStrings().get("ci_uri"))); + } else { + intent.setData(Uri.parse(Constants.getStrings().get("release_uri"))); + } activity.startActivity(intent); })); return preferenceLayout; @@ -295,7 +299,7 @@ private LinearLayout createModifyTabPreference(final Activity activity) { preferenceLayout.addView(TSPreferenceHelper.createTextView("其他")); SwitchButtonHolder transitionAnimation = new SwitchButtonHolder(activity, "修复过渡动画", "transition_animation", SwitchButtonHolder.TYPE_SWITCH); - boolean shouldEnableTransitionAnimationFix = Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1", DeobfuscationHelper.getTbVersion(getContext())); + boolean shouldEnableTransitionAnimationFix = Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1"); if (!shouldEnableTransitionAnimationFix && Preferences.getTransitionAnimationEnabled()) { transitionAnimation.bdSwitch.turnOff(); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java index c425670f..eb399cc2 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java @@ -39,7 +39,7 @@ public String key() { @Override public void hook() throws Throwable { - if (!(Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1", DeobfuscationHelper.getTbVersion(getContext())))) { + if (!(Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1"))) { return; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java index 2f85dd7a..1f503fe4 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java @@ -26,6 +26,7 @@ public class DeobfuscationHelper { private static final int SIGNATURE_DATA_START_OFFSET = 32; private static final int SIGNATURE_SIZE = 20; + public static String sCurrentTbVersion; static byte[] calcSignature(final InputStream dataStoreInput) throws IOException { final MessageDigest md; @@ -108,8 +109,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } // Adapted from https://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in-java - public static boolean isTbSatisfyVersionRequirement(final String requiredVersion, final String currentVersion) { - String[] currParts = currentVersion.split("\\."); + public static boolean isTbSatisfyVersionRequirement(final String requiredVersion) { + String[] currParts = sCurrentTbVersion.split("\\."); String[] reqParts = requiredVersion.split("\\."); int length = Math.max(currParts.length, reqParts.length); for(int i = 0; i < length; i++) { @@ -127,4 +128,10 @@ public static boolean isTbSatisfyVersionRequirement(final String requiredVersion } return true; } + + // Inclusive of both ends + public static boolean isTbBetweenVersionRequirement(final String lower, final String upper) { + return isTbSatisfyVersionRequirement(lower) + && (!isTbSatisfyVersionRequirement(upper) || sCurrentTbVersion.equals(upper)); + } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 395dd365..7c5b819f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -107,7 +107,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); JSONArray indexTabInfo = syncData.getJSONArray("index_tab_info"); JSONArray newIndexTabInfo = new JSONArray(); - if (DeobfuscationHelper.isTbSatisfyVersionRequirement("12.59", DeobfuscationHelper.getTbVersion(getContext()))) { + if (DeobfuscationHelper.isTbSatisfyVersionRequirement("12.59")) { for (int i = 0; i < indexTabInfo.length(); i++) { JSONObject currTab = indexTabInfo.getJSONObject(i); if (currTab.getString("is_main_tab").equals("1") && !currTab.getString("tab_type").equals("6")) { @@ -335,14 +335,14 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(false)); } } - // 更多板块 (吧友直播,友情吧) - final String jsPurgeFrsBottom = FileUtils.getAssetFileContent("Purge.js"); - if (jsPurgeFrsBottom != null) { + // 更多板块 (吧友直播,友情吧), 一键签到页面广告 + final String jsPurgeScript = FileUtils.getAssetFileContent("Purge.js"); + if (jsPurgeScript != null) { XposedHelpers.findAndHookMethod(WebViewClient.class, "onPageStarted", WebView.class, String.class, Bitmap.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { WebView mWebView = (WebView) param.args[0]; - mWebView.evaluateJavascript(jsPurgeFrsBottom, null); + mWebView.evaluateJavascript(jsPurgeScript, null); } }); } From e9970c8f494e33ebe698c346da86a1fb7223f353 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 18 Apr 2024 22:24:24 -0700 Subject: [PATCH 129/158] [skip ci] chore: update AGP and dependencies --- app/build.gradle | 4 ++-- settings.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index cd5d2d3c..c86aacea 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,8 +81,8 @@ dependencies { implementation "androidx.room:room-ktx:$roomVersion" ksp "androidx.room:room-compiler:$roomVersion" - implementation 'io.reactivex.rxjava3:rxjava:3.1.7' - implementation 'org.luckypray:dexkit:2.0.0' + implementation 'io.reactivex.rxjava3:rxjava:3.1.8' + implementation 'org.luckypray:dexkit:2.0.1' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') implementation 'com.squareup.okhttp3:okhttp:4.12.0' diff --git a/settings.gradle b/settings.gradle index ee6f17c1..dfbf59b2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.3.0' - id 'com.android.library' version '8.3.0' + id 'com.android.application' version '8.3.2' + id 'com.android.library' version '8.3.2' id 'org.jetbrains.kotlin.android' version '1.9.0' id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false } From 1e9971daafbddd597ff019a1074a6dedea9129cb Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 19 Apr 2024 01:12:41 -0700 Subject: [PATCH 130/158] refactor: remove apktool --- app/apktool_2.7.0.jar | Bin 932338 -> 0 bytes app/build.gradle | 4 +- .../tieba/tabswitch/hooker/TSPreference.java | 9 +++- .../hooker/deobfuscation/Deobfuscation.java | 50 +----------------- .../deobfuscation/DeobfuscationHooker.java | 7 +-- .../deobfuscation/DeobfuscationViewModel.java | 9 +--- .../tabswitch/hooker/deobfuscation/Matcher.kt | 16 +----- .../hooker/eliminate/PurgeEnter.java | 4 +- .../tabswitch/hooker/extra/ForbidGesture.java | 10 ++-- 9 files changed, 22 insertions(+), 87 deletions(-) delete mode 100644 app/apktool_2.7.0.jar diff --git a/app/apktool_2.7.0.jar b/app/apktool_2.7.0.jar deleted file mode 100644 index 7bd91df2197725c81d4e93c1fd40897ec62601f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 932338 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%0DgctM#cMKwf0&&ymqah9w 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 z z&PWQ@FNVAHO``|4&uiuEXwc_g?S8&=Vjylo0&l#Ms=#cl60x$jN!UE-Sn+2*g$ZKk zoM{2S#4^fL6X9~`;@^`@dKkyc%XD)GJW@?1Ub2<*mu!+}Y)!I=2bIJk8c5|$l7x(Y zA9=L({1m3Vtx2P}%TOZ4Pje;~Q~@`0vBhi2^kMM~9rR(^)Neu9PrNZKAKGnxlwtqv zel$f~5;! zi=~QNIJ-F>bB2jIC{Ts2X0R zFfSA}58)ytP~c{sB>KELW3#rM@?M`(14YpHH@{Q|v!qlzB*vS`<>3VH@kT52-P?4G z{*UZENixO{#s)dZ1ML% zZMrAx3QVwQvnvLg=v~2smL=^i^1tpl74l5vak_>}p{GBaoyR<@Q9a%@O8-9OE~EDf z@;i9ZZ&*hV6b6nZh&4@K_obqE`T}vC;Dp&WGBzqM!o{?jE2za*oO)musc{qy(*ZwZr`xE>xmm9en}eN zvGDCM_?+HcEJl5DM+oo1Qf+F%Z3g#NS8%UBUBQb12YNZk_#`+9XOCuC6dQyYw_j`K zK^A6=UZysv(t)(dPmA%H*+(o}A&P$^ky~v&5PC<|^$!j(r1&~tff=ey$fKO%L-#<6 zv*beccAzjO_T5NuVX72O<8$@z@&yKaiKC<*(T5F&4N8v9_d*>{M2F-oPA%lH^AVof z;1XV{%o2PPQb1xyWDom%WDWE3ems8M zssB)RE8L3?Z>KU<*-%zgV652d3g<+H=gQr2_-WXZ@3-qOb|e}#p$A)ak}&)`*hOb< z#;=z{<^DXir<5oDwx!$%YoE*3Kw{V?@+5V*HX1DQRAZnp`g{5cL$*jdn*#f%*EFM7 zih89&L*R8_-H>Qe4}%Ys>9zyNwnp-vlgf@N%`!V%A%TiCRp;nT2Gzx_w=Ks8Ew=n0 z7g}ZtiErY~$o#P&JIH-a3bm(lxjc(PtzXWf=3NuZJ z2Lzwx@24fP>Q$}Tx(}lHT(58ugol~i{E}b;c_m9B#X5JEteu4rp7pg9VtMv`M{jHQ zJ!Ya54-?dWvg~VAvtDiBV3!?#N_f$s6ZfXq2AT|nI1pfNOu!5_mB_>qE~l3ISST@1 z>0@~ERqtcCvjg32@TC@WTW4ji<+bczSydlp@EQ_jE8)CRV=7%_V9-^n)VgyW+5L({ zfOfI=pkFJLnCol;ch);Jk;8M3ocT1mw*rwSIRGx8T@#9kQ^RwwiDQ*b7E&5F<|oMJ z4F1ff0khybrBu=<6mFw)HmBI*k|c9A3doaTBoStF41FeSl;@C-ki^2DP2=rrCBF9( zJcm9t7(U?>+S{x_&`pF(Ts~3R`laBG9eh?X&no0>2r%rmn3 zh%#mY5f-nkN&!Tpl$XRu^I7HjK(iGD~AsY=1#%?FK7sEFCUKU?~Zfq z_bA1`;Su^bCqmNJ_&bZSHgR-RHnDd$u{AOgwRLiES2M77{)ZQ@QnPVf7eVlmtE*a3 zG*UJv>}Y~4UXd&N8+?1Dw02ZQCbza1yO+!^%4s-Qe<0yN@bx?A$2&M*VH%s{XwP+8 z_X1{cXM+$^8FGfCxZ||Nm0J6s>C4K?D_@^4b_{}~1q2;ePL0Hq(q955X@0;(Nj zN0tE23#god^^cDkFcg-^eIuY{P@QE4zjiD#Fd67)nVuBj@@JKPZ?F7aAY1ciD0Nn^ zs0^&G-k(@qgW_0N&k6wn`QYe(SStlVk6;RF(Wyq0b z`|nyyw&Rq`W*Z}Ld7FU8m+aiK>+~RDlyN$i3R>x4?vXw=ky|{(sC8qlL8p6*kLj8w zdK|K*6nQF!7<_^M7&P0hRcq!r0o!$Exgt)+kh61NvSEq1n%|{X28Mf%jvC`RQBOKq zp81~2#>_a%$i|cV zkF}yiFDJ1h*u0(F{-y_a{&Gu>?H|%IYnuIv+b53vAEdoyR2=HECLDr8<1{Y8-3jjQ?iSqL-D%uig1fuB zySuvuhY&1bIOpE`&Ds0Toi%5DKl*pC)vMpCryi*yAWt_?$QJSCqiExC(=ksN+pF$F z+js@jL!An_Q*+SH9xI{kyQ5k|H;pzO^<;gcHAo}Zl)=19#fEwe7UJva`Rc0BN(|XB zJk=f*9&AFO@I6dT&_r0MHJfX5KP*pgUfANIN|G_^ryeKtQ#OY~*I1zpZ%#dLcJez8 z+JMBb1e4K6o!ajfSF;wS0v(GkCk^=JZ_`qtzFLbK8O+A{Wb@X~U$t(28Ad{Ujm(gi zk+CT6FMaU8cMj5jD0S}ef2sg4OL`hgES%-iC4ecB$RKKqJvO#|VERa19MkiOo#&}! z5#gb4NFg{3_2tkP;d&-a$87?vU$M z^7PdPep5ik?FdsHk|Ak|W_P=}>rz19;pu}J_$G0oZ%(44B+ODmvouPsSFTc!$)Q{} z%yuiZaZ@u2w}ju>9$DHr)qFdQF?~&3Ptn~RvckT8^-C4;NzP_(6H#w1_u!W#s@Ulx zWKjUokf5FeQ&nZZviDmd#FM7xfZaG!0#+5iqr@aH&ToZm!J zdsbG!?($C}Ek%Vql)PJyG|a-6_rF;s5j#H*MSfHkE7(t;r2nrNP~mS(iI}yW+h1zR zfA-z~ujT%uuq=on`%c%BXe;7?hhV%2p#qw|W2_M+VM4=^B4XjexWIgE42kqk45Lh- z8Ebr|`3+R`V%KNP6fOH4Zg~ z%BEsn>3($tp$e<&rm_Qn5Cj}Hsp909Aci6i>Y*?w&sVpl0nG%z<)$jeBkD(M zw4L)Cgz(5rYyJTdJxkOvyvvF<+wyaU%@g7`U>+II%+Dy!t130Dn9D#9+N@soa;3`{ zxJ}i)r{O@AV5PedQBctH3(21}TsF6qXl?1(U~H8`Pr4l%kxZ}do2X}nrR8;3GC97V zU4!QkDK>|WLV4%&97EVu$?X-0}J*+2K>FW{PRXE)Fy1G zu49h=%;vUh_#6e72^4m2E9rjiU1_$V)o*UHwhWFl3BHYKu@krhOYXC?Z+;O;k9c-1 zbY{;WjS>lp{kfUAACM2S^fX^_bh~h^DXJc*!yJ6XUy5cJAN59wTet^*+-z{kjkALV zE!%TvQ<>69zACu?Fqd`)l$mD^%PK$lR_kQwV{N*Q7tL$i87g^h^e*HXRl_)ar47h3 zK~Yd2g&&S1r_h?Y@+LyDbBGCuq0x(ERNM=c(j1J{lu|E89ZABB=p8|4eGzgCGC z$T|wd>0(u}_(|)Lct|E;HFV3LhshrQJE#+aKCVy~B4<#v-o;|U-`8Kd5ZiZfMKO4V zwbvxr^_J?P1j{>ygf))XY?q8#)&zVY+SD;ft1ErIS3LTJBdhlsD>;|W`|WdCG3y#R zBJV)S))KgU;h*bo+N*Br>jyJ8V;GP8uvYON1bH%fS$%Pi7--|1I?B^Vdg(&aZOF&I zrJ3K7UXf+&ClwyQ-p%X#8R>~~!9ORXEU^l6qmKzVc%wmku`thziYOK}iM-X%GT-Ws z{%Ep4QI&}&C}@yKP>(hw$tu`s@FB6u6AMl>h} zs2^3^SxX3(Hmi6h<}s+QfBhvpz_b-{YiX6LEhxC1s#Ha3S$xyRs26JJQ*(^2;pW=GY3|t};X2M}rNyVQjPkHX(a--`uh3D6B0iXMla%P^a zFVXz@C55Vib$ld29}VT$@a8(L-#+^uYT(8LOc`H3FeBb*C^xyQJ?@KUPpgII=6^tJ z-qIWYV_^u#R&1^@fRVmL7J;M`qZCo8{v6I=?NjU}C)LorAN$i=WpImb%jb;(PZ_;U z9Z(&-)<(whV$FE&ve3w4l}6Ro^=!!dhA{1F-I>{09I+&VHByX6@-I%0LngV3xVZ(e z6p7I)v5KbXX0l7c_Abd~JWV)By2RhX?#D1M;`Qi-XN5Hq_yQnj-Sb(6LAnGP`bl!( z5Z7wsQBy=@e*Z^Eb#raW1D5uN&{prTZM(3pWcCY~RK&Uaz1T=;bi^bgXPN;lB{3oO z-y_bl>RVVt)BveZj!x{~tC5RkL1|+IL~~q+w?-m~;+9q_pD--t!@rU9;re<&QzZli z+fmT$9E#<$$k0I_{cYr&R8Z1g{b+yAAEX)i|3e%6kAHkfEU(pPL1fU*t<_J~@O4d5 z)?BtV;-ctXXgnA=*E6;ed$Ac+SJlyP(tAiZ;*yVQ6TLP}Gn04BJWgG|^*(v$Qr(c= z(B2R$P&mH^J#P=*iC>~xG_BWPKTW=vAF&R_&HgY8+5T7`bR+q(k4T7aF=L8Dak-vM zC3Reb?HbobEm*&aKRwKB2eyMq%c=1vF3eF{Y;1G3sY$*wE#^1en9UU{5LjN~rG)uA z8kal2#|o(m;-p&%YThTImpe!|7%6`vaM2kpsYB!^Ex|P=`{&Ng!P1|9qltRq?ICDC zN`(vZ|7gYjAIimlg9!ievsI~|sVjekxMj(25=M-uDoPh~75nqS(5)i1;)j$3R7%k+ zm&DzLNJ(#xAp2}xYiw+)wvw(Q*OwphexTTM+Wg)`;w^diCw#5*6DZ5x_K;*n5Hvgs z{gs){?RK^4b+XNE=iBA-)9jPgZ4g4u#!Xi+8tQhuy;6S%>UQEycQ6vEH|1VZ@B%71 zsW<7K5p0gclS;oCDqreNNHD{t#0WVzbL~P5Z6n;Oi8vn{+$!y^0hqS2ePyaav_Pc4 z&F6OG)f;~RH$f7SQIJeN4umyumNHjTpdm_zhcxlY6MHQ`HB=n35%x4r(O(XXo7tX_ z0A-e5zax<70oGlqmk;a}(j5X%!5;Yl4rD-i6TThhFZ@|gpeGQMDR-Bw6iyFRybBcc z0(wDQsNUc}0XqXufSuu6a53=i@Lh1*!v}EPs9iO4RlBs=3igObaNR=&kUM)!Aa8Y# zS3wsQmsged+>VC#++(J5v@u=K)lVeUwxm%opIP4On5Rvm9bosKg>HjQy3NRP?FxJDS!4MZ zY`^@h(p$GgCuZ1pYpETc>Q|%%*}eGOVmBxRyIw-a=BLl09Z?QBrZ{s_r{}jOwPt-S zZX168qKpIx=H1^+#AVKmHn0ZU5WBBpVq_MwjVavPk|P<%;!cV{Z@EIda%g)jRKgv9 z#hPdL{H; z3y`YVsX2@0`-(mx_{&Qvy=qa5juWZBbnNB-Lcj&+P@)cACir{MH;$ z;Gm!VsSk(s`*Eb~_}t<^ zDxkwk(X2F!yS2c~RBIK_L3wC%)8QG%gg%F%ICF$2ql^jCn)+7WBSGudbk*MO8H;fJ zC%l9S=oqpxMjq9S+6{8x?s-Dcv4*UT0xM-o88P8HRY5(0g-mBvWj-haV?u}k0C6S< zlL1nk)e731MMe=~g0CEoOC{#lWtEdM%|r=1L@+5viC1)V4;v2^ehNE9TypT=`~f5S z8y>m~f`bys5^gSGXvDMif^b zGQC)KWI+>S~Sla@*UaC5v+Spf!B~t4w;l8dA=>|2q;Y>KLp-a(}DDXm#pr%-ujFaJ=uw@;&>Krlqo}{<-HGJH2X|T?o(BX+)y7gY}h1bAk zFn)DMQGO zTi05rj3hXgM7T&F@mQ6Dv`UJpS!6?2B?OJ@SX9h5K2~pZ)r7Nnru}9m8gAtl9CX*G8ve-)Nl#vPO z4DN(9(sU%{L^FMXzC(LL!_SZmNV1^Fc}-Z&Mc@Ve&h-tN(R z|3l$#!NGhr-b!)M9RJ6lzt3RE&ZxpgI-TN^^i5v2P~yk$`0(n#2a~?86&$qaV{4(3iCaLITx8 zGzX(1xSzyCQ7~0$_v#}|WGXaJOo5mxNg->4oIqffy1{-196Uc`mPGMg=8KUoi;I!!<;^x|tG6 zNHn30c)+@TqF9#zKE_)-CgZAgbI$ffxLS+Fj4QkRDp}TM+2NroumqQQR7Hbp{Y6c} zn)2iJ^2x*Y=MtmTbC7y-)wJL{=5Vchuuags-dCG~geD%d3Pod-sl(+kVwk0W>8 zg8pE&Wdp{JO__*jZEfj`aKaBtYt&w;*hy*t055jOAoihus^It(Qz_@fzTEJlZfXYr z{JDOpW~IVvQ*&`erk`+T17wTgQbPNt??5_;M1ieF4!GaT{ljXO9JX^T`=iuvK|WWPW&2Eg5pT zGO0>1HzK8W4BNQHu_bH+z@874E(0o4ZLE@`6n7T}+0PrLdExexfDxvXmue8p z_!(hcR_j^*&THD>G{DEffNh9$<<6}2aRZ7GV$%{}wm`LGh@Q#`tD|UrC%fkHK#i92d}9X` z{<42lzaups6N3dmV>`B}j^IRBi7$u`?~n)zAhU>tsk$u8G1}$aK6?f~cRa-2rt9o2 zL2Y&risZ)Bct3NW z=p4=A-^kM)8GH6RN3gAJZrdD-g_#XQT)iDdN@=@g`w88je~UvrOGVC|4=umS9gdy9L}K6xbR5jim- zj=!!5Zl9c{k7}{X5&>MNpY6d>E=WwjmVdc7i@oXk*0%8{vn31(tH>!_Ycm(*0{=H+OnpsR*$n;N=Q$2{UlqBf z9l8kB9(GshM|D_A1Pyw$>n&n=5Ci_hVR|n ze;~Wvikq8HHc8`P!$mHIeRo_Rvz)Ge{eHaYoB3qA>%|?jcKbb08BUJoNv01Q(hTTb zy_*$y4@XbgTDqGM=n9z%)KRoo?fVM(?XWkdiBsVgW1t=H(1?D32lNbp$HL(H!ZZ<3 zNvXn2Yo>86z_x8K&}R)Dt~FSjW&k^&1cC#ZAaXE{1Ox!6x1IHoXF$0Tdp00TXprI8 zfsBCBAvjPnphAVUf8d5-;1%!_&<;mPOx?`H$^wD)$b2z^0fgRFbwJLD5PlLEGGHxz z3Pa)>CI`8x;`ONkbM$i}mQe3zCJyB*eSw-N z3ny+2On|DY;l<7@PFd`TA2SmG+Hb$$%3lN3*ZtpC&^-YXbYAbOplCfTNmM zNLQtRG_lNH{p^}~A)@l^ae*NJD$8_#Eg;OPSjac{(4UN7LCIY4$7-*iU(O|@yKEON zfBK@Pf5U&U{KGYMbIaAN87Fu=IYmoWX%QG;4CU4}xlg8$7QuM2w94)#>ntO_+!Bgm zJS!Obs3B8#5&rAcn4el($W;6LaqMY0ZI_&qvg~%W;>jZy$M?(}{{nI>rp^~f!V%xN zCCD(c$8UhJI@s~hfQ*%j(18$>qN1X~gSq^iikZ)#GaHmF#hlGgY=e9!)^l>m$V|i| ze7aG{fhhXR#;9WEsQH^qysw(v$O?4B9m+KNyB^7PQkO-!alw{qjm;oFlgB81r(3 z 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%0A#a@8ivJwJD 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 z%0D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%0D$Wbw0+)9X?ZdF6c_Fxm(cA3| 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≀H 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%0Alfc;an) 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 k@hyHd7bVJ=`;CZ}XOA5E{CF?^!{>(k_ST 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 diff --git a/app/build.gradle b/app/build.gradle index c86aacea..d43f18a0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,7 +23,7 @@ android { if (versionName.contains('beta')) { versionNameSuffix = '.' + commitCountSinceLatestTag } - buildConfigField "String", "TARGET_VERSION", "\"12.59.0.3\"" + buildConfigField "String", "TARGET_VERSION", "\"12.59.1.0\"" buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' @@ -83,8 +83,6 @@ dependencies { implementation 'io.reactivex.rxjava3:rxjava:3.1.8' implementation 'org.luckypray:dexkit:2.0.1' - // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files - implementation files('apktool_2.7.0.jar') implementation 'com.squareup.okhttp3:okhttp:4.12.0' implementation 'dev.rikka.ndk.thirdparty:cxx:1.2.0' } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 314e8a55..9b5a8553 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -36,8 +36,10 @@ import gm.tieba.tabswitch.hooker.TSPreferenceHelper.SwitchButtonHolder; import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringResMatcher; +import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.extra.TraceChecker; +import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.widget.NavigationBar; import gm.tieba.tabswitch.widget.TbToast; @@ -57,7 +59,10 @@ public String key() { @Override public List matchers() { - return List.of(new StringResMatcher("隐私设置")); + return List.of(new SmaliMatcher( + "Lcom/baidu/tbadk/data/MetaData;->getBazhuGradeData()Lcom/baidu/tbadk/coreExtra/data/BazhuGradeData;", + MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("mo/q/wise-bawu-core/privacy-policy")) + )); } @Override diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 8875f28a..05f4a705 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -13,15 +13,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Objects; import java.util.function.Consumer; import java.util.zip.ZipFile; -import brut.androlib.AndrolibException; -import brut.androlib.res.data.value.ResStringValue; -import brut.androlib.res.decoder.ARSCDecoder; import gm.tieba.tabswitch.XposedContext; import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.dao.Preferences; @@ -48,51 +44,9 @@ private void forEachProgressed(final PublishSubject progress, } } - public void decodeArsc(final PublishSubject progress, final Context context) - throws IOException, AndrolibException { - packageResource = context.getPackageResourcePath(); - progress.onNext(0F); - final var strToResMatcher = new HashMap(); - final var resIdentifierToResMatcher = new HashMap(); - for (final var matcher : matchers) { - if (matcher instanceof ResMatcher) { - if (matcher instanceof final ResIdentifierMatcher resIdentifierMatcher) { - resIdentifierToResMatcher.put(resIdentifierMatcher.toResIdentifier(), resIdentifierMatcher); - } else { - strToResMatcher.put(((StringResMatcher) matcher).toResIdentifier(), (ResMatcher) matcher); - } - } - } - - final var zipFile = new ZipFile(packageResource); - final var ze = zipFile.getEntry("resources.arsc"); - try (final var in = zipFile.getInputStream(ze)) { - final var pkg = ARSCDecoder.decode(in, true, true).getOnePackage(); - forEachProgressed(progress, pkg.listResSpecs(), resResSpec -> { - final var identifierMatcher = resIdentifierToResMatcher.get(String.format("%s.%s", resResSpec.getType().getName(), resResSpec.getName())); - if (identifierMatcher != null) { - identifierMatcher.setId(resResSpec.getId().id); - } else if (resResSpec.hasDefaultResource()) { - try { - final var resValue = resResSpec.getDefaultResource().getValue(); - if (resValue instanceof final ResStringValue resStringValue) { - final var str = resStringValue.encodeAsResXmlValue(); - final var matcher = strToResMatcher.get(str); - if (matcher != null) { - matcher.setId(resResSpec.getId().id); - } - } - } catch (final AndrolibException e) { - // should not happen - } - } - }); - } - zipFile.close(); - } - - public void dexkit(final PublishSubject progress) { + public void dexkit(final PublishSubject progress, final Context context) { load("dexkit"); + packageResource = context.getPackageResourcePath(); final var bridge = DexKitBridge.create(packageResource); Objects.requireNonNull(bridge); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java index a0156392..e71eb60c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java @@ -86,11 +86,8 @@ public void afterHookedMethod(final MethodHookParam param) throws Throwable { new Thread(() -> { try { - setMessage("(1/2) 解析安装包资源"); - viewModel.deobfuscateStep1(mActivity, mMatchers); - - setMessage("(2/2) 搜索资源,字符串和方法调用"); - viewModel.deobfuscateStep2(); + setMessage("搜索资源,字符串和方法调用"); + viewModel.deobfuscate(mActivity, mMatchers); XposedBridge.log("Deobfuscation complete, current version: " + DeobfuscationHelper.getTbVersion(mActivity)); diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java index ac027c3b..08ec9338 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java @@ -5,7 +5,6 @@ import java.io.IOException; import java.util.List; -import brut.androlib.AndrolibException; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.subjects.PublishSubject; @@ -14,13 +13,9 @@ public class DeobfuscationViewModel { public final Observable progress = _progress; private final Deobfuscation deobfuscation = new Deobfuscation(); - public void deobfuscateStep1(final Context context, final List matchers) throws IOException, AndrolibException { + public void deobfuscate(final Context context, final List matchers) throws IOException { deobfuscation.setMatchers(matchers); - deobfuscation.decodeArsc(_progress, context); - } - - public void deobfuscateStep2() throws IOException { - deobfuscation.dexkit(_progress); + deobfuscation.dexkit(_progress, context); deobfuscation.saveDexSignatureHashCode(); } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 756516a7..312bfa16 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -49,18 +49,6 @@ class ReturnTypeMatcher @JvmOverloads constructor(val returnType: Class, p override fun toString(): String = super.toString() + returnType.simpleName } -open class ResMatcher @JvmOverloads constructor(var id: Long = 0, properties: MatcherProperties? = null) : Matcher(properties) { - open fun toResIdentifier(): String { - throw UnsupportedOperationException() - } -} - -class StringResMatcher @JvmOverloads constructor(val str: String, properties: MatcherProperties? = null) : ResMatcher(properties = properties) { - override fun toString(): String = super.toString() + str - override fun toResIdentifier(): String = str -} - -class ResIdentifierMatcher @JvmOverloads constructor(val name: String, val defType: String, properties: MatcherProperties? = null) : ResMatcher(properties = properties) { - override fun toString(): String = super.toString() + String.format("%s.%s", defType, name) - override fun toResIdentifier(): String = String.format("%s.%s", defType, name) +class ResMatcher @JvmOverloads constructor(val id: Long, val name: String, properties: MatcherProperties? = null) : Matcher(properties) { + override fun toString(): String = super.toString() + name } \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 0d090431..320505a7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -18,7 +18,7 @@ import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.ResIdentifierMatcher; +import gm.tieba.tabswitch.hooker.deobfuscation.ResMatcher; import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; @@ -36,7 +36,7 @@ public String key() { @Override public List matchers() { return List.of( - new ResIdentifierMatcher("tbds400", "dimen", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))), + new ResMatcher(ReflectUtils.getR("dimen", "tbds400"), "dimen.tbds400", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))), new MethodNameMatcher("onSuccess", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))) ); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java index af4c0026..271753b3 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java @@ -20,7 +20,7 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringResMatcher; +import gm.tieba.tabswitch.hooker.deobfuscation.ResMatcher; import gm.tieba.tabswitch.util.ReflectUtils; public class ForbidGesture extends XposedContext implements IHooker, Obfuscated { @@ -33,16 +33,14 @@ public String key() { @Override public List matchers() { - return List.of(new StringResMatcher("特大号字体")); + return List.of(new ResMatcher(ReflectUtils.getR("drawable", "icon_word_t_size"), "icon_word_t_size")); } @Override public void hook() throws Throwable { // 帖子字号 - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, "c", XC_MethodReplacement.returnConstant(null)); - XposedHelpers.findAndHookMethod(clazz, sClassLoader, "d", XC_MethodReplacement.returnConstant(null)); - } + AcRules.findRule(matchers(), (matcher, clazz, method) -> + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)) ); // 视频帖字号 XposedHelpers.findAndHookMethod("com.baidu.tieba.pb.videopb.fragment.DetailInfoAndReplyFragment", sClassLoader, From 79f22799563f710923e601f483cada6c98b87b4f Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 19 Apr 2024 22:03:09 -0700 Subject: [PATCH 131/158] fix: history search regex persists after closing activity --- app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java | 2 +- .../main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 9b5a8553..62c5776b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -325,7 +325,7 @@ private LinearLayout createHidePreference(final Activity activity) { final boolean isPurgeEnabled = Preferences.getIsPurgeEnabled(); final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); if (isPurgeEnabled || BuildConfig.DEBUG) { - preferenceLayout.addView(TSPreferenceHelper.createTextView(null)); + preferenceLayout.addView(TSPreferenceHelper.createTextView("隐藏设置")); preferenceLayout.addView(new SwitchButtonHolder(activity, isPurgeEnabled ? "藏起尾巴" : "隐藏模块", "hide", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, isPurgeEnabled ? "藏起尾巴(原生)" : "隐藏模块(原生)", "hide_native", SwitchButtonHolder.TYPE_SWITCH)); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java index c316a4a1..ab4fe65f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java @@ -48,6 +48,9 @@ public void hook() throws Throwable { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { final var activity = (Activity) param.thisObject; + if (param.args[0] == null) { + mRegex = ""; + } new NavigationBar(param.thisObject) .addTextButton("搜索", v -> showRegexDialog(activity)); } From eefdbcdaea4f352e12d4923241c434b077e17075 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 19 Apr 2024 23:03:39 -0700 Subject: [PATCH 132/158] refactor: simplify Matcher class --- .../java/gm/tieba/tabswitch/XposedInit.java | 4 +- .../java/gm/tieba/tabswitch/dao/AcRules.java | 6 ++ .../tieba/tabswitch/hooker/TSPreference.java | 7 +-- .../gm/tieba/tabswitch/hooker/add/Ripple.java | 2 - .../tabswitch/hooker/add/SaveImages.java | 25 ++++---- .../tabswitch/hooker/add/SelectClipboard.java | 16 +++-- .../tieba/tabswitch/hooker/auto/FrsTab.java | 2 - .../tabswitch/hooker/auto/OriginSrc.java | 3 +- .../hooker/deobfuscation/Deobfuscation.java | 4 +- .../tabswitch/hooker/deobfuscation/Matcher.kt | 60 ++++++------------- .../hooker/eliminate/FragmentTab.java | 20 ++----- .../hooker/eliminate/PurgeEnter.java | 14 +++-- .../tabswitch/hooker/eliminate/PurgeMy.java | 11 ++-- .../tabswitch/hooker/extra/ForbidGesture.java | 4 +- .../tabswitch/util/ClassMatcherUtils.java | 42 ------------- .../gm/tieba/tabswitch/util/Collections.kt | 23 ------- .../gm/tieba/tabswitch/widget/TbToast.java | 2 +- 17 files changed, 75 insertions(+), 170 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java delete mode 100644 app/src/main/java/gm/tieba/tabswitch/util/Collections.kt diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 14434e54..4f2556b7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -177,9 +177,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { // Remove matchers that does not satisfy version requirement matchersList.removeIf( o -> { - if (o.getRequiredVersion() != null) { + if (o.getReqVersion() != null) { boolean isVersionSatisfied = DeobfuscationHelper.isTbSatisfyVersionRequirement( - o.getRequiredVersion() + o.getReqVersion() ); if (!isVersionSatisfied) { XposedBridge.log( diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java b/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java index 11cd62fb..67ed4f8c 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java +++ b/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java @@ -42,6 +42,12 @@ public static void findRule(final List matchers, final Callba } } + public static void findRule(final String str, final Callback callback) { + for (final var rule : sDao.loadAllMatch(str)) { + callback.onRuleFound(rule.getMatcher(), rule.getClazz(), rule.getMethod()); + } + } + public static boolean isRuleFound(final String matcher) { return !sDao.loadAllMatch(matcher).isEmpty(); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 62c5776b..aac8d78a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -20,6 +20,7 @@ import androidx.annotation.NonNull; import org.jetbrains.annotations.NotNull; +import org.luckypray.dexkit.query.matchers.ClassMatcher; import java.util.ArrayList; import java.util.List; @@ -36,10 +37,8 @@ import gm.tieba.tabswitch.hooker.TSPreferenceHelper.SwitchButtonHolder; import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.extra.TraceChecker; -import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.widget.NavigationBar; import gm.tieba.tabswitch.widget.TbToast; @@ -60,8 +59,8 @@ public String key() { @Override public List matchers() { return List.of(new SmaliMatcher( - "Lcom/baidu/tbadk/data/MetaData;->getBazhuGradeData()Lcom/baidu/tbadk/coreExtra/data/BazhuGradeData;", - MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("mo/q/wise-bawu-core/privacy-policy")) + "Lcom/baidu/tbadk/data/MetaData;->getBazhuGradeData()Lcom/baidu/tbadk/coreExtra/data/BazhuGradeData;") + .setBaseClassMatcher(ClassMatcher.create().usingStrings("mo/q/wise-bawu-core/privacy-policy") )); } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java index 34949757..092a38f0 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java @@ -2,9 +2,7 @@ import android.content.Context; import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.PaintDrawable; import android.graphics.drawable.StateListDrawable; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java index e6f6f149..bfad5c7a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java @@ -13,6 +13,8 @@ import androidx.annotation.NonNull; +import org.luckypray.dexkit.query.matchers.ClassMatcher; + import java.io.File; import java.io.IOException; import java.lang.reflect.Field; @@ -32,9 +34,7 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.ReturnTypeMatcher; -import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.FileUtils; import gm.tieba.tabswitch.util.ReflectUtils; import gm.tieba.tabswitch.widget.TbToast; @@ -53,24 +53,19 @@ public String key() { @Override public List matchers() { return List.of( - new ReturnTypeMatcher<>(LinearLayout.class, MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("分享弹窗触发分享:分享成功"))) + new ReturnTypeMatcher<>(LinearLayout.class, "save_images").setBaseClassMatcher(ClassMatcher.create().usingStrings("分享弹窗触发分享:分享成功")) ); } public void hook() throws Throwable { - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - switch (matcher) { - case "分享弹窗触发分享:分享成功/LinearLayout": - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, int.class, int.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - LinearLayout downloadIconView = (LinearLayout) param.getResult(); - downloadIconView.setOnLongClickListener(saveImageListener); - } - }); - break; + AcRules.findRule("save_images", (matcher, clazz, method) -> + XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, int.class, int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + LinearLayout downloadIconView = (LinearLayout) param.getResult(); + downloadIconView.setOnLongClickListener(saveImageListener); } - }); + })); XposedBridge.hookMethod( ReflectUtils.findFirstMethodByExactType("com.baidu.tbadk.coreExtra.view.ImagePagerAdapter", ArrayList.class), diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java index c6ba0602..d3cac42f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java @@ -9,6 +9,10 @@ import androidx.annotation.NonNull; +import org.luckypray.dexkit.query.matchers.ClassMatcher; +import org.luckypray.dexkit.query.matchers.MethodMatcher; +import org.luckypray.dexkit.query.matchers.MethodsMatcher; + import java.util.List; import de.robv.android.xposed.XC_MethodReplacement; @@ -18,9 +22,7 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; -import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.util.ReflectUtils; @@ -34,15 +36,19 @@ public String key() { @Override public List matchers() { return List.of( - new SmaliMatcher("Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V", - MatcherProperties.create().useClassMatcher(ClassMatcherUtils.invokeMethod("Lcom/baidu/tbadk/core/data/SmallTailInfo;->()V"))) + new SmaliMatcher("Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V") + .setBaseClassMatcher(ClassMatcher.create().methods( + MethodsMatcher.create().add(MethodMatcher.create().addInvoke( + MethodMatcher.create().descriptor("Lcom/baidu/tbadk/core/data/SmallTailInfo;->()V") + ))) + ) ); } public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { switch (matcher) { - case "Lcom/baidu/tbadk/core/data/SmallTailInfo;->()V/Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V": + case "Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V": XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java index ff4694c7..f207ad5b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java @@ -2,7 +2,6 @@ import androidx.annotation.NonNull; -import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.List; @@ -15,7 +14,6 @@ import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; public class FrsTab extends XposedContext implements IHooker, Obfuscated { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java index 3eb8449e..3a868c44 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java @@ -19,7 +19,6 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.dao.Preferences; import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; public class OriginSrc extends XposedContext implements IHooker { @@ -36,7 +35,7 @@ public String key() { private static void doHook() { if (isHooked) return; - AcRules.findRule(new StringMatcher("pic_amount"), (matcher, clazz, method) -> + AcRules.findRule("pic_amount", (matcher, clazz, method) -> picListUnhook = XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, JSONObject.class, Boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index 05f4a705..4fd18235 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -53,7 +53,7 @@ public void dexkit(final PublishSubject progress, final Context context) forEachProgressed(progress, matchers, matcher -> { MethodDataList ret = new MethodDataList(); if (matcher.getClassMatcher() != null) { - ClassDataList retClassList = bridge.findClass(FindClass.create().matcher(matcher.getClassMatcher().getMatcher())); + ClassDataList retClassList = bridge.findClass(FindClass.create().matcher(matcher.getClassMatcher())); for (var retClass: retClassList) { ret.addAll(findMethod(bridge, FindMethod.create().searchPackages(retClass.getName()), matcher)); } @@ -94,7 +94,7 @@ private MethodDataList findMethod(DexKitBridge bridge, FindMethod baseMethodQuer } else if (matcher instanceof final MethodNameMatcher methodNameMatcher) { ret = bridge.findMethod( baseMethodQuery.matcher( - MethodMatcher.create().name(methodNameMatcher.getName()) + MethodMatcher.create().name(methodNameMatcher.getMethodName()) ) ); } else if (matcher instanceof final ReturnTypeMatcher returnTypeMatcher) { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 312bfa16..16cc8f5f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -1,54 +1,30 @@ package gm.tieba.tabswitch.hooker.deobfuscation -import gm.tieba.tabswitch.util.ClassMatcherUtils - -class MatcherProperties { - var classMatcher: ClassMatcherUtils? = null - var requiredVersion: String? = null - companion object { - @JvmStatic - fun create() : MatcherProperties { - return MatcherProperties() - } - } - override fun toString(): String { - val versionString = requiredVersion?.let { "$it@" } ?: "" - return versionString + classMatcher?.toString().orEmpty() - } - fun useClassMatcher(classMatcher: ClassMatcherUtils) : MatcherProperties { - this.classMatcher = classMatcher +import org.luckypray.dexkit.query.matchers.ClassMatcher + +abstract class Matcher(private val name: String) { + var classMatcher: ClassMatcher? = null + var reqVersion: String? = null + + override fun toString(): String = name + + fun setBaseClassMatcher(baseClassMatcher: ClassMatcher) : Matcher { + classMatcher = baseClassMatcher return this } - fun requireVersion(requiredVersion: String) : MatcherProperties { - this.requiredVersion = requiredVersion + + fun setRequiredVersion(version: String) : Matcher { + reqVersion= version return this } } -abstract class Matcher(private val properties: MatcherProperties? = null) { - override fun toString(): String = properties?.toString().orEmpty() - fun getClassMatcher(): ClassMatcherUtils? = properties?.classMatcher - fun getRequiredVersion(): String? = properties?.requiredVersion +class StringMatcher @JvmOverloads constructor(val str: String, val name: String = str) : Matcher(name) -} +class SmaliMatcher @JvmOverloads constructor(val descriptor: String, val name: String = descriptor) : Matcher(name) -class StringMatcher @JvmOverloads constructor(val str: String, properties: MatcherProperties? = null) : Matcher(properties) { - override fun toString(): String = super.toString() + str -} - -class SmaliMatcher @JvmOverloads constructor(val str: String, properties: MatcherProperties? = null) : Matcher(properties) { - override fun toString(): String = super.toString() + str - fun getDescriptor(): String = str; -} +class MethodNameMatcher(val methodName: String, val name: String) : Matcher(name) -class MethodNameMatcher @JvmOverloads constructor(val name: String, properties: MatcherProperties? = null) : Matcher(properties) { - override fun toString(): String = super.toString() + name -} - -class ReturnTypeMatcher @JvmOverloads constructor(val returnType: Class, properties: MatcherProperties? = null) : Matcher(properties) { - override fun toString(): String = super.toString() + returnType.simpleName -} +class ReturnTypeMatcher(val returnType: Class, val name: String) : Matcher(name) -class ResMatcher @JvmOverloads constructor(val id: Long, val name: String, properties: MatcherProperties? = null) : Matcher(properties) { - override fun toString(): String = super.toString() + name -} \ No newline at end of file +class ResMatcher(val id: Long, val name: String) : Matcher(name) \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java index 623ee663..603d8188 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java @@ -2,13 +2,14 @@ import androidx.annotation.NonNull; +import org.luckypray.dexkit.query.matchers.ClassMatcher; + import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XC_MethodReplacement; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; @@ -17,10 +18,8 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; public class FragmentTab extends XposedContext implements IHooker, Obfuscated { @@ -35,17 +34,14 @@ public String key() { public List matchers() { return List.of( new StringMatcher("has_show_message_tab_tips"), - new SmaliMatcher("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V", - MatcherProperties.create().useClassMatcher( - ClassMatcherUtils.usingString("has_show_message_tab_tips") - ) - ) + new SmaliMatcher("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V") + .setBaseClassMatcher(ClassMatcher.create().usingStrings("has_show_message_tab_tips")) ); } @Override public void hook() throws Throwable { - AcRules.findRule(new StringMatcher("has_show_message_tab_tips"), (matcher, clazz, method) -> { + AcRules.findRule("has_show_message_tab_tips", (matcher, clazz, method) -> { final var md = ReflectUtils.findFirstMethodByExactType(clazz, ArrayList.class); XposedBridge.hookMethod(md, new XC_MethodHook() { @Override @@ -59,11 +55,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } if (Preferences.getBoolean("write_thread")) { tabsToRemove.add("com.baidu.tieba.write.bottomButton.WriteThreadDelegateStatic"); - AcRules.findRule(new SmaliMatcher("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V", - MatcherProperties.create().useClassMatcher( - ClassMatcherUtils.usingString("has_show_message_tab_tips") - ) - ), (matcher, clazz, method) -> { + AcRules.findRule("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V", (matcher, clazz, method) -> { Method md = XposedHelpers.findMethodExactIfExists(clazz, sClassLoader, method); if (md != null) { XposedBridge.hookMethod(md, new XC_MethodHook() { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java index 320505a7..a364119d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java @@ -5,6 +5,8 @@ import androidx.annotation.NonNull; +import org.luckypray.dexkit.query.matchers.ClassMatcher; + import java.lang.reflect.Modifier; import java.util.List; @@ -15,11 +17,9 @@ import gm.tieba.tabswitch.dao.AcRules; import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; import gm.tieba.tabswitch.hooker.deobfuscation.ResMatcher; -import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; public class PurgeEnter extends XposedContext implements IHooker, Obfuscated { @@ -36,8 +36,10 @@ public String key() { @Override public List matchers() { return List.of( - new ResMatcher(ReflectUtils.getR("dimen", "tbds400"), "dimen.tbds400", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))), - new MethodNameMatcher("onSuccess", MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("enter_forum_login_tip"))) + new ResMatcher(ReflectUtils.getR("dimen", "tbds400"), "dimen.tbds400") + .setBaseClassMatcher(ClassMatcher.create().usingStrings("enter_forum_login_tip")), + new MethodNameMatcher("onSuccess", "purge_enter_on_success") + .setBaseClassMatcher(ClassMatcher.create().usingStrings("enter_forum_login_tip")) ); } @@ -58,7 +60,7 @@ public void hook() throws Throwable { AcRules.findRule(matchers(), (matcher, clazz, method) -> { switch (matcher) { - case "enter_forum_login_tip/dimen.tbds400": + case "dimen.tbds400": mRecForumClassName = clazz; mRecForumSetNextPageMethodName = method; XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { @@ -87,7 +89,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } }); break; - case "enter_forum_login_tip/onSuccess": + case "purge_enter_on_success": XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java index 225223a2..7ef9875a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java @@ -5,6 +5,8 @@ import androidx.annotation.NonNull; +import org.luckypray.dexkit.query.matchers.ClassMatcher; + import java.util.ArrayList; import java.util.List; @@ -17,9 +19,7 @@ import gm.tieba.tabswitch.hooker.IHooker; import gm.tieba.tabswitch.hooker.Obfuscated; import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.MatcherProperties; import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; -import gm.tieba.tabswitch.util.ClassMatcherUtils; import gm.tieba.tabswitch.util.ReflectUtils; public class PurgeMy extends XposedContext implements IHooker, Obfuscated { @@ -37,9 +37,8 @@ public List matchers() { return List.of( new SmaliMatcher("Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V"), new SmaliMatcher( - "Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;", - MatcherProperties.create().useClassMatcher(ClassMatcherUtils.usingString("隐私设置")) - ) + "Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;") + .setBaseClassMatcher(ClassMatcher.create().usingStrings("隐私设置")) ); } @@ -87,7 +86,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { ); break; // 个人页面空行 - case "隐私设置/Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;": + case "Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;": XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)); break; } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java index 271753b3..5a12d4f7 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java @@ -33,13 +33,13 @@ public String key() { @Override public List matchers() { - return List.of(new ResMatcher(ReflectUtils.getR("drawable", "icon_word_t_size"), "icon_word_t_size")); + return List.of(new ResMatcher(ReflectUtils.getR("drawable", "icon_word_t_size"), "forbid_gesture")); } @Override public void hook() throws Throwable { // 帖子字号 - AcRules.findRule(matchers(), (matcher, clazz, method) -> + AcRules.findRule("forbid_gesture", (matcher, clazz, method) -> XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)) ); // 视频帖字号 diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java deleted file mode 100644 index 1a2d060c..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/util/ClassMatcherUtils.java +++ /dev/null @@ -1,42 +0,0 @@ -package gm.tieba.tabswitch.util; - -import org.luckypray.dexkit.query.matchers.ClassMatcher; -import org.luckypray.dexkit.query.matchers.MethodMatcher; -import org.luckypray.dexkit.query.matchers.MethodsMatcher; - -public class ClassMatcherUtils { - private final ClassMatcher matcher; - private final String id; - public ClassMatcherUtils(ClassMatcher matcher, String id) { - this.matcher = matcher; - this.id = id; - } - - @Override - public String toString() { - return id + "/"; - } - - public static ClassMatcherUtils usingString(String str) { - ClassMatcher classMatcher = ClassMatcher.create().usingStrings(str); - return new ClassMatcherUtils(classMatcher, str); - } - - public static ClassMatcherUtils className(String className) { - ClassMatcher classMatcher = ClassMatcher.create().className(className); - String simpleClassName = className.substring(className.lastIndexOf('.') + 1); - return new ClassMatcherUtils(classMatcher, simpleClassName); - } - - public static ClassMatcherUtils invokeMethod(String smali) { - MethodMatcher invokeMatcher = MethodMatcher.create().addInvoke( - MethodMatcher.create().descriptor(smali) - ); - ClassMatcher classMatcher = ClassMatcher.create().methods(MethodsMatcher.create().add(invokeMatcher)); - return new ClassMatcherUtils(classMatcher, smali); - } - - public ClassMatcher getMatcher() { - return this.matcher; - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/Collections.kt b/app/src/main/java/gm/tieba/tabswitch/util/Collections.kt deleted file mode 100644 index 8479c980..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/util/Collections.kt +++ /dev/null @@ -1,23 +0,0 @@ -package gm.tieba.tabswitch.util - -data class MutablePair(var first: A, var second: B) - -infix fun A.to(that: B): MutablePair = MutablePair(this, that) - -fun Collection.most(): T { - val map = mutableListOf>() - val mid = size - 1 ushr 1 - run loop@{ - forEach { thiz -> - val pair = map.firstOrNull { it.first == thiz } - if (pair == null) { - map.add(thiz to 1) - } else { - pair.second++ - if (pair.second > mid) return@loop - } - } - } - map.sortWith(Comparator.comparingInt { -it.second }) - return map[0].first -} diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java b/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java index d5f6a5f1..fb64c263 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java +++ b/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java @@ -25,7 +25,7 @@ public List matchers() { @MainThread public static void showTbToast(final String text, final int duration) { - AcRules.findRule(new TbToast().matchers(), (matcher, clazz, method) -> { + AcRules.findRule("can not be call not thread! trace = ", (matcher, clazz, method) -> { try { final var md = ReflectUtils.findFirstMethodByExactType(clazz, Context.class, String.class, int.class); runOnUiThread(() -> ReflectUtils.callStaticMethod(md, getContext(), text, duration)); From 5dcb96a3d392cb11fbb5714f58fa1d7d36838377 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 19 Apr 2024 23:33:21 -0700 Subject: [PATCH 133/158] fix: OriginSrc not working on new frs page --- .../tabswitch/hooker/auto/OriginSrc.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java index 3a868c44..0212d43b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java @@ -7,12 +7,14 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; +import android.net.Uri; import androidx.annotation.NonNull; import org.json.JSONArray; import org.json.JSONObject; + import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import gm.tieba.tabswitch.XposedContext; @@ -32,6 +34,8 @@ public String key() { private static XC_MethodHook.Unhook picListUnhook; private static XC_MethodHook.Unhook pbContentUnhook; private static XC_MethodHook.Unhook mediaUnhook; + private static XC_MethodHook.Unhook picInfoUnhook; + private static XC_MethodHook.Unhook feedPicComponentUnhook; private static void doHook() { if (isHooked) return; @@ -76,6 +80,38 @@ protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) thr } } }); + picInfoUnhook = XposedHelpers.findAndHookMethod("tbclient.PicInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { + final String[] strings = new String[]{"small_pic_url", "big_pic_url"}; + for (final String string : strings) { + XposedHelpers.setObjectField(param.thisObject, string, XposedHelpers + .getObjectField(param.thisObject, "origin_pic_url")); + } + } + }); + feedPicComponentUnhook = XposedHelpers.findAndHookMethod("tbclient.FeedPicComponent$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { + String schema = (String) XposedHelpers.getObjectField(param.thisObject, "schema"); + String paramsJson = Uri.parse(schema).getQueryParameter("params"); + + JSONObject jsonObject = new JSONObject(paramsJson); + JSONObject pageParams = jsonObject.getJSONObject("pageParams"); + JSONArray picDataList = pageParams.getJSONArray("pic_data_list"); + + for (int i = 0; i < picDataList.length(); i++) { + JSONObject picData = picDataList.getJSONObject(i); + String originPicUrl = picData.getString("origin_pic_url"); + picData.put("big_pic_url", originPicUrl); + picData.put("small_pic_url", originPicUrl); + picData.put("is_show_origin_btn", 0); + } + + String modifiedUri = "tiebaapp://router/portal?params=" + jsonObject.toString(); + XposedHelpers.setObjectField(param.thisObject, "schema", modifiedUri); + } + }); isHooked = true; } @@ -93,6 +129,14 @@ private static void doUnHook() { mediaUnhook.unhook(); mediaUnhook = null; } + if (picInfoUnhook != null) { + picInfoUnhook.unhook(); + picInfoUnhook = null; + } + if (feedPicComponentUnhook != null) { + feedPicComponentUnhook.unhook(); + feedPicComponentUnhook = null; + } isHooked = false; } From cf7eda59bcaf35a6da60e4465d26ec2e435c4c53 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 20 Apr 2024 04:27:33 -0700 Subject: [PATCH 134/158] chore: bump version --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index d43f18a0..ebe2b3c5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,7 +19,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.9-beta' + versionName '2.9.9' if (versionName.contains('beta')) { versionNameSuffix = '.' + commitCountSinceLatestTag } From 802ef21a34df4640fb6bf3e8b0674e5defd6b15c Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 22 Apr 2024 20:23:15 -0700 Subject: [PATCH 135/158] feat: update purge rules --- app/build.gradle | 2 +- .../tabswitch/hooker/eliminate/Purge.java | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ebe2b3c5..336c1d6f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,7 +19,7 @@ android { minSdk 28 targetSdk sdk versionCode gitCommitCount - versionName '2.9.9' + versionName '2.9.10-beta' if (versionName.contains('beta')) { versionNameSuffix = '.' + commitCountSinceLatestTag } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java index 7c5b819f..d4472355 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java @@ -422,14 +422,20 @@ private void purgePageData(Object pageData) { List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); for (var feedKV : businessInfo) { String currentKey = XposedHelpers.getObjectField(feedKV, "key").toString(); - if (currentKey.equals("thread_type")) { - var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); - if (currValue.equals("41") || currValue.equals("69")) { - return true; + switch (currentKey) { + case "thread_type" -> { + var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); + if (currValue.equals("41") || currValue.equals("69")) { + return true; + } + } + case "is_live_card" -> { + var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); + if (currValue.equals("1")) { + return true; + } } - } else if (currentKey.equals("is_live_card")) { - var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); - if (currValue.equals("1")) { + case "game_ext" -> { return true; } } From 291685156e4239d84f3e6ec157be7b7e8b35c329 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 4 May 2024 23:23:37 -0700 Subject: [PATCH 136/158] Migrate project codebase to Kotlin (#34) * Rename .java to .kt * refactor: migrate util classes to kotlin * chore: bump version * fix: unable to open file * refactor: add JvmField annotation to XposedContext * Rename .java to .kt * Migrate widgets to Kotlin * Revert TbToast * Rename .java to .kt * Partially migrate DAO to Kotlin * Rename .java to .kt * Migrate Adp to Kotlin * Revert "Revert TbToast" This reverts commit 4e983d642b2b2c2196150624acbb5e6de0aa00af. * Add findRule function for Kotlin * Convert property to getter functions * Add helper hook functions * Rename .java to .kt * Migrate HistoryCache to Kotlin * Rename .java to .kt * Migrate Ripple to Kotlin * Rename .java to .kt * Migrate SaveImages to Kotlin * Rename .java to .kt * Migrate SelectClipboard to Kotlin * Rename .java to .kt * Migrate AgreeNum to Kotlin * Rename .java to .kt * Migrate AutoSign to Kotlin * Change version name to alpha * Rename .java to .kt * Migrate FrsTab to Kotlin * Add findClass helper function * Rename .java to .kt * Migrate MsgCenterTab to Kotlin * Rename .java to .kt * Migrate NotificationDetect to Kotlin * Rename .java to .kt * Migrate OpenSign to Kotlin * Add installDebug task to gradle * Add unhook to helper functions * Rename .java to .kt * Migrate OriginSrc to Kotlin * Rename .java to .kt * Migrate ContentFilter to Kotlin * Rename .java to .kt * Migrate FoldTopCardView to Kotlin * Rename .java to .kt * Migrate FollowFilter to Kotlin * Rename .java to .kt * Migrate FragmentTab to Kotlin * Rename .java to .kt * Migrate FrsPageFilter to Kotlin * Rename .java to .kt * Migrate PersonalizedFilter to Kotlin * Rename .java to .kt * Migrate PurgeEnter to Kotlin * Rename .java to .kt * Migrate PurgeMy to Kotlin * Rename .java to .kt * Migrate PurgeVideo to Kotlin * Rename .java to .kt * Migrate RedTip to Kotlin * Rename .java to .kt * Migrate RemoveUpdate to Kotlin * Rename .java to .kt * Migrate UserFilter to Kotlin * Rename .java to .kt * Migrate RegexFilter to Kotlin * Convert property to getter functions in Switch * Update page filter logic * Rename .java to .kt * Migrate Purge to Kotlin * Rename .java to .kt * Migrate Deobfuscation to Kotlin * Rename .java to .kt * Migrate TransitionAnimation to Kotlin * Rename .java to .kt * Migrate ForbidGesture to Kotlin * Rename .java to .kt * Migrate IHooker and Obfuscated to Kotlin * Update AGP * Rename .java to .kt * Migrate TSPreferenceHelper to Kotlin * Extract getDialogTheme to separate function * Rename .java to .kt * Migrate TSPreference to Kotlin * Rename .java to .kt * Migrate XposedInit to Kotlin * Optimize imports * Optimize variable naming * Optimize imports * Migrate build.gradle to Kotlin * Update Purge rules * Remove project wide build.gradle.kts * Move isModuleBetaVersion to XposedContext * Bump version * Simplify matcher logic * General style improvements * Fix incorrect button color when skin changed * Remove key file * Improve style and null handling --- app/build.gradle | 88 ---- app/build.gradle.kts | 119 +++++ app/gm.jks.base64.txt | 1 - .../main/java/gm/tieba/tabswitch/Constants.kt | 1 - .../gm/tieba/tabswitch/XposedContext.java | 60 --- .../java/gm/tieba/tabswitch/XposedContext.kt | 260 ++++++++++ .../java/gm/tieba/tabswitch/XposedInit.java | 293 ------------ .../java/gm/tieba/tabswitch/XposedInit.kt | 298 ++++++++++++ .../java/gm/tieba/tabswitch/dao/AcRule.kt | 22 +- .../java/gm/tieba/tabswitch/dao/AcRules.java | 62 --- .../java/gm/tieba/tabswitch/dao/AcRules.kt | 56 +++ .../main/java/gm/tieba/tabswitch/dao/Adp.java | 107 ----- .../main/java/gm/tieba/tabswitch/dao/Adp.kt | 38 ++ .../gm/tieba/tabswitch/dao/Preferences.java | 140 ------ .../gm/tieba/tabswitch/dao/Preferences.kt | 96 ++++ .../gm/tieba/tabswitch/hooker/IHooker.java | 11 - .../java/gm/tieba/tabswitch/hooker/IHooker.kt | 9 + .../gm/tieba/tabswitch/hooker/Obfuscated.java | 10 - .../gm/tieba/tabswitch/hooker/Obfuscated.kt | 8 + .../tieba/tabswitch/hooker/TSPreference.java | 340 ------------- .../gm/tieba/tabswitch/hooker/TSPreference.kt | 375 +++++++++++++++ .../tabswitch/hooker/TSPreferenceHelper.java | 295 ------------ .../tabswitch/hooker/TSPreferenceHelper.kt | 306 ++++++++++++ .../tabswitch/hooker/add/HistoryCache.java | 169 ------- .../tabswitch/hooker/add/HistoryCache.kt | 156 ++++++ .../gm/tieba/tabswitch/hooker/add/Ripple.java | 84 ---- .../gm/tieba/tabswitch/hooker/add/Ripple.kt | 70 +++ .../tabswitch/hooker/add/SaveImages.java | 158 ------ .../tieba/tabswitch/hooker/add/SaveImages.kt | 162 +++++++ .../tabswitch/hooker/add/SelectClipboard.java | 81 ---- .../tabswitch/hooker/add/SelectClipboard.kt | 81 ++++ .../tieba/tabswitch/hooker/auto/AgreeNum.java | 29 -- .../tieba/tabswitch/hooker/auto/AgreeNum.kt | 24 + .../tieba/tabswitch/hooker/auto/AutoSign.java | 136 ------ .../tieba/tabswitch/hooker/auto/AutoSign.kt | 142 ++++++ .../tabswitch/hooker/auto/AutoSignHelper.java | 87 ---- .../tabswitch/hooker/auto/AutoSignHelper.kt | 102 ++++ .../tieba/tabswitch/hooker/auto/FrsTab.java | 106 ----- .../gm/tieba/tabswitch/hooker/auto/FrsTab.kt | 94 ++++ .../tabswitch/hooker/auto/MsgCenterTab.java | 32 -- .../tabswitch/hooker/auto/MsgCenterTab.kt | 25 + .../hooker/auto/NotificationDetect.java | 32 -- .../hooker/auto/NotificationDetect.kt | 23 + .../tieba/tabswitch/hooker/auto/OpenSign.java | 49 -- .../tieba/tabswitch/hooker/auto/OpenSign.kt | 41 ++ .../tabswitch/hooker/auto/OriginSrc.java | 173 ------- .../tieba/tabswitch/hooker/auto/OriginSrc.kt | 160 +++++++ .../hooker/auto/TransitionAnimation.java | 157 ------ .../hooker/auto/TransitionAnimation.kt | 112 +++++ .../hooker/deobfuscation/Deobfuscation.java | 118 ----- .../hooker/deobfuscation/Deobfuscation.kt | 74 +++ .../deobfuscation/DeobfuscationHelper.java | 137 ------ .../deobfuscation/DeobfuscationHelper.kt | 128 +++++ .../deobfuscation/DeobfuscationHooker.java | 172 ------- .../deobfuscation/DeobfuscationHooker.kt | 173 +++++++ .../deobfuscation/DeobfuscationViewModel.java | 21 - .../deobfuscation/DeobfuscationViewModel.kt | 18 + .../tabswitch/hooker/deobfuscation/Matcher.kt | 34 +- .../hooker/eliminate/ContentFilter.java | 56 --- .../hooker/eliminate/ContentFilter.kt | 48 ++ .../hooker/eliminate/FoldTopCardView.java | 32 -- .../hooker/eliminate/FoldTopCardView.kt | 23 + .../hooker/eliminate/FollowFilter.java | 41 -- .../hooker/eliminate/FollowFilter.kt | 29 ++ .../hooker/eliminate/FragmentTab.java | 81 ---- .../tabswitch/hooker/eliminate/FragmentTab.kt | 69 +++ .../hooker/eliminate/FrsPageFilter.java | 60 --- .../hooker/eliminate/FrsPageFilter.kt | 47 ++ .../hooker/eliminate/PersonalizedFilter.java | 39 -- .../hooker/eliminate/PersonalizedFilter.kt | 27 ++ .../tabswitch/hooker/eliminate/Purge.java | 449 ------------------ .../tieba/tabswitch/hooker/eliminate/Purge.kt | 420 ++++++++++++++++ .../hooker/eliminate/PurgeEnter.java | 115 ----- .../tabswitch/hooker/eliminate/PurgeEnter.kt | 101 ++++ .../tabswitch/hooker/eliminate/PurgeMy.java | 110 ----- .../tabswitch/hooker/eliminate/PurgeMy.kt | 91 ++++ .../hooker/eliminate/PurgeVideo.java | 30 -- .../tabswitch/hooker/eliminate/PurgeVideo.kt | 22 + .../tabswitch/hooker/eliminate/RedTip.java | 39 -- .../tabswitch/hooker/eliminate/RedTip.kt | 47 ++ .../hooker/eliminate/RegexFilter.java | 24 - .../tabswitch/hooker/eliminate/RegexFilter.kt | 23 + .../hooker/eliminate/RemoveUpdate.java | 26 - .../hooker/eliminate/RemoveUpdate.kt | 20 + .../hooker/eliminate/UserFilter.java | 144 ------ .../tabswitch/hooker/eliminate/UserFilter.kt | 124 +++++ .../tabswitch/hooker/extra/ForbidGesture.java | 83 ---- .../tabswitch/hooker/extra/ForbidGesture.kt | 66 +++ .../gm/tieba/tabswitch/util/DisplayUtils.java | 77 --- .../gm/tieba/tabswitch/util/DisplayUtils.kt | 87 ++++ .../gm/tieba/tabswitch/util/FileUtils.java | 110 ----- .../java/gm/tieba/tabswitch/util/FileUtils.kt | 87 ++++ .../java/gm/tieba/tabswitch/util/Parser.java | 17 - .../java/gm/tieba/tabswitch/util/Parser.kt | 10 + .../gm/tieba/tabswitch/util/ReflectUtils.java | 237 --------- .../gm/tieba/tabswitch/util/ReflectUtils.kt | 190 ++++++++ .../tieba/tabswitch/widget/NavigationBar.java | 38 -- .../tieba/tabswitch/widget/NavigationBar.kt | 41 ++ .../gm/tieba/tabswitch/widget/Switch.java | 74 --- .../java/gm/tieba/tabswitch/widget/Switch.kt | 73 +++ .../gm/tieba/tabswitch/widget/TbToast.java | 39 -- .../java/gm/tieba/tabswitch/widget/TbToast.kt | 39 ++ build.gradle | 5 - gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle => settings.gradle.kts | 12 +- 105 files changed, 4868 insertions(+), 5111 deletions(-) delete mode 100644 app/build.gradle create mode 100644 app/build.gradle.kts delete mode 100644 app/gm.jks.base64.txt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/XposedContext.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/XposedContext.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/XposedInit.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/XposedInit.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/dao/AcRules.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/dao/Adp.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/dao/Preferences.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/IHooker.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/IHooker.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/Obfuscated.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/Obfuscated.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/util/FileUtils.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/util/Parser.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/util/Parser.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/widget/Switch.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/widget/Switch.kt delete mode 100644 app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java create mode 100644 app/src/main/java/gm/tieba/tabswitch/widget/TbToast.kt delete mode 100644 build.gradle rename settings.gradle => settings.gradle.kts (51%) diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index 336c1d6f..00000000 --- a/app/build.gradle +++ /dev/null @@ -1,88 +0,0 @@ -plugins { - id 'com.android.application' - id 'org.jetbrains.kotlin.android' - id 'com.google.devtools.ksp' -} - -def gitCommitCount = Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim()) -def latestTag = String.valueOf('git describe --abbrev=0 --tags'.execute([], project.rootDir).text.trim()) -def commitCountSinceLatestTag = String.valueOf(('git rev-list --count ' + latestTag + '..HEAD').execute([], project.rootDir).text.trim()) -def sdk = 34 - -android { - compileSdk sdk - buildToolsVersion = '34.0.0' - ndkVersion '26.0.10792818' - - defaultConfig { - applicationId 'gm.tieba.tabswitch' - minSdk 28 - targetSdk sdk - versionCode gitCommitCount - versionName '2.9.10-beta' - if (versionName.contains('beta')) { - versionNameSuffix = '.' + commitCountSinceLatestTag - } - buildConfigField "String", "TARGET_VERSION", "\"12.59.1.0\"" - buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\"" - - testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - externalNativeBuild { - cmake { - abiFilters 'arm64-v8a' - arguments '-DANDROID_STL=none' - } - } - } - applicationVariants.all { variant -> - variant.outputs.all { output -> - outputFileName = "TS_${defaultConfig.versionName}${defaultConfig.versionNameSuffix ?: ''}_${variant.buildType.name}.apk" - } - } - buildTypes { - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - externalNativeBuild { - cmake { - path 'src/main/cpp/CMakeLists.txt' - } - } - packagingOptions { - resources { - excludes += ['/META-INF/**', '/kotlin/**', '/okhttp3/**'] - } - jniLibs { - excludes += ['**/liblog.so', '/lib/x86/**', '/lib/x86_64/**'] - } - } - buildFeatures { - prefab true - buildConfig true - } - lint { - checkDependencies true - } - namespace 'gm.tieba.tabswitch' -} - -dependencies { - compileOnly 'de.robv.android.xposed:api:82' - api 'androidx.annotation:annotation:1.7.1' - def roomVersion = '2.6.1' - implementation "androidx.room:room-runtime:$roomVersion" - annotationProcessor "androidx.room:room-compiler:$roomVersion" - implementation "androidx.room:room-ktx:$roomVersion" - ksp "androidx.room:room-compiler:$roomVersion" - - implementation 'io.reactivex.rxjava3:rxjava:3.1.8' - implementation 'org.luckypray:dexkit:2.0.1' - implementation 'com.squareup.okhttp3:okhttp:4.12.0' - implementation 'dev.rikka.ndk.thirdparty:cxx:1.2.0' -} diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 00000000..d9011d57 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,119 @@ +import java.io.ByteArrayOutputStream + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("com.google.devtools.ksp") +} + +fun String.runCommand(currentWorkingDir: File = file("./")): String { + val byteOut = ByteArrayOutputStream() + project.exec { + workingDir = currentWorkingDir + commandLine = this@runCommand.split("\\s".toRegex()) + standardOutput = byteOut + } + return String(byteOut.toByteArray()).trim() +} + +val gitCommitCount = "git rev-list --count HEAD".runCommand().toInt() +val latestTag = "git describe --abbrev=0 --tags".runCommand() +val commitCountSinceLatestTag = ("git rev-list --count $latestTag..HEAD").runCommand() +val sdk = 34 + +android { + compileSdk = sdk + buildToolsVersion = "34.0.0" + ndkVersion = "26.0.10792818" + + defaultConfig { + applicationId = "gm.tieba.tabswitch" + minSdk = 28 + targetSdk = sdk + versionCode = gitCommitCount + versionName = "3.0.0-beta" + if (versionName!!.contains("alpha") || versionName!!.contains("beta")) { + versionNameSuffix = ".$commitCountSinceLatestTag" + } + buildConfigField("String", "TARGET_VERSION", "\"12.60.1.1\"") + buildConfigField("String", "MIN_VERSION", "\"12.53.1.0\"") + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + externalNativeBuild { + cmake { + abiFilters("arm64-v8a") + arguments("-DANDROID_STL=none") + } + } + } + applicationVariants.all { + outputs + .map { it as com.android.build.gradle.internal.api.ApkVariantOutputImpl } + .all { output -> + output.outputFileName = "TS_${defaultConfig.versionName}${defaultConfig.versionNameSuffix ?: ""}_${name}.apk" + false + } + } + buildTypes { + release { + isMinifyEnabled = true + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + externalNativeBuild { + cmake { + path("src/main/cpp/CMakeLists.txt") + } + } + packaging { + resources.excludes.addAll(listOf("/META-INF/**", "/kotlin/**", "/okhttp3/**")) + jniLibs.excludes.addAll(listOf("**/liblog.so", "/lib/x86/**", "/lib/x86_64/**")) + } + buildFeatures { + prefab = true + buildConfig = true + } + lint { + checkDependencies = true + } + namespace = "gm.tieba.tabswitch" +} + +dependencies { + compileOnly("de.robv.android.xposed:api:82") + api("androidx.annotation:annotation:1.7.1") + + val roomVersion = "2.6.1" + implementation("androidx.room:room-runtime:$roomVersion") + annotationProcessor("androidx.room:room-compiler:$roomVersion") + implementation("androidx.room:room-ktx:$roomVersion") + ksp("androidx.room:room-compiler:$roomVersion") + + implementation("io.reactivex.rxjava3:rxjava:3.1.8") + implementation("org.luckypray:dexkit:2.0.1") + implementation("com.squareup.okhttp3:okhttp:4.12.0") + implementation("dev.rikka.ndk.thirdparty:cxx:1.2.0") +} + +val adbExecutable: String = androidComponents.sdkComponents.adb.get().asFile.absolutePath + +tasks.register("restartTieba") { + doLast { + exec { + commandLine(adbExecutable, "shell", "am", "force-stop", "com.baidu.tieba") + } + exec { + commandLine(adbExecutable, "shell", "am", "start", "$(pm resolve-activity --components com.baidu.tieba)") + } + } +} + +afterEvaluate { + tasks.named("installDebug").configure { + finalizedBy(tasks.named("restartTieba")) + } +} diff --git a/app/gm.jks.base64.txt b/app/gm.jks.base64.txt deleted file mode 100644 index 59e2b656..00000000 --- a/app/gm.jks.base64.txt +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/Constants.kt b/app/src/main/java/gm/tieba/tabswitch/Constants.kt index 33f1afbd..323a87af 100644 --- a/app/src/main/java/gm/tieba/tabswitch/Constants.kt +++ b/app/src/main/java/gm/tieba/tabswitch/Constants.kt @@ -1,7 +1,6 @@ package gm.tieba.tabswitch object Constants { - @JvmStatic val strings = mapOf( "EULA" to "如果您对本协议的任何条款表示异议,您可以选择不使用本模块;使用本模块则意味着您已完全理解和同意遵守本协议。\n\n" + " ①本模块开源免费,所有版本均为自动构建,可确保构建版本与源代码一致。对本模块的任何异议都必须以源代码为依据。\n" + diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java b/app/src/main/java/gm/tieba/tabswitch/XposedContext.java deleted file mode 100644 index aefb681b..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.java +++ /dev/null @@ -1,60 +0,0 @@ -package gm.tieba.tabswitch; - -import android.content.Context; -import android.content.res.AssetManager; -import android.os.Build; -import android.os.Handler; -import android.os.Looper; - -import java.lang.ref.WeakReference; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Collectors; - -import de.robv.android.xposed.XposedBridge; - -public abstract class XposedContext { - private static WeakReference sContextRef; - protected static ClassLoader sClassLoader; - protected static Map sExceptions = new HashMap<>(0); - protected static String sPath; - protected static AssetManager sAssetManager; - private static Handler sHandler; - protected static boolean sIsModuleBetaVersion; - protected static void attachBaseContext(final Context context) { - if (sContextRef != null) { - throw new IllegalStateException("Base context already set"); - } - sContextRef = new WeakReference<>(context.getApplicationContext()); - sHandler = new Handler(Looper.getMainLooper()); - } - - protected static Context getContext() { - return sContextRef.get(); - } - - protected static void load(final String filename) { - final var soPaths = Arrays.stream(Build.SUPPORTED_ABIS) - .map(abi -> sPath + "!/lib/" + abi + "/lib" + filename + ".so") - .collect(Collectors.toList()); - UnsatisfiedLinkError err = null; - for (final var soPath : soPaths) { - try { - System.load(soPath); - err = null; - break; - } catch (final UnsatisfiedLinkError e) { - err = e; - } - } - if (err != null) { - XposedBridge.log(err); - throw err; - } - } - - protected static void runOnUiThread(final Runnable r) { - sHandler.post(r); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt b/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt new file mode 100644 index 00000000..53b84182 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt @@ -0,0 +1,260 @@ +package gm.tieba.tabswitch + +import android.content.Context +import android.content.res.AssetManager +import android.os.Build +import android.os.Handler +import android.os.Looper +import de.robv.android.xposed.XC_MethodHook +import de.robv.android.xposed.XC_MethodReplacement +import de.robv.android.xposed.XposedBridge +import de.robv.android.xposed.XposedHelpers +import java.lang.ref.WeakReference +import java.lang.reflect.Method + +abstract class XposedContext { + + companion object { + val isModuleBetaVersion = BuildConfig.VERSION_NAME.contains("alpha") || BuildConfig.VERSION_NAME.contains("beta") + val exceptions: MutableMap = HashMap(0) + + lateinit var sClassLoader: ClassLoader + lateinit var sPath: String + lateinit var sAssetManager: AssetManager + + private lateinit var sHandler: Handler + private lateinit var sContextRef: WeakReference + + @JvmStatic + fun getContext(): Context = checkNotNull(sContextRef.get()) { "ApplicationContext is null" } + + fun attachBaseContext(context: Context) { + sContextRef = WeakReference(context.applicationContext) + sHandler = Handler(Looper.getMainLooper()) + } + + @JvmStatic + protected fun load(filename: String) { + val soPaths = Build.SUPPORTED_ABIS.map { abi -> "$sPath!/lib/$abi/lib$filename.so" } + val errors = mutableListOf() + + for (soPath in soPaths) { + try { + System.load(soPath) + return + } catch (e: UnsatisfiedLinkError) { + errors.add(e) + } + } + + val linkError = UnsatisfiedLinkError("Failed to load native library: $filename") + errors.forEach { linkError.addSuppressed(it) } + XposedBridge.log(linkError) + throw linkError + } + + fun runOnUiThread(r: Runnable) { + sHandler.post(r) + } + + fun findClass(className: String): Class<*> = XposedHelpers.findClass(className, sClassLoader) + + inline fun hookBeforeMethod( + className: String, + methodName: String, + vararg parameterTypes: Any?, + crossinline beforeHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookMethod( + className, sClassLoader, methodName, *parameterTypes, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + beforeHook(param) + } + } + ) + } + + inline fun hookAfterMethod( + className: String, + methodName: String, + vararg parameterTypes: Any?, + crossinline afterHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookMethod( + className, sClassLoader, methodName, *parameterTypes, + object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + afterHook(param) + } + } + ) + } + + inline fun hookReplaceMethod( + className: String, + methodName: String, + vararg parameterTypes: Any?, + crossinline replaceHook: (XC_MethodHook.MethodHookParam) -> Any? + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookMethod( + className, sClassLoader, methodName, *parameterTypes, + object : XC_MethodReplacement() { + override fun replaceHookedMethod(param: MethodHookParam): Any? { + return replaceHook(param) + } + } + ) + } + + inline fun hookBeforeMethod( + clazz: Class<*>, + methodName: String, + vararg parameterTypes: Any?, + crossinline beforeHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookMethod( + clazz, methodName, *parameterTypes, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + beforeHook(param) + } + } + ) + } + + inline fun hookAfterMethod( + clazz: Class<*>, + methodName: String, + vararg parameterTypes: Any?, + crossinline afterHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookMethod( + clazz, methodName, *parameterTypes, + object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + afterHook(param) + } + } + ) + } + + inline fun hookReplaceMethod( + clazz: Class<*>, + methodName: String, + vararg parameterTypes: Any?, + crossinline replaceHook: (XC_MethodHook.MethodHookParam) -> Any? + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookMethod( + clazz, methodName, *parameterTypes, + object : XC_MethodReplacement() { + override fun replaceHookedMethod(param: MethodHookParam): Any? { + return replaceHook(param) + } + } + ) + } + + inline fun hookBeforeMethod( + method: Method, + crossinline beforeHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedBridge.hookMethod( + method, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + beforeHook(param) + } + } + ) + } + + inline fun hookAfterMethod( + method: Method, + crossinline afterHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedBridge.hookMethod( + method, + object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + afterHook(param) + } + } + ) + } + + inline fun hookReplaceMethod( + method: Method, + crossinline replaceHook: (XC_MethodHook.MethodHookParam) -> Any? + ): XC_MethodHook.Unhook { + return XposedBridge.hookMethod( + method, + object : XC_MethodReplacement() { + override fun replaceHookedMethod(param: MethodHookParam): Any? { + return replaceHook(param) + } + } + ) + } + + inline fun hookBeforeConstructor( + className: String, + vararg parameterTypes: Any?, + crossinline beforeHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookConstructor( + className, sClassLoader, *parameterTypes, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + beforeHook(param) + } + } + ) + } + + inline fun hookAfterConstructor( + className: String, + vararg parameterTypes: Any?, + crossinline afterHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookConstructor( + className, sClassLoader, *parameterTypes, + object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + afterHook(param) + } + } + ) + } + + inline fun hookBeforeConstructor( + clazz: Class<*>, + vararg parameterTypes: Any?, + crossinline beforeHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookConstructor( + clazz, *parameterTypes, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + beforeHook(param) + } + } + ) + } + + inline fun hookAfterConstructor( + clazz: Class<*>, + vararg parameterTypes: Any?, + crossinline afterHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookConstructor( + clazz, *parameterTypes, + object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + afterHook(param) + } + } + ) + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java deleted file mode 100644 index 4f2556b7..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ /dev/null @@ -1,293 +0,0 @@ -package gm.tieba.tabswitch; - -import android.app.Activity; -import android.app.AlertDialog; -import android.app.AppComponentFactory; -import android.app.Application; -import android.app.Instrumentation; -import android.content.Intent; -import android.content.res.XModuleResources; -import android.net.Uri; -import android.os.Bundle; -import android.text.TextUtils; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.stream.Collectors; - -import de.robv.android.xposed.IXposedHookLoadPackage; -import de.robv.android.xposed.IXposedHookZygoteInit; -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import de.robv.android.xposed.callbacks.XC_LoadPackage; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.dao.Adp; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.TSPreference; -import gm.tieba.tabswitch.hooker.add.HistoryCache; -import gm.tieba.tabswitch.hooker.add.Ripple; -import gm.tieba.tabswitch.hooker.add.SaveImages; -import gm.tieba.tabswitch.hooker.add.SelectClipboard; -import gm.tieba.tabswitch.hooker.auto.AgreeNum; -import gm.tieba.tabswitch.hooker.auto.AutoSign; -import gm.tieba.tabswitch.hooker.auto.FrsTab; -import gm.tieba.tabswitch.hooker.auto.MsgCenterTab; -import gm.tieba.tabswitch.hooker.auto.NotificationDetect; -import gm.tieba.tabswitch.hooker.auto.OpenSign; -import gm.tieba.tabswitch.hooker.auto.OriginSrc; -import gm.tieba.tabswitch.hooker.auto.TransitionAnimation; -import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; -import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHooker; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.eliminate.ContentFilter; -import gm.tieba.tabswitch.hooker.eliminate.FoldTopCardView; -import gm.tieba.tabswitch.hooker.eliminate.FollowFilter; -import gm.tieba.tabswitch.hooker.eliminate.FragmentTab; -import gm.tieba.tabswitch.hooker.eliminate.FrsPageFilter; -import gm.tieba.tabswitch.hooker.eliminate.PersonalizedFilter; -import gm.tieba.tabswitch.hooker.eliminate.Purge; -import gm.tieba.tabswitch.hooker.eliminate.PurgeEnter; -import gm.tieba.tabswitch.hooker.eliminate.PurgeMy; -import gm.tieba.tabswitch.hooker.eliminate.PurgeVideo; -import gm.tieba.tabswitch.hooker.eliminate.RedTip; -import gm.tieba.tabswitch.hooker.eliminate.RemoveUpdate; -import gm.tieba.tabswitch.hooker.eliminate.UserFilter; -import gm.tieba.tabswitch.hooker.extra.ForbidGesture; -import gm.tieba.tabswitch.hooker.extra.Hide; -import gm.tieba.tabswitch.hooker.extra.StackTrace; -import gm.tieba.tabswitch.util.DisplayUtils; -import gm.tieba.tabswitch.widget.TbToast; - -public class XposedInit extends XposedContext implements IXposedHookZygoteInit, IXposedHookLoadPackage { - @Override - public void initZygote(final IXposedHookZygoteInit.StartupParam startupParam) throws Throwable { - sPath = startupParam.modulePath; - } - - private AppComponentFactory mAppComponentFactory = null; - - @Override - public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if ((!"com.baidu.tieba".equals(lpparam.packageName) && XposedHelpers.findClassIfExists( - "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader) == null) || !lpparam.isFirstApplication) return; - sClassLoader = lpparam.classLoader; - sAssetManager = XModuleResources.createInstance(sPath, null).getAssets(); - mAppComponentFactory = (AppComponentFactory) sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance(); - sIsModuleBetaVersion = BuildConfig.VERSION_NAME.contains("beta"); - - // For some reason certain flutter page will not load in LSPatch unless we manually load the flutter plugin - XposedHelpers.findAndHookMethod( - "com.baidu.tieba.flutter.FlutterPluginManager", - sClassLoader, - "invokePlugin", - "com.baidu.nps.main.invoke.IInvokeCallback", - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - try { - Object npsManager = XposedHelpers.callStaticMethod(XposedHelpers.findClass("com.baidu.nps.main.manager.NPSManager", sClassLoader), "getInstance"); - XposedHelpers.callMethod(npsManager, "loadClazz", - "com.baidu.tieba.plugin.flutter", - "com.baidu.tieba.flutter.FlutterPluginImpl", - XposedHelpers.findClass("com.baidu.tieba.flutter.IFlutterPlugin", sClassLoader), - param.args[0] - ); - } catch (Error ignored) {} - } - } - ); - - XposedHelpers.findAndHookMethod(Instrumentation.class, "callApplicationOnCreate", Application.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - if (!(param.args[0] instanceof Application)) return; - attachBaseContext((Application) param.args[0]); - Preferences.init(getContext()); - AcRules.init(getContext()); - DeobfuscationHelper.sCurrentTbVersion = DeobfuscationHelper.getTbVersion(getContext()); - - // Workaround to address an issue with LSPatch (unable to open personal homepage) - // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory - // However, LSPatch incorrectly sets appComponentFactory to null, causing android.app.Instrumentation.getFactory to fall back to AppComponentFactory.DEFAULT - // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) - if (getContext().getApplicationInfo().appComponentFactory == null) { - XposedHelpers.findAndHookMethod( - Instrumentation.class, - "getFactory", - String.class, - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - if (param.args[0].toString().equals("com.baidu.tieba")) { - param.setResult(mAppComponentFactory); - } - } - }); - } - - final var hookers = List.of( - new TSPreference(), - new FragmentTab(), - new Purge(), - new PurgeEnter(), - new PurgeMy(), - new RedTip(), - new FollowFilter(), - new PersonalizedFilter(), - new ContentFilter(), - new FrsPageFilter(), - new HistoryCache(), - new Ripple(), - new SaveImages(), - new AutoSign(), - new OpenSign(), - new OriginSrc(), - new ForbidGesture(), - new AgreeNum(), - new FrsTab(), - new Hide(), - new StackTrace(), - new RemoveUpdate(), - new FoldTopCardView(), - new MsgCenterTab(), - new NotificationDetect(), - new PurgeVideo(), - new SelectClipboard(), - new UserFilter(), - new TransitionAnimation() - ); - final var matchers = new ArrayList(hookers.size() + 2); - matchers.add(new TbToast()); - for (final var hooker : hookers) { - if (hooker instanceof Obfuscated) { - matchers.add((Obfuscated) hooker); - } - } - - List matchersList = matchers.stream() - .map(Obfuscated::matchers) - .flatMap(Collection::stream) - .collect(Collectors.toList()); - - // Remove matchers that does not satisfy version requirement - matchersList.removeIf( - o -> { - if (o.getReqVersion() != null) { - boolean isVersionSatisfied = DeobfuscationHelper.isTbSatisfyVersionRequirement( - o.getReqVersion() - ); - if (!isVersionSatisfied) { - XposedBridge.log( - String.format( - "Skipping rule [%s] due to version mismatch (current version: %s)", - o.toString(), - DeobfuscationHelper.sCurrentTbVersion - ) - ); - } - return !isVersionSatisfied; - } - return false; - } - ); - - if (DeobfuscationHelper.isVersionChanged(getContext())) { - if ("com.baidu.tieba".equals(lpparam.processName)) { - XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var activity = (Activity) param.thisObject; - final var intent = new Intent(activity, XposedHelpers.findClass("com.baidu.tieba.LogoActivity", sClassLoader)); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); - activity.startActivity(intent); - } - }); - } - XposedBridge.log("Deobfuscation"); - - new DeobfuscationHooker(matchersList).hook(); - return; - } - - final var lostList = matchersList.stream() - .map(Matcher::toString) - .filter(matcher -> !AcRules.isRuleFound(matcher)) - .collect(Collectors.toList()); - if (!lostList.isEmpty()) { - XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var activity = (Activity) param.thisObject; - final var messages = new ArrayList(); - - if (DeobfuscationHelper.isTbBetweenVersionRequirement(BuildConfig.MIN_VERSION, BuildConfig.TARGET_VERSION)) { - messages.add(Constants.getStrings().get("exception_rules_incomplete")); - } else { - messages.add(String.format(Locale.CHINA, - Constants.getStrings().get("version_mismatch"), - BuildConfig.MIN_VERSION, BuildConfig.TARGET_VERSION)); - } - - messages.add(String.format(Locale.CHINA, "贴吧版本:%s, 模块版本:%d", - DeobfuscationHelper.sCurrentTbVersion, BuildConfig.VERSION_CODE)); - messages.add(String.format(Locale.CHINA, "%d rule(s) lost: %s", lostList.size(), lostList)); - final var message = TextUtils.join("\n", messages); - XposedBridge.log(message); - AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? - android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) - .setTitle("规则异常").setMessage(message).setCancelable(false) - .setNeutralButton("更新模块", (dialogInterface, i) -> { - final Intent intent = new Intent(); - intent.setAction("android.intent.action.VIEW"); - if (sIsModuleBetaVersion) { - intent.setData(Uri.parse(Constants.getStrings().get("ci_uri"))); - } else { - intent.setData(Uri.parse(Constants.getStrings().get("release_uri"))); - } - activity.startActivity(intent); - }) - .setNegativeButton(activity.getString(android.R.string.cancel), null) - .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> { - Preferences.putSignature(0); - DeobfuscationHelper.saveAndRestart(activity, "unknown", null); - }).create(); - alert.show(); - DisplayUtils.fixAlertDialogWidth(alert); - } - }); - return; - } - - new Adp(); - if (Preferences.getBoolean("hide_native")) { - try { - System.loadLibrary("hide"); - } catch (final UnsatisfiedLinkError e) { - XposedBridge.log(e); - } - } - final var activeHookerKeys = Preferences.getAll().entrySet().stream() - .filter(entry -> Boolean.FALSE != entry.getValue()) - .map(Map.Entry::getKey) - .collect(Collectors.toSet()); - activeHookerKeys.add("ts_pref"); - activeHookerKeys.add("fragment_tab"); - for (final var hooker : hookers) { - try { - if (activeHookerKeys.contains(hooker.key())) { - hooker.hook(); - } - } catch (final Throwable tr) { - XposedBridge.log(tr); - sExceptions.put(hooker.key(), tr); - } - } - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt new file mode 100644 index 00000000..dbabe6b9 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt @@ -0,0 +1,298 @@ +package gm.tieba.tabswitch + +import android.app.Activity +import android.app.AlertDialog +import android.app.AppComponentFactory +import android.app.Application +import android.app.Instrumentation +import android.content.Intent +import android.content.res.XModuleResources +import android.net.Uri +import android.os.Bundle +import android.text.TextUtils +import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.IXposedHookZygoteInit +import de.robv.android.xposed.IXposedHookZygoteInit.StartupParam +import de.robv.android.xposed.XposedBridge +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam +import gm.tieba.tabswitch.Constants.strings +import gm.tieba.tabswitch.dao.AcRules +import gm.tieba.tabswitch.dao.AcRules.isRuleFound +import gm.tieba.tabswitch.dao.Adp.initializeAdp +import gm.tieba.tabswitch.dao.Preferences +import gm.tieba.tabswitch.dao.Preferences.getAll +import gm.tieba.tabswitch.dao.Preferences.getBoolean +import gm.tieba.tabswitch.dao.Preferences.putSignature +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.TSPreference +import gm.tieba.tabswitch.hooker.add.HistoryCache +import gm.tieba.tabswitch.hooker.add.Ripple +import gm.tieba.tabswitch.hooker.add.SaveImages +import gm.tieba.tabswitch.hooker.add.SelectClipboard +import gm.tieba.tabswitch.hooker.auto.AgreeNum +import gm.tieba.tabswitch.hooker.auto.AutoSign +import gm.tieba.tabswitch.hooker.auto.FrsTab +import gm.tieba.tabswitch.hooker.auto.MsgCenterTab +import gm.tieba.tabswitch.hooker.auto.NotificationDetect +import gm.tieba.tabswitch.hooker.auto.OpenSign +import gm.tieba.tabswitch.hooker.auto.OriginSrc +import gm.tieba.tabswitch.hooker.auto.TransitionAnimation +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.getTbVersion +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.isTbBetweenVersionRequirement +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.isTbSatisfyVersionRequirement +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.isVersionChanged +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.saveAndRestart +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHooker +import gm.tieba.tabswitch.hooker.eliminate.ContentFilter +import gm.tieba.tabswitch.hooker.eliminate.FoldTopCardView +import gm.tieba.tabswitch.hooker.eliminate.FollowFilter +import gm.tieba.tabswitch.hooker.eliminate.FragmentTab +import gm.tieba.tabswitch.hooker.eliminate.FrsPageFilter +import gm.tieba.tabswitch.hooker.eliminate.PersonalizedFilter +import gm.tieba.tabswitch.hooker.eliminate.Purge +import gm.tieba.tabswitch.hooker.eliminate.PurgeEnter +import gm.tieba.tabswitch.hooker.eliminate.PurgeMy +import gm.tieba.tabswitch.hooker.eliminate.PurgeVideo +import gm.tieba.tabswitch.hooker.eliminate.RedTip +import gm.tieba.tabswitch.hooker.eliminate.RemoveUpdate +import gm.tieba.tabswitch.hooker.eliminate.UserFilter +import gm.tieba.tabswitch.hooker.extra.ForbidGesture +import gm.tieba.tabswitch.hooker.extra.Hide +import gm.tieba.tabswitch.hooker.extra.StackTrace +import gm.tieba.tabswitch.util.fixAlertDialogWidth +import gm.tieba.tabswitch.util.getDialogTheme +import gm.tieba.tabswitch.widget.TbToast +import java.util.Locale +import kotlin.String + +class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackage { + + private lateinit var mAppComponentFactory: AppComponentFactory + + override fun initZygote(startupParam: StartupParam) { + sPath = startupParam.modulePath + } + + override fun handleLoadPackage(lpparam: LoadPackageParam) { + if (("com.baidu.tieba" != lpparam.packageName && XposedHelpers.findClassIfExists( + "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader + ) == null) || !lpparam.isFirstApplication + ) return + + sClassLoader = lpparam.classLoader + sAssetManager = XModuleResources.createInstance(sPath, null).assets + mAppComponentFactory = sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory") + .getDeclaredConstructor().newInstance() as AppComponentFactory + + // For some reason certain flutter page will not load in LSPatch unless we manually load the flutter plugin + hookAfterMethod( + "com.baidu.tieba.flutter.FlutterPluginManager", + "invokePlugin", "com.baidu.nps.main.invoke.IInvokeCallback" + ) { param -> + try { + val npsManager = XposedHelpers.callStaticMethod( + findClass("com.baidu.nps.main.manager.NPSManager"), + "getInstance" + ) + XposedHelpers.callMethod( + npsManager, + "loadClazz", + "com.baidu.tieba.plugin.flutter", + "com.baidu.tieba.flutter.FlutterPluginImpl", + findClass("com.baidu.tieba.flutter.IFlutterPlugin"), + param.args[0] + ) + } catch (ignored: Error) { + } + } + + hookAfterMethod( + Instrumentation::class.java, + "callApplicationOnCreate", Application::class.java + ) { param -> + if (param.args[0] !is Application) return@hookAfterMethod + + attachBaseContext((param.args[0] as Application)) + Preferences.init(getContext()) + AcRules.init(getContext()) + DeobfuscationHelper.sCurrentTbVersion = getTbVersion(getContext()) + + // Workaround to address an issue with LSPatch (unable to open personal homepage) + // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory + // However, LSPatch incorrectly sets appComponentFactory to null, causing android.app.Instrumentation.getFactory to fall back to AppComponentFactory.DEFAULT + // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) + if (getContext().applicationInfo.appComponentFactory == null) { + hookAfterMethod( + Instrumentation::class.java, + "getFactory", String::class.java + ) { hookParam -> + if (hookParam.args[0].toString() == "com.baidu.tieba") { + hookParam.result = mAppComponentFactory + } + } + } + + val hookers: List = listOf( + TSPreference(), + FragmentTab(), + Purge(), + PurgeEnter(), + PurgeMy(), + RedTip(), + FollowFilter(), + PersonalizedFilter(), + ContentFilter(), + FrsPageFilter(), + HistoryCache(), + Ripple(), + SaveImages(), + AutoSign(), + OpenSign(), + OriginSrc(), + ForbidGesture(), + AgreeNum(), + FrsTab(), + Hide(), + StackTrace(), + RemoveUpdate(), + FoldTopCardView(), + MsgCenterTab(), + NotificationDetect(), + PurgeVideo(), + SelectClipboard(), + UserFilter(), + TransitionAnimation() + ) + val matchers = ArrayList(hookers.size + 1) + matchers.add(TbToast()) + hookers.forEach { hooker -> + if (hooker is Obfuscated) { + matchers.add(hooker as Obfuscated) + } + } + + val matchersList = matchers.flatMap { it.matchers() }.toMutableList() + + // Remove matchers that does not satisfy version requirement + matchersList.removeIf { matcher -> + matcher.requiredVersion?.let { requiredVersion -> + val isVersionSatisfied = isTbSatisfyVersionRequirement(requiredVersion) + if (!isVersionSatisfied) { + XposedBridge.log( + "Skipping rule [%s] due to version mismatch (current version: %s)".format( + Locale.CHINA, + matcher.toString(), + DeobfuscationHelper.sCurrentTbVersion + ) + ) + true + } else { + false + } + } ?: false + } + + if (isVersionChanged(getContext())) { + if ("com.baidu.tieba" == lpparam.processName) { + hookAfterMethod( + "com.baidu.tieba.tblauncher.MainTabActivity", + "onCreate", Bundle::class.java + ) { hookParam -> + val activity = hookParam.thisObject as Activity + activity.startActivity(Intent( + activity, + findClass("com.baidu.tieba.LogoActivity") + ).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) }) + } + } + XposedBridge.log("Deobfuscation") + + DeobfuscationHooker(matchersList).hook() + return@hookAfterMethod + } + + val lostList = matchersList.map { it.toString() }.filter { !isRuleFound(it) } + + if (lostList.isNotEmpty()) { + hookBeforeMethod( + "com.baidu.tieba.tblauncher.MainTabActivity", + "onCreate", Bundle::class.java + ) { hookParam -> + val activity = hookParam.thisObject as Activity + val messages = ArrayList().apply { + add( + if (isTbBetweenVersionRequirement(BuildConfig.MIN_VERSION, BuildConfig.TARGET_VERSION)) { + strings["exception_rules_incomplete"] + } else { + strings["version_mismatch"]?.format(Locale.CHINA, BuildConfig.MIN_VERSION, BuildConfig.TARGET_VERSION) + } + ) + add("贴吧版本:%s, 模块版本:%d".format(Locale.CHINA, DeobfuscationHelper.sCurrentTbVersion, BuildConfig.VERSION_CODE)) + add("%d rule(s) lost: %s".format(Locale.CHINA, lostList.size, lostList)) + } + val message = TextUtils.join("\n", messages) + XposedBridge.log(message) + + val alert = AlertDialog.Builder( + activity, + getDialogTheme(getContext()) + ) + .setTitle("规则异常") + .setMessage(message) + .setCancelable(false) + .setNeutralButton("更新模块") { _, _ -> + activity.startActivity(Intent().apply { + setAction("android.intent.action.VIEW") + if (isModuleBetaVersion) { + setData(Uri.parse(strings["ci_uri"])) + } else { + setData(Uri.parse(strings["release_uri"])) + } + }) + } + .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setPositiveButton(activity.getString(android.R.string.ok)) { _, _ -> + putSignature(0) + saveAndRestart(activity, "unknown", null) + }.create() + + alert.show() + fixAlertDialogWidth(alert) + } + return@hookAfterMethod + } + + initializeAdp() + if (getBoolean("hide_native")) { + try { + System.loadLibrary("hide") + } catch (e: UnsatisfiedLinkError) { + XposedBridge.log(e) + } + } + + val activeHookerKeys = getAll().entries + .filter { it.value != false } + .map { it.key } + .toMutableSet() + .apply { + add("ts_pref") + add("fragment_tab") + } + + hookers.forEach { hooker -> + try { + if (activeHookerKeys.contains(hooker.key())) { + hooker.hook() + } + } catch (tr: Throwable) { + XposedBridge.log(tr) + exceptions[hooker.key()] = tr + } + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/AcRule.kt b/app/src/main/java/gm/tieba/tabswitch/dao/AcRule.kt index 8417fd49..451ffb15 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/AcRule.kt +++ b/app/src/main/java/gm/tieba/tabswitch/dao/AcRule.kt @@ -1,8 +1,14 @@ package gm.tieba.tabswitch.dao -import androidx.room.* -import androidx.room.migration.Migration -import androidx.sqlite.db.SupportSQLiteDatabase +import androidx.room.ColumnInfo +import androidx.room.Dao +import androidx.room.Database +import androidx.room.Delete +import androidx.room.Entity +import androidx.room.Insert +import androidx.room.PrimaryKey +import androidx.room.Query +import androidx.room.RoomDatabase @Entity data class AcRule( @@ -36,13 +42,3 @@ interface AcRuleDao { abstract class AcRuleDatabase : RoomDatabase() { abstract fun acRuleDao(): AcRuleDao } - -object AcRuleMigrations { - @JvmStatic - val MIGRATION_1_2 = object : Migration(1, 2) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL("alter table rules rename column rule to matcher") - database.execSQL("alter table rules rename to AcRule") - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java b/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java deleted file mode 100644 index 67ed4f8c..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.java +++ /dev/null @@ -1,62 +0,0 @@ -package gm.tieba.tabswitch.dao; - -import android.content.Context; - -import androidx.room.Room; - -import java.util.Arrays; -import java.util.List; - -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; - -public class AcRules { - public static final String ACRULES_DATABASE_NAME = "Deobfs.db"; - public static AcRuleDao sDao; - - public static void init(final Context context) { - sDao = Room.databaseBuilder( - context.getApplicationContext(), AcRuleDatabase.class, ACRULES_DATABASE_NAME - ) - .allowMainThreadQueries() - .build() - .acRuleDao(); - } - - public static void dropAllRules() { - sDao.getAll().forEach(it -> sDao.delete(it)); - } - - public static void putRule(final String matcher, final String clazz, final String method) { - sDao.insertAll(AcRule.Companion.create(matcher, clazz, method)); - } - - public static void findRule(final Matcher matcher, final Callback callback) { - for (final var rule : sDao.loadAllMatch(matcher.toString())) { - callback.onRuleFound(rule.getMatcher(), rule.getClazz(), rule.getMethod()); - } - } - - public static void findRule(final List matchers, final Callback callback) { - for (final var rule : sDao.loadAllMatch(matchers.stream().map(Matcher::toString).toArray(String[]::new))) { - callback.onRuleFound(rule.getMatcher(), rule.getClazz(), rule.getMethod()); - } - } - - public static void findRule(final String str, final Callback callback) { - for (final var rule : sDao.loadAllMatch(str)) { - callback.onRuleFound(rule.getMatcher(), rule.getClazz(), rule.getMethod()); - } - } - - public static boolean isRuleFound(final String matcher) { - return !sDao.loadAllMatch(matcher).isEmpty(); - } - - public static boolean isRuleFound(final String... matchers) { - return Arrays.stream(matchers).allMatch(AcRules::isRuleFound); - } - - public interface Callback { - void onRuleFound(String matcher, String clazz, String method); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.kt b/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.kt new file mode 100644 index 00000000..22c003d0 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/dao/AcRules.kt @@ -0,0 +1,56 @@ +package gm.tieba.tabswitch.dao + +import android.content.Context +import androidx.room.Room.databaseBuilder +import gm.tieba.tabswitch.dao.AcRule.Companion.create +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher + +object AcRules { + private const val ACRULES_DATABASE_NAME = "Deobfs.db" + private lateinit var ruleDao: AcRuleDao + fun init(context: Context) { + ruleDao = databaseBuilder( + context.applicationContext, AcRuleDatabase::class.java, ACRULES_DATABASE_NAME + ) + .allowMainThreadQueries() + .build() + .acRuleDao() + } + + fun dropAllRules() { + ruleDao.getAll().forEach { rule -> + ruleDao.delete(rule) + } + } + + fun putRule(matcher: String, clazz: String, method: String) { + ruleDao.insertAll(create(matcher, clazz, method)) + } + + fun findRule(matcher: Matcher, callback: (String, String, String) -> Unit) { + ruleDao.loadAllMatch(matcher.toString()).forEach { rule -> + callback(rule.matcher, rule.clazz, rule.method) + } + } + + fun findRule(matchers: List, callback: (String, String, String) -> Unit) { + val matcherStrings = matchers.map { it.toString() }.toTypedArray() + ruleDao.loadAllMatch(*matcherStrings).forEach { rule -> + callback(rule.matcher, rule.clazz, rule.method) + } + } + + fun findRule(str: String, callback: (String, String, String) -> Unit) { + ruleDao.loadAllMatch(str).forEach { rule -> + callback(rule.matcher, rule.clazz, rule.method) + } + } + + fun isRuleFound(matcher: String): Boolean { + return ruleDao.loadAllMatch(matcher).isNotEmpty() + } + + fun isRuleFound(vararg matchers: String): Boolean { + return matchers.all { matcher -> isRuleFound(matcher) } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Adp.java b/app/src/main/java/gm/tieba/tabswitch/dao/Adp.java deleted file mode 100644 index cd39d548..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Adp.java +++ /dev/null @@ -1,107 +0,0 @@ -package gm.tieba.tabswitch.dao; - -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; - -public class Adp extends XposedContext { - private static Adp sAdp; - public String BDUSS; - public String tbs; - public String account; - public Set follows = new HashSet<>(); - private SQLiteDatabase mDb; - - public Adp() { - sAdp = this; - getAccountData(); - refreshCache(); - } - - private void getAccountData() { - XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.data.AccountData", sClassLoader, - "getBDUSS", new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - BDUSS = (String) param.getResult(); - } - }); - XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.data.AccountData", sClassLoader, - "getTbs", new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - tbs = (String) param.getResult(); - } - }); - XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.data.AccountData", sClassLoader, - "getAccount", new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - account = (String) param.getResult(); - } - }); - } - - private void refreshCache() { - XposedHelpers.findAndHookMethod("tbclient.ForumRecommend.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - public void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Set forums = new HashSet<>(); - final List list = (List) XposedHelpers.getObjectField(param.thisObject, "like_forum"); - if (list == null) return; - for (int i = 0; i < list.size(); i++) { - forums.add((String) XposedHelpers.getObjectField(list.get(i), "forum_name")); - } - Preferences.putLikeForum(forums); - } - }); - } - - // lazy init - public static Adp getInstance() { - return sAdp; - } - - public synchronized Adp parseDatabase() throws JSONException { - String myPagesTable = null; - mDb = getContext().openOrCreateDatabase("baidu_adp.db", Context.MODE_PRIVATE, null); - try (final Cursor c = mDb.query("cache_meta_info", null, null, null, null, null, null)) { - for (int i = 0; i < c.getCount(); i++) { - c.moveToNext(); - final String nameSpace = c.getString(0); - if ("tb.my_pages".equals(nameSpace)) { - myPagesTable = c.getString(1); - } - } - } - parseMyPages(myPagesTable); - mDb.close(); - return this; - } - - private void parseMyPages(final String tableName) throws JSONException { - try (final Cursor c = mDb.query(tableName, null, null, null, null, null, null)) { - c.moveToNext(); - final String mValue = c.getString(4); - final JSONObject jsonObject = new JSONObject(mValue); - final JSONArray followList = jsonObject.optJSONArray("follow_list"); - for (int i = 0; i < followList.length(); i++) { - final JSONObject follow = followList.optJSONObject(i); - final String name = follow.getString("name_show"); - follows.add(name); - } - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt b/app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt new file mode 100644 index 00000000..0cc2c5a9 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt @@ -0,0 +1,38 @@ +package gm.tieba.tabswitch.dao + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.Preferences.putLikeForum + +object Adp : XposedContext() { + var BDUSS: String? = null + var tbs: String? = null + var account: String? = null + + fun initializeAdp() { + refreshAccountData() + refreshCache() + } + + private fun refreshAccountData() { + hookAfterMethod("com.baidu.tbadk.core.data.AccountData", "getBDUSS") { param -> + BDUSS = param.result as String + } + hookAfterMethod("com.baidu.tbadk.core.data.AccountData", "getTbs") { param -> + tbs = param.result as String + } + hookAfterMethod("com.baidu.tbadk.core.data.AccountData", "getAccount") { param -> + account = param.result as String + } + } + + private fun refreshCache() { + hookBeforeMethod("tbclient.ForumRecommend.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType) { param -> + val forums: MutableSet = HashSet() + val likeForumList = XposedHelpers.getObjectField(param.thisObject, "like_forum") as List<*> + likeForumList.forEach { forums.add(XposedHelpers.getObjectField(it, "forum_name") as String) } + putLikeForum(forums) + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java deleted file mode 100644 index 1c63e3ea..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.java +++ /dev/null @@ -1,140 +0,0 @@ -package gm.tieba.tabswitch.dao; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.SharedPreferences; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class Preferences { - private static SharedPreferences sTsPreferences; - private static SharedPreferences sTsConfig; - - public static void init(final Context context) { - sTsPreferences = context.getSharedPreferences("TS_preferences", Context.MODE_PRIVATE); - sTsConfig = context.getSharedPreferences("TS_config", Context.MODE_PRIVATE); - } - - // Preferences - public static Map getAll() { - return sTsPreferences.getAll(); - } - - public static void remove(final String key) { - final SharedPreferences.Editor editor = sTsPreferences.edit(); - editor.remove(key); - editor.apply(); - } - - public static void putBoolean(final String key, final boolean value) { - final SharedPreferences.Editor editor = sTsPreferences.edit(); - editor.putBoolean(key, value); - editor.apply(); - } - - public static boolean getBoolean(final String key) { - return sTsPreferences.getBoolean(key, false); - } - - public static void putString(final String key, final String value) { - final SharedPreferences.Editor editor = sTsPreferences.edit(); - editor.putString(key, value); - editor.apply(); - } - - public static String getString(final String key) { - return sTsPreferences.getString(key, null); - } - - public static void putStringSet(final String key, final String value, final boolean isContain) { - final List list = new ArrayList<>(getStringSet(key)); - if (!isContain) list.remove(value); - else if (!list.contains(value)) list.add(value); - - final SharedPreferences.Editor editor = sTsPreferences.edit(); - editor.putStringSet(key, new HashSet<>(list)); - editor.apply(); - } - - public static Set getStringSet(final String key) { - return sTsPreferences.getStringSet(key, new HashSet<>()); - } - - // Config - public static void putEULAAccepted() { - final SharedPreferences.Editor editor = sTsConfig.edit(); - editor.putBoolean("EULA", true); - editor.apply(); - } - - public static boolean getIsEULAAccepted() { - return sTsConfig.getBoolean("EULA", false); - } - - public static void putAutoSignEnabled() { - final SharedPreferences.Editor editor = sTsConfig.edit(); - editor.putBoolean("auto_sign", true); - editor.apply(); - } - - public static boolean getIsAutoSignEnabled() { - return sTsConfig.getBoolean("auto_sign", false); - } - - public static boolean getTransitionAnimationEnabled() { - return sTsPreferences.getBoolean("transition_animation", false); - } - - @SuppressLint("ApplySharedPref") - public static void putPurgeEnabled() { - final SharedPreferences.Editor editor = sTsConfig.edit(); - editor.putBoolean("ze", true); - editor.commit(); - } - - public static boolean getIsPurgeEnabled() { - return sTsConfig.getBoolean("ze", false); - } - - @SuppressLint("ApplySharedPref") - public static void putSignature(final int i) { - final SharedPreferences.Editor editor = sTsConfig.edit(); - editor.putInt("signature", i); - editor.commit(); - } - - public static int getSignature() { - return sTsConfig.getInt("signature", 0); - } - - public static void putLikeForum(final Set follow) { - final SharedPreferences.Editor editor = sTsConfig.edit(); - editor.putStringSet("like_forum", follow); - editor.apply(); - } - - public static Set getLikeForum() { - return sTsConfig.getStringSet("like_forum", null); - } - - public static void putSignDate() { - final SharedPreferences.Editor editor = sTsConfig.edit(); - editor.putInt("sign_date", Calendar.getInstance().get(Calendar.DAY_OF_YEAR)); - editor.apply(); - } - - public static boolean getIsSigned() { - return Calendar.getInstance().get(Calendar.DAY_OF_YEAR) == sTsConfig.getInt("sign_date", 0); - } - - @SuppressLint("ApplySharedPref") - public static void commit() { - sTsConfig.edit().commit(); - sTsPreferences.edit().commit(); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.kt b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.kt new file mode 100644 index 00000000..083d1eb5 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.kt @@ -0,0 +1,96 @@ +package gm.tieba.tabswitch.dao + +import android.annotation.SuppressLint +import android.content.Context +import android.content.SharedPreferences +import java.util.Calendar + +object Preferences { + private lateinit var sTsPreferences: SharedPreferences + private lateinit var sTsConfig: SharedPreferences + + fun init(context: Context) { + sTsPreferences = context.getSharedPreferences("TS_preferences", Context.MODE_PRIVATE) + sTsConfig = context.getSharedPreferences("TS_config", Context.MODE_PRIVATE) + } + + fun getAll(): Map = sTsPreferences.all + + fun remove(key: String) { + sTsPreferences.edit().remove(key).apply() + } + + fun putBoolean(key: String, value: Boolean) { + sTsPreferences.edit().putBoolean(key, value).apply() + } + + @JvmStatic + fun getBoolean(key: String): Boolean = sTsPreferences.getBoolean(key, false) + + fun putString(key: String, value: String) { + sTsPreferences.edit().putString(key, value).apply() + } + + fun getString(key: String): String? = sTsPreferences.getString(key, null) + + fun putStringSet(key: String, value: String, isContain: Boolean) { + val set = getStringSet(key).toMutableSet() + if (isContain) { + set.add(value) + } else { + set.remove(value) + } + sTsPreferences.edit().putStringSet(key, set).apply() + } + + fun getStringSet(key: String): Set = sTsPreferences.getStringSet(key, emptySet()) ?: emptySet() + + // Config + fun putEULAAccepted() { + sTsConfig.edit().putBoolean("EULA", true).apply() + } + + fun getIsEULAAccepted(): Boolean = sTsConfig.getBoolean("EULA", false) + + fun putAutoSignEnabled() { + sTsConfig.edit().putBoolean("auto_sign", true).apply() + } + + fun getIsAutoSignEnabled(): Boolean = sTsConfig.getBoolean("auto_sign", false) + + fun getTransitionAnimationEnabled(): Boolean = + sTsPreferences.getBoolean("transition_animation", false) + + @SuppressLint("ApplySharedPref") + fun putPurgeEnabled() { + sTsConfig.edit().putBoolean("ze", true).commit() + } + + fun getIsPurgeEnabled(): Boolean = sTsConfig.getBoolean("ze", false) + + @SuppressLint("ApplySharedPref") + fun putSignature(i: Int) { + sTsConfig.edit().putInt("signature", i).commit() + } + + fun getSignature(): Int = sTsConfig.getInt("signature", 0) + + fun putLikeForum(follow: Set?) { + sTsConfig.edit().putStringSet("like_forum", follow).apply() + } + + fun getLikeForum(): Set? = sTsConfig.getStringSet("like_forum", null) + + fun putSignDate() { + sTsConfig.edit().putInt("sign_date", Calendar.getInstance()[Calendar.DAY_OF_YEAR]).apply() + } + + fun getIsSigned(): Boolean = + Calendar.getInstance()[Calendar.DAY_OF_YEAR] == sTsConfig.getInt("sign_date", 0) + + @SuppressLint("ApplySharedPref") + fun commit() { + sTsConfig.edit().commit() + sTsPreferences.edit().commit() + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/IHooker.java b/app/src/main/java/gm/tieba/tabswitch/hooker/IHooker.java deleted file mode 100644 index 998f4e9a..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/IHooker.java +++ /dev/null @@ -1,11 +0,0 @@ -package gm.tieba.tabswitch.hooker; - -import androidx.annotation.NonNull; - -public interface IHooker { - - @NonNull - String key(); - - void hook() throws Throwable; -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/IHooker.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/IHooker.kt new file mode 100644 index 00000000..6781cfa5 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/IHooker.kt @@ -0,0 +1,9 @@ +package gm.tieba.tabswitch.hooker + +interface IHooker { + + fun key(): String + + @Throws(Throwable::class) + fun hook() +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/Obfuscated.java b/app/src/main/java/gm/tieba/tabswitch/hooker/Obfuscated.java deleted file mode 100644 index 1463e7c0..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/Obfuscated.java +++ /dev/null @@ -1,10 +0,0 @@ -package gm.tieba.tabswitch.hooker; - -import java.util.List; - -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; - -public interface Obfuscated { - - List matchers(); -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/Obfuscated.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/Obfuscated.kt new file mode 100644 index 00000000..294d188f --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/Obfuscated.kt @@ -0,0 +1,8 @@ +package gm.tieba.tabswitch.hooker + +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher + +interface Obfuscated { + + fun matchers(): List +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java deleted file mode 100644 index aac8d78a..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ /dev/null @@ -1,340 +0,0 @@ -package gm.tieba.tabswitch.hooker; - -import android.app.Activity; -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.os.Process; -import android.text.TextUtils; -import android.util.Log; -import android.view.View; -import android.view.ViewGroup; -import android.view.inputmethod.InputMethodManager; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.ScrollView; - -import androidx.annotation.NonNull; - -import org.jetbrains.annotations.NotNull; -import org.luckypray.dexkit.query.matchers.ClassMatcher; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.BuildConfig; -import gm.tieba.tabswitch.Constants; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.TSPreferenceHelper.SwitchButtonHolder; -import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; -import gm.tieba.tabswitch.hooker.extra.TraceChecker; -import gm.tieba.tabswitch.util.DisplayUtils; -import gm.tieba.tabswitch.widget.NavigationBar; -import gm.tieba.tabswitch.widget.TbToast; - -public class TSPreference extends XposedContext implements IHooker, Obfuscated { - public final static String MAIN = "贴吧TS设置"; - public final static String MODIFY_TAB = "修改页面"; - public final static String TRACE = "痕迹"; - private final static String PROXY_ACTIVITY = "com.baidu.tieba.setting.im.more.SecretSettingActivity"; - private static int sCount = 0; - - @NonNull - @Override - public String key() { - return "ts_pref"; - } - - @Override - public List matchers() { - return List.of(new SmaliMatcher( - "Lcom/baidu/tbadk/data/MetaData;->getBazhuGradeData()Lcom/baidu/tbadk/coreExtra/data/BazhuGradeData;") - .setBaseClassMatcher(ClassMatcher.create().usingStrings("mo/q/wise-bawu-core/privacy-policy") - )); - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod(Dialog.class, "dismissDialog", new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) { - final Dialog dialog = (Dialog) param.thisObject; - if (dialog.isShowing()) { - final View view = dialog.getWindow().getCurrentFocus(); - if (view != null) { - final InputMethodManager imm = (InputMethodManager) view.getContext() - .getSystemService(Activity.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(view.getRootView().getWindowToken(), 0); - } - } - } - }); - XposedHelpers.findAndHookMethod("com.baidu.tieba.setting.more.MoreActivity", sClassLoader, - "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var activity = (Activity) param.thisObject; - final var contentView = (ViewGroup) activity.findViewById(android.R.id.content); - final var parent = (RelativeLayout) contentView.getChildAt(0); - final var scroll = (ScrollView) parent.getChildAt(0); - final var containerView = (LinearLayout) scroll.getChildAt(0); - containerView.addView(TSPreferenceHelper.createButton(MAIN, null, true, - v -> startRootPreferenceActivity(activity)), 11); - } - }); - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - try { - XposedHelpers.findAndHookConstructor(clazz, sClassLoader, XposedHelpers - .findClass(PROXY_ACTIVITY, sClassLoader), new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var activity = (Activity) param.args[0]; - try { - final var navigationBar = new NavigationBar(param.thisObject); - final var proxyPage = activity.getIntent().getStringExtra("proxyPage"); - if (proxyPage == null) return; - switch (proxyPage) { - case MAIN: - proxyPage(activity, navigationBar, MAIN, createRootPreference(activity)); - break; - case MODIFY_TAB: - proxyPage(activity, navigationBar, MODIFY_TAB, createModifyTabPreference(activity)); - break; - case TRACE: - proxyPage(activity, navigationBar, TRACE, createHidePreference(activity)); - break; - } - } catch (final Throwable tr) { - final var messages = new ArrayList(); - messages.add(Constants.getStrings().get("exception_init_preference")); - messages.add(String.format(Locale.CHINA, "贴吧版本:%s, 模块版本:%d", - DeobfuscationHelper.getTbVersion(getContext()), BuildConfig.VERSION_CODE)); - messages.add(Log.getStackTraceString(tr)); - final var message = TextUtils.join("\n", messages); - XposedBridge.log(message); - AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? - android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) - .setTitle("规则异常").setMessage(message).setCancelable(false) - .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> activity.finish()) - .create(); - alert.show(); - DisplayUtils.fixAlertDialogWidth(alert); - } - } - }); - } catch (final NoSuchMethodError ignored) { - } - }); - } - - private void proxyPage(final Activity activity, final NavigationBar navigationBar, final String title, - final LinearLayout preferenceLayout) throws Throwable { - navigationBar.setTitleText(title); - navigationBar.setCenterTextTitle(""); - navigationBar.addTextButton("重启", v -> { - Preferences.commit(); - DisplayUtils.restart(activity); - }); - final var contentView = (ViewGroup) activity.findViewById(android.R.id.content); - final var parent = (LinearLayout) contentView.getChildAt(0); - final var mainScroll = (ScrollView) parent.getChildAt(1); - final var containerView = (LinearLayout) mainScroll.getChildAt(0); - containerView.removeAllViews(); - containerView.addView(preferenceLayout); - } - - private void startRootPreferenceActivity(final Activity activity) { - if (!Preferences.getIsEULAAccepted()) { - final StringBuilder stringBuilder = new StringBuilder().append(Constants.getStrings().get("EULA")); - if (sIsModuleBetaVersion) { - stringBuilder.append("\n\n").append(Constants.getStrings().get("dev_tip")); - } - AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? - android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) - .setTitle("使用协议").setMessage(stringBuilder.toString()) - .setNegativeButton(activity.getString(android.R.string.cancel), null) - .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> { - Preferences.putEULAAccepted(); - startRootPreferenceActivity(activity); - }) - .create(); - alert.show(); - DisplayUtils.fixAlertDialogWidth(alert); - } else { - final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); - intent.putExtra("proxyPage", MAIN); - activity.startActivity(intent); - } - } - - @NotNull - private LinearLayout createRootPreference(final Activity activity) { - final boolean isPurgeEnabled = Preferences.getIsPurgeEnabled(); - final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); - - preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "轻车简从" : "净化界面")); - preferenceLayout.addView(TSPreferenceHelper.createButton(MODIFY_TAB, null, true, v -> { - final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); - intent.putExtra("proxyPage", MODIFY_TAB); - activity.startActivity(intent); - })); - if (isPurgeEnabled) { - preferenceLayout.addView(new SwitchButtonHolder(activity, "真正的净化界面", "purge", SwitchButtonHolder.TYPE_SWITCH)); - } - preferenceLayout.addView(new SwitchButtonHolder(activity, "净化进吧", "purge_enter", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "默认折叠置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "只推荐已关注的吧", "follow_filter", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "屏蔽首页视频贴", "purge_video", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤首页推荐", "personalized_filter", SwitchButtonHolder.TYPE_DIALOG)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤吧页面", "frs_page_filter", SwitchButtonHolder.TYPE_DIALOG)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤帖子回复", "content_filter", SwitchButtonHolder.TYPE_DIALOG)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "过滤用户", "user_filter", SwitchButtonHolder.TYPE_DIALOG)); - - preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "别出新意" : "增加功能")); - preferenceLayout.addView(new SwitchButtonHolder(activity, "浏览历史增加搜索", "history_cache", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "弹窗自由复制", "select_clipboard", SwitchButtonHolder.TYPE_SWITCH)); - - preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "垂手可得" : "自动化")); - final SwitchButtonHolder autoSign = new SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH); - autoSign.setOnButtonClickListener(v -> { - if (!Preferences.getIsAutoSignEnabled()) { - AlertDialog alert = new AlertDialog.Builder(activity, DisplayUtils.isLightMode(getContext()) ? - android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) - .setTitle("提示").setMessage("这是一个需要网络请求并且有封号风险的功能,您需要自行承担使用此功能的风险,请谨慎使用!") - .setNegativeButton(activity.getString(android.R.string.cancel), null) - .setPositiveButton(activity.getString(android.R.string.ok), (dialogInterface, i) -> { - Preferences.putAutoSignEnabled(); - autoSign.bdSwitch.turnOn(); - }) - .create(); - alert.show(); - DisplayUtils.fixAlertDialogWidth(alert); - } else { - autoSign.bdSwitch.changeState(); - } - }); - preferenceLayout.addView(autoSign); - preferenceLayout.addView(new SwitchButtonHolder(activity, "自动打开一键签到", "open_sign", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "吧页面起始页面改为最新", "frs_tab", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "消息页面起始页面改为通知", "msg_center_tab", SwitchButtonHolder.TYPE_SWITCH)); - - var originSrcOnlyWifiButton = new SwitchButtonHolder(activity, "自动查看原图仅WiFi下生效", "origin_src_only_wifi", SwitchButtonHolder.TYPE_SWITCH); - var originSrcButton = new SwitchButtonHolder(activity, "自动查看原图", "origin_src", SwitchButtonHolder.TYPE_SWITCH); - originSrcButton.setOnButtonClickListener(v -> { - originSrcButton.bdSwitch.changeState(); - originSrcOnlyWifiButton.switchButton.setVisibility(Preferences.getBoolean("origin_src") ? View.VISIBLE : View.GONE); - } - ); - originSrcOnlyWifiButton.switchButton.setVisibility(Preferences.getBoolean("origin_src") ? View.VISIBLE : View.GONE); - - preferenceLayout.addView(originSrcButton); - preferenceLayout.addView(originSrcOnlyWifiButton); - - preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "奇怪怪" : "其它")); - preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏小红点", "red_tip", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用更新提示", "remove_update", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "用赞踩差数代替赞数", "agree_num", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "禁止检测通知开启状态", "notification_detect", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(TSPreferenceHelper.createButton(TRACE, "希望有一天不再需要贴吧TS", true, v -> { - final Intent intent = new Intent().setClassName(activity, PROXY_ACTIVITY); - intent.putExtra("proxyPage", TRACE); - activity.startActivity(intent); - })); - - preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "关于就是关于" : "关于")); - preferenceLayout.addView(TSPreferenceHelper.createButton("作者", "GM", true, v -> { - sCount++; - if (sCount % 3 == 0) { - TbToast.showTbToast(TSPreferenceHelper.randomToast(), TbToast.LENGTH_SHORT); - } - if (!isPurgeEnabled && sCount >= 10) { - Preferences.putPurgeEnabled(); - activity.recreate(); - } - })); - preferenceLayout.addView(TSPreferenceHelper.createButton("源代码", "想要小星星", true, v -> { - final Intent intent = new Intent(); - intent.setAction("android.intent.action.VIEW"); - intent.setData(Uri.parse("https://github.com/GuhDoy/TiebaTS")); - activity.startActivity(intent); - })); - preferenceLayout.addView(TSPreferenceHelper.createButton("TG群", "及时获取更新", true, v -> { - final Intent intent = new Intent(); - intent.setAction("android.intent.action.VIEW"); - intent.setData(Uri.parse("https://t.me/TabSwitch")); - activity.startActivity(intent); - })); - preferenceLayout.addView(TSPreferenceHelper.createButton("版本", String.format(Locale.CHINA, "%s", BuildConfig.VERSION_NAME), true, v -> { - final Intent intent = new Intent(); - intent.setAction("android.intent.action.VIEW"); - if (sIsModuleBetaVersion) { - intent.setData(Uri.parse(Constants.getStrings().get("ci_uri"))); - } else { - intent.setData(Uri.parse(Constants.getStrings().get("release_uri"))); - } - activity.startActivity(intent); - })); - return preferenceLayout; - } - - private LinearLayout createModifyTabPreference(final Activity activity) { - final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); - preferenceLayout.addView(TSPreferenceHelper.createTextView("主页导航栏")); - preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏首页", "home_recommend", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏进吧", "enter_forum", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏发帖", "write_thread", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "隐藏消息", "im_message", SwitchButtonHolder.TYPE_SWITCH)); - - preferenceLayout.addView(TSPreferenceHelper.createTextView("其他")); - SwitchButtonHolder transitionAnimation = new SwitchButtonHolder(activity, "修复过渡动画", "transition_animation", SwitchButtonHolder.TYPE_SWITCH); - - boolean shouldEnableTransitionAnimationFix = Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1"); - if (!shouldEnableTransitionAnimationFix && Preferences.getTransitionAnimationEnabled()) { - transitionAnimation.bdSwitch.turnOff(); - } - - transitionAnimation.setOnButtonClickListener(v -> { - if (!shouldEnableTransitionAnimationFix) { - TbToast.showTbToast("当前贴吧版本不支持此功能", TbToast.LENGTH_SHORT); - } else { - transitionAnimation.bdSwitch.changeState(); - } - }); - preferenceLayout.addView(transitionAnimation); - - return preferenceLayout; - } - - private LinearLayout createHidePreference(final Activity activity) { - final boolean isPurgeEnabled = Preferences.getIsPurgeEnabled(); - final TSPreferenceHelper.PreferenceLayout preferenceLayout = new TSPreferenceHelper.PreferenceLayout(activity); - if (isPurgeEnabled || BuildConfig.DEBUG) { - preferenceLayout.addView(TSPreferenceHelper.createTextView("隐藏设置")); - preferenceLayout.addView(new SwitchButtonHolder(activity, isPurgeEnabled ? "藏起尾巴" : "隐藏模块", "hide", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, isPurgeEnabled ? "藏起尾巴(原生)" : "隐藏模块(原生)", "hide_native", SwitchButtonHolder.TYPE_SWITCH)); - } - preferenceLayout.addView(TSPreferenceHelper.createTextView("检测设置")); - preferenceLayout.addView(new SwitchButtonHolder(activity, "检测 Xposed", "check_xposed", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "检测模块", "check_module", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(new SwitchButtonHolder(activity, "检测堆栈(重启才能真正生效)", "check_stack_trace", SwitchButtonHolder.TYPE_SWITCH)); - preferenceLayout.addView(TSPreferenceHelper.createButton(isPurgeEnabled ? "捏捏尾巴" : "检测模块", String.valueOf(Process.myPid()), true, v -> - new TraceChecker(preferenceLayout).checkAll())); - TraceChecker.sChildCount = preferenceLayout.getChildCount(); - return preferenceLayout; - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt new file mode 100644 index 00000000..3d04b5f8 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt @@ -0,0 +1,375 @@ +package gm.tieba.tabswitch.hooker + +import android.app.Activity +import android.app.AlertDialog +import android.app.Dialog +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.os.Process +import android.text.TextUtils +import android.util.Log +import android.view.View +import android.view.ViewGroup +import android.view.inputmethod.InputMethodManager +import android.widget.LinearLayout +import android.widget.RelativeLayout +import android.widget.ScrollView +import de.robv.android.xposed.XposedBridge +import gm.tieba.tabswitch.BuildConfig +import gm.tieba.tabswitch.Constants.strings +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.dao.Preferences.commit +import gm.tieba.tabswitch.dao.Preferences.getBoolean +import gm.tieba.tabswitch.dao.Preferences.getIsAutoSignEnabled +import gm.tieba.tabswitch.dao.Preferences.getIsEULAAccepted +import gm.tieba.tabswitch.dao.Preferences.getIsPurgeEnabled +import gm.tieba.tabswitch.dao.Preferences.getTransitionAnimationEnabled +import gm.tieba.tabswitch.dao.Preferences.putAutoSignEnabled +import gm.tieba.tabswitch.dao.Preferences.putEULAAccepted +import gm.tieba.tabswitch.dao.Preferences.putPurgeEnabled +import gm.tieba.tabswitch.hooker.TSPreferenceHelper.PreferenceLayout +import gm.tieba.tabswitch.hooker.TSPreferenceHelper.SwitchButtonHolder +import gm.tieba.tabswitch.hooker.TSPreferenceHelper.createButton +import gm.tieba.tabswitch.hooker.TSPreferenceHelper.createTextView +import gm.tieba.tabswitch.hooker.TSPreferenceHelper.randomToast +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.getTbVersion +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.isTbSatisfyVersionRequirement +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher +import gm.tieba.tabswitch.hooker.extra.TraceChecker +import gm.tieba.tabswitch.util.fixAlertDialogWidth +import gm.tieba.tabswitch.util.getDialogTheme +import gm.tieba.tabswitch.util.restart +import gm.tieba.tabswitch.widget.NavigationBar +import gm.tieba.tabswitch.widget.TbToast +import gm.tieba.tabswitch.widget.TbToast.Companion.showTbToast +import org.luckypray.dexkit.query.matchers.ClassMatcher +import java.util.Locale + +class TSPreference : XposedContext(), IHooker, Obfuscated { + + override fun key(): String { + return "ts_pref" + } + + override fun matchers(): List { + return listOf( + SmaliMatcher( + "Lcom/baidu/tbadk/data/MetaData;->getBazhuGradeData()Lcom/baidu/tbadk/coreExtra/data/BazhuGradeData;" + ).apply { + classMatcher = ClassMatcher.create().usingStrings("mo/q/wise-bawu-core/privacy-policy") + } + ) + } + + override fun hook() { + hookBeforeMethod( + Dialog::class.java, + "dismissDialog" + ) { param -> + val dialog = param.thisObject as? Dialog + dialog?.takeIf { it.isShowing }?.window?.currentFocus?.let { view -> + val imm = view.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as? InputMethodManager + imm?.hideSoftInputFromWindow(view.rootView.windowToken, 0) + } + } + + hookAfterMethod( + "com.baidu.tieba.setting.more.MoreActivity", + "onCreate", Bundle::class.java + ) { param -> + val activity = param.thisObject as Activity + val contentView = activity.findViewById(android.R.id.content) + val parent = contentView.getChildAt(0) as RelativeLayout + val scroll = parent.getChildAt(0) as ScrollView + val containerView = scroll.getChildAt(0) as LinearLayout + containerView.addView(createButton(MAIN, null, true) { startRootPreferenceActivity(activity) }, 11) + } + + findRule(matchers()) { _, clazz, _ -> + try { + hookAfterConstructor(clazz, findClass(PROXY_ACTIVITY)) { param -> + val activity = param.args[0] as Activity + try { + val navigationBar = NavigationBar(param.thisObject) + val proxyPage = activity.intent.getStringExtra("proxyPage") ?: return@hookAfterConstructor + when (proxyPage) { + MAIN -> proxyPage(activity, navigationBar, MAIN, createRootPreference(activity)) + MODIFY_TAB -> proxyPage(activity, navigationBar, MODIFY_TAB, createModifyTabPreference(activity)) + TRACE -> proxyPage(activity, navigationBar, TRACE, createHidePreference(activity)) + } + + } catch (tr: Throwable) { + val messages = ArrayList().apply { + add(strings["exception_init_preference"]) + add( + "贴吧版本:%s, 模块版本:%d".format(Locale.CHINA, getTbVersion(getContext()), BuildConfig.VERSION_CODE) + ) + add(Log.getStackTraceString(tr)) + } + + val message = TextUtils.join("\n", messages) + XposedBridge.log(message) + + val alert = AlertDialog.Builder( + activity, + getDialogTheme(getContext()) + ) + .setTitle("规则异常") + .setMessage(message) + .setCancelable(false) + .setPositiveButton(activity.getString(android.R.string.ok)) { _, _ -> activity.finish() } + .create() + + alert.show() + fixAlertDialogWidth(alert) + } + } + } catch (ignored: NoSuchMethodError) { + } + } + } + + private fun proxyPage(activity: Activity, navigationBar: NavigationBar, title: String, preferenceLayout: LinearLayout) { + navigationBar.apply { + setTitleText(title) + setCenterTextTitle("") + addTextButton("重启") { _ -> + commit() + restart(activity) + } + } + + val contentView = activity.findViewById(android.R.id.content) + val parent = contentView.getChildAt(0) as LinearLayout + val mainScroll = parent.getChildAt(1) as ScrollView + val containerView = mainScroll.getChildAt(0) as LinearLayout + + containerView.apply { + removeAllViews() + addView(preferenceLayout) + } + } + + private fun startRootPreferenceActivity(activity: Activity) { + if (!getIsEULAAccepted()) { + val stringBuilder = StringBuilder().apply { + append(strings["EULA"]) + if (isModuleBetaVersion) { + append("\n\n").append(strings["dev_tip"]) + } + } + + val alert = AlertDialog.Builder( + activity, + getDialogTheme(getContext()) + ) + .setTitle("使用协议") + .setMessage(stringBuilder.toString()) + .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setPositiveButton(activity.getString(android.R.string.ok)) { _, _ -> + putEULAAccepted() + startRootPreferenceActivity(activity) + } + .create() + + alert.show() + fixAlertDialogWidth(alert) + + } else { + activity.startActivity(Intent().apply { + setClassName(activity, PROXY_ACTIVITY) + putExtra("proxyPage", MAIN) + }) + } + } + + private fun createRootPreference(activity: Activity): LinearLayout { + val isPurgeEnabled = getIsPurgeEnabled() + val preferenceLayout = PreferenceLayout(activity) + + preferenceLayout.addView(createTextView(if (isPurgeEnabled) "轻车简从" else "净化界面")) + preferenceLayout.addView(createButton(MODIFY_TAB, null, true) { _ -> + activity.startActivity(Intent().apply { + setClassName(activity, PROXY_ACTIVITY) + putExtra("proxyPage", MODIFY_TAB) + }) + }) + + if (isPurgeEnabled) { + preferenceLayout.addView(SwitchButtonHolder(activity, "真正的净化界面", "purge", SwitchButtonHolder.TYPE_SWITCH)) + } + + preferenceLayout.addView(SwitchButtonHolder(activity, "净化进吧", "purge_enter", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "净化我的", "purge_my", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "默认折叠置顶帖", "fold_top_card_view", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "只推荐已关注的吧", "follow_filter", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "屏蔽首页视频贴", "purge_video", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "过滤首页推荐", "personalized_filter", SwitchButtonHolder.TYPE_DIALOG)) + preferenceLayout.addView(SwitchButtonHolder(activity, "过滤吧页面", "frs_page_filter", SwitchButtonHolder.TYPE_DIALOG)) + preferenceLayout.addView(SwitchButtonHolder(activity, "过滤帖子回复", "content_filter", SwitchButtonHolder.TYPE_DIALOG)) + preferenceLayout.addView(SwitchButtonHolder(activity, "过滤用户", "user_filter", SwitchButtonHolder.TYPE_DIALOG)) + + preferenceLayout.addView(createTextView(if (isPurgeEnabled) "别出新意" else "增加功能")) + preferenceLayout.addView(SwitchButtonHolder(activity, "浏览历史增加搜索", "history_cache", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "楼层增加点按效果", "ripple", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "长按下载保存全部图片", "save_images", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "弹窗自由复制", "select_clipboard", SwitchButtonHolder.TYPE_SWITCH)) + + preferenceLayout.addView(createTextView(if (isPurgeEnabled) "垂手可得" else "自动化")) + + val autoSign = SwitchButtonHolder(activity, "自动签到", "auto_sign", SwitchButtonHolder.TYPE_SWITCH) + autoSign.setOnButtonClickListener { _ -> + if (!getIsAutoSignEnabled()) { + val alert = AlertDialog.Builder( + activity, + getDialogTheme(getContext()) + ) + .setTitle("提示") + .setMessage("这是一个需要网络请求并且有封号风险的功能,您需要自行承担使用此功能的风险,请谨慎使用!") + .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setPositiveButton(activity.getString(android.R.string.ok)) { _, _ -> + putAutoSignEnabled() + autoSign.bdSwitch.turnOn() + } + .create() + alert.show() + fixAlertDialogWidth(alert) + + } else { + autoSign.bdSwitch.changeState() + } + } + preferenceLayout.addView(autoSign) + + preferenceLayout.addView(SwitchButtonHolder(activity, "自动打开一键签到", "open_sign", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "吧页面起始页面改为最新", "frs_tab", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "消息页面起始页面改为通知", "msg_center_tab", SwitchButtonHolder.TYPE_SWITCH)) + + val originSrcOnlyWifiButton = SwitchButtonHolder(activity, "自动查看原图仅WiFi下生效", "origin_src_only_wifi", SwitchButtonHolder.TYPE_SWITCH) + val originSrcButton = SwitchButtonHolder(activity, "自动查看原图", "origin_src", SwitchButtonHolder.TYPE_SWITCH) + originSrcButton.setOnButtonClickListener { _ -> + originSrcButton.bdSwitch.changeState() + originSrcOnlyWifiButton.switchButton.visibility = if (getBoolean("origin_src")) View.VISIBLE else View.GONE + } + originSrcOnlyWifiButton.switchButton.visibility = if (getBoolean("origin_src")) View.VISIBLE else View.GONE + + preferenceLayout.addView(originSrcButton) + preferenceLayout.addView(originSrcOnlyWifiButton) + + preferenceLayout.addView(createTextView(if (isPurgeEnabled) "奇怪怪" else "其它")) + preferenceLayout.addView(SwitchButtonHolder(activity, "隐藏小红点", "red_tip", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "禁用更新提示", "remove_update", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "用赞踩差数代替赞数", "agree_num", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "禁止检测通知开启状态", "notification_detect", SwitchButtonHolder.TYPE_SWITCH)) + + preferenceLayout.addView(createButton(TRACE, "希望有一天不再需要贴吧TS", true) { _ -> + activity.startActivity(Intent().apply { + setClassName(activity, PROXY_ACTIVITY) + putExtra("proxyPage", TRACE) + }) + }) + + preferenceLayout.addView(createTextView(if (isPurgeEnabled) "关于就是关于" else "关于")) + preferenceLayout.addView(createButton("作者", "GM", true) { _ -> + sCount++ + if (sCount % 3 == 0) { + showTbToast(randomToast(), TbToast.LENGTH_SHORT) + } + if (!isPurgeEnabled && sCount >= 10) { + putPurgeEnabled() + activity.recreate() + } + }) + + preferenceLayout.addView(createButton("源代码", "想要小星星", true) { _ -> + activity.startActivity(Intent().apply { + setAction("android.intent.action.VIEW") + setData(Uri.parse("https://github.com/GuhDoy/TiebaTS")) + }) + }) + + preferenceLayout.addView(createButton("TG群", "及时获取更新", true) { _ -> + activity.startActivity(Intent().apply { + setAction("android.intent.action.VIEW") + setData(Uri.parse("https://t.me/TabSwitch")) + }) + }) + + preferenceLayout.addView( + createButton("版本", "%s".format(Locale.CHINA, BuildConfig.VERSION_NAME), true) { _ -> + activity.startActivity(Intent().apply { + setAction("android.intent.action.VIEW") + if (isModuleBetaVersion) { + setData(Uri.parse(strings["ci_uri"])) + } else { + setData(Uri.parse(strings["release_uri"])) + } + }) + }) + return preferenceLayout + } + + private fun createModifyTabPreference(activity: Activity): LinearLayout { + val preferenceLayout = PreferenceLayout(activity) + preferenceLayout.addView(createTextView("主页导航栏")) + preferenceLayout.addView(SwitchButtonHolder(activity, "隐藏首页", "home_recommend", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "隐藏进吧", "enter_forum", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "隐藏发帖", "write_thread", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "隐藏消息", "im_message", SwitchButtonHolder.TYPE_SWITCH)) + + preferenceLayout.addView(createTextView("其他")) + val transitionAnimation = SwitchButtonHolder(activity, "修复过渡动画", "transition_animation", SwitchButtonHolder.TYPE_SWITCH) + + val shouldEnableTransitionAnimationFix = Build.VERSION.SDK_INT >= 34 && isTbSatisfyVersionRequirement("12.58.2.1") + if (!shouldEnableTransitionAnimationFix && getTransitionAnimationEnabled()) { + transitionAnimation.bdSwitch.turnOff() + } + + transitionAnimation.setOnButtonClickListener { _ -> + if (!shouldEnableTransitionAnimationFix) { + showTbToast("当前贴吧版本不支持此功能", TbToast.LENGTH_SHORT) + } else { + transitionAnimation.bdSwitch.changeState() + } + } + preferenceLayout.addView(transitionAnimation) + + return preferenceLayout + } + + private fun createHidePreference(activity: Activity): LinearLayout { + val isPurgeEnabled = getIsPurgeEnabled() + val preferenceLayout = PreferenceLayout(activity) + if (isPurgeEnabled || BuildConfig.DEBUG) { + preferenceLayout.addView(createTextView("隐藏设置")) + preferenceLayout.addView(SwitchButtonHolder(activity, if (isPurgeEnabled) "藏起尾巴" else "隐藏模块", "hide", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, if (isPurgeEnabled) "藏起尾巴(原生)" else "隐藏模块(原生)", "hide_native", SwitchButtonHolder.TYPE_SWITCH)) + } + + preferenceLayout.addView(createTextView("检测设置")) + preferenceLayout.addView(SwitchButtonHolder(activity, "检测 Xposed", "check_xposed", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "检测模块", "check_module", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "检测堆栈(重启才能真正生效)", "check_stack_trace", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView( + createButton( + if (isPurgeEnabled) "捏捏尾巴" else "检测模块", + Process.myPid().toString(), + true + ) { _ -> TraceChecker(preferenceLayout).checkAll() }) + TraceChecker.sChildCount = preferenceLayout.childCount + return preferenceLayout + } + + companion object { + const val MAIN: String = "贴吧TS设置" + const val MODIFY_TAB: String = "修改页面" + const val TRACE: String = "痕迹" + private const val PROXY_ACTIVITY = "com.baidu.tieba.setting.im.more.SecretSettingActivity" + private var sCount = 0 + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java deleted file mode 100644 index 29c04192..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.java +++ /dev/null @@ -1,295 +0,0 @@ -package gm.tieba.tabswitch.hooker; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.AlertDialog; -import android.content.Context; -import android.graphics.Color; -import android.text.InputType; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.view.inputmethod.EditorInfo; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.Constants; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.util.DisplayUtils; -import gm.tieba.tabswitch.util.ReflectUtils; -import gm.tieba.tabswitch.widget.Switch; -import gm.tieba.tabswitch.widget.TbToast; - -public class TSPreferenceHelper extends XposedContext { - public static TextView createTextView(final String text) { - final TextView textView = new TextView(getContext()); - textView.setText(text); - textView.setTextColor(ReflectUtils.getColor("CAM_X0108")); - textView.setTextSize(ReflectUtils.getDimenDip("fontsize22")); - final LinearLayout.LayoutParams layoutParams; - if (text != null) { - textView.setPaddingRelative((int) ReflectUtils.getDimen("ds30"), - (int) ReflectUtils.getDimen("ds20"), 0, - (int) ReflectUtils.getDimen("ds20")); - layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT); - } else { - layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - (int) ReflectUtils.getDimen("ds32")); - } - textView.setLayoutParams(layoutParams); - return textView; - } - - @SuppressLint("ClickableViewAccessibility") - public static LinearLayout createButton(final String text, final String tip, final boolean showArrow, final View.OnClickListener l) { - final Object textTipView = XposedHelpers.newInstance(XposedHelpers.findClass( - "com.baidu.tbadk.coreExtra.view.TbSettingTextTipView", sClassLoader), getContext()); - XposedHelpers.callMethod(textTipView, "setText", text); - XposedHelpers.callMethod(textTipView, "setTip", tip); - - final var imageView = ReflectUtils.getObjectField(textTipView, ImageView.class); - imageView.setVisibility(showArrow ? View.VISIBLE : View.GONE); - Object svgManager = XposedHelpers.callStaticMethod(XposedHelpers.findClass("com.baidu.tbadk.core.util.SvgManager", sClassLoader), "getInstance"); - XposedHelpers.callMethod( - svgManager, - "setPureDrawableWithDayNightModeAutoChange", - imageView, - ReflectUtils.getDrawableId("icon_pure_list_arrow16_right_svg"), - ReflectUtils.getR("color", "CAM_X0109"), - null - ); - - final var newButton = ReflectUtils.getObjectField(textTipView, LinearLayout.class); - ((ViewGroup) newButton.getParent()).removeView(newButton); - newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); - if (l != null) newButton.setOnClickListener(l); - - if (showArrow) { - newButton.setOnTouchListener((View v, MotionEvent event) -> { - float x = event.getX(); - float y = event.getY(); - - boolean isInside = x > 0 && x < v.getWidth() && y > 0 && y < v.getHeight(); - - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - newButton.setBackgroundColor(Color.argb(128, Color.red(ReflectUtils.getColor("CAM_X0201")), Color.green(ReflectUtils.getColor("CAM_X0201")), Color.blue(ReflectUtils.getColor("CAM_X0201")))); - break; - - case MotionEvent.ACTION_MOVE: - if (!isInside) { - newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); - } - break; - - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); - break; - } - return false; - }); - } - - // Fix TS Preference button not changing background when skin type changed - XposedHelpers.findAndHookMethod("com.baidu.tieba.setting.more.MoreActivity", sClassLoader, "onChangeSkinType", int.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - newButton.setBackgroundColor(ReflectUtils.getColor("CAM_X0201")); - XposedHelpers.callMethod( - svgManager, - "setPureDrawableWithDayNightModeAutoChange", - imageView, - ReflectUtils.getDrawableId("icon_pure_list_arrow16_right_svg"), - ReflectUtils.getR("color", "CAM_X0109"), - null - ); - } - }); - - return newButton; - } - - static String randomToast() { - switch (new Random().nextInt(5)) { - case 0: - return "别点了,新版本在做了"; - case 1: - return "别点了别点了T_T"; - case 2: - return "再点人傻了>_<"; - case 3: - return "点了也没用~"; - case 4: - return "点个小星星吧:)"; - default: - return ""; - } - } - - public static class PreferenceLayout extends LinearLayout { - public PreferenceLayout(final Context context) { - super(context); - setOrientation(LinearLayout.VERTICAL); - } - - public void addView(final SwitchButtonHolder view) { - addView(view.switchButton); - } - } - - @SuppressLint("ClickableViewAccessibility") - static class SwitchButtonHolder { - public final static int TYPE_SWITCH = 0; - public final static int TYPE_DIALOG = 1; - public final static Map sIdToTag = new HashMap<>(); - private final String mKey; - public Switch bdSwitch; - public LinearLayout switchButton; - - SwitchButtonHolder(final Activity activity, final String text, final String key, final int type) { - mKey = key; - if (sExceptions.containsKey(key)) { - switchButton = createButton(text, "此功能初始化失败", false, v -> { - final Throwable tr = sExceptions.get(key); - XposedBridge.log(tr); - TbToast.showTbToast(Log.getStackTraceString(tr), TbToast.LENGTH_SHORT); - }); - return; - } - bdSwitch = new Switch(); - bdSwitch.setOnSwitchStateChangeListener(new SwitchStatusChangeHandler()); - final View bdSwitchView = bdSwitch.bdSwitch; - bdSwitchView.setLayoutParams(new LinearLayout.LayoutParams(bdSwitchView.getWidth(), - bdSwitchView.getHeight(), 0.16F)); - bdSwitchView.setId(View.generateViewId()); - switch (type) { - case TYPE_SWITCH: - switchButton = createButton(text, null, false, v -> bdSwitch.changeState()); - sIdToTag.put(bdSwitchView.getId(), TYPE_SWITCH + key); - if (Preferences.getBoolean(key)) bdSwitch.turnOn(); - else bdSwitch.turnOff(); - break; - case TYPE_DIALOG: - switchButton = createButton(text, null, false, v -> showRegexDialog(activity, text)); - bdSwitchView.setOnTouchListener((v, event) -> false); - if (Preferences.getString(key) != null) bdSwitch.turnOn(); - else bdSwitch.turnOff(); - break; - } - switchButton.addView(bdSwitchView); - } - - void setOnButtonClickListener(final View.OnClickListener l) { - switchButton.setOnClickListener(l); - bdSwitch.bdSwitch.setOnTouchListener((View v, MotionEvent event) -> { - XposedHelpers.callMethod(bdSwitch.getVibrator(), "vibrate", 30L); - return false; - }); - } - - private void showRegexDialog(final Activity activity, final String title) { - Activity currentActivity = ReflectUtils.getCurrentActivity(); - boolean isLightMode = DisplayUtils.isLightMode(getContext()); - - final EditText editText = new EditText(currentActivity); - editText.setHint(Constants.getStrings().get("regex_hint")); - editText.setText(Preferences.getString(mKey)); - if (!isLightMode) { - editText.setTextColor(Color.WHITE); - editText.setHintTextColor(Color.GRAY); - } - editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); - editText.setFallbackLineSpacing(false); - editText.setLineSpacing(0, 1.2F); - - final LinearLayout linearLayout = new LinearLayout(currentActivity); - linearLayout.setGravity(Gravity.CENTER_HORIZONTAL); - - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT - ); - layoutParams.leftMargin = DisplayUtils.dipToPx(currentActivity, 20F); - layoutParams.rightMargin = DisplayUtils.dipToPx(currentActivity, 20F); - editText.setLayoutParams(layoutParams); - - linearLayout.addView(editText); - - AlertDialog alert = new AlertDialog.Builder(currentActivity, isLightMode ? - android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) - .setTitle(title).setView(linearLayout) - .setNegativeButton(activity.getString(android.R.string.cancel), null) - .setPositiveButton(activity.getString(android.R.string.ok), null).create(); - - alert.setOnShowListener(dialogInterface -> { - Button button = alert.getButton(AlertDialog.BUTTON_POSITIVE); - button.setOnClickListener(view -> { - try { - if (TextUtils.isEmpty(editText.getText())) { - Preferences.remove(mKey); - bdSwitch.turnOff(); - } else { - Pattern.compile(editText.getText().toString()); - Preferences.putString(mKey, editText.getText().toString()); - bdSwitch.turnOn(); - } - alert.dismiss(); - } catch (final PatternSyntaxException e) { - TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); - } - }); - }); - - alert.show(); - DisplayUtils.fixAlertDialogWidth(alert); - - alert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); - editText.setImeOptions(EditorInfo.IME_ACTION_DONE); - editText.setOnEditorActionListener((v, actionId, event) -> { - if (actionId == EditorInfo.IME_ACTION_DONE || event != null - && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - alert.getButton(AlertDialog.BUTTON_POSITIVE).performClick(); - return true; - } - return false; - }); - editText.requestFocus(); - } - - private static class SwitchStatusChangeHandler implements InvocationHandler { - @SuppressWarnings("SuspiciousInvocationHandlerImplementation") - @Override - public Object invoke(final Object proxy, final Method method, final Object[] args) { - final View view = (View) args[0]; - final var tag = sIdToTag.get(view.getId()); - if (tag != null) { - if (Integer.parseInt(tag.substring(0, 1)) == TYPE_SWITCH) { - Preferences.putBoolean(tag.substring(1), args[1].toString().equals("ON")); - } - } - return null; - } - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.kt new file mode 100644 index 00000000..a770aa29 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreferenceHelper.kt @@ -0,0 +1,306 @@ +package gm.tieba.tabswitch.hooker + +import android.annotation.SuppressLint +import android.app.Activity +import android.app.AlertDialog +import android.content.Context +import android.graphics.Color +import android.text.InputType +import android.text.TextUtils +import android.util.Log +import android.view.Gravity +import android.view.KeyEvent +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.view.inputmethod.EditorInfo +import android.widget.EditText +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import de.robv.android.xposed.XposedBridge +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.Constants.strings +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.Preferences.getBoolean +import gm.tieba.tabswitch.dao.Preferences.getString +import gm.tieba.tabswitch.dao.Preferences.putBoolean +import gm.tieba.tabswitch.dao.Preferences.putString +import gm.tieba.tabswitch.dao.Preferences.remove +import gm.tieba.tabswitch.util.dipToPx +import gm.tieba.tabswitch.util.fixAlertDialogWidth +import gm.tieba.tabswitch.util.getColor +import gm.tieba.tabswitch.util.getCurrentActivity +import gm.tieba.tabswitch.util.getDialogTheme +import gm.tieba.tabswitch.util.getDimen +import gm.tieba.tabswitch.util.getDimenDip +import gm.tieba.tabswitch.util.getDrawableId +import gm.tieba.tabswitch.util.getObjectField +import gm.tieba.tabswitch.util.getR +import gm.tieba.tabswitch.util.isLightMode +import gm.tieba.tabswitch.widget.Switch +import gm.tieba.tabswitch.widget.TbToast +import gm.tieba.tabswitch.widget.TbToast.Companion.showTbToast +import java.lang.reflect.InvocationHandler +import java.lang.reflect.Method +import java.util.Random +import java.util.regex.Pattern +import java.util.regex.PatternSyntaxException + +object TSPreferenceHelper : XposedContext() { + + @JvmStatic + fun createTextView(text: String?): TextView = TextView(getContext()).apply { + this.text = text + setTextColor(getColor("CAM_X0108")) + textSize = getDimenDip("fontsize22") + + layoutParams = text?.let { + setPaddingRelative( + getDimen("ds30").toInt(), + getDimen("ds20").toInt(), + 0, + getDimen("ds20").toInt() + ) + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } ?: LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getDimen("ds32").toInt()) + } + + @SuppressLint("ClickableViewAccessibility") + fun createButton(text: String?, tip: String?, showArrow: Boolean, l: View.OnClickListener?): LinearLayout { + val textTipView = XposedHelpers.newInstance( + findClass("com.baidu.tbadk.coreExtra.view.TbSettingTextTipView"), + getContext() + ) + XposedHelpers.callMethod(textTipView, "setText", text) + XposedHelpers.callMethod(textTipView, "setTip", tip) + + val imageView = getObjectField(textTipView, ImageView::class.java)?.apply { + visibility = if (showArrow) View.VISIBLE else View.GONE + } + + val svgManager = XposedHelpers.callStaticMethod( + findClass("com.baidu.tbadk.core.util.SvgManager"), + "getInstance" + ) + + XposedHelpers.callMethod( + svgManager, + "setPureDrawableWithDayNightModeAutoChange", + imageView, + getDrawableId("icon_pure_list_arrow16_right_svg"), + getR("color", "CAM_X0109"), + null + ) + + val newButton = getObjectField(textTipView, LinearLayout::class.java) + newButton?.apply { + (parent as ViewGroup).removeView(this) + l?.let { setOnClickListener(it) } + setBackgroundColor(getColor("CAM_X0201")) + + if (showArrow) { + setOnTouchListener { v, event -> + val isInside = event.x in 0f..v.width.toFloat() && event.y in 0f..v.height.toFloat() + val backgroundColor = getColor("CAM_X0201") + + when (event.action) { + MotionEvent.ACTION_DOWN -> setBackgroundColor( + Color.argb( + 128, + Color.red(backgroundColor), + Color.green(backgroundColor), + Color.blue(backgroundColor) + ) + ) + MotionEvent.ACTION_MOVE -> if (!isInside) setBackgroundColor(backgroundColor) + MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> setBackgroundColor(backgroundColor) + } + false + } + } + + // Fix TS Preference button not changing background when skin type changed + hookAfterMethod( + "com.baidu.tieba.setting.more.MoreActivity", + "onChangeSkinType", Int::class.javaPrimitiveType + ) { _ -> + setBackgroundColor(getColor("CAM_X0201")) + XposedHelpers.callMethod( + svgManager, + "setPureDrawableWithDayNightModeAutoChange", + imageView, + getDrawableId("icon_pure_list_arrow16_right_svg"), + getR("color", "CAM_X0109"), + null + ) + } + } + + return newButton ?: throw IllegalStateException("LinearLayout not found in TbSettingTextTipView") + } + + fun randomToast(): String { + return when (Random().nextInt(5)) { + 0 -> "别点了,新版本在做了" + 1 -> "别点了别点了T_T" + 2 -> "再点人傻了>_<" + 3 -> "点了也没用~" + 4 -> "点个小星星吧:)" + else -> "" + } + } + + class PreferenceLayout(context: Context?) : LinearLayout(context) { + init { + orientation = VERTICAL + } + + fun addView(view: SwitchButtonHolder) { + addView(view.switchButton) + } + } + + @SuppressLint("ClickableViewAccessibility") + class SwitchButtonHolder(activity: Activity, text: String?, private val mKey: String, type: Int) { + lateinit var bdSwitch: Switch + lateinit var switchButton: LinearLayout + + init { + if (exceptions.containsKey(mKey)) { + switchButton = createButton(text, "此功能初始化失败", false) { _ -> + val tr = exceptions[mKey] + XposedBridge.log(tr) + showTbToast(Log.getStackTraceString(tr), TbToast.LENGTH_SHORT) + } + + } else { + bdSwitch = Switch().apply { + setOnSwitchStateChangeListener(SwitchStatusChangeHandler()) + } + + val bdSwitchView = bdSwitch.bdSwitch.apply { + layoutParams = LinearLayout.LayoutParams(width, height, 0.16f) + id = View.generateViewId() + } + + when (type) { + TYPE_SWITCH -> { + switchButton = createButton(text, null, false) { _ -> bdSwitch.changeState() } + sIdToTag[bdSwitchView.id] = "$TYPE_SWITCH$mKey" + if (getBoolean(mKey)) bdSwitch.turnOn() else bdSwitch.turnOff() + } + + TYPE_DIALOG -> { + switchButton = createButton(text, null, false) { _ -> showRegexDialog(activity, text) } + bdSwitchView.setOnTouchListener { _, _ -> false } + if (getString(mKey) != null) bdSwitch.turnOn() else bdSwitch.turnOff() + } + } + switchButton.addView(bdSwitchView) + } + } + + fun setOnButtonClickListener(l: View.OnClickListener?) { + switchButton.setOnClickListener(l) + bdSwitch.bdSwitch.setOnTouchListener { _, _ -> + XposedHelpers.callMethod(bdSwitch.getVibrator(), "vibrate", 30L) + false + } + } + + private fun showRegexDialog(activity: Activity, title: String?) { + val currentActivity = getCurrentActivity() + val isLightMode = isLightMode(getContext()) + + val editText = EditText(currentActivity).apply { + hint = strings["regex_hint"] + setText(getString(mKey)) + if (!isLightMode) { + setTextColor(Color.WHITE) + setHintTextColor(Color.GRAY) + } + inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE + isFallbackLineSpacing = false + setLineSpacing(0f, 1.2f) + + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT + ).apply { + leftMargin = dipToPx(currentActivity, 20f) + rightMargin = dipToPx(currentActivity, 20f) + } + } + + val linearLayout = LinearLayout(currentActivity).apply { + gravity = Gravity.CENTER_HORIZONTAL + addView(editText) + } + + val alert = AlertDialog.Builder( + currentActivity, + getDialogTheme(getContext()) + ) + .setTitle(title) + .setView(linearLayout) + .setNegativeButton(activity.getString(android.R.string.cancel), null) + .setPositiveButton(activity.getString(android.R.string.ok), null) + .create() + + alert.setOnShowListener { _ -> + alert.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { _ -> + try { + if (TextUtils.isEmpty(editText.text)) { + remove(mKey) + bdSwitch.turnOff() + } else { + Pattern.compile(editText.text.toString()) + putString(mKey, editText.text.toString()) + bdSwitch.turnOn() + } + alert.dismiss() + } catch (e: PatternSyntaxException) { + showTbToast(e.message, TbToast.LENGTH_SHORT) + } + } + } + + alert.show() + fixAlertDialogWidth(alert) + alert.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + + editText.imeOptions = EditorInfo.IME_ACTION_DONE + editText.setOnEditorActionListener { _, actionId: Int, event: KeyEvent? -> + if (actionId == EditorInfo.IME_ACTION_DONE || event != null + && event.keyCode == KeyEvent.KEYCODE_ENTER + ) { + alert.getButton(AlertDialog.BUTTON_POSITIVE).performClick() + true + } else { + false + } + } + editText.requestFocus() + } + + private class SwitchStatusChangeHandler : InvocationHandler { + override fun invoke(proxy: Any, method: Method, args: Array): Any? { + val view = args[0] as View + val tag = sIdToTag[view.id] + tag?.let { + if (it.substring(0, 1).toInt() == TYPE_SWITCH) { + putBoolean(it.substring(1), args[1].toString() == "ON") + } + } + return null + } + } + + companion object { + const val TYPE_SWITCH: Int = 0 + const val TYPE_DIALOG: Int = 1 + val sIdToTag: MutableMap = HashMap() + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java deleted file mode 100644 index ab4fe65f..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.java +++ /dev/null @@ -1,169 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.app.Activity; -import android.app.AlertDialog; -import android.graphics.Color; -import android.os.Bundle; -import android.text.Editable; -import android.text.InputType; -import android.text.TextWatcher; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.WindowManager; -import android.view.inputmethod.EditorInfo; -import android.widget.Button; -import android.widget.EditText; -import android.widget.LinearLayout; - -import androidx.annotation.NonNull; - -import java.util.List; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.Constants; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.DisplayUtils; -import gm.tieba.tabswitch.util.ReflectUtils; -import gm.tieba.tabswitch.widget.NavigationBar; -import gm.tieba.tabswitch.widget.TbToast; - -public class HistoryCache extends XposedContext implements IHooker { - private String mRegex = ""; - - @NonNull - @Override - public String key() { - return "history_cache"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("com.baidu.tieba.myCollection.history.PbHistoryActivity", sClassLoader, - "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var activity = (Activity) param.thisObject; - if (param.args[0] == null) { - mRegex = ""; - } - new NavigationBar(param.thisObject) - .addTextButton("搜索", v -> showRegexDialog(activity)); - } - }); - final var method = ReflectUtils.findFirstMethodByExactType( - "com.baidu.tieba.myCollection.history.PbHistoryActivity", List.class - ); - XposedBridge.hookMethod(method, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var list = (List) param.args[0]; - if (list == null) return; - - final var pattern = Pattern.compile(mRegex, Pattern.CASE_INSENSITIVE); - list.removeIf(o -> { - String[] strings; - try { - strings = new String[]{(String) XposedHelpers.getObjectField(o, "forumName"), - (String) XposedHelpers.getObjectField(o, "threadName")}; - } catch (final NoSuchFieldError e) { - strings = new String[]{(String) ReflectUtils.getObjectField(o, 3), - (String) ReflectUtils.getObjectField(o, 2)}; - } - for (final var string : strings) { - if (pattern.matcher(string).find()) { - return false; - } - } - return true; - }); - } - }); - } - - private void showRegexDialog(final Activity activity) { - Activity currentActivity = ReflectUtils.getCurrentActivity(); - boolean isLightMode = DisplayUtils.isLightMode(getContext()); - - final EditText editText = new EditText(currentActivity); - editText.setHint(Constants.getStrings().get("regex_hint")); - editText.setText(mRegex); - if (!isLightMode) { - editText.setTextColor(Color.WHITE); - editText.setHintTextColor(Color.GRAY); - } - editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); - editText.setFallbackLineSpacing(false); - editText.setLineSpacing(0, 1.2F); - - editText.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { - } - - @Override - public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { - } - - @Override - public void afterTextChanged(final Editable s) { - mRegex = s.toString(); - } - }); - - final LinearLayout linearLayout = new LinearLayout(currentActivity); - linearLayout.setGravity(Gravity.CENTER_HORIZONTAL); - - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT - ); - layoutParams.leftMargin = DisplayUtils.dipToPx(currentActivity, 20F); - layoutParams.rightMargin = DisplayUtils.dipToPx(currentActivity, 20F); - editText.setLayoutParams(layoutParams); - - linearLayout.addView(editText); - - String currRegex = mRegex; - - AlertDialog alert = new AlertDialog.Builder(currentActivity, isLightMode ? - android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) - .setTitle("搜索").setView(linearLayout) - .setOnCancelListener(dialog -> mRegex = currRegex) - .setNegativeButton(activity.getString(android.R.string.cancel), (dialogInterface, i) -> mRegex = currRegex) - .setPositiveButton(activity.getString(android.R.string.ok), null).create(); - - alert.setOnShowListener(dialogInterface -> { - Button button = alert.getButton(AlertDialog.BUTTON_POSITIVE); - button.setOnClickListener(view -> { - try { - Pattern.compile(editText.getText().toString()); - alert.dismiss(); - activity.recreate(); - } catch (final PatternSyntaxException e) { - TbToast.showTbToast(e.getMessage(), TbToast.LENGTH_SHORT); - } - }); - }); - - alert.show(); - DisplayUtils.fixAlertDialogWidth(alert); - - alert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); - editText.setSingleLine(); - editText.setImeOptions(EditorInfo.IME_ACTION_SEARCH); - editText.setOnEditorActionListener((v, actionId, event) -> { - if (actionId == EditorInfo.IME_ACTION_SEARCH || event != null - && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - alert.getButton(AlertDialog.BUTTON_POSITIVE).performClick(); - return true; - } - return false; - }); - editText.selectAll(); - editText.requestFocus(); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.kt new file mode 100644 index 00000000..b848b7bf --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/HistoryCache.kt @@ -0,0 +1,156 @@ +package gm.tieba.tabswitch.hooker.add + +import android.app.Activity +import android.app.AlertDialog +import android.graphics.Color +import android.os.Bundle +import android.text.Editable +import android.text.InputType +import android.text.TextWatcher +import android.view.Gravity +import android.view.KeyEvent +import android.view.WindowManager +import android.view.inputmethod.EditorInfo +import android.widget.EditText +import android.widget.LinearLayout +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.Constants.strings +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.util.dipToPx +import gm.tieba.tabswitch.util.findFirstMethodByExactType +import gm.tieba.tabswitch.util.fixAlertDialogWidth +import gm.tieba.tabswitch.util.getCurrentActivity +import gm.tieba.tabswitch.util.getDialogTheme +import gm.tieba.tabswitch.util.getObjectField +import gm.tieba.tabswitch.util.isLightMode +import gm.tieba.tabswitch.widget.NavigationBar +import gm.tieba.tabswitch.widget.TbToast +import gm.tieba.tabswitch.widget.TbToast.Companion.showTbToast +import java.util.regex.Pattern +import java.util.regex.PatternSyntaxException + +class HistoryCache : XposedContext(), IHooker { + + private var mRegex = "" + + override fun key(): String { + return "history_cache" + } + + override fun hook() { + hookAfterMethod( + "com.baidu.tieba.myCollection.history.PbHistoryActivity", + "onCreate", Bundle::class.java + ) { param -> + val activity = param.thisObject as Activity + if (param.args[0] == null) { + mRegex = "" + } + NavigationBar(param.thisObject).addTextButton("搜索") { showRegexDialog(activity) } + } + + hookBeforeMethod( + findFirstMethodByExactType("com.baidu.tieba.myCollection.history.PbHistoryActivity", MutableList::class.java) + ) { param -> + val historyList = param.args[0] as? MutableList<*> + val pattern = Pattern.compile(mRegex, Pattern.CASE_INSENSITIVE) + + historyList?.removeIf { history -> + val strings = try { + arrayOf( + XposedHelpers.getObjectField(history, "forumName") as String, + XposedHelpers.getObjectField(history, "threadName") as String + ) + } catch (e: NoSuchFieldError) { + arrayOf( + getObjectField(history, 3) as String, + getObjectField(history, 2) as String + ) + } + strings.none { pattern.matcher(it).find() } + } + } + } + + private fun showRegexDialog(activity: Activity) { + val currentActivity = getCurrentActivity() + val isLightMode = isLightMode(getContext()) + + val editText = EditText(currentActivity).apply { + setHint(strings["regex_hint"]) + setText(mRegex) + if (!isLightMode) { + setTextColor(Color.WHITE) + setHintTextColor(Color.GRAY) + } + setInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE) + setFallbackLineSpacing(false) + setLineSpacing(0f, 1.2f) + addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(s: Editable) { + mRegex = s.toString() + } + }) + } + + val linearLayout = LinearLayout(currentActivity).apply { + gravity = Gravity.CENTER_HORIZONTAL + } + val layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT + ).apply { + leftMargin = dipToPx(currentActivity, 20f) + rightMargin = dipToPx(currentActivity, 20f) + } + editText.setLayoutParams(layoutParams) + linearLayout.addView(editText) + + val currRegex = mRegex + val alert = AlertDialog.Builder( + currentActivity, + getDialogTheme(isLightMode) + ) + .setTitle("搜索") + .setView(linearLayout) + .setOnCancelListener { mRegex = currRegex } + .setNegativeButton(activity.getString(android.R.string.cancel)) { _, _ -> mRegex = currRegex } + .setPositiveButton(activity.getString(android.R.string.ok), null) + .create() + .apply { + setOnShowListener { + getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + try { + Pattern.compile(editText.getText().toString()) + dismiss() + activity.recreate() + } catch (e: PatternSyntaxException) { + showTbToast(e.message, TbToast.LENGTH_SHORT) + } + } + } + show() + fixAlertDialogWidth(this) + } + + alert.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + + editText.apply { + setSingleLine() + setImeOptions(EditorInfo.IME_ACTION_SEARCH) + setOnEditorActionListener { _, actionId, event -> + when { + actionId == EditorInfo.IME_ACTION_SEARCH || event?.keyCode == KeyEvent.KEYCODE_ENTER -> { + alert.getButton(AlertDialog.BUTTON_POSITIVE).performClick() + true + } + else -> false + } + } + selectAll() + requestFocus() + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java deleted file mode 100644 index 092a38f0..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.java +++ /dev/null @@ -1,84 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.graphics.drawable.PaintDrawable; -import android.graphics.drawable.StateListDrawable; -import android.util.AttributeSet; -import android.util.SparseArray; -import android.view.View; -import android.widget.RelativeLayout; - -import androidx.annotation.NonNull; - -import java.lang.reflect.Method; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.DisplayUtils; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class Ripple extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "ripple"; - } - - public void hook() throws Throwable { - final var subPbLayoutClass = XposedHelpers.findClass("com.baidu.tieba.pb.pb.sub.SubPbLayout", sClassLoader); - // 楼中楼 - try { - Method md; - try { - md = subPbLayoutClass.getDeclaredFields()[4].getType().getDeclaredMethod("createView"); - } catch (final NoSuchMethodException e) { - md = subPbLayoutClass.getDeclaredFields()[4].getType().getDeclaredMethod("b"); - } - XposedBridge.hookMethod(md, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var newSubPbListItem = (View) param.getResult(); - final var tag = (SparseArray) newSubPbListItem.getTag(); - final var b = tag.valueAt(0); - // R.id.new_sub_pb_list_richText - final var view = (View) ReflectUtils.getObjectField(b, "com.baidu.tbadk.widget.richText.TbRichTextView"); - view.setBackground(createSubPbBackground(DisplayUtils.dipToPx(getContext(), 5F))); - } - }); - } catch (final NoSuchMethodException e) { - XposedBridge.log(e); - } - // 查看全部回复 - XposedHelpers.findAndHookConstructor(subPbLayoutClass, Context.class, AttributeSet.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var view = ReflectUtils.getObjectField(param.thisObject, RelativeLayout.class); - view.setBackground(createSubPbBackground(DisplayUtils.dipToPx(getContext(), 3.5F))); - } - }); - } - - private StateListDrawable createSubPbBackground(int bottomInset) { - final StateListDrawable sld = new StateListDrawable(); - - PaintDrawable bg = new PaintDrawable(Color.argb(192, - Color.red(ReflectUtils.getColor("CAM_X0201")), - Color.green(ReflectUtils.getColor("CAM_X0201")), - Color.blue(ReflectUtils.getColor("CAM_X0201")) - )); - bg.setCornerRadius(DisplayUtils.dipToPx(getContext(), 2F)); - - LayerDrawable layerBg = new LayerDrawable(new Drawable[]{bg}); - layerBg.setLayerInset(0, 0, 0, 0, bottomInset); - - sld.addState(new int[]{android.R.attr.state_pressed}, layerBg); - return sld; - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt new file mode 100644 index 00000000..f78fed67 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt @@ -0,0 +1,70 @@ +package gm.tieba.tabswitch.hooker.add + +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.Drawable +import android.graphics.drawable.LayerDrawable +import android.graphics.drawable.PaintDrawable +import android.graphics.drawable.StateListDrawable +import android.util.AttributeSet +import android.util.SparseArray +import android.view.View +import android.widget.RelativeLayout +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.util.dipToPx +import gm.tieba.tabswitch.util.getColor +import gm.tieba.tabswitch.util.getObjectField +import java.lang.reflect.Method + +class Ripple : XposedContext(), IHooker { + + override fun key(): String { + return "ripple" + } + + override fun hook() { + + val subPbLayoutClass = findClass("com.baidu.tieba.pb.pb.sub.SubPbLayout") + + // 楼中楼 + val md: Method = try { + subPbLayoutClass.declaredFields[4].type.getDeclaredMethod("createView") + } catch (e: NoSuchMethodException) { + subPbLayoutClass.declaredFields[4].type.getDeclaredMethod("b") + } + + hookAfterMethod(md) { param -> + val newSubPbListItem = param.result as View + val tag = newSubPbListItem.tag as SparseArray<*> + val b = tag.valueAt(0) + // R.id.new_sub_pb_list_richText + val view = + getObjectField(b, "com.baidu.tbadk.widget.richText.TbRichTextView") as? View + view?.background = createSubPbBackground(dipToPx(getContext(), 5f)) + } + + // 查看全部回复 + hookAfterConstructor( + subPbLayoutClass, + Context::class.java, AttributeSet::class.java, + ) { param -> + getObjectField(param.thisObject, RelativeLayout::class.java) + ?.background = createSubPbBackground(dipToPx(getContext(), 3.5f)) + } + } + + private fun createSubPbBackground(bottomInset: Int): StateListDrawable { + val sld = StateListDrawable() + val color = getColor("CAM_X0201") + + val bg = PaintDrawable(Color.argb(192, Color.red(color), Color.green(color), Color.blue(color))) + bg.setCornerRadius(dipToPx(getContext(), 2f).toFloat()) + + val layerBg = LayerDrawable(arrayOf(bg)) + layerBg.setLayerInset(0, 0, 0, 0, bottomInset) + + sld.addState(intArrayOf(android.R.attr.state_pressed), layerBg) + return sld + } +} \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java deleted file mode 100644 index bfad5c7a..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.java +++ /dev/null @@ -1,158 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.content.ContentValues; -import android.content.Context; -import android.os.Build; -import android.os.Environment; -import android.os.Handler; -import android.os.Looper; -import android.provider.MediaStore; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; - -import androidx.annotation.NonNull; - -import org.luckypray.dexkit.query.matchers.ClassMatcher; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Field; -import java.net.URL; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.ReturnTypeMatcher; -import gm.tieba.tabswitch.util.FileUtils; -import gm.tieba.tabswitch.util.ReflectUtils; -import gm.tieba.tabswitch.widget.TbToast; -import kotlin.text.StringsKt; - -public class SaveImages extends XposedContext implements IHooker, Obfuscated { - private ArrayList mList; - private Field mDownloadImageViewField; - - @NonNull - @Override - public String key() { - return "save_images"; - } - - @Override - public List matchers() { - return List.of( - new ReturnTypeMatcher<>(LinearLayout.class, "save_images").setBaseClassMatcher(ClassMatcher.create().usingStrings("分享弹窗触发分享:分享成功")) - ); - } - - public void hook() throws Throwable { - AcRules.findRule("save_images", (matcher, clazz, method) -> - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, int.class, int.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - LinearLayout downloadIconView = (LinearLayout) param.getResult(); - downloadIconView.setOnLongClickListener(saveImageListener); - } - })); - - XposedBridge.hookMethod( - ReflectUtils.findFirstMethodByExactType("com.baidu.tbadk.coreExtra.view.ImagePagerAdapter", ArrayList.class), - new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - mList = new ArrayList<>((ArrayList) param.args[0]); - mList.removeIf(o -> o.startsWith("####mLiveRoomPageProvider")); - } - }); - - Class imageViewerBottomLayoutClass = XposedHelpers.findClass("com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout", sClassLoader); - ArrayList declaredFields = new ArrayList<>(Arrays.asList(imageViewerBottomLayoutClass.getDeclaredFields())); - declaredFields.removeIf(o -> o.getType() != ImageView.class); - mDownloadImageViewField = declaredFields.get(declaredFields.size() - 1); - - if (mDownloadImageViewField != null) { - XposedHelpers.findAndHookConstructor("com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout", - sClassLoader, Context.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - final var imageView = (ImageView) mDownloadImageViewField.get(param.thisObject); - imageView.setOnLongClickListener(saveImageListener); - } - }); - } - } - - final private View.OnLongClickListener saveImageListener = new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - TbToast.showTbToast(String.format(Locale.CHINA, - "开始下载%d张图片", mList.size()), TbToast.LENGTH_SHORT); - - final long baseTime = System.currentTimeMillis(); - final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA); - final String formattedTime = dateFormat.format(new Date(baseTime)); - - new Thread(() -> { - try { - final var list = new ArrayList<>(mList); - for (var i = 0; i < list.size(); i++) { - var url = list.get(i); - url = StringsKt.substringBeforeLast(url, "*", url); - saveImage(url, formattedTime + "_" + String.format(Locale.CHINA, "%02d", i), getContext()); - } - new Handler(Looper.getMainLooper()).post(() -> - TbToast.showTbToast(String.format(Locale.CHINA, - "已保存%d张图片至手机相册", list.size()), - TbToast.LENGTH_SHORT)); - } catch (final IOException | NullPointerException e) { - new Handler(Looper.getMainLooper()).post(() -> - TbToast.showTbToast("保存失败", TbToast.LENGTH_SHORT)); - } - }).start(); - return true; - } - }; - - private static void saveImage(final String url, final String filename, final Context context) throws IOException { - try (final var is = new URL(url).openStream()) { - final var bb = FileUtils.toByteBuffer(is); - final var imageDetails = new ContentValues(); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - imageDetails.put(MediaStore.MediaColumns.RELATIVE_PATH, - Environment.DIRECTORY_PICTURES + File.separator + "tieba"); - } else { - final var path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), - "tieba"); - path.mkdirs(); - imageDetails.put(MediaStore.MediaColumns.DATA, path + File.separator - + filename + "." + FileUtils.getExtension(bb)); - } - - imageDetails.put(MediaStore.MediaColumns.DISPLAY_NAME, filename); - imageDetails.put(MediaStore.MediaColumns.MIME_TYPE, "image/" + FileUtils.getExtension(bb)); - - final long currentTime = System.currentTimeMillis(); - imageDetails.put(MediaStore.MediaColumns.DATE_ADDED, currentTime / 1000); - imageDetails.put(MediaStore.MediaColumns.DATE_MODIFIED, currentTime / 1000); - - final var resolver = context.getContentResolver(); - final var imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails); - try (var descriptor = resolver.openFileDescriptor(imageUri, "w")) { - FileUtils.copy(bb, descriptor.getFileDescriptor()); - } - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.kt new file mode 100644 index 00000000..5d36b0d7 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SaveImages.kt @@ -0,0 +1,162 @@ +package gm.tieba.tabswitch.hooker.add + +import android.content.ContentValues +import android.content.Context +import android.os.Build +import android.os.Environment +import android.os.Handler +import android.os.Looper +import android.provider.MediaStore +import android.view.View.OnLongClickListener +import android.widget.ImageView +import android.widget.LinearLayout +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.ReturnTypeMatcher +import gm.tieba.tabswitch.util.copy +import gm.tieba.tabswitch.util.findFirstMethodByExactType +import gm.tieba.tabswitch.util.getExtension +import gm.tieba.tabswitch.util.toByteBuffer +import gm.tieba.tabswitch.widget.TbToast +import gm.tieba.tabswitch.widget.TbToast.Companion.showTbToast +import org.luckypray.dexkit.query.matchers.ClassMatcher +import java.io.File +import java.io.IOException +import java.lang.reflect.Field +import java.net.URL +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale +import kotlin.concurrent.thread + +class SaveImages : XposedContext(), IHooker, Obfuscated { + + private var mDownloadImageViewField: Field? = null + private lateinit var mList: ArrayList<*> + + override fun key(): String { + return "save_images" + } + + override fun matchers(): List { + return listOf( + ReturnTypeMatcher(LinearLayout::class.java, "save_images").apply { + classMatcher = ClassMatcher.create().usingStrings("分享弹窗触发分享:分享成功") + } + ) + } + + override fun hook() { + findRule("save_images") { _, clazz, method -> + hookAfterMethod(clazz, method, Int::class.javaPrimitiveType, Int::class.javaPrimitiveType) { param -> + val downloadIconView = param.result as LinearLayout + downloadIconView.setOnLongClickListener(saveImageListener) + } + } + + hookBeforeMethod( + findFirstMethodByExactType( + "com.baidu.tbadk.coreExtra.view.ImagePagerAdapter", + ArrayList::class.java + ) + ) { param -> + mList = ArrayList(param.args[0] as ArrayList<*>) + mList.removeIf { (it as String).startsWith("####mLiveRoomPageProvider") } + } + + val imageViewerBottomLayoutClass = findClass("com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout") + val declaredFields = mutableListOf(*imageViewerBottomLayoutClass.declaredFields) + declaredFields.removeIf { it.type != ImageView::class.java } + + mDownloadImageViewField = declaredFields[declaredFields.size - 1] + mDownloadImageViewField?.let { + hookAfterConstructor( + "com.baidu.tbadk.coreExtra.view.ImageViewerBottomLayout", + Context::class.java + ) { param -> + val imageView = it[param.thisObject] as ImageView + imageView.setOnLongClickListener(saveImageListener) + } + } + } + + private val saveImageListener = OnLongClickListener { + showTbToast( + "开始下载%d张图片".format(Locale.CHINA, mList.size), + TbToast.LENGTH_SHORT + ) + + val baseTime = System.currentTimeMillis() + val formattedTime = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(Date(baseTime)) + + thread { + try { + mList.forEachIndexed { index, url -> + val formattedUrl = (url as String).substringBeforeLast("*") + saveImage( + formattedUrl, + "${formattedTime}_${"%02d".format(Locale.CHINA, index)}", + getContext() + ) + } + Handler(Looper.getMainLooper()).post { + showTbToast( + "已保存%d张图片至手机相册".format(Locale.CHINA, mList.size), + TbToast.LENGTH_SHORT + ) + } + } catch (e: IOException) { + Handler(Looper.getMainLooper()).post { + showTbToast("保存失败", TbToast.LENGTH_SHORT) + } + } catch (e: NullPointerException) { + Handler(Looper.getMainLooper()).post { + showTbToast("保存失败", TbToast.LENGTH_SHORT) + } + } + } + true + } + + companion object { + private fun saveImage(url: String, filename: String, context: Context) { + URL(url).openStream().use { inputStream -> + val byteBuffer = toByteBuffer(inputStream) + val imageDetails = ContentValues().apply { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + put( + MediaStore.MediaColumns.RELATIVE_PATH, + "${Environment.DIRECTORY_PICTURES}${File.separator}tieba" + ) + } else { + val path = File( + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), + "tieba" + ).apply { mkdirs() } + put( + MediaStore.MediaColumns.DATA, + "${path}${File.separator}$filename.${getExtension(byteBuffer)}" + ) + } + put(MediaStore.MediaColumns.DISPLAY_NAME, filename) + put(MediaStore.MediaColumns.MIME_TYPE, "image/${getExtension(byteBuffer)}") + val currentTime = System.currentTimeMillis() + put(MediaStore.MediaColumns.DATE_ADDED, currentTime / 1000) + put(MediaStore.MediaColumns.DATE_MODIFIED, currentTime / 1000) + } + + val resolver = context.contentResolver + val imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails) + + imageUri?.let { + resolver.openFileDescriptor(imageUri, "w")?.use { descriptor -> + copy(byteBuffer, descriptor.fileDescriptor) + } ?: throw IOException("Failed to open file descriptor") + } ?: throw IOException("Failed to insert image into MediaStore") + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java deleted file mode 100644 index d3cac42f..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.java +++ /dev/null @@ -1,81 +0,0 @@ -package gm.tieba.tabswitch.hooker.add; - -import android.app.Activity; -import android.app.AlertDialog; -import android.content.ClipboardManager; -import android.content.Context; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import org.luckypray.dexkit.query.matchers.ClassMatcher; -import org.luckypray.dexkit.query.matchers.MethodMatcher; -import org.luckypray.dexkit.query.matchers.MethodsMatcher; - -import java.util.List; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; -import gm.tieba.tabswitch.util.DisplayUtils; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class SelectClipboard extends XposedContext implements IHooker, Obfuscated { - @NonNull - @Override - public String key() { - return "select_clipboard"; - } - - @Override - public List matchers() { - return List.of( - new SmaliMatcher("Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V") - .setBaseClassMatcher(ClassMatcher.create().methods( - MethodsMatcher.create().add(MethodMatcher.create().addInvoke( - MethodMatcher.create().descriptor("Lcom/baidu/tbadk/core/data/SmallTailInfo;->()V") - ))) - ) - ); - } - - public void hook() throws Throwable { - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - switch (matcher) { - case "Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V": - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - Object tbRichText = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.widget.richText.TbRichText"); - - Activity currentActivity = ReflectUtils.getCurrentActivity(); - AlertDialog alert = new AlertDialog.Builder(currentActivity, DisplayUtils.isLightMode(getContext()) ? - android.R.style.Theme_DeviceDefault_Light_Dialog_Alert : android.R.style.Theme_DeviceDefault_Dialog_Alert) - .setTitle("自由复制").setMessage(tbRichText.toString()) - .setNeutralButton("复制全部", (dialogInterface, i) -> { - ClipboardManager clipboardManager = (ClipboardManager) ReflectUtils.getTbadkCoreApplicationInst().getSystemService(Context.CLIPBOARD_SERVICE); - clipboardManager.setText(tbRichText.toString()); - }) - .setPositiveButton("完成", null).create(); - alert.show(); - - View messageView = alert.findViewById(android.R.id.message); - if (messageView instanceof TextView) { - ((TextView) messageView).setTextIsSelectable(true); - } - - DisplayUtils.fixAlertDialogWidth(alert); - return null; - } - }); - break; - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.kt new file mode 100644 index 00000000..2ad98238 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/SelectClipboard.kt @@ -0,0 +1,81 @@ +package gm.tieba.tabswitch.hooker.add + +import android.app.AlertDialog +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.widget.TextView +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher +import gm.tieba.tabswitch.util.fixAlertDialogWidth +import gm.tieba.tabswitch.util.getCurrentActivity +import gm.tieba.tabswitch.util.getDialogTheme +import gm.tieba.tabswitch.util.getObjectField +import gm.tieba.tabswitch.util.getTbadkCoreApplicationInst +import org.luckypray.dexkit.query.matchers.ClassMatcher +import org.luckypray.dexkit.query.matchers.MethodMatcher +import org.luckypray.dexkit.query.matchers.MethodsMatcher + +class SelectClipboard : XposedContext(), IHooker, Obfuscated { + + override fun key(): String { + return "select_clipboard" + } + + override fun matchers(): List { + return listOf( + SmaliMatcher("Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V").apply { + classMatcher = ClassMatcher.create().methods( + MethodsMatcher.create().add( + MethodMatcher.create().addInvoke( + MethodMatcher.create() + .descriptor("Lcom/baidu/tbadk/core/data/SmallTailInfo;->()V") + ) + ) + ) + } + ) + } + + override fun hook() { + findRule(matchers()) { matcher, clazz, method -> + when (matcher) { + "Landroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V" -> + hookReplaceMethod(clazz, method) { param -> + + val tbRichText = getObjectField( + param.thisObject, + "com.baidu.tbadk.widget.richText.TbRichText" + ) + val currentActivity = getCurrentActivity() + + AlertDialog.Builder( + currentActivity, + getDialogTheme(getContext()) + ) + .setTitle("自由复制") + .setMessage(tbRichText.toString()) + .setNeutralButton("复制全部") { _, _ -> + val clipboardManager = + getTbadkCoreApplicationInst().getSystemService( + Context.CLIPBOARD_SERVICE + ) as ClipboardManager + clipboardManager.setPrimaryClip(ClipData.newPlainText("tieba", tbRichText.toString())) + } + .setPositiveButton("完成", null) + .create() + .apply { + show() + findViewById(android.R.id.message)?.setTextIsSelectable(true) + fixAlertDialogWidth(this) + } + null + } + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.java deleted file mode 100644 index fce83052..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.java +++ /dev/null @@ -1,29 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - -import androidx.annotation.NonNull; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; - -public class AgreeNum extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "agree_num"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.Agree$Builder", sClassLoader, - "build", boolean.class, new XC_MethodHook() { - @Override - public void beforeHookedMethod(final MethodHookParam param) throws Throwable { - XposedHelpers.setObjectField(param.thisObject, "agree_num", - XposedHelpers.getObjectField(param.thisObject, "diff_agree_num")); - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.kt new file mode 100644 index 00000000..a72978dd --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AgreeNum.kt @@ -0,0 +1,24 @@ +package gm.tieba.tabswitch.hooker.auto + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker + +class AgreeNum : XposedContext(), IHooker { + + override fun key(): String { + return "agree_num" + } + + override fun hook() { + hookBeforeMethod( + "tbclient.Agree\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + XposedHelpers.setObjectField( + param.thisObject, "agree_num", + XposedHelpers.getObjectField(param.thisObject, "diff_agree_num") + ) + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java deleted file mode 100644 index ae94b860..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.java +++ /dev/null @@ -1,136 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - -import android.os.Bundle; - -import androidx.annotation.NonNull; - -import org.json.JSONArray; -import org.json.JSONObject; - -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.Adp; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.widget.TbToast; - -public class AutoSign extends XposedContext implements IHooker { - //获取用户所有关注贴吧 - private static final String LIKE_URL = "https://tieba.baidu.com/mo/q/newmoindex"; - //获取用户的tbs - private static final String TBS_URL = "http://tieba.baidu.com/dc/common/tbs"; - //贴吧签到接口 - private static final String SIGN_URL = "http://c.tieba.baidu.com/c/c/forum/sign"; - private final List mFollow = new ArrayList<>(); - private final List mSuccess = new ArrayList<>(); - private String mTbs; - private Integer mFollowNum = 201; - - @NonNull - @Override - public String key() { - return "auto_sign"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, - "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - if (Preferences.getIsSigned()) return; - new Thread(() -> { - final String result = main(Adp.getInstance().BDUSS); - if (result.endsWith("全部签到成功")) { - Preferences.putSignDate(); - Preferences.putLikeForum(new HashSet<>(mSuccess)); - } - runOnUiThread(() -> TbToast.showTbToast(result, TbToast.LENGTH_SHORT)); - }).start(); - } - }); - } - - private String main(final String BDUSS) { - if (BDUSS == null) return "暂未获取到 BDUSS"; - AutoSignHelper.setCookie(BDUSS); - getTbs(); - getFollow(); - runSign(); - final int failNum = mFollowNum - mSuccess.size(); - final String result = "共 {" + mFollowNum + "} 个吧 - 成功: {" + mSuccess.size() + "} - 失败: {" + failNum + "}"; - XposedBridge.log(result); - if (failNum == 0) return "共 {" + mFollowNum + "} 个吧 - 全部签到成功"; - else return result; - } - - private void getTbs() { - mTbs = Adp.getInstance().tbs; - if (mTbs != null) return; - try { - final JSONObject jsonObject = AutoSignHelper.get(TBS_URL); - if ("1".equals(jsonObject.getString("is_login"))) { - XposedBridge.log("获取tbs成功"); - mTbs = jsonObject.getString("tbs"); - } else XposedBridge.log("获取tbs失败 -- " + jsonObject); - } catch (final Exception e) { - XposedBridge.log("获取tbs部分出现错误 -- " + e); - } - } - - private void getFollow() { - try { - final JSONObject jsonObject = AutoSignHelper.get(LIKE_URL); - XposedBridge.log("获取贴吧列表成功"); - final JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("like_forum"); - mFollowNum = jsonArray.length(); - // 获取用户所有关注的贴吧 - for (int i = 0; i < jsonArray.length(); i++) { - if ("0".equals(jsonArray.optJSONObject(i).getString("is_sign"))) { - mFollow.add(jsonArray.optJSONObject(i).getString("forum_name")); - } else { - mSuccess.add(jsonArray.optJSONObject(i).getString("forum_name")); - } - } - } catch (final Exception e) { - XposedBridge.log("获取贴吧列表部分出现错误 -- " + e); - } - } - - private void runSign() { - // 当执行 3 轮所有贴吧还未签到成功就结束操作 - int flag = 3; - try { - while (mSuccess.size() < mFollowNum && flag-- > 0) { - final Iterator iterator = mFollow.iterator(); - while (iterator.hasNext()) { - final String s = iterator.next(); - final String body = "kw=" + URLEncoder.encode(s, "UTF-8") + "&tbs=" + mTbs + "&sign=" + - AutoSignHelper.enCodeMd5("kw=" + s + "tbs=" + mTbs + "tiebaclient!!!"); - final JSONObject post = AutoSignHelper.post(SIGN_URL, body); - if ("0".equals(post.getString("error_code"))) { - iterator.remove(); - mSuccess.add(s); - XposedBridge.log(s + ": " + "签到成功"); - } else { - XposedBridge.log(s + ": " + "签到失败"); - } - } - if (mSuccess.size() != mFollowNum) { - Thread.sleep(2500); - getTbs(); - } - } - } catch (final Exception e) { - XposedBridge.log("签到部分出现错误 -- " + e); - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.kt new file mode 100644 index 00000000..809f1ce2 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSign.kt @@ -0,0 +1,142 @@ +package gm.tieba.tabswitch.hooker.auto + +import android.os.Bundle +import de.robv.android.xposed.XposedBridge +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.Adp +import gm.tieba.tabswitch.dao.Preferences.getIsSigned +import gm.tieba.tabswitch.dao.Preferences.putLikeForum +import gm.tieba.tabswitch.dao.Preferences.putSignDate +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.widget.TbToast +import gm.tieba.tabswitch.widget.TbToast.Companion.showTbToast +import java.net.URLEncoder +import kotlin.concurrent.thread + +class AutoSign : XposedContext(), IHooker { + + companion object { + //获取用户所有关注贴吧 + private const val LIKE_URL = "https://tieba.baidu.com/mo/q/newmoindex" + + //获取用户的tbs + private const val TBS_URL = "http://tieba.baidu.com/dc/common/tbs" + + //贴吧签到接口 + private const val SIGN_URL = "http://c.tieba.baidu.com/c/c/forum/sign" + } + + private val mFollow = mutableListOf() + private val mSuccess = mutableListOf() + private var mTbs: String? = null + private var mFollowNum = 201 + + override fun key(): String { + return "auto_sign" + } + + override fun hook() { + hookAfterMethod( + "com.baidu.tieba.tblauncher.MainTabActivity", + "onCreate", Bundle::class.java + ) { _ -> + if (!getIsSigned()) { + thread { + val result = main(Adp.BDUSS) + if (result.endsWith("全部签到成功")) { + putSignDate() + putLikeForum(HashSet(mSuccess)) + } + runOnUiThread { showTbToast(result, TbToast.LENGTH_SHORT) } + } + } + } + } + + private fun main(BDUSS: String?): String { + if (BDUSS == null) return "暂未获取到 BDUSS" + + AutoSignHelper.setCookie(BDUSS) + getTbs() + getFollow() + runSign() + + val failNum = mFollowNum - mSuccess.size + val result = "共${mFollowNum}个吧 - 成功:${mSuccess.size} - 失败:$failNum" + XposedBridge.log(result) + return if (failNum == 0) "共${mFollowNum}个吧 - 全部签到成功" else result + } + + private fun getTbs() { + mTbs = Adp.tbs + if (mTbs != null) return + try { + val jsonObject = AutoSignHelper.get(TBS_URL) + if ("1" == jsonObject.getString("is_login")) { + XposedBridge.log("获取tbs成功") + mTbs = jsonObject.getString("tbs") + } else XposedBridge.log("获取tbs失败 -- $jsonObject") + } catch (e: Exception) { + XposedBridge.log("获取tbs部分出现错误 -- $e") + } + } + + private fun getFollow() { + try { + val jsonObject = AutoSignHelper.get(LIKE_URL) + XposedBridge.log("获取贴吧列表成功") + + val jsonArray = jsonObject.getJSONObject("data").getJSONArray("like_forum") + mFollowNum = jsonArray.length() + + // 获取用户所有关注的贴吧 + for (i in 0 until jsonArray.length()) { + val forumObject = jsonArray.optJSONObject(i) + val forumName = forumObject?.getString("forum_name") ?: continue + + when (forumObject.getString("is_sign")) { + "0" -> mFollow.add(forumName) + else -> mSuccess.add(forumName) + } + } + } catch (e: Exception) { + XposedBridge.log("获取贴吧列表部分出现错误 -- $e") + } + } + + private fun runSign() { + // 当执行 3 轮所有贴吧还未签到成功就结束操作 + var roundCount = 3 + + try { + while (mSuccess.size < mFollowNum && roundCount > 0) { + + mFollow.removeAll { forumName -> + val encodedS = URLEncoder.encode(forumName, "UTF-8") + val body = "kw=$encodedS&tbs=$mTbs&sign=${AutoSignHelper.enCodeMd5("kw=${forumName}tbs=${mTbs}tiebaclient!!!")}" + + val post = AutoSignHelper.post(SIGN_URL, body) + when (post.getString("error_code")) { + "0" -> { + mSuccess.add(forumName) + XposedBridge.log("$forumName: 签到成功") + true + } + else -> { + XposedBridge.log("$forumName: 签到失败") + false + } + } + } + + if (mSuccess.size != mFollowNum) { + Thread.sleep(2500) + getTbs() + } + roundCount-- + } + } catch (e: Exception) { + XposedBridge.log("签到部分出现错误 -- $e") + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.java deleted file mode 100644 index df27f6bf..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.java +++ /dev/null @@ -1,87 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; - -import de.robv.android.xposed.XposedBridge; -import okhttp3.Call; -import okhttp3.MediaType; -import okhttp3.OkHttpClient; -import okhttp3.RequestBody; -import okhttp3.Response; - -public class AutoSignHelper { - private static String sCookie; - - static void setCookie(final String BDUSS) { - sCookie = "BDUSS=" + BDUSS; - } - - static JSONObject get(final String url) throws JSONException { - final OkHttpClient okHttpClient = new OkHttpClient(); - final okhttp3.Request request = new okhttp3.Request.Builder() - .url(url).get() - .addHeader("connection", "keep-alive") - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .addHeader("charset", "UTF-8") - .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36") - .addHeader("Cookie", sCookie) - .build(); - final Call call = okHttpClient.newCall(request); - String respContent = null; - try { - final Response response = call.execute(); - if (response.code() < 400) respContent = response.body().string(); - else throw new IOException("response code: " + response.code()); - } catch (final IOException e) { - XposedBridge.log("get请求错误 -- " + e); - } - return new JSONObject(respContent); - } - - static JSONObject post(final String url, final String body) throws JSONException { - final MediaType mediaType = MediaType.Companion.parse("text/x-markdown; charset=utf-8"); - final RequestBody stringBody = RequestBody.Companion.create(body, mediaType); - final OkHttpClient okHttpClient = new OkHttpClient(); - final okhttp3.Request request = new okhttp3.Request.Builder() - .url(url).post(stringBody) - .addHeader("connection", "keep-alive") - .addHeader("Host", "tieba.baidu.com") - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .addHeader("charset", "UTF-8") - .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36") - .addHeader("Cookie", sCookie) - .build(); - final Call call = okHttpClient.newCall(request); - String respContent = null; - try { - final Response response = call.execute(); - if (response.code() < 400) respContent = response.body().string(); - else throw new IOException("response code: " + response.code()); - } catch (final IOException e) { - XposedBridge.log("post请求错误 -- " + e); - } - return new JSONObject(respContent); - } - - static String enCodeMd5(final String str) { - try { - // 生成一个MD5加密计算摘要 - final MessageDigest md = MessageDigest.getInstance("MD5"); - // 计算md5函数 - md.update(str.getBytes(StandardCharsets.UTF_8)); - // digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 - // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 - //一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) - return new BigInteger(1, md.digest()).toString(16); - } catch (final Exception e) { - XposedBridge.log("字符串进行MD5加密错误 -- " + e); - return ""; - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.kt new file mode 100644 index 00000000..6d011ea2 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/AutoSignHelper.kt @@ -0,0 +1,102 @@ +package gm.tieba.tabswitch.hooker.auto + +import de.robv.android.xposed.XposedBridge +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Request.Builder +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody +import org.json.JSONObject +import java.io.IOException +import java.math.BigInteger +import java.nio.charset.StandardCharsets +import java.security.MessageDigest + +object AutoSignHelper { + + private lateinit var sCookie: String + + fun setCookie(BDUSS: String) { + sCookie = "BDUSS=$BDUSS" + } + + fun get(url: String): JSONObject { + val okHttpClient = OkHttpClient() + val request: Request = Builder() + .url(url) + .get() + .addHeader("connection", "keep-alive") + .addHeader("Content-Type", "application/x-www-form-urlencoded") + .addHeader("charset", "UTF-8") + .addHeader( + "User-Agent", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" + ) + .addHeader("Cookie", sCookie) + .build() + + val respContent = try { + val response = okHttpClient.newCall(request).execute() + if (response.isSuccessful) { + response.body?.string() + } else { + throw IOException("Response code: ${response.code}") + } + } catch (e: IOException) { + XposedBridge.log("get请求错误 -- $e") + null + } + + return respContent?.let { JSONObject(it) } ?: JSONObject() + } + + fun post(url: String, body: String): JSONObject { + val mediaType = "text/x-markdown; charset=utf-8".toMediaTypeOrNull() + val stringBody: RequestBody = body.toRequestBody(mediaType) + + val request: Request = Builder() + .url(url) + .post(stringBody) + .addHeader("connection", "keep-alive") + .addHeader("Host", "tieba.baidu.com") + .addHeader("Content-Type", "application/x-www-form-urlencoded") + .addHeader("charset", "UTF-8") + .addHeader( + "User-Agent", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" + ) + .addHeader("Cookie", sCookie) + .build() + + val respContent = try { + val response = OkHttpClient().newCall(request).execute() + if (response.isSuccessful) { + response.body?.string() + } else { + throw IOException("Response code: ${response.code}") + } + } catch (e: IOException) { + XposedBridge.log("post请求错误 -- $e") + null + } + + return respContent?.let { JSONObject(it) } ?: JSONObject() + } + + fun enCodeMd5(str: String): String { + return try { + // 生成一个MD5加密计算摘要 + val md = MessageDigest.getInstance("MD5") + // 计算md5函数 + md.update(str.toByteArray(StandardCharsets.UTF_8)) + // digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 + // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 + //一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) + BigInteger(1, md.digest()).toString(16) + } catch (e: Exception) { + XposedBridge.log("字符串进行MD5加密错误 -- $e") + "" + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java deleted file mode 100644 index f207ad5b..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.java +++ /dev/null @@ -1,106 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - -import androidx.annotation.NonNull; - -import java.lang.reflect.Method; -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; - -public class FrsTab extends XposedContext implements IHooker, Obfuscated { - - @NonNull - @Override - public String key() { - return "frs_tab"; - } - - @Override - public List matchers() { - return List.of( - new StringMatcher("forum_tab_current_list"), - new StringMatcher("c/f/frs/page?cmd=301001&format=protobuf") - ); - } - - private int mPosition; - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - public void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final List list = (List) XposedHelpers.getObjectField(param.thisObject, "frs_main_tab_list"); - if (list == null) return; - for (int i = 0; i < list.size(); i++) { - if ((Integer) XposedHelpers.getObjectField(list.get(i), "tab_type") == 14) { - mPosition = i; - XposedHelpers.setObjectField(param.thisObject, "frs_tab_default", (Integer) XposedHelpers.getObjectField(list.get(i), "tab_id")); - return; - } - } - } - }); - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - switch (matcher) { - case "forum_tab_current_list": - if (!"com.baidu.tieba.forum.controller.TopController".equals(clazz)) return; - Class topControllerClass = XposedHelpers.findClass(clazz, sClassLoader); - Method targetMethod; - try { - targetMethod = XposedHelpers.findMethodBestMatch( - topControllerClass, - method, - null, - XposedHelpers.findClass(clazz, sClassLoader) - ); - } catch (NoSuchMethodError e) { // 12.57+ - break; - } - XposedBridge.hookMethod(targetMethod, new XC_MethodHook() { - @Override - public void afterHookedMethod(MethodHookParam param) throws Throwable { - Object viewPager; - try { - viewPager = XposedHelpers.findFirstFieldByExactType( - param.args[1].getClass(), - XposedHelpers.findClass("com.baidu.tbadk.widget.CustomViewPager", - sClassLoader) - ).get(param.args[1]); - } catch (NoSuchFieldError e) { // 12.56+ - viewPager = XposedHelpers.findFirstFieldByExactType( - param.args[1].getClass(), - XposedHelpers.findClass("androidx.viewpager.widget.ViewPager", - sClassLoader) - ).get(param.args[1]); - } - XposedHelpers.callMethod(viewPager, "setCurrentItem", mPosition); - } - }); - break; - case "c/f/frs/page?cmd=301001&format=protobuf": - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, - "com.baidu.tieba.forum.model.FrsPageRequestMessage", - new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if ((Integer) XposedHelpers.getObjectField(param.args[0], "sortType") == -1) { - Object sharedPrefHelper = XposedHelpers.callStaticMethod( - XposedHelpers.findClass("com.baidu.tbadk.core.sharedPref.SharedPrefHelper", sClassLoader), "getInstance"); - Integer lastSortType = (Integer) XposedHelpers.callMethod(sharedPrefHelper, "getInt", "key_forum_last_sort_type", 0); - XposedHelpers.setObjectField(param.args[0], "sortType", lastSortType); - } - } - }); - break; - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.kt new file mode 100644 index 00000000..0f717618 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/FrsTab.kt @@ -0,0 +1,94 @@ +package gm.tieba.tabswitch.hooker.auto + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher +import java.lang.reflect.Method + +class FrsTab : XposedContext(), IHooker, Obfuscated { + + override fun key(): String { + return "frs_tab" + } + + override fun matchers(): List { + return listOf( + StringMatcher("forum_tab_current_list"), + StringMatcher("c/f/frs/page?cmd=301001&format=protobuf") + ) + } + + private var mPosition = 0 + + override fun hook() { + hookBeforeMethod( + "tbclient.FrsPage.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType, + ) { param -> + val tabList = XposedHelpers.getObjectField(param.thisObject, "frs_main_tab_list") as? List<*> + tabList?.forEachIndexed { index, tab -> + if (XposedHelpers.getObjectField(tab, "tab_type") as Int == 14) { + mPosition = index + XposedHelpers.setObjectField( + param.thisObject, + "frs_tab_default", + XposedHelpers.getObjectField(tab, "tab_id") as Int + ) + return@hookBeforeMethod + } + } + } + + findRule(matchers()) { matcher, clazz, method -> + when (matcher) { + "forum_tab_current_list" -> { + if ("com.baidu.tieba.forum.controller.TopController" != clazz) return@findRule + val targetMethod: Method = try { + XposedHelpers.findMethodBestMatch( + findClass(clazz), + method, + null, + findClass(clazz) + ) + } catch (e: NoSuchMethodError) { // 12.57+ + return@findRule + } + + hookAfterMethod(targetMethod) { param -> + val viewPager: Any? = try { + XposedHelpers.findFirstFieldByExactType( + param.args[1].javaClass, + findClass("com.baidu.tbadk.widget.CustomViewPager") + )[param.args[1]] + } catch (e: NoSuchFieldError) { // 12.56+ + XposedHelpers.findFirstFieldByExactType( + param.args[1].javaClass, + findClass("androidx.viewpager.widget.ViewPager") + )[param.args[1]] + } + XposedHelpers.callMethod(viewPager, "setCurrentItem", mPosition) + } + } + + "c/f/frs/page?cmd=301001&format=protobuf" -> { + hookBeforeMethod( + clazz, method, "com.baidu.tieba.forum.model.FrsPageRequestMessage" + ) { param -> + if (XposedHelpers.getObjectField(param.args[0], "sortType") as Int == -1) { + val sharedPrefHelper = XposedHelpers.callStaticMethod( + findClass("com.baidu.tbadk.core.sharedPref.SharedPrefHelper"), + "getInstance" + ) + val lastSortType = XposedHelpers.callMethod(sharedPrefHelper, "getInt", "key_forum_last_sort_type", 0) as Int + XposedHelpers.setObjectField(param.args[0], "sortType", lastSortType) + } + } + } + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.java deleted file mode 100644 index d62b884f..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.java +++ /dev/null @@ -1,32 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - -import androidx.annotation.NonNull; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class MsgCenterTab extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "msg_center_tab"; - } - - @Override - public void hook() throws Throwable { - for (final var method : XposedHelpers.findClass("com.baidu.tieba.immessagecenter.msgtab.ui.view.MsgCenterContainerView", sClassLoader).getDeclaredMethods()) { - if (method.getParameterTypes().length == 0 && method.getReturnType() == long.class) { - XposedHelpers.findAndHookMethod("com.baidu.tieba.immessagecenter.msgtab.ui.view.MsgCenterContainerView", sClassLoader, method.getName(), new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - ReflectUtils.setObjectField(param.thisObject, Long.class, -1L); - } - }); - } - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.kt new file mode 100644 index 00000000..470bed07 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/MsgCenterTab.kt @@ -0,0 +1,25 @@ +package gm.tieba.tabswitch.hooker.auto + +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.util.setObjectField + +class MsgCenterTab : XposedContext(), IHooker { + + override fun key(): String { + return "msg_center_tab" + } + + override fun hook() { + findClass("com.baidu.tieba.immessagecenter.msgtab.ui.view.MsgCenterContainerView").declaredMethods.filter { + it.parameterTypes.isEmpty() && it.returnType == Long::class.javaPrimitiveType + }.forEach { method -> + hookBeforeMethod( + "com.baidu.tieba.immessagecenter.msgtab.ui.view.MsgCenterContainerView", + method.name + ) { param -> + setObjectField(param.thisObject, Long::class.javaObjectType, -1L) + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java deleted file mode 100644 index 1c37f8ff..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.java +++ /dev/null @@ -1,32 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - -import androidx.annotation.NonNull; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; - -public class NotificationDetect extends XposedContext implements IHooker { - @NonNull - @Override - public String key() { - return "notification_detect"; - } - - public void hook() throws Throwable { - // 禁止检测通知开启状态 - XposedHelpers.findAndHookMethod( - "androidx.core.app.NotificationManagerCompat", - sClassLoader, - "areNotificationsEnabled", - XC_MethodReplacement.returnConstant(true) - ); - XposedHelpers.findAndHookMethod( - "com.baidu.tieba.push.PushSceneGroup", - sClassLoader, - "getLimit", - XC_MethodReplacement.returnConstant(0) - ); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.kt new file mode 100644 index 00000000..5b67ed96 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/NotificationDetect.kt @@ -0,0 +1,23 @@ +package gm.tieba.tabswitch.hooker.auto + +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker + +class NotificationDetect : XposedContext(), IHooker { + + override fun key(): String { + return "notification_detect" + } + + override fun hook() { + // 禁止检测通知开启状态 + hookReplaceMethod( + "androidx.core.app.NotificationManagerCompat", + "areNotificationsEnabled" + ) { true } + hookReplaceMethod( + "com.baidu.tieba.push.PushSceneGroup", + "getLimit" + ) { 0 } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.java deleted file mode 100644 index d2b75f84..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.java +++ /dev/null @@ -1,49 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -import androidx.annotation.NonNull; - -import java.util.Calendar; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.IHooker; - -public class OpenSign extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "open_sign"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("com.baidu.tieba.tblauncher.MainTabActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final Activity activity = (Activity) param.thisObject; - if (!Preferences.getIsSigned() && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) != 0) { - final Intent intent = new Intent().setClassName(activity, "com.baidu.tieba.signall.SignAllForumActivity"); - activity.startActivity(intent); - } - } - }); - XposedHelpers.findAndHookMethod("com.baidu.tieba.signall.SignAllForumActivity", sClassLoader, "onClick", View.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final Activity activity = (Activity) param.thisObject; - if (!Preferences.getIsSigned() && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) != 0) { - Preferences.putSignDate(); - activity.finish(); - } - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.kt new file mode 100644 index 00000000..83b3461a --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OpenSign.kt @@ -0,0 +1,41 @@ +package gm.tieba.tabswitch.hooker.auto + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.view.View +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.Preferences.getIsSigned +import gm.tieba.tabswitch.dao.Preferences.putSignDate +import gm.tieba.tabswitch.hooker.IHooker +import java.util.Calendar + +class OpenSign : XposedContext(), IHooker { + + override fun key(): String { + return "open_sign" + } + + override fun hook() { + hookAfterMethod( + "com.baidu.tieba.tblauncher.MainTabActivity", + "onCreate", Bundle::class.java + ) { param -> + val activity = param.thisObject as Activity + if (!getIsSigned() && Calendar.getInstance()[Calendar.HOUR_OF_DAY] != 0) { + val intent = Intent().setClassName(activity, "com.baidu.tieba.signall.SignAllForumActivity") + activity.startActivity(intent) + } + } + hookAfterMethod( + "com.baidu.tieba.signall.SignAllForumActivity", + "onClick", View::class.java + ) { param -> + val activity = param.thisObject as Activity + if (!getIsSigned() && Calendar.getInstance()[Calendar.HOUR_OF_DAY] != 0) { + putSignDate() + activity.finish() + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java deleted file mode 100644 index 0212d43b..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.java +++ /dev/null @@ -1,173 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - - -import android.annotation.SuppressLint; -import android.content.Context; -import android.net.ConnectivityManager; -import android.net.Network; -import android.net.NetworkCapabilities; -import android.net.NetworkRequest; -import android.net.Uri; - -import androidx.annotation.NonNull; - -import org.json.JSONArray; -import org.json.JSONObject; - - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.IHooker; - -public class OriginSrc extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "origin_src"; - } - - private static boolean isHooked; - private static XC_MethodHook.Unhook picListUnhook; - private static XC_MethodHook.Unhook pbContentUnhook; - private static XC_MethodHook.Unhook mediaUnhook; - private static XC_MethodHook.Unhook picInfoUnhook; - private static XC_MethodHook.Unhook feedPicComponentUnhook; - - private static void doHook() { - if (isHooked) return; - AcRules.findRule("pic_amount", (matcher, clazz, method) -> - picListUnhook = XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, JSONObject.class, Boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final JSONObject jsonObject = (JSONObject) param.args[0]; - final JSONArray picList = jsonObject.optJSONArray("pic_list"); - if (picList == null) return; - for (int i = 0; i < picList.length(); i++) { - final JSONObject pic = picList.optJSONObject(i); - final JSONObject img = pic.getJSONObject("img"); - final JSONObject original = img.getJSONObject("original"); - original.put("big_cdn_src", original.getString("original_src")); - img.put("original", original); - pic.put("img", img); - pic.put("show_original_btn", 0); - } - jsonObject.put("pic_list", picList); - } - })); - pbContentUnhook = XposedHelpers.findAndHookMethod("tbclient.PbContent$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - XposedHelpers.setObjectField(param.thisObject, "show_original_btn", 0); - final String[] strings = new String[]{"big_cdn_src", "cdn_src", "cdn_src_active"}; - for (final String string : strings) { - XposedHelpers.setObjectField(param.thisObject, string, XposedHelpers - .getObjectField(param.thisObject, "origin_src")); - } - } - }); - mediaUnhook = XposedHelpers.findAndHookMethod("tbclient.Media$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - XposedHelpers.setObjectField(param.thisObject, "show_original_btn", 0); - final String[] strings = new String[]{"small_pic", "water_pic"}; - for (final String string : strings) { - XposedHelpers.setObjectField(param.thisObject, string, XposedHelpers - .getObjectField(param.thisObject, "big_pic")); - } - } - }); - picInfoUnhook = XposedHelpers.findAndHookMethod("tbclient.PicInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - final String[] strings = new String[]{"small_pic_url", "big_pic_url"}; - for (final String string : strings) { - XposedHelpers.setObjectField(param.thisObject, string, XposedHelpers - .getObjectField(param.thisObject, "origin_pic_url")); - } - } - }); - feedPicComponentUnhook = XposedHelpers.findAndHookMethod("tbclient.FeedPicComponent$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - String schema = (String) XposedHelpers.getObjectField(param.thisObject, "schema"); - String paramsJson = Uri.parse(schema).getQueryParameter("params"); - - JSONObject jsonObject = new JSONObject(paramsJson); - JSONObject pageParams = jsonObject.getJSONObject("pageParams"); - JSONArray picDataList = pageParams.getJSONArray("pic_data_list"); - - for (int i = 0; i < picDataList.length(); i++) { - JSONObject picData = picDataList.getJSONObject(i); - String originPicUrl = picData.getString("origin_pic_url"); - picData.put("big_pic_url", originPicUrl); - picData.put("small_pic_url", originPicUrl); - picData.put("is_show_origin_btn", 0); - } - - String modifiedUri = "tiebaapp://router/portal?params=" + jsonObject.toString(); - XposedHelpers.setObjectField(param.thisObject, "schema", modifiedUri); - } - }); - isHooked = true; - } - - private static void doUnHook() { - if (!isHooked) return; - if (picListUnhook != null) { - picListUnhook.unhook(); - picListUnhook = null; - } - if (pbContentUnhook != null) { - pbContentUnhook.unhook(); - pbContentUnhook = null; - } - if (mediaUnhook != null) { - mediaUnhook.unhook(); - mediaUnhook = null; - } - if (picInfoUnhook != null) { - picInfoUnhook.unhook(); - picInfoUnhook = null; - } - if (feedPicComponentUnhook != null) { - feedPicComponentUnhook.unhook(); - feedPicComponentUnhook = null; - } - isHooked = false; - } - - @SuppressLint("MissingPermission") - @Override - public void hook() throws Throwable { - if (Preferences.getBoolean("origin_src_only_wifi")) { - final NetworkCallbackImpl networkCallback = new NetworkCallbackImpl(); - final NetworkRequest.Builder builder = new NetworkRequest.Builder(); - final NetworkRequest request = builder.build(); - final ConnectivityManager connMgr = (ConnectivityManager) getContext().getSystemService( - Context.CONNECTIVITY_SERVICE); - if (connMgr != null) connMgr.registerNetworkCallback(request, networkCallback); - } else { - doHook(); - } - } - - private static class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback { - NetworkCallbackImpl() { - } - - @Override - public void onCapabilitiesChanged(final Network network, final NetworkCapabilities networkCapabilities) { - super.onCapabilitiesChanged(network, networkCapabilities); - if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) - && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { - doHook(); - } else { - doUnHook(); - } - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.kt new file mode 100644 index 00000000..261c555d --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.kt @@ -0,0 +1,160 @@ +package gm.tieba.tabswitch.hooker.auto + +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.ConnectivityManager.NetworkCallback +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.Uri +import de.robv.android.xposed.XC_MethodHook +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.dao.Preferences.getBoolean +import gm.tieba.tabswitch.hooker.IHooker +import org.json.JSONObject + +class OriginSrc : XposedContext(), IHooker { + + override fun key(): String { + return "origin_src" + } + + @SuppressLint("MissingPermission") + override fun hook() { + if (getBoolean("origin_src_only_wifi")) { + val networkCallback = NetworkCallbackImpl() + val builder = NetworkRequest.Builder() + val request = builder.build() + val connMgr = getContext().getSystemService( + Context.CONNECTIVITY_SERVICE + ) as ConnectivityManager + connMgr.registerNetworkCallback(request, networkCallback) + } else { + doHook() + } + } + + private class NetworkCallbackImpl : NetworkCallback() { + override fun onCapabilitiesChanged( + network: Network, + networkCapabilities: NetworkCapabilities + ) { + super.onCapabilitiesChanged(network, networkCapabilities) + if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) + ) { + doHook() + } else { + doUnHook() + } + } + } + + companion object { + + private val unhookList = mutableListOf() + + private fun doHook() { + if (unhookList.isNotEmpty()) return + + findRule("pic_amount") { _, clazz, method -> + unhookList.add(hookBeforeMethod( + clazz, method, JSONObject::class.java, Boolean::class.javaObjectType + ) { param -> + val jsonObject = param.args[0] as JSONObject + + jsonObject.optJSONArray("pic_list")?.let { picList -> + for (i in 0 until picList.length()) { + val pic = picList.optJSONObject(i) + val img = pic.getJSONObject("img") + val original = img.getJSONObject("original").apply { + put("big_cdn_src", getString("original_src")) + } + img.put("original", original) + pic.apply { + put("img", img) + put("show_original_btn", 0) + } + } + jsonObject.put("pic_list", picList) + } + }) + + unhookList.add(hookBeforeMethod( + "tbclient.PbContent\$Builder", + "build", Boolean::class.javaPrimitiveType, + ) { param -> + XposedHelpers.setObjectField(param.thisObject, "show_original_btn", 0) + arrayOf("big_cdn_src", "cdn_src", "cdn_src_active").forEach { field -> + XposedHelpers.setObjectField( + param.thisObject, + field, + XposedHelpers.getObjectField(param.thisObject, "origin_src") + ) + } + }) + + unhookList.add(hookBeforeMethod( + "tbclient.Media\$Builder", + "build", Boolean::class.javaPrimitiveType, + ) { param -> + XposedHelpers.setObjectField(param.thisObject, "show_original_btn", 0) + arrayOf("small_pic", "water_pic").forEach { field -> + XposedHelpers.setObjectField( + param.thisObject, + field, + XposedHelpers.getObjectField(param.thisObject, "big_pic") + ) + } + }) + + unhookList.add(hookBeforeMethod( + "tbclient.PicInfo\$Builder", + "build", Boolean::class.javaPrimitiveType, + ) { param -> + arrayOf("small_pic_url", "big_pic_url").forEach { field -> + XposedHelpers.setObjectField( + param.thisObject, + field, + XposedHelpers.getObjectField(param.thisObject, "origin_pic_url") + ) + } + }) + + unhookList.add(hookBeforeMethod( + "tbclient.FeedPicComponent\$Builder", + "build", Boolean::class.javaPrimitiveType, + ) { param -> + val schema = XposedHelpers.getObjectField(param.thisObject, "schema") as String + val paramsJson = Uri.parse(schema).getQueryParameter("params") + + paramsJson?.let { schemaParams -> + val jsonObject = JSONObject(schemaParams) + val pageParams = jsonObject.getJSONObject("pageParams") + val picDataList = pageParams.getJSONArray("pic_data_list") + for (i in 0 until picDataList.length()) { + val picData = picDataList.getJSONObject(i) + val originPicUrl = picData.getString("origin_pic_url") + picData.apply { + put("big_pic_url", originPicUrl) + put("small_pic_url", originPicUrl) + put("is_show_origin_btn", 0) + } + } + val modifiedUri = "tiebaapp://router/portal?params=$jsonObject" + XposedHelpers.setObjectField(param.thisObject, "schema", modifiedUri) + } + }) + } + } + + private fun doUnHook() { + if (unhookList.isEmpty()) return + unhookList.forEach { it.unhook() } + unhookList.clear() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java deleted file mode 100644 index eb399cc2..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.java +++ /dev/null @@ -1,157 +0,0 @@ -package gm.tieba.tabswitch.hooker.auto; - -import android.app.Activity; -import android.os.Build; - -import androidx.annotation.NonNull; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; - -public class TransitionAnimation extends XposedContext implements IHooker { - - private Class activityPendingTransitionFactory; - private int CHAT_SQUARE_FADE_IN; - private int CHAT_SQUARE_FADE_OUT; - private int RES_BIG_IMAGE_IN_FROM_RIGHT; - private int RES_BIG_IMAGE_OUT_TO_RIGHT; - private int RES_CUSTOM_FADE_IN; - private int RES_CUSTOM_FADE_OUT; - private int RES_CUSTOM_IN_FROM_RIGHT; - private int RES_CUSTOM_OUT_TO_RIGHT; - private int RES_FADE_OUT; - private int RES_NFADE_IN; - private int RES_NORMAL_IN_FROM_BOTTOM; - private int RES_NORMAL_IN_FROM_LEFT; - private int RES_NORMAL_IN_FROM_RIGHT; - private int RES_NORMAL_OUT_TO_BOTTOM; - private int RES_NORMAL_OUT_TO_LEFT; - private int RES_NORMAL_OUT_TO_RIGHT; - - @NonNull - @Override - public String key() { - return "transition_animation"; - } - - @Override - public void hook() throws Throwable { - if (!(Build.VERSION.SDK_INT >= 34 && DeobfuscationHelper.isTbSatisfyVersionRequirement("12.58.2.1"))) { - return; - } - - activityPendingTransitionFactory = XposedHelpers.findClass("com.baidu.tbadk.ActivityPendingTransitionFactory", sClassLoader); - - CHAT_SQUARE_FADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "CHAT_SQUARE_FADE_IN"); - CHAT_SQUARE_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "CHAT_SQUARE_FADE_OUT"); - RES_BIG_IMAGE_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_BIG_IMAGE_IN_FROM_RIGHT"); - RES_BIG_IMAGE_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_BIG_IMAGE_OUT_TO_RIGHT"); - RES_CUSTOM_FADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_FADE_IN"); - RES_CUSTOM_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_FADE_OUT"); - RES_CUSTOM_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_IN_FROM_RIGHT"); - RES_CUSTOM_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_OUT_TO_RIGHT"); - RES_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_FADE_OUT"); - RES_NFADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NFADE_IN"); - RES_NORMAL_IN_FROM_BOTTOM = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_BOTTOM"); - RES_NORMAL_IN_FROM_LEFT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_LEFT"); - RES_NORMAL_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_RIGHT"); - RES_NORMAL_OUT_TO_BOTTOM = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_BOTTOM"); - RES_NORMAL_OUT_TO_LEFT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_LEFT"); - RES_NORMAL_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_RIGHT"); - - XposedHelpers.findAndHookMethod( - activityPendingTransitionFactory, - "enterExitAnimation", - "com.baidu.tbadk.TbPageContext", int.class, - new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - enterExitAnimation(param.args[0], (int) param.args[1]); - return null; - } - } - ); - - XposedHelpers.findAndHookMethod( - activityPendingTransitionFactory, - "closeAnimation", - "com.baidu.tbadk.TbPageContext", int.class, - new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - closeAnimation(param.args[0], (int) param.args[1]); - return null; - } - } - ); - } - - private void enterExitAnimation(Object tbPageContext, int i) { - Activity pageActivity = (Activity) XposedHelpers.callMethod(tbPageContext, "getPageActivity"); - if (XposedHelpers.getStaticBooleanField(activityPendingTransitionFactory, "IS_CUSTOM_FROM_THIRD_PARTY")) { - i = 3; - } - switch (i) { - case 0: - pageActivity.overridePendingTransition(0, 0); - return; - case 1: - pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_RIGHT, RES_FADE_OUT); - return; - case 2: - pageActivity.overridePendingTransition(RES_BIG_IMAGE_IN_FROM_RIGHT, RES_FADE_OUT); - return; - case 3: - pageActivity.overridePendingTransition(RES_CUSTOM_IN_FROM_RIGHT, RES_CUSTOM_FADE_OUT); - return; - case 4: - pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_BOTTOM, RES_FADE_OUT); - return; - case 5: - pageActivity.overridePendingTransition(CHAT_SQUARE_FADE_IN, CHAT_SQUARE_FADE_OUT); - return; - case 6: - pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_LEFT, RES_FADE_OUT); - return; - default: - pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_RIGHT, RES_FADE_OUT); - return; - } - } - - private void closeAnimation(Object tbPageContext, int i) { - Activity pageActivity = (Activity) XposedHelpers.callMethod(tbPageContext, "getPageActivity"); - if (XposedHelpers.getStaticBooleanField(activityPendingTransitionFactory, "IS_CUSTOM_FROM_THIRD_PARTY")) { - i = 3; - } - switch (i) { - case 0: - pageActivity.overridePendingTransition(0, 0); - return; - case 1: - pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_RIGHT); - return; - case 2: - pageActivity.overridePendingTransition(RES_NFADE_IN, RES_BIG_IMAGE_OUT_TO_RIGHT); - return; - case 3: - pageActivity.overridePendingTransition(RES_CUSTOM_FADE_IN, RES_CUSTOM_OUT_TO_RIGHT); - return; - case 4: - pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_BOTTOM); - return; - case 5: - pageActivity.overridePendingTransition(CHAT_SQUARE_FADE_IN, CHAT_SQUARE_FADE_OUT); - return; - case 6: - pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_LEFT); - return; - default: - pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_RIGHT); - return; - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.kt new file mode 100644 index 00000000..8b822fc3 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/TransitionAnimation.kt @@ -0,0 +1,112 @@ +package gm.tieba.tabswitch.hooker.auto + +import android.app.Activity +import android.os.Build +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.isTbSatisfyVersionRequirement + +@Suppress("DEPRECATION") +class TransitionAnimation : XposedContext(), IHooker { + + private var CHAT_SQUARE_FADE_IN = 0 + private var CHAT_SQUARE_FADE_OUT = 0 + private var RES_BIG_IMAGE_IN_FROM_RIGHT = 0 + private var RES_BIG_IMAGE_OUT_TO_RIGHT = 0 + private var RES_CUSTOM_FADE_IN = 0 + private var RES_CUSTOM_FADE_OUT = 0 + private var RES_CUSTOM_IN_FROM_RIGHT = 0 + private var RES_CUSTOM_OUT_TO_RIGHT = 0 + private var RES_FADE_OUT = 0 + private var RES_NFADE_IN = 0 + private var RES_NORMAL_IN_FROM_BOTTOM = 0 + private var RES_NORMAL_IN_FROM_LEFT = 0 + private var RES_NORMAL_IN_FROM_RIGHT = 0 + private var RES_NORMAL_OUT_TO_BOTTOM = 0 + private var RES_NORMAL_OUT_TO_LEFT = 0 + private var RES_NORMAL_OUT_TO_RIGHT = 0 + private lateinit var activityPendingTransitionFactory: Class<*> + + override fun key(): String { + return "transition_animation" + } + + override fun hook() { + if (!(Build.VERSION.SDK_INT >= 34 && isTbSatisfyVersionRequirement("12.58.2.1"))) { + return + } + + activityPendingTransitionFactory = + findClass("com.baidu.tbadk.ActivityPendingTransitionFactory") + + CHAT_SQUARE_FADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "CHAT_SQUARE_FADE_IN") + CHAT_SQUARE_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "CHAT_SQUARE_FADE_OUT") + RES_BIG_IMAGE_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_BIG_IMAGE_IN_FROM_RIGHT") + RES_BIG_IMAGE_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_BIG_IMAGE_OUT_TO_RIGHT") + RES_CUSTOM_FADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_FADE_IN") + RES_CUSTOM_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_FADE_OUT") + RES_CUSTOM_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_IN_FROM_RIGHT") + RES_CUSTOM_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_CUSTOM_OUT_TO_RIGHT") + RES_FADE_OUT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_FADE_OUT") + RES_NFADE_IN = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NFADE_IN") + RES_NORMAL_IN_FROM_BOTTOM = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_BOTTOM") + RES_NORMAL_IN_FROM_LEFT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_LEFT") + RES_NORMAL_IN_FROM_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_IN_FROM_RIGHT") + RES_NORMAL_OUT_TO_BOTTOM = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_BOTTOM") + RES_NORMAL_OUT_TO_LEFT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_LEFT") + RES_NORMAL_OUT_TO_RIGHT = XposedHelpers.getStaticIntField(activityPendingTransitionFactory, "RES_NORMAL_OUT_TO_RIGHT") + + hookReplaceMethod( + activityPendingTransitionFactory, + "enterExitAnimation", + "com.baidu.tbadk.TbPageContext", Int::class.javaPrimitiveType + ) { param -> + enterExitAnimation(param.args[0], param.args[1] as Int) + } + + hookReplaceMethod( + activityPendingTransitionFactory, + "closeAnimation", + "com.baidu.tbadk.TbPageContext", Int::class.javaPrimitiveType + ) { param -> + closeAnimation(param.args[0], param.args[1] as Int) + } + } + + private fun enterExitAnimation(tbPageContext: Any, i: Int) { + var animationType = i + val pageActivity = XposedHelpers.callMethod(tbPageContext, "getPageActivity") as Activity + if (XposedHelpers.getStaticBooleanField(activityPendingTransitionFactory, "IS_CUSTOM_FROM_THIRD_PARTY")) { + animationType = 3 + } + when (animationType) { + 0 -> pageActivity.overridePendingTransition(0, 0) + 1 -> pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_RIGHT, RES_FADE_OUT) + 2 -> pageActivity.overridePendingTransition(RES_BIG_IMAGE_IN_FROM_RIGHT, RES_FADE_OUT) + 3 -> pageActivity.overridePendingTransition(RES_CUSTOM_IN_FROM_RIGHT, RES_CUSTOM_FADE_OUT) + 4 -> pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_BOTTOM, RES_FADE_OUT) + 5 -> pageActivity.overridePendingTransition(CHAT_SQUARE_FADE_IN, CHAT_SQUARE_FADE_OUT) + 6 -> pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_LEFT, RES_FADE_OUT) + else -> pageActivity.overridePendingTransition(RES_NORMAL_IN_FROM_RIGHT, RES_FADE_OUT) + } + } + + private fun closeAnimation(tbPageContext: Any, i: Int) { + var animationType = i + val pageActivity = XposedHelpers.callMethod(tbPageContext, "getPageActivity") as Activity + if (XposedHelpers.getStaticBooleanField(activityPendingTransitionFactory, "IS_CUSTOM_FROM_THIRD_PARTY")) { + animationType = 3 + } + when (animationType) { + 0 -> pageActivity.overridePendingTransition(0, 0) + 1 -> pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_RIGHT) + 2 -> pageActivity.overridePendingTransition(RES_NFADE_IN, RES_BIG_IMAGE_OUT_TO_RIGHT) + 3 -> pageActivity.overridePendingTransition(RES_CUSTOM_FADE_IN, RES_CUSTOM_OUT_TO_RIGHT) + 4 -> pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_BOTTOM) + 5 -> pageActivity.overridePendingTransition(CHAT_SQUARE_FADE_IN, CHAT_SQUARE_FADE_OUT) + 6 -> pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_LEFT) + else -> pageActivity.overridePendingTransition(RES_NFADE_IN, RES_NORMAL_OUT_TO_RIGHT) + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java deleted file mode 100644 index 4fd18235..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ /dev/null @@ -1,118 +0,0 @@ -package gm.tieba.tabswitch.hooker.deobfuscation; - -import android.content.Context; - -import org.luckypray.dexkit.DexKitBridge; -import org.luckypray.dexkit.query.FindClass; -import org.luckypray.dexkit.query.FindMethod; -import org.luckypray.dexkit.query.matchers.MethodMatcher; -import org.luckypray.dexkit.result.ClassDataList; -import org.luckypray.dexkit.result.MethodDataList; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.function.Consumer; -import java.util.zip.ZipFile; - -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.dao.Preferences; -import io.reactivex.rxjava3.subjects.PublishSubject; - -public class Deobfuscation extends XposedContext { - private String packageResource; - private final List matchers = new ArrayList<>(); - - public void setMatchers(final List matchers) { - this.matchers.clear(); - this.matchers.addAll(matchers); - } - - private void forEachProgressed(final PublishSubject progress, - final Collection collection, - final Consumer action) { - final var size = collection.size(); - var count = 0; - for (final T t : collection) { - count++; - progress.onNext((float) count / size); - action.accept(t); - } - } - - public void dexkit(final PublishSubject progress, final Context context) { - load("dexkit"); - packageResource = context.getPackageResourcePath(); - final var bridge = DexKitBridge.create(packageResource); - Objects.requireNonNull(bridge); - - forEachProgressed(progress, matchers, matcher -> { - MethodDataList ret = new MethodDataList(); - if (matcher.getClassMatcher() != null) { - ClassDataList retClassList = bridge.findClass(FindClass.create().matcher(matcher.getClassMatcher())); - for (var retClass: retClassList) { - ret.addAll(findMethod(bridge, FindMethod.create().searchPackages(retClass.getName()), matcher)); - } - } else { - ret.addAll(findMethod(bridge, FindMethod.create(), matcher)); - } - for (final var methodData : ret) { - AcRules.putRule( - matcher.toString(), methodData.getClassName(), methodData.getName()); - } - }); - - bridge.close(); - } - - private MethodDataList findMethod(DexKitBridge bridge, FindMethod baseMethodQuery, Matcher matcher) { - MethodDataList ret = null; - if (matcher instanceof final StringMatcher stringMatcher) { - ret = bridge.findMethod( - baseMethodQuery.matcher( - MethodMatcher.create().usingStrings(stringMatcher.getStr()) - ) - ); - } else if (matcher instanceof final ResMatcher resMatcher) { - ret = bridge.findMethod( - baseMethodQuery.matcher( - MethodMatcher.create().usingNumbers(resMatcher.getId()) - ) - ); - } else if (matcher instanceof final SmaliMatcher smaliMatcher) { - ret = bridge.findMethod( - baseMethodQuery.matcher( - MethodMatcher.create().addInvoke( - MethodMatcher.create().descriptor(smaliMatcher.getDescriptor()) - ) - ) - ); - } else if (matcher instanceof final MethodNameMatcher methodNameMatcher) { - ret = bridge.findMethod( - baseMethodQuery.matcher( - MethodMatcher.create().name(methodNameMatcher.getMethodName()) - ) - ); - } else if (matcher instanceof final ReturnTypeMatcher returnTypeMatcher) { - ret = bridge.findMethod( - baseMethodQuery.matcher( - MethodMatcher.create().returnType(returnTypeMatcher.getReturnType()) - ) - ); - } - return ret; - } - - public void saveDexSignatureHashCode() throws IOException { - try (final var apk = new ZipFile(packageResource)) { - try (final var in = apk.getInputStream(apk.getEntry("classes.dex"))) { - final var signatureHashCode = Arrays.hashCode(DeobfuscationHelper.calcSignature(in)); - Preferences.putSignature(signatureHashCode); - } - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.kt new file mode 100644 index 00000000..9712f5c2 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.kt @@ -0,0 +1,74 @@ +package gm.tieba.tabswitch.hooker.deobfuscation + +import android.content.Context +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.putRule +import gm.tieba.tabswitch.dao.Preferences.putSignature +import io.reactivex.rxjava3.subjects.PublishSubject +import org.luckypray.dexkit.DexKitBridge +import org.luckypray.dexkit.query.FindClass +import org.luckypray.dexkit.query.FindMethod +import org.luckypray.dexkit.result.MethodDataList +import java.util.Objects +import java.util.function.Consumer +import java.util.zip.ZipFile + +class Deobfuscation : XposedContext() { + + private val matchers: MutableList = ArrayList() + private lateinit var packageResource: String + + fun setMatchers(matchers: List) { + this.matchers.clear() + this.matchers.addAll(matchers) + } + + private fun forEachProgressed( + progress: PublishSubject, + collection: Collection, + action: Consumer + ) { + val size = collection.size + collection.forEachIndexed { index, item -> + progress.onNext((index + 1).toFloat() / size) + action.accept(item) + } + } + + fun dexkit(progress: PublishSubject, context: Context) { + load("dexkit") + packageResource = context.packageResourcePath + val bridge = DexKitBridge.create(packageResource) + Objects.requireNonNull(bridge) + + forEachProgressed(progress, matchers) { matcher: Matcher -> + val methodDataList = MethodDataList() + + matcher.classMatcher?.let { classMatcher -> + bridge.findClass(FindClass.create().matcher(classMatcher)) + .flatMapTo(methodDataList) { classData -> + findMethod(bridge, FindMethod.create().searchPackages(classData.name), matcher) + } + } ?: methodDataList.addAll(findMethod(bridge, FindMethod.create(), matcher)) + + methodDataList.forEach { methodData -> + putRule(matcher.toString(), methodData.className, methodData.name) + } + } + + bridge.close() + } + + private fun findMethod(bridge: DexKitBridge, baseMethodQuery: FindMethod, matcher: Matcher): MethodDataList { + return bridge.findMethod(baseMethodQuery.matcher(matcher.methodMatcher)) + } + + fun saveDexSignatureHashCode() { + ZipFile(packageResource).use { apk -> + apk.getInputStream(apk.getEntry("classes.dex")).use { inputStream -> + val signatureHashCode = DeobfuscationHelper.calcSignature(inputStream).contentHashCode() + putSignature(signatureHashCode) + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java deleted file mode 100644 index 1f503fe4..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.java +++ /dev/null @@ -1,137 +0,0 @@ -package gm.tieba.tabswitch.hooker.deobfuscation; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.os.Bundle; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; -import java.util.zip.ZipFile; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.util.DisplayUtils; - -public class DeobfuscationHelper { - private static final int SIGNATURE_DATA_START_OFFSET = 32; - private static final int SIGNATURE_SIZE = 20; - public static String sCurrentTbVersion; - - static byte[] calcSignature(final InputStream dataStoreInput) throws IOException { - final MessageDigest md; - try { - md = MessageDigest.getInstance("SHA-1"); - } catch (final NoSuchAlgorithmException ex) { - throw new RuntimeException(ex); - } - - dataStoreInput.skip(SIGNATURE_DATA_START_OFFSET); - final byte[] buffer = new byte[4 * 1024]; - int bytesRead = dataStoreInput.read(buffer); - while (bytesRead >= 0) { - md.update(buffer, 0, bytesRead); - bytesRead = dataStoreInput.read(buffer); - } - - final byte[] signature = md.digest(); - if (signature.length != SIGNATURE_SIZE) { - throw new RuntimeException("unexpected digest write: " + signature.length + " bytes"); - } - return signature; - } - - public static boolean isVersionChanged(final Context context) { - final SharedPreferences tsConfig = context.getSharedPreferences("TS_config", Context.MODE_PRIVATE); - return !tsConfig.getString("deobfs_version", "unknown").equals(getTbVersion(context)); - } - - public static boolean isDexChanged(final Context context) { - try { - final ZipFile zipFile = new ZipFile(new File(context.getPackageResourcePath())); - try (final InputStream in = zipFile.getInputStream(zipFile.getEntry("classes.dex"))) { - return Arrays.hashCode(calcSignature(in)) != Preferences.getSignature(); - } - } catch (final IOException e) { - XposedBridge.log(e); - } - return false; - } - - public static String getTbVersion(final Context context) { - final PackageManager pm = context.getPackageManager(); - try { - final ApplicationInfo applicationInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); - switch ((Integer) applicationInfo.metaData.get("versionType")) { - case 3: - return pm.getPackageInfo(context.getPackageName(), 0).versionName; - case 2: - return String.valueOf(applicationInfo.metaData.get("grayVersion")); - case 1: - return String.valueOf(applicationInfo.metaData.get("subVersion")); - default: - throw new PackageManager.NameNotFoundException("unknown tb version"); - } - } catch (final PackageManager.NameNotFoundException e) { - XposedBridge.log(e); - return "unknown"; - } - } - - @SuppressLint("ApplySharedPref") - public static void saveAndRestart(final Activity activity, final String version, final Class trampoline) { - final SharedPreferences.Editor editor = activity.getSharedPreferences("TS_config", Context.MODE_PRIVATE).edit(); - editor.putString("deobfs_version", version); - editor.commit(); - if (trampoline == null) { - DisplayUtils.restart(activity); - } else { - XposedHelpers.findAndHookMethod(trampoline, "onCreate", Bundle.class, new XC_MethodHook() { - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Activity activity = (Activity) param.thisObject; - DisplayUtils.restart(activity); - } - }); - final Intent intent = new Intent(activity, trampoline); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); - activity.startActivity(intent); - } - } - - // Adapted from https://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in-java - public static boolean isTbSatisfyVersionRequirement(final String requiredVersion) { - String[] currParts = sCurrentTbVersion.split("\\."); - String[] reqParts = requiredVersion.split("\\."); - int length = Math.max(currParts.length, reqParts.length); - for(int i = 0; i < length; i++) { - try { - int currPart = i < currParts.length ? - Integer.parseInt(currParts[i]) : 0; - int reqPart = i < reqParts.length ? - Integer.parseInt(reqParts[i]) : 0; - if (currPart != reqPart) { - return currPart > reqPart; - } - } catch (NumberFormatException e) { - return false; - } - } - return true; - } - - // Inclusive of both ends - public static boolean isTbBetweenVersionRequirement(final String lower, final String upper) { - return isTbSatisfyVersionRequirement(lower) - && (!isTbSatisfyVersionRequirement(upper) || sCurrentTbVersion.equals(upper)); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.kt new file mode 100644 index 00000000..6c8d65be --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHelper.kt @@ -0,0 +1,128 @@ +package gm.tieba.tabswitch.hooker.deobfuscation + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.os.Bundle +import de.robv.android.xposed.XposedBridge +import gm.tieba.tabswitch.XposedContext.Companion.hookBeforeMethod +import gm.tieba.tabswitch.dao.Preferences.getSignature +import gm.tieba.tabswitch.util.restart +import java.io.File +import java.io.IOException +import java.io.InputStream +import java.security.MessageDigest +import java.security.NoSuchAlgorithmException +import java.util.zip.ZipFile +import kotlin.math.max + +object DeobfuscationHelper { + + private const val SIGNATURE_DATA_START_OFFSET = 32 + private const val SIGNATURE_SIZE = 20 + lateinit var sCurrentTbVersion: String + + fun calcSignature(dataStoreInput: InputStream): ByteArray { + val md: MessageDigest = try { + MessageDigest.getInstance("SHA-1") + } catch (ex: NoSuchAlgorithmException) { + throw RuntimeException(ex) + } + + dataStoreInput.skip(SIGNATURE_DATA_START_OFFSET.toLong()) + val buffer = ByteArray(4 * 1024) + + dataStoreInput.use { input -> + generateSequence { input.read(buffer).takeIf { it >= 0 } } + .forEach { bytesRead -> md.update(buffer, 0, bytesRead) } + } + + return md.digest().also { signature -> + check(signature.size == SIGNATURE_SIZE) { "unexpected digest write: ${signature.size} bytes" } + } + } + + fun isVersionChanged(context: Context): Boolean { + val tsConfig = context.getSharedPreferences("TS_config", Context.MODE_PRIVATE) + return tsConfig.getString("deobfs_version", "unknown") != getTbVersion(context) + } + + fun isDexChanged(context: Context): Boolean { + return try { + ZipFile(File(context.packageResourcePath)).use { zipFile -> + zipFile.getEntry("classes.dex")?.let { entry -> + zipFile.getInputStream(entry).use { inputStream -> + calcSignature(inputStream).contentHashCode() != getSignature() + } + } ?: false + } + } catch (e: IOException) { + XposedBridge.log(e) + false + } + } + + @Suppress("DEPRECATION") + fun getTbVersion(context: Context): String { + val pm = context.packageManager + try { + val applicationInfo = pm.getApplicationInfo(context.packageName, PackageManager.GET_META_DATA) + return when (applicationInfo.metaData["versionType"] as Int?) { + 3 -> pm.getPackageInfo(context.packageName, 0).versionName + 2 -> applicationInfo.metaData["grayVersion"].toString() + 1 -> applicationInfo.metaData["subVersion"].toString() + else -> throw PackageManager.NameNotFoundException("unknown tb version") + } + } catch (e: PackageManager.NameNotFoundException) { + XposedBridge.log(e) + return "unknown" + } + } + + @SuppressLint("ApplySharedPref") + fun saveAndRestart(activity: Activity, version: String, trampoline: Class<*>?) { + activity.getSharedPreferences("TS_config", Context.MODE_PRIVATE) + .edit() + .putString("deobfs_version", version) + .commit() + + trampoline?.let { trampolineClass -> + hookBeforeMethod(trampolineClass, "onCreate", Bundle::class.java) { param -> + restart(param.thisObject as Activity) + } + activity.startActivity( + Intent(activity, trampolineClass).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + } + ) + } ?: restart(activity) + } + + // Adapted from https://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in-java + fun isTbSatisfyVersionRequirement(requiredVersion: String): Boolean { + val currParts = sCurrentTbVersion.split(".") + val reqParts = requiredVersion.split(".") + + val length = max(currParts.size, reqParts.size) + for (i in 0 until length) { + try { + val currPart = currParts.getOrNull(i)?.toInt() ?: 0 + val reqPart = reqParts.getOrNull(i)?.toInt() ?: 0 + if (currPart != reqPart) { + return currPart > reqPart + } + } catch (e: NumberFormatException) { + return false + } + } + return true + } + + // Inclusive of both ends + fun isTbBetweenVersionRequirement(lower: String, upper: String): Boolean { + return (isTbSatisfyVersionRequirement(lower) + && (!isTbSatisfyVersionRequirement(upper) || sCurrentTbVersion == upper)) + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java deleted file mode 100644 index e71eb60c..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.java +++ /dev/null @@ -1,172 +0,0 @@ -package gm.tieba.tabswitch.hooker.deobfuscation; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.Instrumentation; -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.os.Bundle; -import android.os.IBinder; -import android.util.Log; -import android.view.Gravity; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.IHooker; - -public class DeobfuscationHooker extends XposedContext implements IHooker { - private static final String TRAMPOLINE_ACTIVITY = "com.baidu.tieba.tblauncher.MainTabActivity"; - private final DeobfuscationViewModel viewModel = new DeobfuscationViewModel(); - private final List mMatchers; - private Activity mActivity; - private View mProgress; - private TextView mMessage; - private FrameLayout mProgressContainer; - private LinearLayout mContentView; - - public DeobfuscationHooker(final List matchers) { - mMatchers = matchers; - } - - @NonNull - @Override - public String key() { - return "deobfs"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("com.baidu.tieba.LogoActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { - @SuppressLint("ApplySharedPref") - @Override - public void afterHookedMethod(final MethodHookParam param) throws Throwable { - final var hooks = disableStartAndFinishActivity(); - mActivity = (Activity) param.thisObject; - if (Preferences.getBoolean("purge")) { - final var editor = mActivity - .getSharedPreferences("settings", Context.MODE_PRIVATE) - .edit(); - editor.putString("key_location_request_dialog_last_show_version", - DeobfuscationHelper.getTbVersion(mActivity) - ); - editor.commit(); - } - - if (DeobfuscationHelper.isDexChanged(mActivity)) { - AcRules.dropAllRules(); - } else { - hooks.forEach(Unhook::unhook); - DeobfuscationHelper.saveAndRestart(mActivity, - DeobfuscationHelper.getTbVersion(mActivity), - XposedHelpers.findClass(TRAMPOLINE_ACTIVITY, sClassLoader) - ); - return; - } - - initProgressIndicator(); - mActivity.addContentView(mContentView, new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT - )); - viewModel.progress.subscribe(progress -> setProgress(progress)); - - new Thread(() -> { - try { - setMessage("搜索资源,字符串和方法调用"); - viewModel.deobfuscate(mActivity, mMatchers); - - XposedBridge.log("Deobfuscation complete, current version: " - + DeobfuscationHelper.getTbVersion(mActivity)); - hooks.forEach(Unhook::unhook); - DeobfuscationHelper.saveAndRestart(mActivity, - DeobfuscationHelper.getTbVersion(mActivity), - XposedHelpers.findClass(TRAMPOLINE_ACTIVITY, sClassLoader) - ); - } catch (final Throwable e) { - XposedBridge.log(e); - setMessage("处理失败\n" + Log.getStackTraceString(e)); - } - }).start(); - } - }); - } - - @NonNull - private List disableStartAndFinishActivity() { - return List.of( - XposedHelpers.findAndHookMethod(Instrumentation.class, "execStartActivity", - Context.class, IBinder.class, IBinder.class, Activity.class, Intent.class, - int.class, Bundle.class, XC_MethodReplacement.returnConstant(null)), - XposedHelpers.findAndHookMethod(Activity.class, "finish", - int.class, XC_MethodReplacement.returnConstant(null)), - XposedHelpers.findAndHookMethod(Activity.class, "finishActivity", - int.class, XC_MethodReplacement.returnConstant(null)), - XposedHelpers.findAndHookMethod(Activity.class, "finishAffinity", - XC_MethodReplacement.returnConstant(null)) - ); - } - - @SuppressLint({"SetTextI18n"}) - private void initProgressIndicator() { - final var title = new TextView(mActivity); - title.setTextSize(16); - title.setPaddingRelative(0, 0, 0, 8); - title.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); - title.setTextColor(Color.parseColor("#FF303030")); - title.setText("贴吧TS正在定位被混淆的类和方法,请耐心等待"); - mProgress = new View(mActivity); - mProgress.setBackgroundColor(Color.parseColor("#FFBEBEBE")); - mMessage = new TextView(mActivity); - mMessage.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); - mMessage.setTextSize(16); - mMessage.setTextColor(Color.parseColor("#FF303030")); - final var messageLayoutParams = new FrameLayout.LayoutParams( - RelativeLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); - mMessage.setLayoutParams(messageLayoutParams); - mProgressContainer = new FrameLayout(mActivity); - mProgressContainer.addView(mProgress); - mProgressContainer.addView(mMessage); - final var frameLayoutParams = new FrameLayout.LayoutParams( - RelativeLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); - mProgressContainer.setLayoutParams(frameLayoutParams); - final var progressIndicator = new LinearLayout(mActivity); - progressIndicator.setOrientation(LinearLayout.VERTICAL); - progressIndicator.setBackgroundColor(Color.WHITE); - progressIndicator.addView(title); - progressIndicator.addView(mProgressContainer); - progressIndicator.setPaddingRelative(0, 16, 0, 16); - final var linearLayoutParams = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); - progressIndicator.setLayoutParams(linearLayoutParams); - mContentView = new LinearLayout(mActivity); - mContentView.setGravity(Gravity.CENTER); - mContentView.addView(progressIndicator); - } - - private void setMessage(final String message) { - mActivity.runOnUiThread(() -> mMessage.setText(message)); - } - - private void setProgress(final float progress) { - mActivity.runOnUiThread(() -> { - final var lp = mProgress.getLayoutParams(); - lp.height = mMessage.getHeight(); - lp.width = Math.round(mProgressContainer.getWidth() * progress); - mProgress.setLayoutParams(lp); - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.kt new file mode 100644 index 00000000..2749533f --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.kt @@ -0,0 +1,173 @@ +package gm.tieba.tabswitch.hooker.deobfuscation + +import android.annotation.SuppressLint +import android.app.Activity +import android.app.Instrumentation +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import android.os.IBinder +import android.util.Log +import android.view.Gravity +import android.view.View +import android.widget.FrameLayout +import android.widget.LinearLayout +import android.widget.RelativeLayout +import android.widget.TextView +import de.robv.android.xposed.XC_MethodHook +import de.robv.android.xposed.XposedBridge +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.dropAllRules +import gm.tieba.tabswitch.dao.Preferences.getBoolean +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.getTbVersion +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.isDexChanged +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.saveAndRestart +import kotlin.concurrent.thread + +class DeobfuscationHooker(private val mMatchers: List) : XposedContext(), IHooker { + + private val viewModel = DeobfuscationViewModel() + private lateinit var mActivity: Activity + private lateinit var mProgress: View + private lateinit var mMessage: TextView + private lateinit var mProgressContainer: FrameLayout + private lateinit var mContentView: LinearLayout + + override fun key(): String { + return "deobfs" + } + + @SuppressLint("ApplySharedPref", "CheckResult") + override fun hook() { + hookAfterMethod( + "com.baidu.tieba.LogoActivity", + "onCreate", Bundle::class.java + ) { param -> + val hooks = disableStartAndFinishActivity() + mActivity = param.thisObject as Activity + if (getBoolean("purge")) { + mActivity.getSharedPreferences("settings", Context.MODE_PRIVATE) + .edit() + .putString("key_location_request_dialog_last_show_version", getTbVersion(mActivity)) + .commit() + } + + if (isDexChanged(mActivity)) { + dropAllRules() + } else { + hooks.forEach { it.unhook() } + saveAndRestart(mActivity, getTbVersion(mActivity), findClass(TRAMPOLINE_ACTIVITY)) + return@hookAfterMethod + } + + initProgressIndicator() + mActivity.addContentView( + mContentView, LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT + ) + ) + viewModel.progress.subscribe { progress: Float -> setProgress(progress) } + + thread { + try { + setMessage("搜索资源,字符串和方法调用") + viewModel.deobfuscate(mActivity, mMatchers) + + XposedBridge.log("Deobfuscation complete, current version: ${getTbVersion(mActivity)}") + hooks.forEach { it.unhook() } + saveAndRestart( + mActivity, + getTbVersion(mActivity), + findClass(TRAMPOLINE_ACTIVITY) + ) + } catch (e: Throwable) { + XposedBridge.log(e) + setMessage("处理失败\n${Log.getStackTraceString(e)}") + } + } + } + } + + private fun disableStartAndFinishActivity(): List { + return listOf( + hookReplaceMethod(Instrumentation::class.java, "execStartActivity", + Context::class.java, IBinder::class.java, IBinder::class.java, Activity::class.java, Intent::class.java, + Int::class.javaPrimitiveType, Bundle::class.java) { null }, + hookReplaceMethod(Activity::class.java, "finish", + Int::class.javaPrimitiveType) { null }, + hookReplaceMethod(Activity::class.java, "finishActivity", + Int::class.javaPrimitiveType) { null }, + hookReplaceMethod(Activity::class.java, "finishAffinity") { null } + ) + } + + @SuppressLint("SetTextI18n") + private fun initProgressIndicator() { + val title = TextView(mActivity).apply { + textSize = 16f + setPaddingRelative(0, 0, 0, 8) + textAlignment = View.TEXT_ALIGNMENT_CENTER + setTextColor(Color.parseColor("#FF303030")) + text = "贴吧TS正在定位被混淆的类和方法,请耐心等待" + } + + mProgress = View(mActivity).apply { + setBackgroundColor(Color.parseColor("#FFBEBEBE")) + } + + mMessage = TextView(mActivity).apply { + textAlignment = View.TEXT_ALIGNMENT_CENTER + textSize = 16f + setTextColor(Color.parseColor("#FF303030")) + layoutParams = FrameLayout.LayoutParams( + RelativeLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.WRAP_CONTENT + ) + } + + mProgressContainer = FrameLayout(mActivity).apply { + addView(mProgress) + addView(mMessage) + layoutParams = FrameLayout.LayoutParams( + RelativeLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.WRAP_CONTENT + ) + } + + val progressIndicator = LinearLayout(mActivity).apply { + orientation = LinearLayout.VERTICAL + setBackgroundColor(Color.WHITE) + addView(title) + addView(mProgressContainer) + setPaddingRelative(0, 16, 0, 16) + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ) + } + + mContentView = LinearLayout(mActivity).apply { + gravity = Gravity.CENTER + addView(progressIndicator) + } + } + + private fun setMessage(message: String) { + mActivity.runOnUiThread { mMessage.text = message } + } + + private fun setProgress(progress: Float) { + mActivity.runOnUiThread { + mProgress.layoutParams = mProgress.layoutParams.apply { + height = mMessage.height + width = Math.round(mProgressContainer.width * progress) + } + } + } + + companion object { + private const val TRAMPOLINE_ACTIVITY = "com.baidu.tieba.tblauncher.MainTabActivity" + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java deleted file mode 100644 index 08ec9338..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.java +++ /dev/null @@ -1,21 +0,0 @@ -package gm.tieba.tabswitch.hooker.deobfuscation; - -import android.content.Context; - -import java.io.IOException; -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.subjects.PublishSubject; - -public class DeobfuscationViewModel { - private final PublishSubject _progress = PublishSubject.create(); - public final Observable progress = _progress; - private final Deobfuscation deobfuscation = new Deobfuscation(); - - public void deobfuscate(final Context context, final List matchers) throws IOException { - deobfuscation.setMatchers(matchers); - deobfuscation.dexkit(_progress, context); - deobfuscation.saveDexSignatureHashCode(); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.kt new file mode 100644 index 00000000..fdd2a542 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.kt @@ -0,0 +1,18 @@ +package gm.tieba.tabswitch.hooker.deobfuscation + +import android.content.Context +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.subjects.PublishSubject + +class DeobfuscationViewModel { + + private val _progress = PublishSubject.create() + val progress: Observable = _progress + private val deobfuscation = Deobfuscation() + + fun deobfuscate(context: Context, matchers: List) { + deobfuscation.setMatchers(matchers) + deobfuscation.dexkit(_progress, context) + deobfuscation.saveDexSignatureHashCode() + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt index 16cc8f5f..84ec569f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Matcher.kt @@ -1,30 +1,32 @@ package gm.tieba.tabswitch.hooker.deobfuscation import org.luckypray.dexkit.query.matchers.ClassMatcher +import org.luckypray.dexkit.query.matchers.MethodMatcher abstract class Matcher(private val name: String) { var classMatcher: ClassMatcher? = null - var reqVersion: String? = null + var requiredVersion: String? = null + abstract val methodMatcher: MethodMatcher override fun toString(): String = name - - fun setBaseClassMatcher(baseClassMatcher: ClassMatcher) : Matcher { - classMatcher = baseClassMatcher - return this - } - - fun setRequiredVersion(version: String) : Matcher { - reqVersion= version - return this - } } -class StringMatcher @JvmOverloads constructor(val str: String, val name: String = str) : Matcher(name) +class StringMatcher (str: String, name: String = str) : Matcher(name) { + override val methodMatcher = MethodMatcher.create().usingStrings(str) +} -class SmaliMatcher @JvmOverloads constructor(val descriptor: String, val name: String = descriptor) : Matcher(name) +class SmaliMatcher (descriptor: String, name: String = descriptor) : Matcher(name) { + override val methodMatcher = MethodMatcher.create().addInvoke(MethodMatcher.create().descriptor(descriptor)) +} -class MethodNameMatcher(val methodName: String, val name: String) : Matcher(name) +class MethodNameMatcher(methodName: String, name: String) : Matcher(name) { + override val methodMatcher = MethodMatcher.create().name(methodName) +} -class ReturnTypeMatcher(val returnType: Class, val name: String) : Matcher(name) +class ReturnTypeMatcher(returnType: Class, name: String) : Matcher(name) { + override val methodMatcher = MethodMatcher.create().returnType(returnType) +} -class ResMatcher(val id: Long, val name: String) : Matcher(name) \ No newline at end of file +class ResMatcher(id: Long, name: String) : Matcher(name) { + override val methodMatcher = MethodMatcher.create().usingNumbers(id) +} \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java deleted file mode 100644 index cb270b7e..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.java +++ /dev/null @@ -1,56 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.Parser; - -public class ContentFilter extends XposedContext implements IHooker, RegexFilter { - - @NonNull - @Override - public String key() { - return "content_filter"; - } - - @Override - public void hook() throws Throwable { - // 楼层 - XposedHelpers.findAndHookMethod("tbclient.PbPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var postList = (List) XposedHelpers.getObjectField(param.thisObject, "post_list"); - if (postList == null) return; - final var pattern = getPattern(); - - postList.removeIf(o -> ((Integer) XposedHelpers.getObjectField(o, "floor") != 1) - && (pattern.matcher(Parser.parsePbContent(o, "content")).find())); - } - }); - // 楼中楼:[\u202e|\ud83c\udd10-\ud83c\udd89] - XposedHelpers.findAndHookMethod("tbclient.SubPost$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var subPostList = (List) XposedHelpers.getObjectField(param.thisObject, "sub_post_list"); - if (subPostList == null) return; - final var pattern = getPattern(); - subPostList.removeIf(o -> pattern.matcher(Parser.parsePbContent(o, "content")).find()); - } - }); - // 楼层回复 - XposedHelpers.findAndHookMethod("tbclient.PbFloor.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var subpostList = (List) XposedHelpers.getObjectField(param.thisObject, "subpost_list"); - if (subpostList == null) return; - final var pattern = getPattern(); - subpostList.removeIf(o -> pattern.matcher(Parser.parsePbContent(o, "content")).find()); - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.kt new file mode 100644 index 00000000..7c850043 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/ContentFilter.kt @@ -0,0 +1,48 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.util.parsePbContent + +class ContentFilter : XposedContext(), IHooker, RegexFilter { + + override fun key(): String { + return "content_filter" + } + + override fun hook() { + // 楼层 + hookBeforeMethod( + "tbclient.PbPage.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val postList = XposedHelpers.getObjectField(param.thisObject, "post_list") as? MutableList<*> + val pattern = getPattern() ?: return@hookBeforeMethod + postList?.removeIf { post -> + (XposedHelpers.getObjectField(post, "floor") as Int != 1 + && pattern.matcher(parsePbContent(post, "content")).find()) + } + } + + // 楼中楼:[\u202e|\ud83c\udd10-\ud83c\udd89] + hookBeforeMethod( + "tbclient.SubPost\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val subPostList = XposedHelpers.getObjectField(param.thisObject, "sub_post_list") as? MutableList<*> + val pattern = getPattern() ?: return@hookBeforeMethod + subPostList?.removeIf { subPost -> pattern.matcher(parsePbContent(subPost, "content")).find() } + } + + // 楼层回复 + hookBeforeMethod( + "tbclient.PbFloor.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val subPostList = XposedHelpers.getObjectField(param.thisObject, "subpost_list") as? MutableList<*> + val pattern = getPattern() ?: return@hookBeforeMethod + subPostList?.removeIf { subPost -> pattern.matcher(parsePbContent(subPost, "content")).find() } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.java deleted file mode 100644 index ab8566fe..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.java +++ /dev/null @@ -1,32 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import java.util.List; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; - -public class FoldTopCardView extends XposedContext implements IHooker { - @NonNull - @Override - public String key() { - return "fold_top_card_view"; - } - - @Override - public void hook() throws Throwable { - // 总是折叠置顶帖 - for (final var method : XposedHelpers.findClass("com.baidu.tieba.forum.view.TopCardView", sClassLoader).getDeclaredMethods()) { - if (method.getReturnType() == boolean.class) { - final var currMethodParameterTypes = method.getParameterTypes(); - if (currMethodParameterTypes.length == 2 && currMethodParameterTypes[0] == List.class && currMethodParameterTypes[1] == boolean.class) { - XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(false)); - } - } - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.kt new file mode 100644 index 00000000..d99e8bed --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FoldTopCardView.kt @@ -0,0 +1,23 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker + +class FoldTopCardView : XposedContext(), IHooker { + + override fun key(): String { + return "fold_top_card_view" + } + + override fun hook() { + // 总是折叠置顶帖 + findClass("com.baidu.tieba.forum.view.TopCardView").declaredMethods.filter { method -> + method.returnType == Boolean::class.javaPrimitiveType && + method.parameterTypes.size == 2 && + method.parameterTypes[0] == MutableList::class.java && + method.parameterTypes[1] == Boolean::class.javaPrimitiveType + }.forEach { method -> + hookReplaceMethod(method) { false } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java deleted file mode 100644 index ba1357f7..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.java +++ /dev/null @@ -1,41 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import java.util.List; -import java.util.Set; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.widget.TbToast; - -public class FollowFilter extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "follow_filter"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, - "build", boolean.class, new XC_MethodHook() { - @Override - public void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Set forums = Preferences.getLikeForum(); - if (forums == null) { - runOnUiThread(() -> - TbToast.showTbToast("暂未获取到关注列表", TbToast.LENGTH_LONG)); - return; - } - final List list = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); - if (list == null) return; - list.removeIf(o -> !forums.contains((String) XposedHelpers.getObjectField(o, "fname"))); - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.kt new file mode 100644 index 00000000..edc12fa4 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FollowFilter.kt @@ -0,0 +1,29 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.Preferences.getLikeForum +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.widget.TbToast +import gm.tieba.tabswitch.widget.TbToast.Companion.showTbToast + +class FollowFilter : XposedContext(), IHooker { + + override fun key(): String { + return "follow_filter" + } + + override fun hook() { + hookBeforeMethod( + "tbclient.Personalized.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val forums = getLikeForum() ?: run { + runOnUiThread { showTbToast("暂未获取到关注列表", TbToast.LENGTH_LONG) } + return@hookBeforeMethod + } + val threadList = XposedHelpers.getObjectField(param.thisObject, "thread_list") as? MutableList<*> + threadList?.removeIf { thread -> !forums.contains(XposedHelpers.getObjectField(thread, "fname") as? String) } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java deleted file mode 100644 index 603d8188..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.java +++ /dev/null @@ -1,81 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import org.luckypray.dexkit.query.matchers.ClassMatcher; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.dao.Preferences; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class FragmentTab extends XposedContext implements IHooker, Obfuscated { - - @NonNull - @Override - public String key() { - return "fragment_tab"; - } - - @Override - public List matchers() { - return List.of( - new StringMatcher("has_show_message_tab_tips"), - new SmaliMatcher("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V") - .setBaseClassMatcher(ClassMatcher.create().usingStrings("has_show_message_tab_tips")) - ); - } - - @Override - public void hook() throws Throwable { - AcRules.findRule("has_show_message_tab_tips", (matcher, clazz, method) -> { - final var md = ReflectUtils.findFirstMethodByExactType(clazz, ArrayList.class); - XposedBridge.hookMethod(md, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var tabsToRemove = new HashSet(); - if (Preferences.getBoolean("home_recommend")) { - tabsToRemove.add("com.baidu.tieba.homepage.framework.RecommendFrsDelegateStatic"); - } - if (Preferences.getBoolean("enter_forum")) { - tabsToRemove.add("com.baidu.tieba.enterForum.home.EnterForumDelegateStatic"); - } - if (Preferences.getBoolean("write_thread")) { - tabsToRemove.add("com.baidu.tieba.write.bottomButton.WriteThreadDelegateStatic"); - AcRules.findRule("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V", (matcher, clazz, method) -> { - Method md = XposedHelpers.findMethodExactIfExists(clazz, sClassLoader, method); - if (md != null) { - XposedBridge.hookMethod(md, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - ReflectUtils.setObjectField(param.thisObject, "com.baidu.tbadk.widget.lottie.TBLottieAnimationView", null); - param.setResult(null); - } - }); - } - }); - } - if (Preferences.getBoolean("im_message")) { - tabsToRemove.add("com.baidu.tieba.imMessageCenter.im.chat.notify.ImMessageCenterDelegateStatic"); - tabsToRemove.add("com.baidu.tieba.immessagecenter.im.chat.notify.ImMessageCenterDelegateStatic"); - } - final var list = (ArrayList) param.args[0]; - list.removeIf(tab -> tabsToRemove.contains(tab.getClass().getName())); - } - }); - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.kt new file mode 100644 index 00000000..8e442a53 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FragmentTab.kt @@ -0,0 +1,69 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.dao.Preferences.getBoolean +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher +import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher +import gm.tieba.tabswitch.util.findFirstMethodByExactType +import gm.tieba.tabswitch.util.setObjectField +import org.luckypray.dexkit.query.matchers.ClassMatcher + +class FragmentTab : XposedContext(), IHooker, Obfuscated { + + override fun key(): String { + return "fragment_tab" + } + + override fun matchers(): List { + return listOf( + StringMatcher("has_show_message_tab_tips"), + SmaliMatcher("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V").apply { + classMatcher = ClassMatcher.create().usingStrings("has_show_message_tab_tips") + } + ) + } + + override fun hook() { + findRule("has_show_message_tab_tips") { _, clazz, _ -> + val method = findFirstMethodByExactType(clazz, ArrayList::class.java) + hookBeforeMethod(method) { param -> + val tabsToRemove = HashSet().apply { + if (getBoolean("home_recommend")) { + add("com.baidu.tieba.homepage.framework.RecommendFrsDelegateStatic") + } + if (getBoolean("enter_forum")) { + add("com.baidu.tieba.enterForum.home.EnterForumDelegateStatic") + } + if (getBoolean("write_thread")) { + add("com.baidu.tieba.write.bottomButton.WriteThreadDelegateStatic") + findRule("Lcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)V") { _, clazz, method -> + val md = XposedHelpers.findMethodExactIfExists(clazz, sClassLoader, method) + md?.let { + hookBeforeMethod(md) { param -> + setObjectField( + param.thisObject, + "com.baidu.tbadk.widget.lottie.TBLottieAnimationView", + null + ) + param.setResult(null) + } + } + } + } + if (getBoolean("im_message")) { + add("com.baidu.tieba.imMessageCenter.im.chat.notify.ImMessageCenterDelegateStatic") + add("com.baidu.tieba.immessagecenter.im.chat.notify.ImMessageCenterDelegateStatic") + } + } + + val tabList = param.args[0] as? ArrayList<*> + tabList?.removeIf { tab -> tabsToRemove.contains(tab.javaClass.getName()) } + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java deleted file mode 100644 index a816e363..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.java +++ /dev/null @@ -1,60 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; - -public class FrsPageFilter extends XposedContext implements IHooker, RegexFilter { - - @NonNull - @Override - public String key() { - return "frs_page_filter"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - filterPageData(param.thisObject); - } - }); - - XposedHelpers.findAndHookMethod("tbclient.ThreadList.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - filterPageData(param.thisObject); - } - }); - } - - private void filterPageData(Object pageData) { - List feedList = (List) XposedHelpers.getObjectField(pageData, "feed_list"); - if (feedList == null) return; - final var pattern = getPattern(); - feedList.removeIf( - o -> { - Object currFeed = XposedHelpers.getObjectField(o, "feed"); - if (currFeed != null) { - List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); - for (var feedKV : businessInfo) { - String currKey = XposedHelpers.getObjectField(feedKV, "key").toString(); - if (currKey.equals("title") || currKey.equals("abstract")) { - String str = XposedHelpers.getObjectField(feedKV, "value").toString(); - if (pattern.matcher(str).find()) { - return true; - } - } - } - } - return false; - } - ); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.kt new file mode 100644 index 00000000..65b99180 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/FrsPageFilter.kt @@ -0,0 +1,47 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker + +class FrsPageFilter : XposedContext(), IHooker, RegexFilter { + + override fun key(): String { + return "frs_page_filter" + } + + override fun hook() { + hookBeforeMethod( + "tbclient.FrsPage.PageData\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param-> filterPageData(param.thisObject) } + hookBeforeMethod( + "tbclient.ThreadList.PageData\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param-> filterPageData(param.thisObject) } + } + + private fun filterPageData(pageData: Any) { + val feedList = XposedHelpers.getObjectField(pageData, "feed_list") as? MutableList<*> + val pattern = getPattern() ?: return + + feedList?.removeIf { feedItem -> + val currFeed = XposedHelpers.getObjectField(feedItem, "feed") + + currFeed?.let { feed -> + val businessInfo = XposedHelpers.getObjectField(feed, "business_info") as? List<*> + + businessInfo?.any { feedKV -> + val currKey = XposedHelpers.getObjectField(feedKV, "key").toString() + when (currKey) { + "title", "abstract" -> { + val str = XposedHelpers.getObjectField(feedKV, "value").toString() + pattern.matcher(str).find() + } + else -> false + } + } ?: false + } ?: false + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java deleted file mode 100644 index 3f6d4f50..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.java +++ /dev/null @@ -1,39 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.Parser; - -public class PersonalizedFilter extends XposedContext implements IHooker, RegexFilter { - - @NonNull - @Override - public String key() { - return "personalized_filter"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); - if (threadList == null) return; - final var pattern = getPattern(); - threadList.removeIf(o -> { - if (pattern.matcher(Parser.parsePbContent(o, "first_post_content")).find()) { - return true; - } - - return pattern.matcher((String) XposedHelpers.getObjectField(o, "title")).find(); - }); - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.kt new file mode 100644 index 00000000..d85dde47 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PersonalizedFilter.kt @@ -0,0 +1,27 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.util.parsePbContent + +class PersonalizedFilter : XposedContext(), IHooker, RegexFilter { + + override fun key(): String { + return "personalized_filter" + } + + override fun hook() { + hookBeforeMethod( + "tbclient.Personalized.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val threadList = XposedHelpers.getObjectField(param.thisObject, "thread_list") as? MutableList<*> + val pattern = getPattern() ?: return@hookBeforeMethod + threadList?.removeIf { thread -> + pattern.matcher(parsePbContent(thread, "first_post_content")).find() || + pattern.matcher(XposedHelpers.getObjectField(thread, "title") as? String ?: "").find() + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java deleted file mode 100644 index d4472355..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java +++ /dev/null @@ -1,449 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import android.app.Activity; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Bundle; -import android.os.Parcelable; -import android.webkit.WebView; -import android.webkit.WebViewClient; - -import androidx.annotation.NonNull; - -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.Serializable; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.util.FileUtils; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class Purge extends XposedContext implements IHooker, Obfuscated { - - @NonNull - @Override - public String key() { - return "purge"; - } - - @Override - public List matchers() { - return List.of( - new SmaliMatcher("Lcom/baidu/tieba/recapp/lego/model/AdCard;->(Lorg/json/JSONObject;)V"), - new SmaliMatcher("Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V"), - new StringMatcher("pic_amount"), - new StringMatcher("准备展示精灵动画提示控件"), - new StringMatcher("bottom_bubble_config"), -// new StringMatcher("top_level_navi"), - new StringMatcher("index_tab_info"), - new SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), - new SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V"), - new StringMatcher("h5_pop_ups_config") - ); - } - - @Override - public void hook() throws Throwable { - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - switch (matcher) { - case "Lcom/baidu/tieba/recapp/lego/model/AdCard;->(Lorg/json/JSONObject;)V": - case "Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V": // 卡片广告 - XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(null)); - break; - case "pic_amount": // 图片广告:必须"recom_ala_info", "app", 可选"goods_info" - for (final var md : XposedHelpers.findClass(clazz, sClassLoader).getDeclaredMethods()) { - if (Arrays.toString(md.getParameterTypes()).contains("JSONObject") && !md.getName().equals(method)) { - XposedBridge.hookMethod(md, XC_MethodReplacement.returnConstant(null)); - } - } - break; - case "准备展示精灵动画提示控件": // 吧内%s新贴热议中 - XposedBridge.hookAllMethods(XposedHelpers.findClass(clazz, sClassLoader), method, XC_MethodReplacement.returnConstant(false)); - break; - case "bottom_bubble_config": // 底部导航栏活动图标 - if (method.equals("invoke")) { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); - syncData.put("bottom_bubble_config", null); - } - }); - } - break; -// case "top_level_navi": // 首页活动背景 -// if (method.equals("invoke")) { -// XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { -// @Override -// protected void beforeHookedMethod(MethodHookParam param) throws Throwable { -// JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); -// syncData.put("top_level_navi", null); -// } -// }); -// } -// break; - case "index_tab_info": // 首页活动Tab (202), 直播Tab (6) - if (method.equals("invoke")) { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); - JSONArray indexTabInfo = syncData.getJSONArray("index_tab_info"); - JSONArray newIndexTabInfo = new JSONArray(); - if (DeobfuscationHelper.isTbSatisfyVersionRequirement("12.59")) { - for (int i = 0; i < indexTabInfo.length(); i++) { - JSONObject currTab = indexTabInfo.getJSONObject(i); - if (currTab.getString("is_main_tab").equals("1") && !currTab.getString("tab_type").equals("6")) { - newIndexTabInfo.put(currTab); - } - } - } else { - for (int i = 0; i < indexTabInfo.length(); i++) { - JSONObject currTab = indexTabInfo.getJSONObject(i); - if (!currTab.getString("tab_type").equals("202") && !currTab.getString("tab_type").equals("6")) { - newIndexTabInfo.put(currTab); - } - } - } - syncData.put("index_tab_info", newIndexTabInfo); - } - }); - } - break; - case "Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V": // 首页左上直播 - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, "android.view.ViewGroup", - XC_MethodReplacement.returnConstant(null)); - break; - case "Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V": // 点我快速配图经验+3 - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, "android.content.Context", - XC_MethodReplacement.returnConstant(null)); - break; - case "h5_pop_ups_config": // 各种云控弹窗 - if (method.equals("invoke")) { - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject syncData = ReflectUtils.getObjectField(param.thisObject, JSONObject.class); - syncData.put("h5_pop_ups", null); - syncData.put("h5_pop_ups_config", null); - } - }); - } - break; - } - }); - // 启动广告 - XposedHelpers.findAndHookMethod("com.baidu.adp.framework.MessageManager", sClassLoader, "findTask", int.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final int task = (int) param.args[0]; - if (task == 2016555 || task == 2921390) { - param.setResult(null); - } - } - }); - // 热启动闪屏 - XposedHelpers.findAndHookMethod("com.baidu.tbadk.TbSingleton", sClassLoader, "isPushLaunch4SplashAd", XC_MethodReplacement.returnConstant(true)); - XposedHelpers.findAndHookMethod("com.baidu.tbadk.abtest.UbsABTestHelper", sClassLoader, "isPushLaunchWithoutSplashAdA", XC_MethodReplacement.returnConstant(true)); - // Fix bugs related to isPushLaunch4SplashAd - XposedHelpers.findAndHookMethod( - "com.baidu.tieba.tblauncher.MainTabActivity", - sClassLoader, - "onCreate", - Bundle.class, - new XC_MethodHook(-1) { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - XposedHelpers.setStaticBooleanField(XposedHelpers.findClass("com.baidu.tbadk.core.atomData.MainTabActivityConfig", sClassLoader), "IS_MAIN_TAB_SPLASH_SHOW", false); - } - }); - // 帖子底部推荐 - Class clazz; - try { - clazz = XposedHelpers.findClass("com.baidu.tieba.pb.pb.main.AbsPbActivity", sClassLoader); - } catch (final XposedHelpers.ClassNotFoundError e) { - clazz = XposedHelpers.findClass("com.baidu.tieba.pb.pb.main.PbActivity", sClassLoader); - } - XposedHelpers.findAndHookMethod(clazz, "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Activity activity = (Activity) param.thisObject; - final Bundle bundle = activity.getIntent().getExtras(); - final Intent intent = new Intent(); - for (final String key : bundle.keySet()) { - if /* 为您推荐 */ (key.equals("key_start_from")) { - final int startFrom = (int) bundle.get(key); - if (startFrom == 2 || startFrom == 3) intent.putExtra(key, 0); - } else if /* 浏览器打开热门推荐 */ (key.equals("key_uri")) { - final Uri uri = (Uri) bundle.get(key); - intent.putExtra("thread_id", uri.getQueryParameter("tid")); - } else { - final Object value = bundle.get(key); - if (value instanceof Serializable) { - intent.putExtra(key, (Serializable) value); - } else { - intent.putExtra(key, (Parcelable) value); - } - } - } - activity.setIntent(intent); - } - }); - // 帖子直播推荐:在 com/baidu/tieba/pb/pb/main/ 中搜索 tbclient/AlaLiveInfo - XposedHelpers.findAndHookMethod("tbclient.AlaLiveInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - XposedHelpers.setObjectField(param.thisObject, "user_info", null); - } - }); - // 首页直播推荐卡片:R.layout.card_home_page_ala_live_item_new - for (final Method method : XposedHelpers.findClass("com.baidu.tieba.homepage.personalize.adapter.HomePageAlaLiveThreadAdapter", sClassLoader).getDeclaredMethods()) { - if (method.getReturnType().toString().endsWith("HomePageAlaLiveThreadViewHolder")) { - XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(null)); - } - } - // 首页推荐 - XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); - if (threadList == null) return; - threadList.removeIf(o -> { - if (XposedHelpers.getObjectField(o, "forum_info") == null) { - return true; - } - - if (XposedHelpers.getObjectField(o, "ala_info") != null) { - return true; - } - - final Object worksInfo = XposedHelpers.getObjectField(o, "works_info"); - return worksInfo != null && (Integer) XposedHelpers.getObjectField(worksInfo, "is_works") == 1; - }); - - // 推荐置顶广告 - XposedHelpers.setObjectField(param.thisObject, "live_answer", null); - - // 圈层热贴 - XposedHelpers.setObjectField(param.thisObject, "hot_card", null); - - // 添加兴趣,为你精准推荐相关内容~ - XposedHelpers.setObjectField(param.thisObject, "interest_class", null); - - // 你可能感兴趣的吧 - XposedHelpers.setObjectField(param.thisObject, "hot_recomforum_top", null); - } - }); - // 帖子 AI 聊天 - XposedHelpers.findAndHookMethod("tbclient.PbPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var postList = (List) XposedHelpers.getObjectField(param.thisObject, "post_list"); - if (postList == null) return; - - postList.removeIf(o -> XposedHelpers.getObjectField(o, "aichat_bot_comment_card") != null); - } - }); - // 吧页面 - XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - // 吧公告 - XposedHelpers.setObjectField(param.thisObject, "star_enter", new ArrayList<>()); - - // thread_list is deprecated -// final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); -// if (threadList != null) { -// // 吧页面头条贴(41), 直播贴(69) -// threadList.removeIf(o -> { -// var threadType = (Integer) XposedHelpers.getObjectField(o, "thread_type"); -// return threadType == 41 || threadType == 69; -// }); -// } - - // 万人直播互动 吧友开黑组队中 - XposedHelpers.setObjectField(param.thisObject, "live_fuse_forum", new ArrayList<>()); - - // AI 聊天 - XposedHelpers.setObjectField(param.thisObject, "ai_chatroom_guide", null); - - // 聊天室 - XposedHelpers.setObjectField(param.thisObject, "frs_bottom", null); - - // 吧友直播 - final List frsMainTabList = (List) XposedHelpers.getObjectField(param.thisObject, "frs_main_tab_list"); - if (frsMainTabList != null) { - frsMainTabList.removeIf(o -> (Integer) XposedHelpers.getObjectField(o, "tab_type") == 92); - } - - // 弹出广告 - XposedHelpers.setObjectField(param.thisObject, "business_promot", null); - - // 顶部背景 - XposedHelpers.setObjectField(param.thisObject, "activityhead", null); - } - }); - // 吧友直播 - XposedHelpers.findAndHookMethod("tbclient.FrsPage.NavTabInfo$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final List list = (List) XposedHelpers.getObjectField(param.thisObject, "tab"); - if (list == null) return; - list.removeIf(o -> (Integer) XposedHelpers.getObjectField(o, "tab_type") == 92); - } - }); - // 你可能感兴趣的人 - XposedHelpers.findAndHookMethod("com.baidu.tieba.feed.list.TemplateAdapter", sClassLoader, "setList", List.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var list = (List) param.args[0]; - list.removeIf(o -> { - final var md = ReflectUtils.findFirstMethodByExactReturnType(o.getClass(), String.class); - final var type = XposedHelpers.callMethod(o, md.getName()); - return "sideway_card".equals(type); - }); - } - }); - // 一键签到广告 - XposedHelpers.findAndHookMethod("com.baidu.tieba.signall.SignAllForumAdvertActivity", sClassLoader, "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Activity activity = (Activity) param.thisObject; - activity.finish(); - } - }); - // 首页推荐右侧悬浮 - for (final var method : XposedHelpers.findClass("com.baidu.tbadk.widget.RightFloatLayerView", sClassLoader).getDeclaredMethods()) { - if (method.getParameterTypes().length == 0 && method.getReturnType() == boolean.class) { - XposedBridge.hookMethod(method, XC_MethodReplacement.returnConstant(false)); - } - } - // 更多板块 (吧友直播,友情吧), 一键签到页面广告 - final String jsPurgeScript = FileUtils.getAssetFileContent("Purge.js"); - if (jsPurgeScript != null) { - XposedHelpers.findAndHookMethod(WebViewClient.class, "onPageStarted", WebView.class, String.class, Bitmap.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - WebView mWebView = (WebView) param.args[0]; - mWebView.evaluateJavascript(jsPurgeScript, null); - } - }); - } - // 吧页面 - XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - purgePageData(param.thisObject); - } - }); - XposedHelpers.findAndHookMethod("tbclient.ThreadList.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - purgePageData(param.thisObject); - } - }); - // 聊天-AI角色 - XposedHelpers.findAndHookMethod("com.baidu.tieba.immessagecenter.chatgroup.data.ChatGroupInfo", sClassLoader, "parse", JSONObject.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONObject chatGroupInfo = (JSONObject) param.args[0]; - chatGroupInfo.put("aichat_entrance_info", null); - } - }); - - // 12.55+ - try { - // 帖子内广告 - XposedHelpers.findAndHookMethod("com.fun.ad.sdk.internal.api.BaseNativeAd2", sClassLoader, "getNativeInfo", XC_MethodReplacement.returnConstant(null)); - } catch (final XposedHelpers.ClassNotFoundError ignored) {} - - XposedHelpers.findAndHookMethod("tbclient.Post$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - // 相关推荐 - XposedHelpers.setObjectField(param.thisObject, "outer_item", null); - - // 点击使用同系列表情 - XposedHelpers.setObjectField(param.thisObject, "sprite_meme_info", null); - - // 小说推荐 - XposedHelpers.setObjectField(param.thisObject, "novel_recom_card", null); - } - }); - - // 首页样式 AB test - XposedHelpers.findAndHookMethod( - "com.baidu.tbadk.abtest.UbsABTestDataManager", - sClassLoader, - "parseJSONArray", - JSONArray.class, - new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - JSONArray currentABTestJson = (JSONArray) param.args[0]; - JSONArray newABTestJson = new JSONArray(); - for (int i = 0; i < currentABTestJson.length(); i++) { - JSONObject currTest = currentABTestJson.getJSONObject(i); - if (!currTest.getString("sid").startsWith("12_57_5_home_search")) { - newABTestJson.put(currTest); - } - } - param.args[0] = newABTestJson; - } - } - ); - } - - // 吧页面头条贴(41), 直播贴(69 / is_live_card) - private void purgePageData(Object pageData) { - List feedList = (List) XposedHelpers.getObjectField(pageData, "feed_list"); - if (feedList != null) { - feedList.removeIf( - o -> { - Object currFeed = XposedHelpers.getObjectField(o, "feed"); - if (currFeed != null) { - List businessInfo = (List) XposedHelpers.getObjectField(currFeed, "business_info"); - for (var feedKV : businessInfo) { - String currentKey = XposedHelpers.getObjectField(feedKV, "key").toString(); - switch (currentKey) { - case "thread_type" -> { - var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); - if (currValue.equals("41") || currValue.equals("69")) { - return true; - } - } - case "is_live_card" -> { - var currValue = XposedHelpers.getObjectField(feedKV, "value").toString(); - if (currValue.equals("1")) { - return true; - } - } - case "game_ext" -> { - return true; - } - } - } - } - return false; - } - ); - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt new file mode 100644 index 00000000..bb492146 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt @@ -0,0 +1,420 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import android.app.Activity +import android.content.Intent +import android.graphics.Bitmap +import android.net.Uri +import android.os.Bundle +import android.os.Parcelable +import android.webkit.WebView +import android.webkit.WebViewClient +import de.robv.android.xposed.XC_MethodReplacement +import de.robv.android.xposed.XposedBridge +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.XposedHelpers.ClassNotFoundError +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher +import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher +import gm.tieba.tabswitch.util.findFirstMethodByExactReturnType +import gm.tieba.tabswitch.util.getAssetFileContent +import gm.tieba.tabswitch.util.getObjectField +import org.json.JSONArray +import org.json.JSONObject +import java.io.Serializable + +class Purge : XposedContext(), IHooker, Obfuscated { + + override fun key(): String { + return "purge" + } + + override fun matchers(): List { + return listOf( + SmaliMatcher("Lcom/baidu/tieba/recapp/lego/model/AdCard;->(Lorg/json/JSONObject;)V"), + SmaliMatcher("Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V"), + StringMatcher("pic_amount"), + StringMatcher("准备展示精灵动画提示控件"), + StringMatcher("bottom_bubble_config"), +// StringMatcher("top_level_navi"), + StringMatcher("index_tab_info"), + SmaliMatcher("Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V"), + SmaliMatcher("Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V"), + StringMatcher("h5_pop_ups_config") + ) + } + + override fun hook() { + findRule(matchers()) { matcher, clazz, method -> + when (matcher) { + // 卡片广告 + "Lcom/baidu/tieba/recapp/lego/model/AdCard;->(Lorg/json/JSONObject;)V", "Lcom/baidu/tieba/lego/card/model/BaseCardInfo;->(Lorg/json/JSONObject;)V" -> + XposedBridge.hookAllMethods( + findClass(clazz), + method, + XC_MethodReplacement.returnConstant(null) + ) + + // 图片广告:必须"recom_ala_info", "app", 可选"goods_info" + "pic_amount" -> + findClass(clazz).declaredMethods.filter { md -> + md.parameterTypes.contentToString().contains("JSONObject") && md.name != method + }.forEach { md -> hookReplaceMethod(md) { null } } + + // 吧内%s新贴热议中 + "准备展示精灵动画提示控件" -> + XposedBridge.hookAllMethods( + findClass(clazz), + method, + XC_MethodReplacement.returnConstant(false) + ) + + // 底部导航栏活动图标 + "bottom_bubble_config" -> + if (method == "invoke") { + hookBeforeMethod(clazz, method) { param -> + getObjectField(param.thisObject, JSONObject::class.java)?.apply { + put("bottom_bubble_config", null) + } + } + } + +// // 首页活动背景 +// "top_level_navi" -> +// if (method == "invoke") { +// hookBeforeMethod(clazz, method) { param -> +// getObjectField(param.thisObject, JSONObject::class.java)?.apply { +// put("top_level_navi", null) +// } +// } +// } + + // 首页活动Tab (202), 直播Tab (6) + "index_tab_info" -> + if (method == "invoke") { + hookBeforeMethod(clazz, method) { param -> + getObjectField(param.thisObject, JSONObject::class.java)?.apply { + val indexTabInfo = getJSONArray("index_tab_info") + val newIndexTabInfo = JSONArray() + if (DeobfuscationHelper.isTbSatisfyVersionRequirement("12.59")) { + for (i in 0 until indexTabInfo.length()) { + val currTab = indexTabInfo.getJSONObject(i) + if (currTab.getString("is_main_tab") == "1" && currTab.getString("tab_type") != "6") { + newIndexTabInfo.put(currTab) + } + } + } else { + for (i in 0 until indexTabInfo.length()) { + val currTab = indexTabInfo.getJSONObject(i) + if (currTab.getString("tab_type") != "202" && currTab.getString("tab_type") != "6") { + newIndexTabInfo.put(currTab) + } + } + } + put("index_tab_info", newIndexTabInfo) + } + } + } + + // 首页左上直播 + "Lcom/baidu/tbadk/coreExtra/floatCardView/AlaLiveTipView;->(Landroid/content/Context;)V" -> + hookReplaceMethod(clazz, method, "android.view.ViewGroup") { null } + + // 点我快速配图经验+3 + "Lcom/baidu/tbadk/editortools/meme/pan/SpriteMemePan;->(Landroid/content/Context;)V" -> + hookReplaceMethod(clazz, method, "android.content.Context") { null } + + // 各种云控弹窗 + "h5_pop_ups_config" -> if (method == "invoke") { + hookBeforeMethod(clazz, method) { param -> + getObjectField(param.thisObject, JSONObject::class.java)?.apply { + put("h5_pop_ups", null) + put("h5_pop_ups_config", null) + } + } + } + } + } + + // 启动广告 + hookBeforeMethod( + "com.baidu.adp.framework.MessageManager", + "findTask", Int::class.javaPrimitiveType + ) { param -> + val task = param.args[0] as? Int + if (task in listOf(2016555, 2921390)) { + param.setResult(null) + } + } + + // 热启动闪屏 + hookReplaceMethod("com.baidu.tbadk.TbSingleton", "isPushLaunch4SplashAd") { true } + hookReplaceMethod("com.baidu.tbadk.abtest.UbsABTestHelper", "isPushLaunchWithoutSplashAdA") { true } + + // Fix bugs related to isPushLaunch4SplashAd + hookAfterMethod( + "com.baidu.tieba.tblauncher.MainTabActivity", + "onCreate", Bundle::class.java + ) { _ -> + XposedHelpers.setStaticBooleanField( + findClass("com.baidu.tbadk.core.atomData.MainTabActivityConfig"), + "IS_MAIN_TAB_SPLASH_SHOW", + false + ) + } + + // 帖子底部推荐 + @Suppress("DEPRECATION") + hookBeforeMethod("com.baidu.tieba.pb.pb.main.AbsPbActivity", "onCreate", Bundle::class.java) { param -> + val activity = param.thisObject as Activity + val bundle = activity.intent.extras + val intent = Intent() + bundle?.let { + for (key in bundle.keySet()) { + when (key) { + "key_start_from" -> { // 为您推荐 + val startFrom = bundle[key] as? Int + if (startFrom in listOf(2, 3)) intent.putExtra(key, 0) + } + "key_uri" -> { // 浏览器打开热门推荐 + val uri = bundle[key] as? Uri + uri?.getQueryParameter("tid")?.let { intent.putExtra("thread_id", it) } + } + else -> { + when (val value = bundle[key]) { + is Serializable -> intent.putExtra(key, value) + is Parcelable -> intent.putExtra(key, value) + } + } + } + activity.intent = intent + } + } + } + + // 帖子直播推荐:在 com/baidu/tieba/pb/pb/main/ 中搜索 tbclient/AlaLiveInfo + hookBeforeMethod( + "tbclient.AlaLiveInfo\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + XposedHelpers.setObjectField(param.thisObject, "user_info", null) + } + + // 首页直播推荐卡片:R.layout.card_home_page_ala_live_item_new + findClass("com.baidu.tieba.homepage.personalize.adapter.HomePageAlaLiveThreadAdapter").declaredMethods.filter { method -> + method.returnType.toString().endsWith("HomePageAlaLiveThreadViewHolder") + }.forEach { method -> hookReplaceMethod(method) { null } } + + // 首页推荐 + hookBeforeMethod( + "tbclient.Personalized.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val threadList = XposedHelpers.getObjectField(param.thisObject, "thread_list") as? MutableList<*> + threadList?.removeIf { thread -> + if (XposedHelpers.getObjectField(thread, "forum_info") == null) { + return@removeIf true + } + if (XposedHelpers.getObjectField(thread, "ala_info") != null) { + return@removeIf true + } + val worksInfo = XposedHelpers.getObjectField(thread, "works_info") + worksInfo != null && XposedHelpers.getObjectField(worksInfo, "is_works") as? Int == 1 + } + + // 推荐置顶广告 + XposedHelpers.setObjectField(param.thisObject, "live_answer", null) + + // 圈层热贴 + XposedHelpers.setObjectField(param.thisObject, "hot_card", null) + + // 添加兴趣,为你精准推荐相关内容~ + XposedHelpers.setObjectField(param.thisObject, "interest_class", null) + + // 你可能感兴趣的吧 + XposedHelpers.setObjectField(param.thisObject, "hot_recomforum_top", null) + } + + // 帖子 AI 聊天 + hookBeforeMethod( + "tbclient.PbPage.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val postList = XposedHelpers.getObjectField(param.thisObject, "post_list") as? MutableList<*> + postList?.removeIf { post -> XposedHelpers.getObjectField(post, "aichat_bot_comment_card") != null } + } + + // 吧页面 + hookBeforeMethod( + "tbclient.FrsPage.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + // 吧公告 + XposedHelpers.setObjectField(param.thisObject, "star_enter", ArrayList()) + + // 万人直播互动 吧友开黑组队中 + XposedHelpers.setObjectField(param.thisObject, "live_fuse_forum", ArrayList()) + + // AI 聊天 + XposedHelpers.setObjectField(param.thisObject, "ai_chatroom_guide", null) + + // 聊天室 + XposedHelpers.setObjectField(param.thisObject, "frs_bottom", null) + + // 吧友直播 + val frsMainTabList = XposedHelpers.getObjectField(param.thisObject, "frs_main_tab_list") as? MutableList<*> + frsMainTabList?.removeIf { tab -> XposedHelpers.getObjectField(tab, "tab_type") as Int == 92 } + + // 弹出广告 + XposedHelpers.setObjectField(param.thisObject, "business_promot", null) + + // 顶部背景 + XposedHelpers.setObjectField(param.thisObject, "activityhead", null) + } + + // 吧友直播 + hookBeforeMethod("tbclient.FrsPage.NavTabInfo\$Builder", + "build", Boolean::class.javaPrimitiveType) { param -> + val tabList = XposedHelpers.getObjectField(param.thisObject, "tab") as? MutableList<*> + tabList?.removeIf { tab -> XposedHelpers.getObjectField(tab, "tab_type") as Int == 92 } + } + + // 你可能感兴趣的人 + hookBeforeMethod( + "com.baidu.tieba.feed.list.TemplateAdapter", + "setList", MutableList::class.java + ) { param -> + val feedList = param.args[0] as? MutableList<*> + feedList?.removeIf { feed -> + feed?.let { + val md = findFirstMethodByExactReturnType(feed.javaClass, String::class.java) + val type = XposedHelpers.callMethod(feed, md.name) + "sideway_card" == type + } ?: false + } + } + + // 一键签到广告 + hookBeforeMethod("com.baidu.tieba.signall.SignAllForumAdvertActivity", + "onCreate", Bundle::class.java) { param -> + val activity = param.thisObject as? Activity + activity?.finish() + } + + // 首页推荐右侧悬浮 + findClass("com.baidu.tbadk.widget.RightFloatLayerView").declaredMethods.filter { method -> + method.parameterTypes.isEmpty() && method.returnType == Boolean::class.javaPrimitiveType + }.forEach { method -> hookReplaceMethod(method) { false } } + + // 更多板块 (吧友直播,友情吧), 一键签到页面广告 + val jsPurgeScript = getAssetFileContent("Purge.js") + jsPurgeScript?.let { + hookBeforeMethod( + WebViewClient::class.java, + "onPageStarted", WebView::class.java, String::class.java, Bitmap::class.java + ) { param -> + val mWebView = param.args[0] as? WebView + mWebView?.evaluateJavascript(jsPurgeScript, null) + } + } + + // 吧页面 + hookBeforeMethod( + "tbclient.FrsPage.PageData\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + purgePageData(param.thisObject) + } + hookBeforeMethod( + "tbclient.ThreadList.PageData\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + purgePageData(param.thisObject) + } + + // 聊天-AI角色 + hookBeforeMethod( + "com.baidu.tieba.immessagecenter.chatgroup.data.ChatGroupInfo", + "parse", JSONObject::class.java + ) { param -> + val chatGroupInfo = param.args[0] as? JSONObject + chatGroupInfo?.put("aichat_entrance_info", null) + } + + // 12.55+ + try { + // 帖子内广告 + hookReplaceMethod( + "com.fun.ad.sdk.internal.api.BaseNativeAd2", + "getNativeInfo" + ) { null } + } catch (ignored: ClassNotFoundError) { + } + + // 帖子内容 + hookBeforeMethod( + "tbclient.Post\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + // 相关推荐 + XposedHelpers.setObjectField(param.thisObject, "outer_item", null) + + // 点击使用同系列表情 + XposedHelpers.setObjectField(param.thisObject, "sprite_meme_info", null) + + // 小说推荐 + XposedHelpers.setObjectField(param.thisObject, "novel_recom_card", null) + + } + + // 首页样式 AB test + hookBeforeMethod( + "com.baidu.tbadk.abtest.UbsABTestDataManager", + "parseJSONArray", + JSONArray::class.java + ) { param -> + val currentABTestJson = param.args[0] as JSONArray + val newABTestJson = JSONArray() + for (i in 0 until currentABTestJson.length()) { + val currTest = currentABTestJson.getJSONObject(i) + if (!currTest.getString("sid").startsWith("12_57_5_home_search")) { + newABTestJson.put(currTest) + } + } + param.args[0] = newABTestJson + } + } + + // 吧页面头条贴(41), 直播贴(69 / is_live_card) + private fun purgePageData(pageData: Any) { + val feedList = XposedHelpers.getObjectField(pageData, "feed_list") as? MutableList<*> + + feedList?.removeIf { feedItem -> + val currFeed = XposedHelpers.getObjectField(feedItem, "feed") + + currFeed?.let { feed -> + val businessInfo = XposedHelpers.getObjectField(feed, "business_info") as? List<*> + + businessInfo?.any { feedKV -> + val currKey = XposedHelpers.getObjectField(feedKV, "key").toString() + when (currKey) { + "thread_type" -> { + val currValue = XposedHelpers.getObjectField(feedKV, "value").toString() + currValue in listOf("41", "69") + } + "is_live_card" -> { + val currValue = XposedHelpers.getObjectField(feedKV, "value").toString() + currValue == "1" + } + "game_ext" -> true + else -> false + } + } ?: false + } ?: false + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java deleted file mode 100644 index a364119d..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.java +++ /dev/null @@ -1,115 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import android.view.View; -import android.widget.LinearLayout; - -import androidx.annotation.NonNull; - -import org.luckypray.dexkit.query.matchers.ClassMatcher; - -import java.lang.reflect.Modifier; -import java.util.List; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.ResMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class PurgeEnter extends XposedContext implements IHooker, Obfuscated { - @NonNull - @Override - public String key() { - return "purge_enter"; - } - - private int mInitLayoutHeight = -1; - private final int mLayoutOffset = (int) ReflectUtils.getDimen("tbds50"); - private String mRecForumClassName, mRecForumSetNextPageMethodName, mPbListViewInnerViewConstructorName; - - @Override - public List matchers() { - return List.of( - new ResMatcher(ReflectUtils.getR("dimen", "tbds400"), "dimen.tbds400") - .setBaseClassMatcher(ClassMatcher.create().usingStrings("enter_forum_login_tip")), - new MethodNameMatcher("onSuccess", "purge_enter_on_success") - .setBaseClassMatcher(ClassMatcher.create().usingStrings("enter_forum_login_tip")) - ); - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod( - "com.baidu.tieba.enterForum.recforum.message.RecommendForumRespondedMessage", - sClassLoader, - "getRecommendForumData", - XC_MethodReplacement.returnConstant(null)); - - for (final var currMethod : XposedHelpers.findClass("com.baidu.tbadk.core.view.PbListView", sClassLoader).getSuperclass().getDeclaredMethods()) { - if (currMethod.getReturnType().toString().endsWith("View") && !Modifier.isAbstract(currMethod.getModifiers())) { - mPbListViewInnerViewConstructorName = currMethod.getName(); - break; - } - } - - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - switch (matcher) { - case "dimen.tbds400": - mRecForumClassName = clazz; - mRecForumSetNextPageMethodName = method; - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - Object pbListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView"); - View pbListViewInnerView = (View) XposedHelpers.callMethod(pbListView, mPbListViewInnerViewConstructorName); - - Object bdListView = ReflectUtils.getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView"); - if (pbListViewInnerView.getParent() == null) { - XposedHelpers.callMethod(bdListView, "setNextPage", pbListView); - XposedHelpers.callMethod(bdListView, "setOverScrollMode", View.OVER_SCROLL_ALWAYS); - } - - LinearLayout linearLayout = (LinearLayout) ReflectUtils.getObjectField(pbListView, "android.widget.LinearLayout"); - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(linearLayout.getLayoutParams()); - - if (mInitLayoutHeight == -1){ - mInitLayoutHeight = layoutParams.height + mLayoutOffset; - } - layoutParams.height = mInitLayoutHeight; - linearLayout.setLayoutParams(layoutParams); - - XposedHelpers.callMethod(bdListView, "setExOnSrollToBottomListener", (Object) null); - return null; - } - }); - break; - case "purge_enter_on_success": - XposedHelpers.findAndHookMethod(clazz, - sClassLoader, - method, - boolean.class, - new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - Object enterForumRec = ReflectUtils.getObjectField(param.thisObject, mRecForumClassName); - XposedHelpers.callMethod(enterForumRec, mRecForumSetNextPageMethodName); - return null; - } - }); - break; - } - }); - - try { // 12.56.4.0+ 禁用WebView进吧页 - XposedBridge.hookMethod( - ReflectUtils.findFirstMethodByExactReturnType("com.baidu.tieba.enterForum.helper.HybridEnterForumHelper", boolean.class), - XC_MethodReplacement.returnConstant(false)); - } catch (final XposedHelpers.ClassNotFoundError ignored) {} - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt new file mode 100644 index 00000000..11721092 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt @@ -0,0 +1,101 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import android.view.View +import android.widget.LinearLayout +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.XposedHelpers.ClassNotFoundError +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.MethodNameMatcher +import gm.tieba.tabswitch.hooker.deobfuscation.ResMatcher +import gm.tieba.tabswitch.util.findFirstMethodByExactReturnType +import gm.tieba.tabswitch.util.getDimen +import gm.tieba.tabswitch.util.getObjectField +import gm.tieba.tabswitch.util.getR +import org.luckypray.dexkit.query.matchers.ClassMatcher +import java.lang.reflect.Modifier + +class PurgeEnter : XposedContext(), IHooker, Obfuscated { + + private val mLayoutOffset = getDimen("tbds50").toInt() + private var mInitLayoutHeight = -1 + private var mPbListViewInnerViewConstructorName: String? = null + private lateinit var mRecForumClassName: String + private lateinit var mRecForumSetNextPageMethodName: String + + override fun key(): String { + return "purge_enter" + } + + override fun matchers(): List { + return listOf( + ResMatcher(getR("dimen", "tbds400").toLong(), "dimen.tbds400").apply { + classMatcher = ClassMatcher.create().usingStrings("enter_forum_login_tip") + }, + MethodNameMatcher("onSuccess", "purge_enter_on_success").apply { + classMatcher = ClassMatcher.create().usingStrings("enter_forum_login_tip") + } + ) + } + + override fun hook() { + hookReplaceMethod( + "com.baidu.tieba.enterForum.recforum.message.RecommendForumRespondedMessage", + "getRecommendForumData" + ) { null } + + mPbListViewInnerViewConstructorName = findClass("com.baidu.tbadk.core.view.PbListView").superclass.declaredMethods.find { method -> + method.returnType.toString().endsWith("View") && !Modifier.isAbstract(method.modifiers) + }?.name + + findRule(matchers()) { matcher, clazz, method -> + when (matcher) { + "dimen.tbds400" -> { + mRecForumClassName = clazz + mRecForumSetNextPageMethodName = method + hookReplaceMethod(clazz, method) { param -> + val pbListView = getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView") + val pbListViewInnerView = + XposedHelpers.callMethod(pbListView, mPbListViewInnerViewConstructorName) as View + val bdListView = + getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView") + if (pbListViewInnerView.parent == null) { + XposedHelpers.callMethod(bdListView, "setNextPage", pbListView) + XposedHelpers.callMethod(bdListView, "setOverScrollMode", View.OVER_SCROLL_ALWAYS) + } + val linearLayout = getObjectField(pbListView, "android.widget.LinearLayout") as LinearLayout + val layoutParams = LinearLayout.LayoutParams(linearLayout.layoutParams) + if (mInitLayoutHeight == -1) { + mInitLayoutHeight = layoutParams.height + mLayoutOffset + } + layoutParams.height = mInitLayoutHeight + linearLayout.setLayoutParams(layoutParams) + XposedHelpers.callMethod(bdListView, "setExOnSrollToBottomListener", null as Any?) + } + } + + "purge_enter_on_success" -> + hookReplaceMethod( + clazz, + method, Boolean::class.javaPrimitiveType + ) { param -> + val enterForumRec = getObjectField(param.thisObject, mRecForumClassName) + XposedHelpers.callMethod(enterForumRec, mRecForumSetNextPageMethodName) + } + } + } + + try { // 12.56.4.0+ 禁用WebView进吧页 + hookReplaceMethod( + findFirstMethodByExactReturnType( + "com.baidu.tieba.enterForum.helper.HybridEnterForumHelper", + Boolean::class.javaPrimitiveType!! + ) + ) { false } + } catch (ignored: ClassNotFoundError) { + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java deleted file mode 100644 index 7ef9875a..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.java +++ /dev/null @@ -1,110 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; - -import org.luckypray.dexkit.query.matchers.ClassMatcher; - -import java.util.ArrayList; -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class PurgeMy extends XposedContext implements IHooker, Obfuscated { - - @NonNull - @Override - public String key() { - return "purge_my"; - } - - private final int mGridTopPadding = (int) ReflectUtils.getDimen("tbds25"); - - @Override - public List matchers() { - return List.of( - new SmaliMatcher("Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V"), - new SmaliMatcher( - "Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;") - .setBaseClassMatcher(ClassMatcher.create().usingStrings("隐私设置")) - ); - } - - @Override - public void hook() throws Throwable { - - XposedHelpers.findAndHookMethod("tbclient.Profile.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - // 我的贴吧会员 - XposedHelpers.setObjectField(param.thisObject, "vip_banner", null); - - // 横幅广告 - XposedHelpers.setObjectField(param.thisObject, "banner", new ArrayList<>()); - - // 度小满 有钱花 - XposedHelpers.setObjectField(param.thisObject, "finance_tab", null); - - // 小程序 - XposedHelpers.setObjectField(param.thisObject, "recom_naws_list", new ArrayList<>()); - } - }); - - XposedHelpers.findAndHookMethod("tbclient.User$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - // 贴吧成长等级 - XposedHelpers.setObjectField(param.thisObject, "user_growth", null); - } - }); - - // Add padding to the top of 常用功能 - AcRules.findRule(matchers(), (matcher, clazz, method) -> { - switch (matcher) { - case "Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V": - XposedBridge.hookAllConstructors( - XposedHelpers.findClass(clazz, sClassLoader), - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - View mView = ReflectUtils.getObjectField(param.thisObject, View.class); - mView.setPadding(mView.getPaddingLeft(), mGridTopPadding, mView.getPaddingRight(), 0); - } - } - ); - break; - // 个人页面空行 - case "Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;": - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)); - break; - } - }); - - // 12.56+ - Class personCenterMemberCardViewClass = XposedHelpers.findClassIfExists("com.baidu.tieba.personCenter.view.PersonCenterMemberCardView", sClassLoader); - if (personCenterMemberCardViewClass != null) { - XposedBridge.hookAllConstructors( - personCenterMemberCardViewClass, - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - View mView = ReflectUtils.getObjectField(param.thisObject, View.class); - ((ViewGroup) mView.getParent()).removeView(mView); - } - } - ); - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt new file mode 100644 index 00000000..a02bcff0 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt @@ -0,0 +1,91 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import android.view.View +import android.view.ViewGroup +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher +import gm.tieba.tabswitch.util.getDimen +import gm.tieba.tabswitch.util.getObjectField +import org.luckypray.dexkit.query.matchers.ClassMatcher + +class PurgeMy : XposedContext(), IHooker, Obfuscated { + + private val mGridTopPadding = getDimen("tbds25").toInt() + + override fun key(): String { + return "purge_my" + } + + override fun matchers(): List { + return listOf( + SmaliMatcher("Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V"), + SmaliMatcher( + "Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;" + ).apply { + classMatcher = ClassMatcher.create().usingStrings("隐私设置") + } + ) + } + + override fun hook() { + hookBeforeMethod( + "tbclient.Profile.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType) { param -> + + // 我的贴吧会员 + XposedHelpers.setObjectField(param.thisObject, "vip_banner", null) + + // 横幅广告 + XposedHelpers.setObjectField(param.thisObject, "banner", ArrayList()) + + // 度小满 有钱花 + XposedHelpers.setObjectField(param.thisObject, "finance_tab", null) + + // 小程序 + XposedHelpers.setObjectField(param.thisObject, "recom_naws_list", ArrayList()) + } + + hookBeforeMethod( + "tbclient.User\$Builder", + "build", Boolean::class.javaPrimitiveType) { param -> + XposedHelpers.setObjectField(param.thisObject, "user_growth", null) + } + + // Add padding to the top of 常用功能 + findRule(matchers()) { matcher, clazz, method -> + when (matcher) { + "Lcom/baidu/tieba/personCenter/view/PersonOftenFuncItemView;->(Landroid/content/Context;)V" -> + hookAfterConstructor( + clazz, + "com.baidu.tbadk.TbPageContext" + ) { param -> + val mView = getObjectField(param.thisObject, View::class.java) + mView?.setPadding(mView.getPaddingLeft(), mGridTopPadding, mView.getPaddingRight(), 0) + } + + "Lcom/baidu/nadcore/download/basic/AdAppStateManager;->instance()Lcom/baidu/nadcore/download/basic/AdAppStateManager;" -> + hookReplaceMethod(clazz, method) { null } + } + } + + // 12.56+ + val personCenterMemberCardViewClass = XposedHelpers.findClassIfExists( + "com.baidu.tieba.personCenter.view.PersonCenterMemberCardView", + sClassLoader + ) + personCenterMemberCardViewClass?.let { + hookAfterConstructor( + it, + View::class.java + ) { param -> + val mView = getObjectField(param.thisObject, View::class.java) + (mView?.parent as? ViewGroup)?.removeView(mView) + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.java deleted file mode 100644 index fc0fb3e4..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.java +++ /dev/null @@ -1,30 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; - -public class PurgeVideo extends XposedContext implements IHooker { - @NonNull - @Override - public String key() { - return "purge_video"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final List threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); - if (threadList == null) return; - threadList.removeIf(o -> XposedHelpers.getObjectField(o, "video_info") != null); - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.kt new file mode 100644 index 00000000..737e0c40 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeVideo.kt @@ -0,0 +1,22 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker + +class PurgeVideo : XposedContext(), IHooker { + + override fun key(): String { + return "purge_video" + } + + override fun hook() { + hookBeforeMethod( + "tbclient.Personalized.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val threadList = XposedHelpers.getObjectField(param.thisObject, "thread_list") as? MutableList<*> + threadList?.removeIf { thread -> XposedHelpers.getObjectField(thread, "video_info") != null } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.java deleted file mode 100644 index 6f5c8786..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.java +++ /dev/null @@ -1,39 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; - -public class RedTip extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "red_tip"; - } - - @Override - public void hook() throws Throwable { -// XposedHelpers.findAndHookMethod("com.baidu.tbadk.widget.tab.PagerSlidingTabBaseStrip", sClassLoader, -// "setShowConcernRedTip", boolean.class, XC_MethodReplacement.returnConstant(null)); - XposedHelpers.findAndHookMethod("com.baidu.tieba.homepage.framework.indicator.PagerSlidingTabStrip", sClassLoader, - "setShowConcernRedTip", boolean.class, XC_MethodReplacement.returnConstant(null)); - XposedHelpers.findAndHookMethod("com.baidu.tieba.homepage.framework.indicator.PagerSlidingTabStrip", sClassLoader, - "setShowHotTopicRedTip", boolean.class, XC_MethodReplacement.returnConstant(null)); - XposedHelpers.findAndHookMethod("com.baidu.tieba.homepage.framework.indicator.ScrollFragmentTabHost", sClassLoader, - "setShowConcernRedTip", boolean.class, XC_MethodReplacement.returnConstant(null)); - XposedHelpers.findAndHookMethod("com.baidu.tieba.homepage.personalize.view.HomeTabBarView", sClassLoader, - "setShowConcernRedTip", boolean.class, XC_MethodReplacement.returnConstant(null)); - //底栏红点 - try { - XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.view.MessageRedDotView", sClassLoader, - "onChangeSkinType", XC_MethodReplacement.returnConstant(null)); - } catch (final NoSuchMethodError e) { - XposedHelpers.findAndHookMethod("com.baidu.tbadk.core.view.MessageRedDotView", sClassLoader, - "e", XC_MethodReplacement.returnConstant(null)); - } - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.kt new file mode 100644 index 00000000..d363e46c --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RedTip.kt @@ -0,0 +1,47 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker + +class RedTip : XposedContext(), IHooker { + + override fun key(): String { + return "red_tip" + } + + override fun hook() { +// hookReplaceMethod( +// "com.baidu.tbadk.widget.tab.PagerSlidingTabBaseStrip", +// "setShowConcernRedTip", Boolean::class.javaPrimitiveType +// ) { null } + hookReplaceMethod( + "com.baidu.tieba.homepage.framework.indicator.PagerSlidingTabStrip", + "setShowConcernRedTip", Boolean::class.javaPrimitiveType + ) { null } + hookReplaceMethod( + "com.baidu.tieba.homepage.framework.indicator.PagerSlidingTabStrip", + "setShowHotTopicRedTip", Boolean::class.javaPrimitiveType + ) { null } + hookReplaceMethod( + "com.baidu.tieba.homepage.framework.indicator.ScrollFragmentTabHost", + "setShowConcernRedTip", Boolean::class.javaPrimitiveType + ) { null } + hookReplaceMethod( + "com.baidu.tieba.homepage.personalize.view.HomeTabBarView", + "setShowConcernRedTip", Boolean::class.javaPrimitiveType + ) { null } + + //底栏红点 + try { + hookReplaceMethod( + "com.baidu.tbadk.core.view.MessageRedDotView", + "onChangeSkinType" + ) { null } + } catch (e: NoSuchMethodError) { + hookReplaceMethod( + "com.baidu.tbadk.core.view.MessageRedDotView", + "e" + ) { null } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.java deleted file mode 100644 index 15d328fc..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.java +++ /dev/null @@ -1,24 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import java.util.regex.Pattern; - -import gm.tieba.tabswitch.dao.Preferences; - -interface RegexFilter { - String[] regex = new String[1]; - Pattern[] pattern = new Pattern[1]; - - @NonNull - String key(); - - default Pattern getPattern() { - final var _regex = Preferences.getString(key()); - if (!_regex.equals(regex[0])) { - regex[0] = _regex; - pattern[0] = Pattern.compile(_regex, Pattern.CASE_INSENSITIVE); - } - return pattern[0]; - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.kt new file mode 100644 index 00000000..28edf609 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RegexFilter.kt @@ -0,0 +1,23 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import gm.tieba.tabswitch.dao.Preferences.getString +import java.util.regex.Pattern + +internal interface RegexFilter { + + fun key(): String + + fun getPattern(): Pattern? { + val _regex = getString(key()) ?: return null + if (_regex != regex[0]) { + regex[0] = _regex + pattern[0] = Pattern.compile(_regex, Pattern.CASE_INSENSITIVE) + } + return pattern[0] + } + + companion object { + val regex = arrayOfNulls(1) + val pattern = arrayOfNulls(1) + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java deleted file mode 100644 index 9d995315..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.java +++ /dev/null @@ -1,26 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import org.json.JSONObject; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; - -public class RemoveUpdate extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "remove_update"; - } - - @Override - public void hook() throws Throwable { - //Lcom/baidu/tbadk/coreExtra/data/VersionData;->parserJson(Lorg/json/JSONObject;)V - XposedHelpers.findAndHookMethod("com.baidu.tbadk.coreExtra.data.VersionData", sClassLoader, - "parserJson", JSONObject.class, XC_MethodReplacement.returnConstant(null)); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.kt new file mode 100644 index 00000000..6f2f9c36 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/RemoveUpdate.kt @@ -0,0 +1,20 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker +import org.json.JSONObject + +class RemoveUpdate : XposedContext(), IHooker { + + override fun key(): String { + return "remove_update" + } + + override fun hook() { + //Lcom/baidu/tbadk/coreExtra/data/VersionData;->parserJson(Lorg/json/JSONObject;)V + hookReplaceMethod( + "com.baidu.tbadk.coreExtra.data.VersionData", + "parserJson", JSONObject::class.java + ) { null } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.java b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.java deleted file mode 100644 index b77ee616..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.java +++ /dev/null @@ -1,144 +0,0 @@ -package gm.tieba.tabswitch.hooker.eliminate; - -import androidx.annotation.NonNull; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.regex.Pattern; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; - -public class UserFilter extends XposedContext implements IHooker, RegexFilter { - private final Set mIds = new HashSet<>(); - - @NonNull - @Override - public String key() { - return "user_filter"; - } - - @Override - public void hook() throws Throwable { - XposedHelpers.findAndHookMethod("tbclient.Personalized.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var threadList = (List) XposedHelpers.getObjectField(param.thisObject, "thread_list"); - if (threadList == null) return; - final var pattern = getPattern(); - threadList.removeIf(o -> { - final var author = XposedHelpers.getObjectField(o, "author"); - final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), - (String) XposedHelpers.getObjectField(author, "name_show")}; - return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); - }); - } - }); - - XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - filterPageData(param.thisObject); - } - }); - - XposedHelpers.findAndHookMethod("tbclient.ThreadList.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - filterPageData(param.thisObject); - } - }); - - // 楼层 - XposedHelpers.findAndHookMethod("tbclient.PbPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var postList = (List) XposedHelpers.getObjectField(param.thisObject, "post_list"); - if (postList == null) return; - final var pattern = getPattern(); - initIdList(param.thisObject, pattern); - - postList.removeIf(o -> ((Integer) XposedHelpers.getObjectField(o, "floor") != 1) - && mIds.contains(XposedHelpers.getObjectField(o, "author_id"))); - } - }); - // 楼中楼:[\u202e|\ud83c\udd10-\ud83c\udd89] - XposedHelpers.findAndHookMethod("tbclient.SubPost$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var subPostList = (List) XposedHelpers.getObjectField(param.thisObject, "sub_post_list"); - if (subPostList == null) return; - subPostList.removeIf(o -> mIds.contains(XposedHelpers.getObjectField(o, "author_id"))); - } - }); - // 楼层回复 - XposedHelpers.findAndHookMethod("tbclient.PbFloor.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final var subpostList = (List) XposedHelpers.getObjectField(param.thisObject, "subpost_list"); - if (subpostList == null) return; - final var pattern = getPattern(); - subpostList.removeIf(o -> { - final var author = XposedHelpers.getObjectField(o, "author"); - final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"), - (String) XposedHelpers.getObjectField(author, "name_show")}; - return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find()); - }); - } - }); - } - - private void filterPageData(Object pageData) { - List feedList = (List) XposedHelpers.getObjectField(pageData, "feed_list"); - if (feedList == null) return; - final var pattern = getPattern(); - feedList.removeIf( - o -> { - Object currFeed = XposedHelpers.getObjectField(o, "feed"); - if (currFeed != null) { - List components = (List) XposedHelpers.getObjectField(currFeed, "components"); - if (components != null ){ - for (var component: components) { - if (XposedHelpers.getObjectField(component, "component").toString().equals("feed_head")) { - Object feedHead = XposedHelpers.getObjectField(component, "feed_head"); - List mainData = (List) XposedHelpers.getObjectField(feedHead, "main_data"); - if (mainData != null) { - for (var feedHeadSymbol: mainData) { - Object feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text"); - if (feedHeadText != null) { - String username = (String) XposedHelpers.getObjectField(feedHeadText, "text"); - if (username != null) { - if (pattern.matcher(username).find()) { - return true; - } - break; - } - } - } - } - break; - } - } - } - } - return false; - } - ); - } - - private void initIdList(final Object thisObject, final Pattern pattern) { - final var userList = (List) XposedHelpers.getObjectField(thisObject, "user_list"); - for (final var user : userList) { - final var authors = new String[]{(String) XposedHelpers.getObjectField(user, "name"), - (String) XposedHelpers.getObjectField(user, "name_show")}; - if (Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find())) { - mIds.add(XposedHelpers.getObjectField(user, "id")); - } - } - } - -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.kt new file mode 100644 index 00000000..00f92bd7 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/UserFilter.kt @@ -0,0 +1,124 @@ +package gm.tieba.tabswitch.hooker.eliminate + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker +import java.util.regex.Pattern + +class UserFilter : XposedContext(), IHooker, RegexFilter { + + private val mIds: MutableSet = HashSet() + + override fun key(): String { + return "user_filter" + } + + override fun hook() { + hookBeforeMethod("tbclient.Personalized.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType) { param -> + val threadList = XposedHelpers.getObjectField(param.thisObject, "thread_list") as? MutableList<*> + val pattern = getPattern() ?: return@hookBeforeMethod + threadList?.removeIf { thread -> + val author = XposedHelpers.getObjectField(thread, "author") + val authors = arrayOf( + XposedHelpers.getObjectField(author, "name") as String, + XposedHelpers.getObjectField(author, "name_show") as String + ) + authors.any { pattern.matcher(it).find() } + } + } + + hookBeforeMethod( + "tbclient.FrsPage.PageData\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + filterPageData(param.thisObject) + } + + hookBeforeMethod( + "tbclient.ThreadList.PageData\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + filterPageData(param.thisObject) + } + + // 楼层 + hookBeforeMethod( + "tbclient.PbPage.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val postList = XposedHelpers.getObjectField(param.thisObject, "post_list") as? MutableList<*> + val pattern = getPattern() ?: return@hookBeforeMethod + initIdList(param.thisObject, pattern) + postList?.removeIf { post -> + (XposedHelpers.getObjectField(post, "floor") as Int != 1 + && mIds.contains(XposedHelpers.getObjectField(post, "author_id"))) + } + } + + // 楼中楼:[\u202e|\ud83c\udd10-\ud83c\udd89] + hookBeforeMethod( + "tbclient.SubPost\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val subPostList = XposedHelpers.getObjectField(param.thisObject, "sub_post_list") as? MutableList<*> + subPostList?.removeIf { subPost -> mIds.contains(XposedHelpers.getObjectField(subPost, "author_id")) } + } + + // 楼层回复 + hookBeforeMethod( + "tbclient.PbFloor.DataRes\$Builder", + "build", Boolean::class.javaPrimitiveType + ) { param -> + val subpostList = XposedHelpers.getObjectField(param.thisObject, "subpost_list") as? MutableList<*> + val pattern = getPattern() ?: return@hookBeforeMethod + subpostList?.removeIf { subPost -> + val author = XposedHelpers.getObjectField(subPost, "author") + val authors = arrayOf( + XposedHelpers.getObjectField(author, "name") as String, + XposedHelpers.getObjectField(author, "name_show") as String + ) + authors.any { pattern.matcher(it).find() } + } + } + } + + private fun filterPageData(pageData: Any) { + val feedList = XposedHelpers.getObjectField(pageData, "feed_list") as? MutableList<*> + val pattern = getPattern() ?: return + + feedList?.removeIf { feed -> + val currFeed = XposedHelpers.getObjectField(feed, "feed") + + currFeed?.let { + val components = XposedHelpers.getObjectField(currFeed, "components") as? List<*> + + components?.firstOrNull { component -> + XposedHelpers.getObjectField(component, "component").toString() == "feed_head" + }?.let { feedHeadComponent -> + val feedHead = XposedHelpers.getObjectField(feedHeadComponent, "feed_head") + val mainData = XposedHelpers.getObjectField(feedHead, "main_data") as? List<*> + + mainData?.any { feedHeadSymbol -> + val feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text") + val username = feedHeadText?.let { XposedHelpers.getObjectField(it, "text") as? String } + username?.let { pattern.matcher(it).find() } ?: false + } ?: false + } ?: false + } ?: false + } + } + + private fun initIdList(thisObject: Any, pattern: Pattern) { + val userList = XposedHelpers.getObjectField(thisObject, "user_list") as? List<*> + userList?.forEach { user -> + val authors = arrayOf( + XposedHelpers.getObjectField(user, "name") as String, + XposedHelpers.getObjectField(user, "name_show") as String + ) + if (authors.any { name: String -> pattern.matcher(name).find() }) { + mIds.add(XposedHelpers.getObjectField(user, "id")) + } + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java deleted file mode 100644 index 5a12d4f7..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.java +++ /dev/null @@ -1,83 +0,0 @@ -package gm.tieba.tabswitch.hooker.extra; - -import android.graphics.Bitmap; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; - -import java.lang.reflect.Method; -import java.util.List; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.ResMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class ForbidGesture extends XposedContext implements IHooker, Obfuscated { - - @NonNull - @Override - public String key() { - return "forbid_gesture"; - } - - @Override - public List matchers() { - return List.of(new ResMatcher(ReflectUtils.getR("drawable", "icon_word_t_size"), "forbid_gesture")); - } - - @Override - public void hook() throws Throwable { - // 帖子字号 - AcRules.findRule("forbid_gesture", (matcher, clazz, method) -> - XposedHelpers.findAndHookMethod(clazz, sClassLoader, method, XC_MethodReplacement.returnConstant(null)) - ); - // 视频帖字号 - XposedHelpers.findAndHookMethod("com.baidu.tieba.pb.videopb.fragment.DetailInfoAndReplyFragment", sClassLoader, - "onCreateView", LayoutInflater.class, ViewGroup.class, Bundle.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final ViewGroup recyclerView = (ViewGroup) ReflectUtils.getObjectField(param.thisObject, - "com.baidu.adp.widget.ListView.BdTypeRecyclerView"); - recyclerView.setOnTouchListener((v, event) -> false); - } - }); - // 帖子进吧 - XposedHelpers.findAndHookMethod("com.baidu.tieba.pb.pb.main.PbLandscapeListView", sClassLoader, - "dispatchTouchEvent", MotionEvent.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - XposedHelpers.callMethod(param.thisObject, "setForbidDragListener", true); - } - }); - // 图片缩放倍数 - final Class clazz = XposedHelpers.findClass("com.baidu.tbadk.widget.DragImageView", sClassLoader); - Method method; - try { - method = clazz.getDeclaredMethod("getMaxScaleValue", Bitmap.class); - } catch (final NoSuchMethodException e) { - try { - method = clazz.getDeclaredMethod("U", Bitmap.class); - } catch (final NoSuchMethodException e2) { - // 12.47.0.2+ - method = clazz.getDeclaredMethod("V", Bitmap.class); - } - } - XposedBridge.hookMethod(method, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(3 * (float) param.getResult()); - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.kt new file mode 100644 index 00000000..54f3082d --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/ForbidGesture.kt @@ -0,0 +1,66 @@ +package gm.tieba.tabswitch.hooker.extra + +import android.annotation.SuppressLint +import android.graphics.Bitmap +import android.os.Bundle +import android.view.LayoutInflater +import android.view.MotionEvent +import android.view.ViewGroup +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.ResMatcher +import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher +import gm.tieba.tabswitch.util.getObjectField +import gm.tieba.tabswitch.util.getR +import org.luckypray.dexkit.query.matchers.ClassMatcher + +class ForbidGesture : XposedContext(), IHooker, Obfuscated { + + override fun key(): String { + return "forbid_gesture" + } + + override fun matchers(): List { + return listOf( + ResMatcher(getR("drawable", "icon_word_t_size").toLong(), "forbid_gesture"), + SmaliMatcher("Ljava/lang/Math;->sqrt(D)D").apply { + classMatcher = ClassMatcher.create().className("com.baidu.tbadk.widget.DragImageView") + } + ) + } + + @SuppressLint("ClickableViewAccessibility") + override fun hook() { + // 帖子字号 + findRule(matchers()) { matcher, clazz, method -> + when (matcher) { + "forbid_gesture" -> hookReplaceMethod(clazz, method) { null } + "Ljava/lang/Math;->sqrt(D)D" -> hookAfterMethod(clazz, method, Bitmap::class.java) { param -> + param.result = 3 * param.result as Float + } + } + } + + // 视频帖字号 + hookAfterMethod("com.baidu.tieba.pb.videopb.fragment.DetailInfoAndReplyFragment", + "onCreateView", LayoutInflater::class.java, ViewGroup::class.java, Bundle::class.java) { param -> + val recyclerView = getObjectField( + param.thisObject, + "com.baidu.adp.widget.ListView.BdTypeRecyclerView" + ) as? ViewGroup + recyclerView?.setOnTouchListener { _, _ -> false } + } + + // 帖子进吧 + hookBeforeMethod( + "com.baidu.tieba.pb.pb.main.PbLandscapeListView", + "dispatchTouchEvent", MotionEvent::class.java + ) { param -> + XposedHelpers.callMethod(param.thisObject, "setForbidDragListener", true) + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java deleted file mode 100644 index 0abf5afa..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.java +++ /dev/null @@ -1,77 +0,0 @@ -package gm.tieba.tabswitch.util; - -import android.app.Activity; -import android.app.AlertDialog; -import android.content.Context; -import android.content.Intent; -import android.content.res.Configuration; -import android.view.WindowManager; - -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; - -public class DisplayUtils extends XposedContext { - public static boolean isLightMode(final Context context) { - return (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) - == Configuration.UI_MODE_NIGHT_NO; - } - - public static void restart(final Activity activity) { - final var intent = activity.getPackageManager().getLaunchIntentForPackage(activity - .getPackageName()); - if (intent != null) { - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - activity.startActivity(intent); - System.exit(0); - } - } - - public static String getTbSkin(final Context context) { - //Lcom/baidu/tbadk/core/TbadkCoreApplication;->getSkinType()I - int skinType; - try { - Object instance = XposedHelpers.callStaticMethod(XposedHelpers.findClass("com.baidu.tbadk.core.TbadkCoreApplication", sClassLoader), "getInst"); - skinType = (int) XposedHelpers.callMethod(instance, "getSkinType"); - } catch (Exception e) { - XposedBridge.log(e); - final var settings = context.getSharedPreferences("settings", Context.MODE_PRIVATE); - if (settings.getBoolean("key_is_follow_system_mode", false)) { - return isLightMode(context) ? "" : "_2"; - } else { - final var commonSettings = context.getSharedPreferences( - "common_settings", Context.MODE_PRIVATE); - skinType = Integer.parseInt((commonSettings.getString("skin_", "0"))); - } - } - switch (skinType) { - case 1: - case 4: - return "_2"; - case 0: - default: - return ""; - } - } - - public static int dipToPx(final Context context, final float dipValue) { - final float scale = context.getResources().getDisplayMetrics().density; - return (int) (dipValue * scale + 0.5f); - } - - public static int pxToDip(final Context context, final float pxValue) { - final float scale = context.getResources().getDisplayMetrics().density; - return (int) (pxValue / scale + 0.5f); - } - - public static int getDisplayWidth(final Context context) { - return context.getResources().getDisplayMetrics().widthPixels; - } - - public static void fixAlertDialogWidth(AlertDialog alert) { - WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); - layoutParams.copyFrom(alert.getWindow().getAttributes()); - layoutParams.width = DisplayUtils.getDisplayWidth(getContext()); - alert.getWindow().setAttributes(layoutParams); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.kt b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.kt new file mode 100644 index 00000000..240f4a8b --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.kt @@ -0,0 +1,87 @@ +@file:JvmName("DisplayUtils") + +package gm.tieba.tabswitch.util + +import android.app.Activity +import android.app.AlertDialog +import android.content.Context +import android.content.Intent +import android.content.res.Configuration +import android.view.WindowManager +import de.robv.android.xposed.XposedBridge +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import kotlin.math.roundToInt +import kotlin.system.exitProcess + +fun isLightMode(context: Context): Boolean { + return context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_NO +} + +fun restart(activity: Activity) { + val intent = activity.packageManager.getLaunchIntentForPackage(activity.packageName) + intent?.let { + it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + activity.startActivity(it) + exitProcess(0) + } +} + +fun getTbSkin(context: Context): String { + //Lcom/baidu/tbadk/core/TbadkCoreApplication;->getSkinType()I + val skinType: Int = try { + val instance = XposedHelpers.callStaticMethod( + XposedHelpers.findClass( + "com.baidu.tbadk.core.TbadkCoreApplication", + XposedContext.sClassLoader + ), "getInst" + ) + XposedHelpers.callMethod(instance, "getSkinType") as Int + } catch (e: Exception) { + XposedBridge.log(e) + val settings = context.getSharedPreferences("settings", Context.MODE_PRIVATE) + if (settings.getBoolean("key_is_follow_system_mode", false)) { + return if (isLightMode(context)) "" else "_2" + } else { + val commonSettings = context.getSharedPreferences( + "common_settings", Context.MODE_PRIVATE + ) + commonSettings.getString("skin_", "0")?.toIntOrNull() ?: 0 + } + } + return when (skinType) { + 1, 4 -> "_2" + else -> "" + } +} + +fun dipToPx(context: Context, dipValue: Float): Int { + val scale = context.resources.displayMetrics.density + return (dipValue * scale).roundToInt() +} + +fun pxToDip(context: Context, pxValue: Float): Int { + val scale = context.resources.displayMetrics.density + return (pxValue / scale).roundToInt() +} + +fun getDisplayWidth(context: Context): Int? { + return context.resources?.displayMetrics?.widthPixels +} + +fun fixAlertDialogWidth(alert: AlertDialog) { + alert.window?.let { + val layoutParams = WindowManager.LayoutParams() + layoutParams.copyFrom(it.attributes) + getDisplayWidth(XposedContext.getContext())?.let { displayWidth -> + layoutParams.width = displayWidth + } + it.attributes = layoutParams + } +} + +fun getDialogTheme(context: Context): Int = + if (isLightMode(context)) android.R.style.Theme_DeviceDefault_Light_Dialog_Alert else android.R.style.Theme_DeviceDefault_Dialog_Alert + +fun getDialogTheme(isLightMode: Boolean): Int = + if (isLightMode) android.R.style.Theme_DeviceDefault_Light_Dialog_Alert else android.R.style.Theme_DeviceDefault_Dialog_Alert diff --git a/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java deleted file mode 100644 index 6dbc586e..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.java +++ /dev/null @@ -1,110 +0,0 @@ -package gm.tieba.tabswitch.util; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileDescriptor; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.ByteBuffer; -import java.util.Scanner; - -import gm.tieba.tabswitch.XposedContext; - -public class FileUtils extends XposedContext { - public static void copy(final Object input, final Object output) throws IOException { - final InputStream is; - if (input instanceof InputStream) { - is = (InputStream) input; - } else if (input instanceof File) { - is = new FileInputStream((File) input); - } else if (input instanceof FileDescriptor) { - is = new FileInputStream((FileDescriptor) input); - } else if (input instanceof String) { - is = new FileInputStream((String) input); - } else throw new IllegalArgumentException("unknown input type"); - - final OutputStream os; - if (output instanceof OutputStream) { - os = (OutputStream) output; - } else if (output instanceof File) { - os = new FileOutputStream((File) output); - } else if (output instanceof FileDescriptor) { - os = new FileOutputStream((FileDescriptor) output); - } else if (output instanceof String) { - os = new FileOutputStream((String) output); - } else throw new IllegalArgumentException("unknown output type"); - - copy(is, os); - } - - private static void copy(final InputStream is, final OutputStream os) throws IOException { - final byte[] buffer = new byte[8192]; - int byteCount; - while ((byteCount = is.read(buffer)) != -1) { - os.write(buffer, 0, byteCount); - } - os.flush(); - is.close(); - os.close(); - } - - public static void copy(final ByteBuffer bb, final Object output) throws IOException { - final OutputStream os; - if (output instanceof OutputStream) { - os = (OutputStream) output; - } else if (output instanceof File) { - os = new FileOutputStream((File) output); - } else if (output instanceof FileDescriptor) { - os = new FileOutputStream((FileDescriptor) output); - } else if (output instanceof String) { - os = new FileOutputStream((String) output); - } else throw new IllegalArgumentException("unknown output type"); - - os.write(bb.array()); - } - - public static ByteBuffer toByteBuffer(final InputStream is) throws IOException { - final var baos = new ByteArrayOutputStream(); - copy(is, baos); - return ByteBuffer.wrap(baos.toByteArray()); - } - - public static String getExtension(final ByteBuffer bb) throws IOException { - final var chunk = new String(bb.array(), 0, 6); - try { - if (chunk.contains("GIF")) return "gif"; - else if (chunk.contains("PNG")) return "png"; - else return "jpeg"; - } finally { - bb.rewind(); - } - } - - public static String getParent(final String path) { - final int index = path.lastIndexOf(File.separatorChar); - return path.substring(0, index); - } - - public static void deleteRecursively(final File file) { - if (file.isDirectory()) { - final File[] files = file.listFiles(); - if (files != null) { - for (final File f : files) { - deleteRecursively(f); - } - } - } - file.delete(); - } - - public static String getAssetFileContent(final String filename) { - String result = null; - try (Scanner scanner = new Scanner(sAssetManager.open(filename)).useDelimiter("\\A")) { - result = scanner.hasNext() ? scanner.next() : null; - } catch (final IOException ignored) {} - return result; - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.kt b/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.kt new file mode 100644 index 00000000..b5e4a981 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/util/FileUtils.kt @@ -0,0 +1,87 @@ +@file:JvmName("FileUtils") + +package gm.tieba.tabswitch.util + +import gm.tieba.tabswitch.XposedContext +import java.io.File +import java.io.FileDescriptor +import java.io.FileInputStream +import java.io.FileOutputStream +import java.io.IOException +import java.io.InputStream +import java.io.OutputStream +import java.nio.ByteBuffer + +fun copy(input: Any?, output: Any?) { + val inputStream: InputStream = when (input) { + is InputStream -> input + is File -> FileInputStream(input) + is FileDescriptor -> FileInputStream(input) + is String -> FileInputStream(input) + else -> throw IllegalArgumentException("unknown input type") + } + + val outputStream: OutputStream = when (output) { + is OutputStream -> output + is File -> FileOutputStream(output) + is FileDescriptor -> FileOutputStream(output) + is String -> FileOutputStream(output) + else -> throw IllegalArgumentException("unknown output type") + } + + copy(inputStream, outputStream) +} + +fun copy(inputStream: InputStream, outputStream: OutputStream) { + inputStream.use { input -> + outputStream.use { output -> + input.copyTo(output) + } + } +} + +fun copy(bb: ByteBuffer, output: Any?) { + val outputStream: OutputStream = when (output) { + is OutputStream -> output + is File -> FileOutputStream(output) + is FileDescriptor -> FileOutputStream(output) + is String -> FileOutputStream(output) + else -> throw IllegalArgumentException("unknown output type") + } + outputStream.use { + it.write(bb.array()) + } +} + +fun toByteBuffer(inputStream: InputStream): ByteBuffer { + return ByteBuffer.wrap(inputStream.readBytes()) +} + +fun getExtension(bb: ByteBuffer): String { + val chunk = String(bb.array(), 0, 6) + return when { + chunk.contains("GIF") -> "gif" + chunk.contains("PNG") -> "png" + else -> "jpeg" + }.also { + bb.rewind() + } +} + +fun getParent(path: String): String { + return path.substring(0, path.lastIndexOf(File.separatorChar)) +} + +fun getAssetFileContent(filename: String?): String? { + return try { + filename?.let { name -> + XposedContext.sAssetManager.open(name).use { inputStream -> + inputStream.bufferedReader().use { reader -> + reader.readText() + } + } + } + } catch (ignored: IOException) { + null + } +} \ No newline at end of file diff --git a/app/src/main/java/gm/tieba/tabswitch/util/Parser.java b/app/src/main/java/gm/tieba/tabswitch/util/Parser.java deleted file mode 100644 index 0abad942..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/util/Parser.java +++ /dev/null @@ -1,17 +0,0 @@ -package gm.tieba.tabswitch.util; - -import java.util.List; - -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; - -public class Parser extends XposedContext { - public static String parsePbContent(final Object instance, final String fieldName) { - final List contents = (List) XposedHelpers.getObjectField(instance, fieldName); - final StringBuilder pbContent = new StringBuilder(); - for (int i = 0; i < contents.size(); i++) { - pbContent.append(XposedHelpers.getObjectField(contents.get(i), "text")); - } - return pbContent.toString(); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/Parser.kt b/app/src/main/java/gm/tieba/tabswitch/util/Parser.kt new file mode 100644 index 00000000..30586868 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/util/Parser.kt @@ -0,0 +1,10 @@ +@file:JvmName("Parser") + +package gm.tieba.tabswitch.util + +import de.robv.android.xposed.XposedHelpers + +fun parsePbContent(instance: Any?, fieldName: String?): String { + val contents = XposedHelpers.getObjectField(instance, fieldName) as? List<*> ?: return "" + return contents.mapNotNull { XposedHelpers.getObjectField(it, "text") as? String }.joinToString("") +} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java deleted file mode 100644 index 9697a1a5..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.java +++ /dev/null @@ -1,237 +0,0 @@ -package gm.tieba.tabswitch.util; - -import android.app.Activity; -import android.app.Application; - -import androidx.annotation.ColorInt; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Arrays; - -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; - -public class ReflectUtils extends XposedContext { - public static int getR(final String innerClassName, final String fieldName) { - return getContext().getResources() - .getIdentifier(fieldName, innerClassName, getContext().getPackageName()); - } - - public static int getId(final String fieldName) { - return getR("id", fieldName); - } - - @ColorInt - public static int getColor(final String fieldName) { - return getContext().getColor( - getR("color", fieldName + DisplayUtils.getTbSkin(getContext()))); - } - - public static float getDimen(final String fieldName) { - switch (fieldName) { - case "ds10": - return DisplayUtils.dipToPx(getContext(), 5F); - case "ds20": - return DisplayUtils.dipToPx(getContext(), 10F); - case "ds30": - return DisplayUtils.dipToPx(getContext(), 15F); - case "ds32": - return DisplayUtils.dipToPx(getContext(), 16F); - case "ds140": - return DisplayUtils.dipToPx(getContext(), 70F); - } - return getContext().getResources().getDimension(getR("dimen", fieldName)); - } - - public static float getDimenDip(final String fieldName) { - switch (fieldName) { - case "fontsize22": - return 11F; - case "fontsize28": - return 14F; - case "fontsize36": - return 18F; - } - return DisplayUtils.pxToDip(getContext(), getDimen(fieldName)); - } - - public static int getDrawableId(final String fieldName) { - return getR("drawable", fieldName); - } - - /** - * Returns the first field of the given type in a class. - * Might be useful for Proguard'ed classes to identify fields with unique types. - * - * @param instance The class which either declares or inherits the field. - * @param type The type of the field. - * @return A reference to the first field of the given type. - * @throws NoSuchFieldError In case no matching field was not found. - */ - public static T getObjectField(final Object instance, final Class type) { - try { - return type.cast(XposedHelpers.findFirstFieldByExactType(instance.getClass(), type) - .get(instance)); - } catch (final IllegalAccessException e) { - XposedBridge.log(e); - throw new IllegalAccessError(e.getMessage()); - } - } - - public static Object getObjectField(final Object instance, final String className) { - try { - return XposedHelpers.findFirstFieldByExactType(instance.getClass(), XposedHelpers.findClass(className, sClassLoader)) - .get(instance); - } catch (final IllegalAccessException e) { - XposedBridge.log(e); - throw new IllegalAccessError(e.getMessage()); - } - } - - public static void setObjectField(final Object instance, final Class type, final Object value) { - try { - XposedHelpers.findFirstFieldByExactType(instance.getClass(), type) - .set(instance, value); - } catch (final IllegalAccessException e) { - XposedBridge.log(e); - throw new IllegalAccessError(e.getMessage()); - } - } - - public static void setObjectField(final Object instance, final String className, final Object value) { - try { - XposedHelpers.findFirstFieldByExactType(instance.getClass(), XposedHelpers.findClass(className, sClassLoader)) - .set(instance, value); - } catch (final IllegalAccessException e) { - XposedBridge.log(e); - throw new IllegalAccessError(e.getMessage()); - } - } - - /** - * Returns the field at the given position in a class. - * Might be useful for Proguard'ed classes to identify fields with fixed position. - * - * @param instance The class which either declares or inherits the field. - * @param position The position of the field. - * @return A reference to the first field of the given type. - * @throws NoSuchFieldError In case no matching field was not found. - */ - public static Object getObjectField(final Object instance, final int position) { - try { - final var field = instance.getClass().getDeclaredFields()[position]; - field.setAccessible(true); - return field.get(instance); - } catch (final IllegalAccessException e) { - XposedBridge.log(e); - throw new IllegalAccessError(e.getMessage()); - } - } - - public static void setObjectField(final Object instance, final int position, final Object value) { - try { - final var field = instance.getClass().getDeclaredFields()[position]; - field.setAccessible(true); - field.set(instance, value); - } catch (final IllegalAccessException e) { - XposedBridge.log(e); - throw new IllegalAccessError(e.getMessage()); - } - } - - public interface Callback { - /** - * @param objField the value of the represented field in object - * @return True if no further handling is desired - */ - boolean onFieldFound(Object objField); - } - - public static void walkField(final Object instance, final Class cls, final Callback handle) { - try { - final Field[] declaredFields = instance.getClass().getDeclaredFields(); - for (final Field field : declaredFields) { - field.setAccessible(true); - final Object objField = field.get(instance); - if (objField != null && cls.equals(objField.getClass()) - && handle.onFieldFound(objField)) { - return; - } - } - for (final Field field : declaredFields) { - final Object objField = field.get(instance); - if (objField != null && cls.isAssignableFrom(objField.getClass()) - && handle.onFieldFound(objField)) { - return; - } - } - } catch (final IllegalAccessException e) { - throw new IllegalAccessError(e.getMessage()); - } - } - - public static void walkObjectFields(final Object instance, final Class cls, final Callback handle) { - walkField(instance, cls, handle); - } - - public static void walkObjectFields(final Object instance, final String className, final Callback handle) { - walkField(instance, XposedHelpers.findClass(className, sClassLoader), handle); - } - - public static Method findFirstMethodByExactType(final Class cls, final Class... paramTypes) { - for (final var method : cls.getDeclaredMethods()) { - if (Arrays.equals(method.getParameterTypes(), paramTypes)) { - return method; - } - } - throw new NoSuchMethodError(Arrays.toString(paramTypes)); - } - - public static Method findFirstMethodByExactType(final String className, final Class... paramTypes) { - return findFirstMethodByExactType(XposedHelpers.findClass(className, sClassLoader), paramTypes); - } - - public static Method findFirstMethodByExactReturnType(final Class cls, final Class returnType) { - for (final var method : cls.getDeclaredMethods()) { - if (method.getReturnType() == returnType) { - return method; - } - } - throw new NoSuchMethodError(returnType.toString()); - } - - public static Method findFirstMethodByExactReturnType(final String className, final Class returnType) { - return findFirstMethodByExactReturnType(XposedHelpers.findClass(className, sClassLoader), returnType); - } - - public static Object callMethod(final Method method, final Object instance, final Object... args) { - try { - method.setAccessible(true); - return method.invoke(instance, args); - } catch (final IllegalAccessException | InvocationTargetException e) { - XposedBridge.log(e); - throw new IllegalArgumentException(e); - } - } - - public static Object callStaticMethod(final Method method, final Object... args) { - return callMethod(method, null, args); - } - - public static Application getTbadkCoreApplicationInst() { - return (Application) XposedHelpers.callStaticMethod( - XposedHelpers.findClass("com.baidu.tbadk.core.TbadkCoreApplication", sClassLoader), - "getInst" - ); - } - - public static Activity getCurrentActivity() { - return (Activity) XposedHelpers.callMethod( - getTbadkCoreApplicationInst(), - "getCurrentActivity" - ); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.kt b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.kt new file mode 100644 index 00000000..4227e7ca --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.kt @@ -0,0 +1,190 @@ +@file:JvmName("ReflectUtils") + +package gm.tieba.tabswitch.util + +import android.app.Activity +import android.app.Application +import androidx.annotation.ColorInt +import de.robv.android.xposed.XposedBridge +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import java.lang.reflect.InvocationTargetException +import java.lang.reflect.Method + +fun getR(innerClassName: String, fieldName: String): Int { + return XposedContext.getContext().resources + .getIdentifier(fieldName, innerClassName, XposedContext.getContext().packageName) +} + +fun getId(fieldName: String): Int { + return getR("id", fieldName) +} + +@ColorInt +fun getColor(fieldName: String): Int { + return XposedContext.getContext().getColor( + getR("color", fieldName + getTbSkin(XposedContext.getContext())) + ) +} + +fun getDimen(fieldName: String): Float { + when (fieldName) { + "ds10" -> return dipToPx(XposedContext.getContext(), 5f).toFloat() + "ds20" -> return dipToPx(XposedContext.getContext(), 10f).toFloat() + "ds30" -> return dipToPx(XposedContext.getContext(), 15f).toFloat() + "ds32" -> return dipToPx(XposedContext.getContext(), 16f).toFloat() + "ds140" -> return dipToPx(XposedContext.getContext(), 70f).toFloat() + } + return XposedContext.getContext().resources.getDimension(getR("dimen", fieldName)) +} + +fun getDimenDip(fieldName: String): Float { + when (fieldName) { + "fontsize22" -> return 11f + "fontsize28" -> return 14f + "fontsize36" -> return 18f + } + return pxToDip(XposedContext.getContext(), getDimen(fieldName)).toFloat() +} + +fun getDrawableId(fieldName: String): Int { + return getR("drawable", fieldName) +} + +/** + * Returns the first field of the given type in a class. + * Might be useful for Proguard'ed classes to identify fields with unique types. + * + * @param instance The class which either declares or inherits the field. + * @param type The type of the field. + * @return A reference to the first field of the given type. + * @throws NoSuchFieldError In case no matching field was not found. + */ +fun getObjectField(instance: Any?, type: Class): T? { + return try { + type.cast(XposedHelpers.findFirstFieldByExactType(instance?.javaClass, type)[instance]) + } catch (e: IllegalAccessException) { + XposedBridge.log(e) + throw IllegalAccessError(e.message) + } +} + +fun getObjectField(instance: Any?, className: String): Any? { + return try { + XposedHelpers.findFirstFieldByExactType( + instance?.javaClass, + XposedHelpers.findClass(className, XposedContext.sClassLoader) + )[instance] + } catch (e: IllegalAccessException) { + XposedBridge.log(e) + throw IllegalAccessError(e.message) + } +} + +fun setObjectField(instance: Any?, type: Class<*>, value: Any?) { + try { + XposedHelpers.findFirstFieldByExactType(instance?.javaClass, type)[instance] = value + } catch (e: IllegalAccessException) { + XposedBridge.log(e) + throw IllegalAccessError(e.message) + } +} + +fun setObjectField(instance: Any?, className: String, value: Any?) { + try { + XposedHelpers.findFirstFieldByExactType( + instance?.javaClass, + XposedHelpers.findClass(className, XposedContext.sClassLoader) + )[instance] = value + } catch (e: IllegalAccessException) { + XposedBridge.log(e) + throw IllegalAccessError(e.message) + } +} + +/** + * Returns the field at the given position in a class. + * Might be useful for Proguard'ed classes to identify fields with fixed position. + * + * @param instance The class which either declares or inherits the field. + * @param position The position of the field. + * @return A reference to the first field of the given type. + * @throws NoSuchFieldError In case no matching field was not found. + */ +fun getObjectField(instance: Any?, position: Int): Any? { + return try { + val field = instance?.javaClass?.declaredFields?.get(position) + field?.isAccessible = true + field?.get(instance) + } catch (e: IllegalAccessException) { + XposedBridge.log(e) + throw IllegalAccessError(e.message) + } +} + +fun setObjectField(instance: Any?, position: Int, value: Any?) { + try { + val field = instance?.javaClass?.declaredFields?.get(position) + field?.isAccessible = true + field?.set(instance, value) + } catch (e: IllegalAccessException) { + XposedBridge.log(e) + throw IllegalAccessError(e.message) + } +} + +fun findFirstMethodByExactType(cls: Class<*>, vararg paramTypes: Class<*>): Method { + return cls.declaredMethods.firstOrNull { method -> + method.parameterTypes.contentEquals(paramTypes) + } ?: throw NoSuchMethodError(paramTypes.contentToString()) +} + +fun findFirstMethodByExactType(className: String, vararg paramTypes: Class<*>): Method { + return findFirstMethodByExactType( + XposedHelpers.findClass(className, XposedContext.sClassLoader), + *paramTypes + ) +} + +fun findFirstMethodByExactReturnType(cls: Class<*>, returnType: Class<*>): Method { + return cls.declaredMethods.firstOrNull { method -> + method.returnType == returnType + } ?: throw NoSuchMethodError(returnType.toString()) +} + +fun findFirstMethodByExactReturnType(className: String, returnType: Class<*>): Method { + return findFirstMethodByExactReturnType( + XposedHelpers.findClass(className, XposedContext.sClassLoader), + returnType + ) +} + +fun callMethod(method: Method, instance: Any?, vararg args: Any?): Any? { + return try { + method.isAccessible = true + method.invoke(instance, *args) + } catch (e: IllegalAccessException) { + XposedBridge.log(e) + throw IllegalArgumentException(e) + } catch (e: InvocationTargetException) { + XposedBridge.log(e) + throw IllegalArgumentException(e) + } +} + +fun callStaticMethod(method: Method, vararg args: Any?): Any? { + return callMethod(method, null, *args) +} + +fun getTbadkCoreApplicationInst(): Application = XposedHelpers.callStaticMethod( + XposedHelpers.findClass( + "com.baidu.tbadk.core.TbadkCoreApplication", + XposedContext.sClassLoader + ), + "getInst" +) as Application + +fun getCurrentActivity(): Activity = XposedHelpers.callMethod( + getTbadkCoreApplicationInst(), + "getCurrentActivity" +) as Activity diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java deleted file mode 100644 index 13a106de..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.java +++ /dev/null @@ -1,38 +0,0 @@ -package gm.tieba.tabswitch.widget; - -import android.view.View; -import android.widget.TextView; - -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class NavigationBar extends XposedContext { - private final Object mNavigationBar; - - public NavigationBar(final Object thisObject) { - mNavigationBar = ReflectUtils.getObjectField(thisObject, - "com.baidu.tbadk.core.view.NavigationBar"); - } - - public void addTextButton(final String text, final View.OnClickListener l) { - final Class ControlAlign = XposedHelpers.findClass( - "com.baidu.tbadk.core.view.NavigationBar$ControlAlign", sClassLoader); - for (final Object HORIZONTAL_RIGHT : ControlAlign.getEnumConstants()) { - if (HORIZONTAL_RIGHT.toString().equals("HORIZONTAL_RIGHT")) { - final TextView textView = (TextView) XposedHelpers.callMethod(mNavigationBar, - "addTextButton", HORIZONTAL_RIGHT, text, l); - textView.setTextColor(ReflectUtils.getColor("CAM_X0105")); - break; - } - } - } - - public void setTitleText(final String title) { - XposedHelpers.callMethod(mNavigationBar, "setTitleText", title); - } - - public void setCenterTextTitle(final String title) { - XposedHelpers.callMethod(mNavigationBar, "setCenterTextTitle", title); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.kt b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.kt new file mode 100644 index 00000000..ae05c32f --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.kt @@ -0,0 +1,41 @@ +package gm.tieba.tabswitch.widget + +import android.view.View +import android.widget.TextView +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.util.getColor +import gm.tieba.tabswitch.util.getObjectField + +class NavigationBar(thisObject: Any) : XposedContext() { + + private val mNavigationBar: Any? = getObjectField( + thisObject, + "com.baidu.tbadk.core.view.NavigationBar" + ) + + fun addTextButton(text: String?, l: View.OnClickListener?) { + val controlAlignClass = XposedHelpers.findClass( + "com.baidu.tbadk.core.view.NavigationBar\$ControlAlign", sClassLoader + ) + val horizontalRight = controlAlignClass.enumConstants.find { it.toString() == "HORIZONTAL_RIGHT" } + ?: throw IllegalStateException("HORIZONTAL_RIGHT enum constant not found") + val textView = XposedHelpers.callMethod( + mNavigationBar, + "addTextButton", horizontalRight, text, l + ) as TextView + textView.setTextColor(getColor("CAM_X0105")) + } + + fun setTitleText(title: String?) { + title?.let { + XposedHelpers.callMethod(mNavigationBar, "setTitleText", it) + } + } + + fun setCenterTextTitle(title: String?) { + title?.let { + XposedHelpers.callMethod(mNavigationBar, "setCenterTextTitle", it) + } + } +} diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java deleted file mode 100644 index 1a7cf781..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.java +++ /dev/null @@ -1,74 +0,0 @@ -package gm.tieba.tabswitch.widget; - -import android.os.Vibrator; -import android.view.View; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class Switch extends XposedContext { - public View bdSwitch; - private Method[] mMethods; - - public Switch() { - final var cls = XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView", sClassLoader); - bdSwitch = (View) XposedHelpers.newInstance(cls, getContext()); - mMethods = cls.getDeclaredMethods(); - } - - public Switch(final View bdSwitch) { - this.bdSwitch = bdSwitch; - } - - public void setOnSwitchStateChangeListener(final InvocationHandler l) { - Class clazz; - try { - clazz = XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView$b", sClassLoader); - } catch (final XposedHelpers.ClassNotFoundError e) { - clazz = XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView$a", sClassLoader); - } - final Object proxy = Proxy.newProxyInstance(sClassLoader, new Class[]{clazz}, l); - XposedHelpers.callMethod(bdSwitch, "setOnSwitchStateChangeListener", proxy); - } - - public boolean isOn() { - try { - return (Boolean) XposedHelpers.callMethod(bdSwitch, "isOn"); - } catch (final NoSuchMethodError e) { - return (Boolean) ReflectUtils.callMethod(mMethods[6], bdSwitch); - } - } - - public void changeState() { - try { - XposedHelpers.callMethod(bdSwitch, "changeState"); - } catch (final NoSuchMethodError e) { - ReflectUtils.callMethod(mMethods[3], bdSwitch); - } - } - - public void turnOn() { - try { - XposedHelpers.callMethod(bdSwitch, "turnOn"); - } catch (final NoSuchMethodError e) { - ReflectUtils.callMethod(mMethods[11], bdSwitch); - } - } - - public void turnOff() { - try { - XposedHelpers.callMethod(bdSwitch, "turnOff"); - } catch (final NoSuchMethodError e) { - ReflectUtils.callMethod(mMethods[8], bdSwitch); - } - } - - public Vibrator getVibrator() { - return ReflectUtils.getObjectField(bdSwitch, Vibrator.class); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.kt b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.kt new file mode 100644 index 00000000..d66f2027 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.kt @@ -0,0 +1,73 @@ +package gm.tieba.tabswitch.widget + +import android.os.Vibrator +import android.view.View +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.XposedHelpers.ClassNotFoundError +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.util.callMethod +import gm.tieba.tabswitch.util.getObjectField +import java.lang.reflect.InvocationHandler +import java.lang.reflect.Method +import java.lang.reflect.Proxy + +class Switch : XposedContext() { + + var bdSwitch: View + private var mMethods: Array + + init { + val cls = + XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView", sClassLoader) + bdSwitch = XposedHelpers.newInstance(cls, getContext()) as View + mMethods = cls.declaredMethods + } + + fun setOnSwitchStateChangeListener(l: InvocationHandler) { + val clazz: Class<*> = try { + XposedHelpers.findClass( + "com.baidu.adp.widget.BdSwitchView.BdSwitchView\$b", + sClassLoader + ) + } catch (e: ClassNotFoundError) { + XposedHelpers.findClass( + "com.baidu.adp.widget.BdSwitchView.BdSwitchView\$a", + sClassLoader + ) + } + val proxy = Proxy.newProxyInstance(sClassLoader, arrayOf(clazz), l) + XposedHelpers.callMethod(bdSwitch, "setOnSwitchStateChangeListener", proxy) + } + + fun isOn(): Boolean = try { + XposedHelpers.callMethod(bdSwitch, "isOn") as Boolean + } catch (e: NoSuchMethodError) { + callMethod(mMethods[6], bdSwitch) as Boolean + } + + fun changeState() { + try { + XposedHelpers.callMethod(bdSwitch, "changeState") + } catch (e: NoSuchMethodError) { + callMethod(mMethods[3], bdSwitch) + } + } + + fun turnOn() { + try { + XposedHelpers.callMethod(bdSwitch, "turnOn") + } catch (e: NoSuchMethodError) { + callMethod(mMethods[11], bdSwitch) + } + } + + fun turnOff() { + try { + XposedHelpers.callMethod(bdSwitch, "turnOff") + } catch (e: NoSuchMethodError) { + callMethod(mMethods[8], bdSwitch) + } + } + + fun getVibrator(): Vibrator? = getObjectField(bdSwitch, Vibrator::class.java) +} diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java b/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java deleted file mode 100644 index fb64c263..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.java +++ /dev/null @@ -1,39 +0,0 @@ -package gm.tieba.tabswitch.widget; - -import android.content.Context; - -import androidx.annotation.MainThread; - -import java.util.List; - -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.dao.AcRules; -import gm.tieba.tabswitch.hooker.Obfuscated; -import gm.tieba.tabswitch.hooker.deobfuscation.Matcher; -import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher; -import gm.tieba.tabswitch.util.ReflectUtils; - -public class TbToast extends XposedContext implements Obfuscated { - public static int LENGTH_SHORT = 2000; - public static int LENGTH_LONG = 3500; - - @Override - public List matchers() { - // setToastString() - return List.of(new StringMatcher("can not be call not thread! trace = ")); - } - - @MainThread - public static void showTbToast(final String text, final int duration) { - AcRules.findRule("can not be call not thread! trace = ", (matcher, clazz, method) -> { - try { - final var md = ReflectUtils.findFirstMethodByExactType(clazz, Context.class, String.class, int.class); - runOnUiThread(() -> ReflectUtils.callStaticMethod(md, getContext(), text, duration)); - } catch (final NoSuchMethodError e) { - // 12.32.3.0 + - final var md = ReflectUtils.findFirstMethodByExactType(clazz, String.class, int.class, boolean.class); - runOnUiThread(() -> ReflectUtils.callStaticMethod(md, text, duration, true)); - } - }); - } -} diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.kt b/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.kt new file mode 100644 index 00000000..dd8ec65f --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/widget/TbToast.kt @@ -0,0 +1,39 @@ +package gm.tieba.tabswitch.widget + +import androidx.annotation.MainThread +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher +import gm.tieba.tabswitch.util.callStaticMethod +import gm.tieba.tabswitch.util.findFirstMethodByExactType + +class TbToast : XposedContext(), Obfuscated { + + override fun matchers(): List { + // setToastString() + return listOf(StringMatcher("can not be call not thread! trace = ")) + } + + companion object { + @JvmField + var LENGTH_SHORT = 2000 + @JvmField + var LENGTH_LONG = 3500 + + @JvmStatic + @MainThread + fun showTbToast(text: String?, duration: Int) { + AcRules.findRule("can not be call not thread! trace = ") { _, clazz, _ -> + val md = findFirstMethodByExactType( + clazz, + String::class.java, + Int::class.javaPrimitiveType!!, + Boolean::class.javaPrimitiveType!! + ) + runOnUiThread { callStaticMethod(md, text, duration, true) } + } + } + } +} diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 9d8b729a..00000000 --- a/build.gradle +++ /dev/null @@ -1,5 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e774b445..32a4a9d1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Aug 24 21:31:51 CST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle.kts similarity index 51% rename from settings.gradle rename to settings.gradle.kts index dfbf59b2..b9a0458f 100644 --- a/settings.gradle +++ b/settings.gradle.kts @@ -5,10 +5,10 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.3.2' - id 'com.android.library' version '8.3.2' - id 'org.jetbrains.kotlin.android' version '1.9.0' - id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false + id("com.android.application") version "8.4.0" + id("com.android.library") version "8.4.0" + id("org.jetbrains.kotlin.android") version "1.9.0" + id("com.google.devtools.ksp") version "1.9.0-1.0.13" apply false } } dependencyResolutionManagement { @@ -16,8 +16,8 @@ dependencyResolutionManagement { repositories { google() mavenCentral() - maven { url 'https://api.xposed.info/' } + maven { url = uri("https://api.xposed.info/") } } } rootProject.name = "贴吧TS" -include ':app' +include(":app") From 53437a0a5ebc2f021682c13127af77d1cfbfa5fd Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sat, 4 May 2024 23:32:20 -0700 Subject: [PATCH 137/158] chore: bump version --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d9011d57..ea9c23cd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -116,4 +116,4 @@ afterEvaluate { tasks.named("installDebug").configure { finalizedBy(tasks.named("restartTieba")) } -} +} \ No newline at end of file From 5969f24571cc5d3cf6a72d50c590f252b6e73554 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 5 May 2024 05:08:19 -0700 Subject: [PATCH 138/158] fix: incorrect splash hook behavior --- .../java/gm/tieba/tabswitch/XposedContext.kt | 16 ++++++++++++++++ .../gm/tieba/tabswitch/hooker/eliminate/Purge.kt | 3 +-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt b/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt index 53b84182..3d8ff14e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt @@ -91,6 +91,22 @@ abstract class XposedContext { ) } + inline fun hookAfterMethodPriority( + className: String, + methodName: String, + vararg parameterTypes: Any?, + crossinline afterHook: (XC_MethodHook.MethodHookParam) -> Unit + ): XC_MethodHook.Unhook { + return XposedHelpers.findAndHookMethod( + className, sClassLoader, methodName, *parameterTypes, + object : XC_MethodHook(-1) { + override fun afterHookedMethod(param: MethodHookParam) { + afterHook(param) + } + } + ) + } + inline fun hookReplaceMethod( className: String, methodName: String, diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt index bb492146..c71d1c0a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt @@ -156,7 +156,7 @@ class Purge : XposedContext(), IHooker, Obfuscated { hookReplaceMethod("com.baidu.tbadk.abtest.UbsABTestHelper", "isPushLaunchWithoutSplashAdA") { true } // Fix bugs related to isPushLaunch4SplashAd - hookAfterMethod( + hookAfterMethodPriority( "com.baidu.tieba.tblauncher.MainTabActivity", "onCreate", Bundle::class.java ) { _ -> @@ -368,7 +368,6 @@ class Purge : XposedContext(), IHooker, Obfuscated { // 小说推荐 XposedHelpers.setObjectField(param.thisObject, "novel_recom_card", null) - } // 首页样式 AB test From f5fe64ad39480938ed02a37301fa317b3a42d90f Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 5 May 2024 05:21:01 -0700 Subject: [PATCH 139/158] refactor: cleanup findClass calls --- .../java/gm/tieba/tabswitch/util/DisplayUtils.kt | 7 +------ .../java/gm/tieba/tabswitch/util/ReflectUtils.kt | 14 ++++++-------- .../gm/tieba/tabswitch/widget/NavigationBar.kt | 4 +--- .../main/java/gm/tieba/tabswitch/widget/Switch.kt | 13 +++---------- 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.kt b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.kt index 240f4a8b..ffaa4e5e 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.kt +++ b/app/src/main/java/gm/tieba/tabswitch/util/DisplayUtils.kt @@ -30,12 +30,7 @@ fun restart(activity: Activity) { fun getTbSkin(context: Context): String { //Lcom/baidu/tbadk/core/TbadkCoreApplication;->getSkinType()I val skinType: Int = try { - val instance = XposedHelpers.callStaticMethod( - XposedHelpers.findClass( - "com.baidu.tbadk.core.TbadkCoreApplication", - XposedContext.sClassLoader - ), "getInst" - ) + val instance = getTbadkCoreApplicationInst() XposedHelpers.callMethod(instance, "getSkinType") as Int } catch (e: Exception) { XposedBridge.log(e) diff --git a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.kt b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.kt index 4227e7ca..2b21c534 100644 --- a/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.kt +++ b/app/src/main/java/gm/tieba/tabswitch/util/ReflectUtils.kt @@ -8,6 +8,7 @@ import androidx.annotation.ColorInt import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedHelpers import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.XposedContext.Companion.findClass import java.lang.reflect.InvocationTargetException import java.lang.reflect.Method @@ -73,7 +74,7 @@ fun getObjectField(instance: Any?, className: String): Any? { return try { XposedHelpers.findFirstFieldByExactType( instance?.javaClass, - XposedHelpers.findClass(className, XposedContext.sClassLoader) + findClass(className) )[instance] } catch (e: IllegalAccessException) { XposedBridge.log(e) @@ -94,7 +95,7 @@ fun setObjectField(instance: Any?, className: String, value: Any?) { try { XposedHelpers.findFirstFieldByExactType( instance?.javaClass, - XposedHelpers.findClass(className, XposedContext.sClassLoader) + findClass(className) )[instance] = value } catch (e: IllegalAccessException) { XposedBridge.log(e) @@ -141,7 +142,7 @@ fun findFirstMethodByExactType(cls: Class<*>, vararg paramTypes: Class<*>): Meth fun findFirstMethodByExactType(className: String, vararg paramTypes: Class<*>): Method { return findFirstMethodByExactType( - XposedHelpers.findClass(className, XposedContext.sClassLoader), + findClass(className), *paramTypes ) } @@ -154,7 +155,7 @@ fun findFirstMethodByExactReturnType(cls: Class<*>, returnType: Class<*>): Metho fun findFirstMethodByExactReturnType(className: String, returnType: Class<*>): Method { return findFirstMethodByExactReturnType( - XposedHelpers.findClass(className, XposedContext.sClassLoader), + findClass(className), returnType ) } @@ -177,10 +178,7 @@ fun callStaticMethod(method: Method, vararg args: Any?): Any? { } fun getTbadkCoreApplicationInst(): Application = XposedHelpers.callStaticMethod( - XposedHelpers.findClass( - "com.baidu.tbadk.core.TbadkCoreApplication", - XposedContext.sClassLoader - ), + findClass("com.baidu.tbadk.core.TbadkCoreApplication"), "getInst" ) as Application diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.kt b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.kt index ae05c32f..db85e673 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.kt +++ b/app/src/main/java/gm/tieba/tabswitch/widget/NavigationBar.kt @@ -15,9 +15,7 @@ class NavigationBar(thisObject: Any) : XposedContext() { ) fun addTextButton(text: String?, l: View.OnClickListener?) { - val controlAlignClass = XposedHelpers.findClass( - "com.baidu.tbadk.core.view.NavigationBar\$ControlAlign", sClassLoader - ) + val controlAlignClass = findClass("com.baidu.tbadk.core.view.NavigationBar\$ControlAlign") val horizontalRight = controlAlignClass.enumConstants.find { it.toString() == "HORIZONTAL_RIGHT" } ?: throw IllegalStateException("HORIZONTAL_RIGHT enum constant not found") val textView = XposedHelpers.callMethod( diff --git a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.kt b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.kt index d66f2027..b281c746 100644 --- a/app/src/main/java/gm/tieba/tabswitch/widget/Switch.kt +++ b/app/src/main/java/gm/tieba/tabswitch/widget/Switch.kt @@ -17,23 +17,16 @@ class Switch : XposedContext() { private var mMethods: Array init { - val cls = - XposedHelpers.findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView", sClassLoader) + val cls = findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView") bdSwitch = XposedHelpers.newInstance(cls, getContext()) as View mMethods = cls.declaredMethods } fun setOnSwitchStateChangeListener(l: InvocationHandler) { val clazz: Class<*> = try { - XposedHelpers.findClass( - "com.baidu.adp.widget.BdSwitchView.BdSwitchView\$b", - sClassLoader - ) + findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView\$b") } catch (e: ClassNotFoundError) { - XposedHelpers.findClass( - "com.baidu.adp.widget.BdSwitchView.BdSwitchView\$a", - sClassLoader - ) + findClass("com.baidu.adp.widget.BdSwitchView.BdSwitchView\$a") } val proxy = Proxy.newProxyInstance(sClassLoader, arrayOf(clazz), l) XposedHelpers.callMethod(bdSwitch, "setOnSwitchStateChangeListener", proxy) From 0201576b00d03b00a3684289c7bb58907cbb246d Mon Sep 17 00:00:00 2001 From: mkx173 Date: Sun, 5 May 2024 18:40:00 -0700 Subject: [PATCH 140/158] feat: update purge rules --- app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt index c71d1c0a..49c13976 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt @@ -246,6 +246,9 @@ class Purge : XposedContext(), IHooker, Obfuscated { ) { param -> val postList = XposedHelpers.getObjectField(param.thisObject, "post_list") as? MutableList<*> postList?.removeIf { post -> XposedHelpers.getObjectField(post, "aichat_bot_comment_card") != null } + + // AI聊天卡片 + XposedHelpers.setObjectField(param.thisObject, "aichat_bot_card", null) } // 吧页面 From 6bbd8199a44fe2dc88cc237f980ea072ab81f0cc Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 6 May 2024 00:47:46 -0700 Subject: [PATCH 141/158] refactor: remove rxjava --- app/build.gradle.kts | 1 - .../java/gm/tieba/tabswitch/XposedContext.kt | 3 ++- .../hooker/deobfuscation/Deobfuscation.kt | 14 ++++++-------- .../deobfuscation/DeobfuscationHooker.kt | 18 ++++++++++++++---- .../deobfuscation/DeobfuscationViewModel.kt | 18 ------------------ 5 files changed, 22 insertions(+), 32 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ea9c23cd..99359d2a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -93,7 +93,6 @@ dependencies { implementation("androidx.room:room-ktx:$roomVersion") ksp("androidx.room:room-compiler:$roomVersion") - implementation("io.reactivex.rxjava3:rxjava:3.1.8") implementation("org.luckypray:dexkit:2.0.1") implementation("com.squareup.okhttp3:okhttp:4.12.0") implementation("dev.rikka.ndk.thirdparty:cxx:1.2.0") diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt b/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt index 3d8ff14e..e6d779fd 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt +++ b/app/src/main/java/gm/tieba/tabswitch/XposedContext.kt @@ -9,6 +9,7 @@ import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodReplacement import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.callbacks.XCallback import java.lang.ref.WeakReference import java.lang.reflect.Method @@ -99,7 +100,7 @@ abstract class XposedContext { ): XC_MethodHook.Unhook { return XposedHelpers.findAndHookMethod( className, sClassLoader, methodName, *parameterTypes, - object : XC_MethodHook(-1) { + object : XC_MethodHook(XCallback.PRIORITY_LOWEST) { override fun afterHookedMethod(param: MethodHookParam) { afterHook(param) } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.kt index 9712f5c2..e3304888 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.kt @@ -4,13 +4,11 @@ import android.content.Context import gm.tieba.tabswitch.XposedContext import gm.tieba.tabswitch.dao.AcRules.putRule import gm.tieba.tabswitch.dao.Preferences.putSignature -import io.reactivex.rxjava3.subjects.PublishSubject import org.luckypray.dexkit.DexKitBridge import org.luckypray.dexkit.query.FindClass import org.luckypray.dexkit.query.FindMethod import org.luckypray.dexkit.result.MethodDataList import java.util.Objects -import java.util.function.Consumer import java.util.zip.ZipFile class Deobfuscation : XposedContext() { @@ -24,24 +22,24 @@ class Deobfuscation : XposedContext() { } private fun forEachProgressed( - progress: PublishSubject, + hooker: DeobfuscationHooker, collection: Collection, - action: Consumer + action: (T) -> Unit ) { val size = collection.size collection.forEachIndexed { index, item -> - progress.onNext((index + 1).toFloat() / size) - action.accept(item) + hooker.progress = (index + 1).toFloat() / size + action(item) } } - fun dexkit(progress: PublishSubject, context: Context) { + fun dexkit(context: Context, hooker: DeobfuscationHooker) { load("dexkit") packageResource = context.packageResourcePath val bridge = DexKitBridge.create(packageResource) Objects.requireNonNull(bridge) - forEachProgressed(progress, matchers) { matcher: Matcher -> + forEachProgressed(hooker, matchers) { matcher: Matcher -> val methodDataList = MethodDataList() matcher.classMatcher?.let { classMatcher -> diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.kt index 2749533f..9a44b12d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationHooker.kt @@ -25,10 +25,15 @@ import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.getTbVersion import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.isDexChanged import gm.tieba.tabswitch.hooker.deobfuscation.DeobfuscationHelper.saveAndRestart import kotlin.concurrent.thread +import kotlin.properties.Delegates class DeobfuscationHooker(private val mMatchers: List) : XposedContext(), IHooker { - private val viewModel = DeobfuscationViewModel() + var progress : Float by Delegates.observable(0f) { _, _, new -> + updateProgress(new) + } + + private val deobfuscation = Deobfuscation() private lateinit var mActivity: Activity private lateinit var mProgress: View private lateinit var mMessage: TextView @@ -68,12 +73,11 @@ class DeobfuscationHooker(private val mMatchers: List) : XposedContext( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT ) ) - viewModel.progress.subscribe { progress: Float -> setProgress(progress) } thread { try { setMessage("搜索资源,字符串和方法调用") - viewModel.deobfuscate(mActivity, mMatchers) + performDeobfuscation(mActivity, mMatchers) XposedBridge.log("Deobfuscation complete, current version: ${getTbVersion(mActivity)}") hooks.forEach { it.unhook() } @@ -90,6 +94,12 @@ class DeobfuscationHooker(private val mMatchers: List) : XposedContext( } } + private fun performDeobfuscation(context: Context, matchers: List) { + deobfuscation.setMatchers(matchers) + deobfuscation.dexkit(context, this) + deobfuscation.saveDexSignatureHashCode() + } + private fun disableStartAndFinishActivity(): List { return listOf( hookReplaceMethod(Instrumentation::class.java, "execStartActivity", @@ -158,7 +168,7 @@ class DeobfuscationHooker(private val mMatchers: List) : XposedContext( mActivity.runOnUiThread { mMessage.text = message } } - private fun setProgress(progress: Float) { + private fun updateProgress(progress: Float) { mActivity.runOnUiThread { mProgress.layoutParams = mProgress.layoutParams.apply { height = mMessage.height diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.kt deleted file mode 100644 index fdd2a542..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/DeobfuscationViewModel.kt +++ /dev/null @@ -1,18 +0,0 @@ -package gm.tieba.tabswitch.hooker.deobfuscation - -import android.content.Context -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.subjects.PublishSubject - -class DeobfuscationViewModel { - - private val _progress = PublishSubject.create() - val progress: Observable = _progress - private val deobfuscation = Deobfuscation() - - fun deobfuscate(context: Context, matchers: List) { - deobfuscation.setMatchers(matchers) - deobfuscation.dexkit(_progress, context) - deobfuscation.saveDexSignatureHashCode() - } -} From baa9d9222a934a5c1f60606816c5c4f11b8ee8fc Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 8 May 2024 22:08:19 -0700 Subject: [PATCH 142/158] feat: prevent auto refreshing of personalized page --- .../java/gm/tieba/tabswitch/XposedInit.kt | 4 ++- .../gm/tieba/tabswitch/hooker/TSPreference.kt | 1 + .../tabswitch/hooker/extra/AutoRefresh.kt | 36 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/extra/AutoRefresh.kt diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt index dbabe6b9..41513713 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt @@ -59,6 +59,7 @@ import gm.tieba.tabswitch.hooker.eliminate.PurgeVideo import gm.tieba.tabswitch.hooker.eliminate.RedTip import gm.tieba.tabswitch.hooker.eliminate.RemoveUpdate import gm.tieba.tabswitch.hooker.eliminate.UserFilter +import gm.tieba.tabswitch.hooker.extra.AutoRefresh import gm.tieba.tabswitch.hooker.extra.ForbidGesture import gm.tieba.tabswitch.hooker.extra.Hide import gm.tieba.tabswitch.hooker.extra.StackTrace @@ -164,7 +165,8 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag PurgeVideo(), SelectClipboard(), UserFilter(), - TransitionAnimation() + TransitionAnimation(), + AutoRefresh() ) val matchers = ArrayList(hookers.size + 1) matchers.add(TbToast()) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt index 3d04b5f8..19ac4558 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt @@ -266,6 +266,7 @@ class TSPreference : XposedContext(), IHooker, Obfuscated { preferenceLayout.addView(SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)) preferenceLayout.addView(SwitchButtonHolder(activity, "用赞踩差数代替赞数", "agree_num", SwitchButtonHolder.TYPE_SWITCH)) preferenceLayout.addView(SwitchButtonHolder(activity, "禁止检测通知开启状态", "notification_detect", SwitchButtonHolder.TYPE_SWITCH)) + preferenceLayout.addView(SwitchButtonHolder(activity, "禁止首页自动刷新", "auto_refresh", SwitchButtonHolder.TYPE_SWITCH)) preferenceLayout.addView(createButton(TRACE, "希望有一天不再需要贴吧TS", true) { _ -> activity.startActivity(Intent().apply { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/AutoRefresh.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/AutoRefresh.kt new file mode 100644 index 00000000..ab997237 --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/AutoRefresh.kt @@ -0,0 +1,36 @@ +package gm.tieba.tabswitch.hooker.extra + +import de.robv.android.xposed.XposedHelpers +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.hooker.IHooker +import gm.tieba.tabswitch.hooker.Obfuscated +import gm.tieba.tabswitch.hooker.deobfuscation.Matcher +import gm.tieba.tabswitch.hooker.deobfuscation.StringMatcher + +class AutoRefresh : XposedContext(), IHooker, Obfuscated { + + override fun key(): String { + return "auto_refresh" + } + + override fun matchers(): List { + return listOf( + StringMatcher("recommend_frs_refresh_time") + ) + } + + override fun hook() { + findRule(matchers()) { _, clazz, method -> + val md = XposedHelpers.findMethodExactIfExists( + findClass(clazz), + method, + Boolean::class.javaPrimitiveType + ) ?: XposedHelpers.findMethodExactIfExists( + findClass(clazz), + method + ) + md?.let { hookReplaceMethod(it) { false } } + } + } +} From 6278befc21a066de0805380f1faeecc139dca212 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Thu, 9 May 2024 18:19:19 -0700 Subject: [PATCH 143/158] chore: bump version --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 99359d2a..06a36f54 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,11 +31,11 @@ android { minSdk = 28 targetSdk = sdk versionCode = gitCommitCount - versionName = "3.0.0-beta" + versionName = "3.0.0" if (versionName!!.contains("alpha") || versionName!!.contains("beta")) { versionNameSuffix = ".$commitCountSinceLatestTag" } - buildConfigField("String", "TARGET_VERSION", "\"12.60.1.1\"") + buildConfigField("String", "TARGET_VERSION", "\"12.60.4.1\"") buildConfigField("String", "MIN_VERSION", "\"12.53.1.0\"") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" From 0ad7ce979fabfe6168862dca94bd89d805b0a851 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 4 Jun 2024 18:56:04 -0700 Subject: [PATCH 144/158] chore: update AGP version --- settings.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index b9a0458f..7660bb5e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id("com.android.application") version "8.4.0" - id("com.android.library") version "8.4.0" + id("com.android.application") version "8.4.1" + id("com.android.library") version "8.4.1" id("org.jetbrains.kotlin.android") version "1.9.0" id("com.google.devtools.ksp") version "1.9.0-1.0.13" apply false } From caf23b1b4e2bb841df1964e3b55131981362f7ca Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 4 Jun 2024 18:56:26 -0700 Subject: [PATCH 145/158] fix: Ripple on 12.62 --- app/build.gradle.kts | 2 +- app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 06a36f54..e180a362 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,7 +31,7 @@ android { minSdk = 28 targetSdk = sdk versionCode = gitCommitCount - versionName = "3.0.0" + versionName = "3.0.1" if (versionName!!.contains("alpha") || versionName!!.contains("beta")) { versionNameSuffix = ".$commitCountSinceLatestTag" } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt index f78fed67..8d8e6c09 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/add/Ripple.kt @@ -10,6 +10,7 @@ import android.util.AttributeSet import android.util.SparseArray import android.view.View import android.widget.RelativeLayout +import de.robv.android.xposed.XposedHelpers import gm.tieba.tabswitch.XposedContext import gm.tieba.tabswitch.hooker.IHooker import gm.tieba.tabswitch.util.dipToPx @@ -25,7 +26,11 @@ class Ripple : XposedContext(), IHooker { override fun hook() { - val subPbLayoutClass = findClass("com.baidu.tieba.pb.pb.sub.SubPbLayout") + val subPbLayoutClass = try { + findClass("com.baidu.tieba.pb.pb.sub.SubPbLayout") + } catch (e: XposedHelpers.ClassNotFoundError) { + findClass("com.baidu.tieba.pb.sub.view.SubPbLayout") + } // 楼中楼 val md: Method = try { From 9c179a5097be1abfd0e891f64a58aa1969fd1134 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 28 Jun 2024 20:25:15 -0700 Subject: [PATCH 146/158] feat: update purge rules --- app/src/main/assets/Purge.js | 1 + .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/Purge.js b/app/src/main/assets/Purge.js index 8ec64116..014e7f50 100644 --- a/app/src/main/assets/Purge.js +++ b/app/src/main/assets/Purge.js @@ -18,6 +18,7 @@ "ai_chatroom_guide", "friend_forum", "game_card_guide", + "area_data", ]; } else if ( // 一键签到页面 diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt index 49c13976..c17d7b31 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt @@ -98,19 +98,20 @@ class Purge : XposedContext(), IHooker, Obfuscated { if (method == "invoke") { hookBeforeMethod(clazz, method) { param -> getObjectField(param.thisObject, JSONObject::class.java)?.apply { + val removeTabType = listOf("202", "6") val indexTabInfo = getJSONArray("index_tab_info") val newIndexTabInfo = JSONArray() if (DeobfuscationHelper.isTbSatisfyVersionRequirement("12.59")) { for (i in 0 until indexTabInfo.length()) { val currTab = indexTabInfo.getJSONObject(i) - if (currTab.getString("is_main_tab") == "1" && currTab.getString("tab_type") != "6") { + if (currTab.getString("is_main_tab") == "1" && currTab.getString("tab_type") !in removeTabType) { newIndexTabInfo.put(currTab) } } } else { for (i in 0 until indexTabInfo.length()) { val currTab = indexTabInfo.getJSONObject(i) - if (currTab.getString("tab_type") != "202" && currTab.getString("tab_type") != "6") { + if (currTab.getString("tab_type") !in removeTabType) { newIndexTabInfo.put(currTab) } } From 31945a5f2e41865ad6573f2942d9c18c64ed7dbc Mon Sep 17 00:00:00 2001 From: mkx173 Date: Fri, 28 Jun 2024 21:07:14 -0700 Subject: [PATCH 147/158] chore: update AGP --- app/build.gradle.kts | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e180a362..aab58fd4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,11 +31,11 @@ android { minSdk = 28 targetSdk = sdk versionCode = gitCommitCount - versionName = "3.0.1" + versionName = "3.0.2" if (versionName!!.contains("alpha") || versionName!!.contains("beta")) { versionNameSuffix = ".$commitCountSinceLatestTag" } - buildConfigField("String", "TARGET_VERSION", "\"12.60.4.1\"") + buildConfigField("String", "TARGET_VERSION", "\"12.64.0.0\"") buildConfigField("String", "MIN_VERSION", "\"12.53.1.0\"") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 32a4a9d1..1d3e2c1d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Aug 24 21:31:51 CST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle.kts b/settings.gradle.kts index 7660bb5e..d48a4f09 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id("com.android.application") version "8.4.1" - id("com.android.library") version "8.4.1" + id("com.android.application") version "8.5.0" + id("com.android.library") version "8.5.0" id("org.jetbrains.kotlin.android") version "1.9.0" id("com.google.devtools.ksp") version "1.9.0-1.0.13" apply false } From 473e04ea11e53303cd89b2bceb9ecc7005a81582 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 23 Jul 2024 02:48:33 -0700 Subject: [PATCH 148/158] fix: NullPointerException in refreshCache --- app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt b/app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt index 0cc2c5a9..f2a643af 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Adp.kt @@ -30,8 +30,8 @@ object Adp : XposedContext() { hookBeforeMethod("tbclient.ForumRecommend.DataRes\$Builder", "build", Boolean::class.javaPrimitiveType) { param -> val forums: MutableSet = HashSet() - val likeForumList = XposedHelpers.getObjectField(param.thisObject, "like_forum") as List<*> - likeForumList.forEach { forums.add(XposedHelpers.getObjectField(it, "forum_name") as String) } + val likeForumList = XposedHelpers.getObjectField(param.thisObject, "like_forum") as? List<*> + likeForumList?.forEach { forums.add(XposedHelpers.getObjectField(it, "forum_name") as String) } putLikeForum(forums) } } From ceaa8ab63659bd8dc7163ef4e89c4217270190ff Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 23 Jul 2024 03:04:29 -0700 Subject: [PATCH 149/158] fix: NullPointerException in PurgeEnter --- .../java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt index 11721092..494f5e50 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeEnter.kt @@ -59,10 +59,10 @@ class PurgeEnter : XposedContext(), IHooker, Obfuscated { hookReplaceMethod(clazz, method) { param -> val pbListView = getObjectField(param.thisObject, "com.baidu.tbadk.core.view.PbListView") val pbListViewInnerView = - XposedHelpers.callMethod(pbListView, mPbListViewInnerViewConstructorName) as View + XposedHelpers.callMethod(pbListView, mPbListViewInnerViewConstructorName) as? View val bdListView = getObjectField(param.thisObject, "com.baidu.adp.widget.ListView.BdListView") - if (pbListViewInnerView.parent == null) { + if (pbListViewInnerView?.parent == null) { XposedHelpers.callMethod(bdListView, "setNextPage", pbListView) XposedHelpers.callMethod(bdListView, "setOverScrollMode", View.OVER_SCROLL_ALWAYS) } From 63dec61075fb2029185ad2d09cc9cb36b833ac50 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 23 Jul 2024 03:06:19 -0700 Subject: [PATCH 150/158] chore: update version code --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index aab58fd4..8e5bd7a0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,11 +31,11 @@ android { minSdk = 28 targetSdk = sdk versionCode = gitCommitCount - versionName = "3.0.2" + versionName = "3.0.3-beta" if (versionName!!.contains("alpha") || versionName!!.contains("beta")) { versionNameSuffix = ".$commitCountSinceLatestTag" } - buildConfigField("String", "TARGET_VERSION", "\"12.64.0.0\"") + buildConfigField("String", "TARGET_VERSION", "\"12.65.1.1\"") buildConfigField("String", "MIN_VERSION", "\"12.53.1.0\"") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" From 171186e0cddd0c12757e537dca6d3fd4c32258fe Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 5 Aug 2024 06:45:57 -0700 Subject: [PATCH 151/158] fix: black screen on my page --- .../tabswitch/hooker/eliminate/PurgeMy.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt index a02bcff0..28030b1f 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt @@ -11,6 +11,7 @@ import gm.tieba.tabswitch.hooker.deobfuscation.Matcher import gm.tieba.tabswitch.hooker.deobfuscation.SmaliMatcher import gm.tieba.tabswitch.util.getDimen import gm.tieba.tabswitch.util.getObjectField +import org.json.JSONArray import org.luckypray.dexkit.query.matchers.ClassMatcher class PurgeMy : XposedContext(), IHooker, Obfuscated { @@ -87,5 +88,22 @@ class PurgeMy : XposedContext(), IHooker, Obfuscated { (mView?.parent as? ViewGroup)?.removeView(mView) } } + + // 我的页面 AB test + hookBeforeMethod( + "com.baidu.tbadk.abtest.UbsABTestDataManager", + "parseJSONArray", + JSONArray::class.java + ) { param -> + val currentABTestJson = param.args[0] as JSONArray + val newABTestJson = JSONArray() + for (i in 0 until currentABTestJson.length()) { + val currTest = currentABTestJson.getJSONObject(i) + if (!currTest.getString("sid").startsWith("12_64_my_tab_new")) { + newABTestJson.put(currTest) + } + } + param.args[0] = newABTestJson + } } } From be255a69892b73fea67592316d06e9765a406f59 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 5 Aug 2024 06:52:47 -0700 Subject: [PATCH 152/158] feat: update purge rule --- app/src/main/java/gm/tieba/tabswitch/XposedInit.kt | 3 +-- .../main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt index 41513713..1bd03a76 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt @@ -80,8 +80,7 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag override fun handleLoadPackage(lpparam: LoadPackageParam) { if (("com.baidu.tieba" != lpparam.packageName && XposedHelpers.findClassIfExists( "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader - ) == null) || !lpparam.isFirstApplication - ) return + ) == null)) return sClassLoader = lpparam.classLoader sAssetManager = XModuleResources.createInstance(sPath, null).assets diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt index c17d7b31..2281383a 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt @@ -223,6 +223,10 @@ class Purge : XposedContext(), IHooker, Obfuscated { if (XposedHelpers.getObjectField(thread, "ala_info") != null) { return@removeIf true } + val gameExt = XposedHelpers.getObjectField(thread, "game_ext") as? String + if (gameExt?.length != 0) { + return@removeIf true + } val worksInfo = XposedHelpers.getObjectField(thread, "works_info") worksInfo != null && XposedHelpers.getObjectField(worksInfo, "is_works") as? Int == 1 } From 655c7dbb1fcc86cf2a3ef6a2416e87cf13e68426 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 5 Aug 2024 07:22:51 -0700 Subject: [PATCH 153/158] feat: remove all AB test --- .../tieba/tabswitch/hooker/eliminate/Purge.kt | 15 ++++------ .../tabswitch/hooker/eliminate/PurgeMy.kt | 30 +++++++++++-------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt index 2281383a..e22e90aa 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt @@ -378,21 +378,16 @@ class Purge : XposedContext(), IHooker, Obfuscated { XposedHelpers.setObjectField(param.thisObject, "novel_recom_card", null) } - // 首页样式 AB test + // 移除所有AB test hookBeforeMethod( "com.baidu.tbadk.abtest.UbsABTestDataManager", "parseJSONArray", JSONArray::class.java ) { param -> - val currentABTestJson = param.args[0] as JSONArray - val newABTestJson = JSONArray() - for (i in 0 until currentABTestJson.length()) { - val currTest = currentABTestJson.getJSONObject(i) - if (!currTest.getString("sid").startsWith("12_57_5_home_search")) { - newABTestJson.put(currTest) - } - } - param.args[0] = newABTestJson + val exemptSidList = listOf("12_57_frs_pre_request", "12_53_frs_loading_opt") + val sidArray = JSONArray() + exemptSidList.forEach { sidArray.put(JSONObject().put("sid", it)) } + param.args[0] = sidArray } } diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt index 28030b1f..004a9d5b 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/PurgeMy.kt @@ -5,6 +5,7 @@ import android.view.ViewGroup import de.robv.android.xposed.XposedHelpers import gm.tieba.tabswitch.XposedContext import gm.tieba.tabswitch.dao.AcRules.findRule +import gm.tieba.tabswitch.dao.Preferences.getBoolean import gm.tieba.tabswitch.hooker.IHooker import gm.tieba.tabswitch.hooker.Obfuscated import gm.tieba.tabswitch.hooker.deobfuscation.Matcher @@ -89,21 +90,24 @@ class PurgeMy : XposedContext(), IHooker, Obfuscated { } } - // 我的页面 AB test - hookBeforeMethod( - "com.baidu.tbadk.abtest.UbsABTestDataManager", - "parseJSONArray", - JSONArray::class.java - ) { param -> - val currentABTestJson = param.args[0] as JSONArray - val newABTestJson = JSONArray() - for (i in 0 until currentABTestJson.length()) { - val currTest = currentABTestJson.getJSONObject(i) - if (!currTest.getString("sid").startsWith("12_64_my_tab_new")) { - newABTestJson.put(currTest) + // Skip because we already disabled all AB tests in purge + if (!getBoolean("purge")) { + // 我的页面 AB test + hookBeforeMethod( + "com.baidu.tbadk.abtest.UbsABTestDataManager", + "parseJSONArray", + JSONArray::class.java + ) { param -> + val currentABTestJson = param.args[0] as JSONArray + val newABTestJson = JSONArray() + for (i in 0 until currentABTestJson.length()) { + val currTest = currentABTestJson.getJSONObject(i) + if (!currTest.getString("sid").startsWith("12_64_my_tab_new")) { + newABTestJson.put(currTest) + } } + param.args[0] = newABTestJson } - param.args[0] = newABTestJson } } } From f24886a2356c775bcec34ee19ade84d4b0ac5fdf Mon Sep 17 00:00:00 2001 From: mkx173 Date: Mon, 5 Aug 2024 10:18:58 -0700 Subject: [PATCH 154/158] fix: game_ext does not exist in older versions --- app/build.gradle.kts | 2 +- .../java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8e5bd7a0..55336709 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -35,7 +35,7 @@ android { if (versionName!!.contains("alpha") || versionName!!.contains("beta")) { versionNameSuffix = ".$commitCountSinceLatestTag" } - buildConfigField("String", "TARGET_VERSION", "\"12.65.1.1\"") + buildConfigField("String", "TARGET_VERSION", "\"12.66.1.0\"") buildConfigField("String", "MIN_VERSION", "\"12.53.1.0\"") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt index e22e90aa..08631001 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.kt @@ -223,9 +223,12 @@ class Purge : XposedContext(), IHooker, Obfuscated { if (XposedHelpers.getObjectField(thread, "ala_info") != null) { return@removeIf true } - val gameExt = XposedHelpers.getObjectField(thread, "game_ext") as? String - if (gameExt?.length != 0) { - return@removeIf true + try { + val gameExt = XposedHelpers.getObjectField(thread, "game_ext") as? String + if (gameExt?.length != 0) { + return@removeIf true + } + } catch (ignored: NoSuchFieldError) { } val worksInfo = XposedHelpers.getObjectField(thread, "works_info") worksInfo != null && XposedHelpers.getObjectField(worksInfo, "is_works") as? Int == 1 From 8014c20187e58b8adf874535dadefbbccf32fcb1 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 6 Aug 2024 09:25:18 -0700 Subject: [PATCH 155/158] fix: NPE in OriginSrc --- .../tieba/tabswitch/hooker/auto/OriginSrc.kt | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.kt index 261c555d..39163721 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/auto/OriginSrc.kt @@ -14,6 +14,7 @@ import gm.tieba.tabswitch.XposedContext import gm.tieba.tabswitch.dao.AcRules.findRule import gm.tieba.tabswitch.dao.Preferences.getBoolean import gm.tieba.tabswitch.hooker.IHooker +import org.json.JSONException import org.json.JSONObject class OriginSrc : XposedContext(), IHooker { @@ -128,24 +129,27 @@ class OriginSrc : XposedContext(), IHooker { "tbclient.FeedPicComponent\$Builder", "build", Boolean::class.javaPrimitiveType, ) { param -> - val schema = XposedHelpers.getObjectField(param.thisObject, "schema") as String - val paramsJson = Uri.parse(schema).getQueryParameter("params") + val schema = XposedHelpers.getObjectField(param.thisObject, "schema") as? String + val paramsJson = schema?.let { Uri.parse(it).getQueryParameter("params") } paramsJson?.let { schemaParams -> val jsonObject = JSONObject(schemaParams) - val pageParams = jsonObject.getJSONObject("pageParams") - val picDataList = pageParams.getJSONArray("pic_data_list") - for (i in 0 until picDataList.length()) { - val picData = picDataList.getJSONObject(i) - val originPicUrl = picData.getString("origin_pic_url") - picData.apply { - put("big_pic_url", originPicUrl) - put("small_pic_url", originPicUrl) - put("is_show_origin_btn", 0) + try { + val pageParams = jsonObject.getJSONObject("pageParams") + val picDataList = pageParams.getJSONArray("pic_data_list") + for (i in 0 until picDataList.length()) { + val picData = picDataList.getJSONObject(i) + val originPicUrl = picData.getString("origin_pic_url") + picData.apply { + put("big_pic_url", originPicUrl) + put("small_pic_url", originPicUrl) + put("is_show_origin_btn", 0) + } } + val modifiedUri = "tiebaapp://router/portal?params=$jsonObject" + XposedHelpers.setObjectField(param.thisObject, "schema", modifiedUri) + } catch (ignored: JSONException) { } - val modifiedUri = "tiebaapp://router/portal?params=$jsonObject" - XposedHelpers.setObjectField(param.thisObject, "schema", modifiedUri) } }) } From b72a7581d072bb68aab37962e1763076adf19e16 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 6 Aug 2024 09:25:44 -0700 Subject: [PATCH 156/158] feat: add debugging logs during initialization --- app/src/main/java/gm/tieba/tabswitch/XposedInit.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt index 1bd03a76..94a0d635 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt @@ -82,6 +82,8 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag "com.baidu.tieba.tblauncher.MainTabActivity", lpparam.classLoader ) == null)) return + XposedBridge.log("Loading TiebaTS, version ${BuildConfig.VERSION_CODE}") + sClassLoader = lpparam.classLoader sAssetManager = XModuleResources.createInstance(sPath, null).assets mAppComponentFactory = sClassLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory") @@ -119,12 +121,14 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag Preferences.init(getContext()) AcRules.init(getContext()) DeobfuscationHelper.sCurrentTbVersion = getTbVersion(getContext()) + XposedBridge.log("TB client detected, version ${DeobfuscationHelper.sCurrentTbVersion}") // Workaround to address an issue with LSPatch (unable to open personal homepage) // com.baidu.tieba.flutter.base.view.FlutterPageActivity must be instantiated by com.baidu.nps.hook.component.NPSComponentFactory // However, LSPatch incorrectly sets appComponentFactory to null, causing android.app.Instrumentation.getFactory to fall back to AppComponentFactory.DEFAULT // (see https://github.com/LSPosed/LSPatch/blob/bbe8d93fb9230f7b04babaf1c4a11642110f55a6/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L173) if (getContext().applicationInfo.appComponentFactory == null) { + XposedBridge.log("Applying LSPatch workaround") hookAfterMethod( Instrumentation::class.java, "getFactory", String::class.java @@ -175,6 +179,9 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag } } + val enabledKeys = getAll().filter { (_, value) -> value is Boolean && value == true }.keys + XposedBridge.log("Enabled hooks: ${enabledKeys.joinToString(", ")}") + val matchersList = matchers.flatMap { it.matchers() }.toMutableList() // Remove matchers that does not satisfy version requirement @@ -209,7 +216,7 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag ).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) }) } } - XposedBridge.log("Deobfuscation") + XposedBridge.log("Tb version changed. Performing deobfuscation") DeobfuscationHooker(matchersList).hook() return@hookAfterMethod From 1a6443bbe4dbb9c76e9fe1d3ab449134f9d3c0c4 Mon Sep 17 00:00:00 2001 From: mkx173 Date: Tue, 6 Aug 2024 11:10:41 -0700 Subject: [PATCH 157/158] feat: redirect internal log --- .../java/gm/tieba/tabswitch/XposedInit.kt | 21 +++++-- .../gm/tieba/tabswitch/dao/Preferences.kt | 3 - .../gm/tieba/tabswitch/hooker/TSPreference.kt | 9 ++- .../tabswitch/hooker/extra/LogRedirect.kt | 62 +++++++++++++++++++ 4 files changed, 82 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/extra/LogRedirect.kt diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt index 94a0d635..b6319c9d 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.kt @@ -8,6 +8,7 @@ import android.app.Instrumentation import android.content.Intent import android.content.res.XModuleResources import android.net.Uri +import android.os.Build import android.os.Bundle import android.text.TextUtils import de.robv.android.xposed.IXposedHookLoadPackage @@ -23,6 +24,7 @@ import gm.tieba.tabswitch.dao.Adp.initializeAdp import gm.tieba.tabswitch.dao.Preferences import gm.tieba.tabswitch.dao.Preferences.getAll import gm.tieba.tabswitch.dao.Preferences.getBoolean +import gm.tieba.tabswitch.dao.Preferences.putBoolean import gm.tieba.tabswitch.dao.Preferences.putSignature import gm.tieba.tabswitch.hooker.IHooker import gm.tieba.tabswitch.hooker.Obfuscated @@ -62,6 +64,7 @@ import gm.tieba.tabswitch.hooker.eliminate.UserFilter import gm.tieba.tabswitch.hooker.extra.AutoRefresh import gm.tieba.tabswitch.hooker.extra.ForbidGesture import gm.tieba.tabswitch.hooker.extra.Hide +import gm.tieba.tabswitch.hooker.extra.LogRedirect import gm.tieba.tabswitch.hooker.extra.StackTrace import gm.tieba.tabswitch.util.fixAlertDialogWidth import gm.tieba.tabswitch.util.getDialogTheme @@ -169,7 +172,8 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag SelectClipboard(), UserFilter(), TransitionAnimation(), - AutoRefresh() + AutoRefresh(), + LogRedirect() ) val matchers = ArrayList(hookers.size + 1) matchers.add(TbToast()) @@ -179,9 +183,6 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag } } - val enabledKeys = getAll().filter { (_, value) -> value is Boolean && value == true }.keys - XposedBridge.log("Enabled hooks: ${enabledKeys.joinToString(", ")}") - val matchersList = matchers.flatMap { it.matchers() }.toMutableList() // Remove matchers that does not satisfy version requirement @@ -216,7 +217,7 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag ).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) }) } } - XposedBridge.log("Tb version changed. Performing deobfuscation") + XposedBridge.log("Tb version changed, performing deobfuscation") DeobfuscationHooker(matchersList).hook() return@hookAfterMethod @@ -282,6 +283,15 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag } } + val shouldEnableTransitionAnimationFix = Build.VERSION.SDK_INT >= 34 && isTbSatisfyVersionRequirement("12.58.2.1") + if (!shouldEnableTransitionAnimationFix && getBoolean("transition_animation")) { + putBoolean("transition_animation", false) + } + + if (!isModuleBetaVersion && getBoolean("log_redirect")) { + putBoolean("log_redirect", false) + } + val activeHookerKeys = getAll().entries .filter { it.value != false } .map { it.key } @@ -290,6 +300,7 @@ class XposedInit : XposedContext(), IXposedHookZygoteInit, IXposedHookLoadPackag add("ts_pref") add("fragment_tab") } + XposedBridge.log("Enabled hooks: ${activeHookerKeys.joinToString(", ")}") hookers.forEach { hooker -> try { diff --git a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.kt b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.kt index 083d1eb5..41438b88 100644 --- a/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.kt +++ b/app/src/main/java/gm/tieba/tabswitch/dao/Preferences.kt @@ -58,9 +58,6 @@ object Preferences { fun getIsAutoSignEnabled(): Boolean = sTsConfig.getBoolean("auto_sign", false) - fun getTransitionAnimationEnabled(): Boolean = - sTsPreferences.getBoolean("transition_animation", false) - @SuppressLint("ApplySharedPref") fun putPurgeEnabled() { sTsConfig.edit().putBoolean("ze", true).commit() diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt index 19ac4558..0071b1b5 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.kt @@ -26,7 +26,6 @@ import gm.tieba.tabswitch.dao.Preferences.getBoolean import gm.tieba.tabswitch.dao.Preferences.getIsAutoSignEnabled import gm.tieba.tabswitch.dao.Preferences.getIsEULAAccepted import gm.tieba.tabswitch.dao.Preferences.getIsPurgeEnabled -import gm.tieba.tabswitch.dao.Preferences.getTransitionAnimationEnabled import gm.tieba.tabswitch.dao.Preferences.putAutoSignEnabled import gm.tieba.tabswitch.dao.Preferences.putEULAAccepted import gm.tieba.tabswitch.dao.Preferences.putPurgeEnabled @@ -268,6 +267,10 @@ class TSPreference : XposedContext(), IHooker, Obfuscated { preferenceLayout.addView(SwitchButtonHolder(activity, "禁止检测通知开启状态", "notification_detect", SwitchButtonHolder.TYPE_SWITCH)) preferenceLayout.addView(SwitchButtonHolder(activity, "禁止首页自动刷新", "auto_refresh", SwitchButtonHolder.TYPE_SWITCH)) + if (isModuleBetaVersion) { + preferenceLayout.addView(SwitchButtonHolder(activity, "重定向内部日志", "log_redirect", SwitchButtonHolder.TYPE_SWITCH)) + } + preferenceLayout.addView(createButton(TRACE, "希望有一天不再需要贴吧TS", true) { _ -> activity.startActivity(Intent().apply { setClassName(activity, PROXY_ACTIVITY) @@ -327,10 +330,6 @@ class TSPreference : XposedContext(), IHooker, Obfuscated { val transitionAnimation = SwitchButtonHolder(activity, "修复过渡动画", "transition_animation", SwitchButtonHolder.TYPE_SWITCH) val shouldEnableTransitionAnimationFix = Build.VERSION.SDK_INT >= 34 && isTbSatisfyVersionRequirement("12.58.2.1") - if (!shouldEnableTransitionAnimationFix && getTransitionAnimationEnabled()) { - transitionAnimation.bdSwitch.turnOff() - } - transitionAnimation.setOnButtonClickListener { _ -> if (!shouldEnableTransitionAnimationFix) { showTbToast("当前贴吧版本不支持此功能", TbToast.LENGTH_SHORT) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/LogRedirect.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/LogRedirect.kt new file mode 100644 index 00000000..789f359a --- /dev/null +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/LogRedirect.kt @@ -0,0 +1,62 @@ +package gm.tieba.tabswitch.hooker.extra + +import android.util.Log +import de.robv.android.xposed.XposedBridge +import gm.tieba.tabswitch.XposedContext +import gm.tieba.tabswitch.hooker.IHooker + +class LogRedirect : XposedContext(), IHooker { + + override fun key(): String { + return "log_redirect" + } + + override fun hook() { + XposedBridge.log("TbLog redirect enabled") + hookAfterMethod("com.baidu.tieba.log.TbLog", + "d", String::class.java, String::class.java + ) { param -> + (param.args[0] as? String)?.let { tag -> + (param.args[1] as? String)?.let { msg -> + Log.d("TbLog-$tag", msg) + } + } + } + hookAfterMethod("com.baidu.tieba.log.TbLog", + "e", String::class.java, String::class.java + ) { param -> + (param.args[0] as? String)?.let { tag -> + (param.args[1] as? String)?.let { msg -> + Log.e("TbLog-$tag", msg) + } + } + } + hookAfterMethod("com.baidu.tieba.log.TbLog", + "i", String::class.java, String::class.java + ) { param -> + (param.args[0] as? String)?.let { tag -> + (param.args[1] as? String)?.let { msg -> + Log.i("TbLog-$tag", msg) + } + } + } + hookAfterMethod("com.baidu.tieba.log.TbLog", + "v", String::class.java, String::class.java + ) { param -> + (param.args[0] as? String)?.let { tag -> + (param.args[1] as? String)?.let { msg -> + Log.v("TbLog-$tag", msg) + } + } + } + hookAfterMethod("com.baidu.tieba.log.TbLog", + "w", String::class.java, String::class.java + ) { param -> + (param.args[0] as? String)?.let { tag -> + (param.args[1] as? String)?.let { msg -> + Log.w("TbLog-$tag", msg) + } + } + } + } +} From 23eac9b20ce675a30d89cc253aa9977ad354378d Mon Sep 17 00:00:00 2001 From: mkx173 Date: Wed, 7 Aug 2024 03:19:14 -0700 Subject: [PATCH 158/158] feat: improve LogRedirect --- .../gm/tieba/tabswitch/hooker/extra/LogRedirect.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/LogRedirect.kt b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/LogRedirect.kt index 789f359a..5d6fa669 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/LogRedirect.kt +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/LogRedirect.kt @@ -1,6 +1,5 @@ package gm.tieba.tabswitch.hooker.extra -import android.util.Log import de.robv.android.xposed.XposedBridge import gm.tieba.tabswitch.XposedContext import gm.tieba.tabswitch.hooker.IHooker @@ -13,12 +12,13 @@ class LogRedirect : XposedContext(), IHooker { override fun hook() { XposedBridge.log("TbLog redirect enabled") + hookReplaceMethod("com.baidu.searchbox.config.AppConfig", "isDebug") { true } hookAfterMethod("com.baidu.tieba.log.TbLog", "d", String::class.java, String::class.java ) { param -> (param.args[0] as? String)?.let { tag -> (param.args[1] as? String)?.let { msg -> - Log.d("TbLog-$tag", msg) + XposedBridge.log("[D] [$tag] $msg") } } } @@ -27,7 +27,7 @@ class LogRedirect : XposedContext(), IHooker { ) { param -> (param.args[0] as? String)?.let { tag -> (param.args[1] as? String)?.let { msg -> - Log.e("TbLog-$tag", msg) + XposedBridge.log("[E] [$tag] $msg") } } } @@ -36,7 +36,7 @@ class LogRedirect : XposedContext(), IHooker { ) { param -> (param.args[0] as? String)?.let { tag -> (param.args[1] as? String)?.let { msg -> - Log.i("TbLog-$tag", msg) + XposedBridge.log("[I] [$tag] $msg") } } } @@ -45,7 +45,7 @@ class LogRedirect : XposedContext(), IHooker { ) { param -> (param.args[0] as? String)?.let { tag -> (param.args[1] as? String)?.let { msg -> - Log.v("TbLog-$tag", msg) + XposedBridge.log("[V] [$tag] $msg") } } } @@ -54,7 +54,7 @@ class LogRedirect : XposedContext(), IHooker { ) { param -> (param.args[0] as? String)?.let { tag -> (param.args[1] as? String)?.let { msg -> - Log.w("TbLog-$tag", msg) + XposedBridge.log("[W] [$tag] $msg") } } }

%6+$QY1GxCPY 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