diff --git a/APK/com.freestylelibre.app.de_2019-04-22.apk.md5 b/APK/com.freestylelibre.app.de_2019-04-22.apk.md5
new file mode 100644
index 0000000..8f031f6
--- /dev/null
+++ b/APK/com.freestylelibre.app.de_2019-04-22.apk.md5
@@ -0,0 +1 @@
+420735605bacf0e18d2570079ebaa238 APK/com.freestylelibre.app.de_2019-04-22.apk
diff --git a/APK/com.freestylelibre.app.de_2020-02-15.apk.md5 b/APK/com.freestylelibre.app.de_2020-02-15.apk.md5
new file mode 100644
index 0000000..7f71a43
--- /dev/null
+++ b/APK/com.freestylelibre.app.de_2020-02-15.apk.md5
@@ -0,0 +1 @@
+da50eb029158d81461cdf042a2490648 APK/com.freestylelibre.app.de_2020-02-15.apk
diff --git a/README.md b/README.md
index efade26..1ee59dd 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,85 @@
+# Anleitung zum Patchen der App "LibreLink" unter Windows #
+
+**Grundsätzliches:**
+
+Wenn LibreLink als erstes "Gerät" mit einem FreeStyle Libre 2 gekoppelt wird, empfängt es permanent Bluetooth-Daten, um den aktuellen Gewebezucker-Wert zu berechnen und ggf. Alarm zu geben. Angezeigt werden diese Daten jedoch nur, wenn "klassisch" gescannt (der Sensor per NFC ausgelesen) wird. Dieser Patch ermöglicht es, dass [xDrip+](https://github.com/jamorham/xDrip-plus) die errechneten Werte von LibreLink auslesen und permanent anzeigen kann - ein Scannen per NFC ist nicht mehr nötig.
+
+Um die gepatchte App auf einem Android Smartphone installieren zu können, muss auf selbigem in den Einstellungen das "Installieren aus unbekannten Quellen" erlaubt, bzw. unter neueren Android-Versionen eine entsprechende App berechtigt werden, "unbekannte Apps zu installieren".
+
+Die original LibreLink App muss vor der Installation deinstalliert werden. **Dabei geht die Bluetooth-Kopplung zum aktuell laufenden Sensor verloren!** Sinnvollerweise wird der Wechsel der App daher beim Wechsel eines Sensors durchgeführt (falls der Alarm bis dahin per LibreLink erfolgte). Sobald die gepatchte App installiert wurde, müssen ihr noch Rechte auf "Standort" (für Bluetooth-Nutzung) und "Speicher" gewährt werden (in neueren Android-Versionen unter "Einstellungen - Apps & Benachrichtigungen - LibreLink - Berechtigungen", ansonsten ggf. den Menüpunkt "Alarme" in der App öffnen und prüfen, ob man dort nach Rechten gefragt wird). Danach kann ein neuer Sensor gestartet/gekoppelt und die App wie gewohnt genutzt werden.
+
+In den neueren Versionen von xDrip+ (ab ["Nightly Build" vom 15. Juli 2019 oder später](https://github.com/NightscoutFoundation/xDrip/releases) (auf das obere "Assets" klicken und die APK Datei herunterladen)) gibt es in den Einstellungen die Datenquelle "Libre2 (patched App)". Diese ist auszuwählen, um die Werte ohne klassisches Scannen angezeigt zu bekommen. In xDrip+ selbst muss der Sensor ebenfalls gestartet werden, wobei dies kein "Starten" im klassischen (LibreLink) Sinn ist. Es kann etwas dauern, bis die ersten Werte in xDrip+ erscheinen.
+
+**Vorgehen:**
+
+Wer Linux nutzt, kann sich an die englische original Anleitung des [ursprünglichen Projekts](https://github.com/user987654321resu/Libre2-patched-App) halten oder die hier enthaltene `patch.sh` nutzen. Für Windows-Nutzer ist folgende Anleitung eventuell hilfreich, welche im Grunde ein Linux SubSystem in Windows installiert und den Patch innerhalb dieses Systems ausführt.
+
+* Installation des Linux SubSystems
+
+In der Windows Systemsteuerung den Punkt "Windows-Features aktivieren oder deaktivieren" wählen (oder dies einfach in der Cortana-Suchleiste eingeben), dort am Ende den Haken bei "Windows-Subsystem für Linux" auswählen und mittels Klick auf "OK" bestätigen. Den anschließend verlangten Neustart unbedingt durchführen.
+Im "Microsoft Store" die App "Debian" installieren bzw. in der [Microsoft Dokumentation](https://docs.microsoft.com/de-de/windows/wsl/install-win10) zu dem Thema den Link "Debian GNU/Linux" auswählen und durch den Store bis zur Installation führen lassen. Anschließend das SubSystem Debian starten.
+
+* Einrichtung des Linux SubSystems
+
+Beim ersten Start des SubSystems wird nach einem Benutzernamen gefragt, der frei wählbar ist (hier aber bitte nur Kleinbuchstaben verwenden, ggf. Ziffern dahinter - keine Großbuchstaben). Sinnvollerweise nutzt man hier seinen eigenen Windows-Benutzernamen. Ebenso muss ein Passwort für diesen Benutzer vergeben werden (nicht überspringen, sondern wirklich ein Passwort setzen - dieses sieht man während der Eingabe nicht, davon nicht irritieren lassen). Hier macht es ggf. auch Sinn, das eigene Windows-Passwort zu setzen (muss aber beides nicht zwingend sein).
+Das Grundsystem ist nun vorhanden und muss mit benötigten Werkzeugen (Tools) versorgt werden. Dazu wird mittels dem Befehl `sudo apt-get update` die Paketliste auf den neuen Stand gebracht. Das eben vergebene Passwort wird dabei einmal abgefragt und ist einzugeben. Anschließend wird der Git-Client mittels `sudo apt-get install git` installiert. Die Frage, ob alle aufgeführten Pakete installiert werden sollen, wird bestätigt (Enter/Return-Taste drücken reicht dazu aus).
+
+* Clone dieses Repositories
+
+Mittels `git clone https://github.com/TinoKossmann/LibreLink-xDrip-Patch` wird dieses Repository heruntergeladen und anschließend per `cd LibreLink-xDrip-Patch` in das neue Verzeichnis gewechselt (Tipp: `cd Li` eintippen und Tabulator-Taste drücken). Bei Bedarf kann nun mit `ls -l` der Inhalt geprüft werden.
+
+* Installation weiterer Tools
+
+Weitere, benötigte Tools werden nun mittels `./install-apt-dependencies.sh` (Tipp: auch hier, `./inst` eintippen und Tabulator-Taste drücken) installiert. Sollte auch hier wieder nach einem Passwort gefragt werden, handelt es sich um das vorhin vergebene (i.d.R. wird aber nicht mehr danach gefragt). Die Frage nach der Paketliste wird wieder bestätigt.
+
+* Laden der original LibreLink App
+
+Wer die original APK-Datei nicht selbst herunterladen möchte, kann diese mittels `./download.sh` herunterladen. Dabei wird auch das zusätzlich benötigte Tool apktool installiert, welches im Debian-Repository in einer hier nicht ohne weiteres funktionierenden Version enthalten ist.
+
+* Patchen und Signieren der App
+
+Mittels `./patch.sh` wird alles nötige erledigt. Dies nimmt einige Zeit in Anspruch. Normalerweise sollten alle Schritte mit grünem "okay" abgeschlossen werden und am Ende der Hinweis erscheinen, dass die gepatchte APK-Datei im Verzeichnis C:\APK\ zu finden ist. Per `exit` kann das Fenster nun geschlossen werden.
+
+**Video Walkthrough:**
+
+In [diesem Video](https://www.youtube.com/watch?v=ezpGM2jR89A) ist die Anleitung einmal durchgespielt worden.
+
+**Weitere Hinweise:**
+
+Sollten auf dem PC "Internet Sicherheitssoftware" installiert sein (v.a. "Kaspersky Internet Security 2019" o.ä.), kann es nötig sein, diese temporär zu deaktivieren, da das Linux-Subsystem ansonsten keine Verbindung zum Internet erhält.
+
+Die gepatchte App läuft als sog. "Vordergrunddienst". Es ist daher normal, dass oben in der Taskleiste eine "Foreground Service Notification" erscheint.
+
+Die Verbindung zu LibreView bzw. allen Onlinediensten von Abbott wurden entfernt.
+
+Weiterhin gilt die Einschränkung, dass ein per Smartphone gestarteter Sensor nicht mit dem Lesegerät ausgelesen werden kann. Die Nutzung der gepatchten App und ihrer Vorteile bedeutet zwangsweise, dass das Lesegerät nicht mehr für diesen Sensor genutzt werden kann.
+
+LibreLink 2.3.0 erfordert Android 5.0 oder höher.
+
+Eine gute Anleitung zum Umgang mit xDrip+ in Verbindung mit der gepatchten App findet man u.a. [hier](https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Hardware/Libre2.html).
+
+**Grundsätzliches Vorgehen:**
+
+(nur rudimentär, dies soll nur die Anleitung zum Patchen der App sein)
+
+- original LibreLink deinstallieren
+- Installation von Anwendungen aus "unbekannten Quellen" auf dem Smartphone erlauben, ggf. sogar "Play Protect" im PlayStore deaktiviern
+- gepatchte LibreLink App installieren
+- die Rechte "Standort" und "Speicher" für LibreLink erteilen
+- Bluetooth und GPS einschalten und eingeschaltet lassen (im Flugmodus funktioniert das ganze nicht, teilweise auch nicht ohne GPS)
+- Mindestens einen Alarm in LibreLink aktivieren
+- xDrip in aktueller Version installieren
+- "Libre2 (patchted App)" in xDrip als Datenquelle auswählen
+- Libre2 Sensor mit gepatchter LibreLink App starten
+- in xDrip Sensor "starten"
+- eine Stunde warten
+- Ruhe- bzw. Stomsparmodus deaktivieren, falls die Werte nachts auch durchgängig erscheinen sollen
+- Sobald Werte erscheinen, kann der Alarm in LibreLink deaktiviert werden - sinnvoll, wenn xDrip mit (ggf. kalibrierten Werten) Alarm schlagen soll
+
+---
+
+# Original Anleitung in Englisch #
+
# How to patch the Librelink app to provide xDrip with Value received by bluetooth directly from sensor
diff --git a/ToDo/Bluetooth/README.docx b/ToDo/Bluetooth/README.docx
new file mode 100644
index 0000000..ab01689
Binary files /dev/null and b/ToDo/Bluetooth/README.docx differ
diff --git a/ToDo/Bluetooth/changes_compared_to_original_app_code.patch b/ToDo/Bluetooth/changes_compared_to_original_app_code.patch
new file mode 100644
index 0000000..d261734
--- /dev/null
+++ b/ToDo/Bluetooth/changes_compared_to_original_app_code.patch
@@ -0,0 +1,2633 @@
+ AndroidManifest.xml | 55 +----
+ build/apk/AndroidManifest.xml | Bin 31396 -> 25096 bytes
+ build/apk/classes.dex | Bin 7963204 -> 7966360 bytes
+ build/apk/classes2.dex | Bin 9541576 -> 9541936 bytes
+ build/apk/res/layout/eventlog_activity.xml | Bin 1392 -> 1412 bytes
+ build/apk/res/menu/default_menu.xml | Bin 1000 -> 760 bytes
+ build/apk/res/menu/navdrawer.xml | Bin 2560 -> 2440 bytes
+ res/layout/eventlog_activity.xml | 2 +-
+ res/menu/default_menu.xml | 2 -
+ res/menu/navdrawer.xml | 1 -
+ ...reamingPreviouslyStartedSensorPredicate$2.smali | 8 +-
+ ...JoiningPreviouslyStartedSensorPredicate$2.smali | 8 +-
+ .../DefaultSensorAbstractionService.smali | 249 ++++++++++++++++++++-
+ .../sensorabstractionservice/Sensor.smali | 8 +-
+ .../com/librelink/app/ThirdPartyIntegration.smali | 240 ++++++++++++++++++++
+ smali_classes2/com/librelink/app/core/App.smali | 55 ++---
+ .../librelink/app/core/App_MembersInjector.smali | 33 ---
+ .../com/librelink/app/core/BleManager$3$2.smali | 4 +
+ .../com/librelink/app/core/BleManager$3.smali | 41 +++-
+ .../com/librelink/app/core/BleManager$5.smali | 2 +
+ .../com/librelink/app/core/BleManager.smali | 50 ++++-
+ .../com/librelink/app/core/FirebaseTree.smali | 55 -----
+ .../app/core/PatchEventFirebaseUploader.smali | 54 +----
+ .../app/core/components/DaggerAppComponent.smali | 26 ---
+ .../librelink/app/core/modules/AppModule$2$1.smali | 13 +-
+ .../librelink/app/core/modules/AppModule$2.smali | 20 +-
+ .../com/librelink/app/core/modules/AppModule.smali | 173 +-------------
+ .../librelink/app/core/modules/SensorModule.smali | 48 ++--
+ .../app/types/ApplicationConfigurationValues.smali | 68 +++++-
+ .../app/ui/common/ScanSensorActivity.smali | 86 -------
+ .../app/ui/common/ScanSensorFragment.smali | 72 +++++-
+ .../librelink/app/ui/help/EventLogActivity.smali | 7 -
+ .../com/librelink/app/ui/help/HelpActivity.smali | 40 ----
+ 33 files changed, 791 insertions(+), 629 deletions(-)
+
+diff --git a/AndroidManifest.xml b/AndroidManifest.xml
+index f4161f5..09c01bc 100644
+--- a/AndroidManifest.xml
++++ b/AndroidManifest.xml
+@@ -3,9 +3,6 @@
+
+
+
+-
+-
+-
+
+
+
+@@ -15,9 +12,10 @@
+
+
+
++
+
+
+-
++
+
+
+
+@@ -86,6 +84,7 @@
+
+
+
++
+
+
+
+@@ -109,21 +108,6 @@
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
+@@ -132,33 +116,6 @@
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
+@@ -176,12 +133,6 @@
+
+
+
+-
+-
+-
+-
+-
+
+-
+
+
+\ No newline at end of file
+diff --git a/build/apk/AndroidManifest.xml b/build/apk/AndroidManifest.xml
+index 4414f7b..a3d2b20 100644
+Binary files a/build/apk/AndroidManifest.xml and b/build/apk/AndroidManifest.xml differ
+diff --git a/build/apk/classes.dex b/build/apk/classes.dex
+index 8c07a60..7ec9379 100644
+Binary files a/build/apk/classes.dex and b/build/apk/classes.dex differ
+diff --git a/build/apk/classes2.dex b/build/apk/classes2.dex
+index 6f14c39..974ebad 100644
+Binary files a/build/apk/classes2.dex and b/build/apk/classes2.dex differ
+diff --git a/build/apk/res/layout/eventlog_activity.xml b/build/apk/res/layout/eventlog_activity.xml
+index 23b2837..0dfc335 100644
+Binary files a/build/apk/res/layout/eventlog_activity.xml and b/build/apk/res/layout/eventlog_activity.xml differ
+diff --git a/build/apk/res/menu/default_menu.xml b/build/apk/res/menu/default_menu.xml
+index 7031330..70872ad 100644
+Binary files a/build/apk/res/menu/default_menu.xml and b/build/apk/res/menu/default_menu.xml differ
+diff --git a/build/apk/res/menu/navdrawer.xml b/build/apk/res/menu/navdrawer.xml
+index 1400a79..bee67f6 100644
+Binary files a/build/apk/res/menu/navdrawer.xml and b/build/apk/res/menu/navdrawer.xml differ
+diff --git a/res/layout/eventlog_activity.xml b/res/layout/eventlog_activity.xml
+index 55f194a..ad90bc0 100644
+--- a/res/layout/eventlog_activity.xml
++++ b/res/layout/eventlog_activity.xml
+@@ -4,7 +4,7 @@
+
+
+
+-
++
+
+
+
+\ No newline at end of file
+diff --git a/res/menu/default_menu.xml b/res/menu/default_menu.xml
+index 89dec9f..6230283 100644
+--- a/res/menu/default_menu.xml
++++ b/res/menu/default_menu.xml
+@@ -2,8 +2,6 @@
+
+\ No newline at end of file
+diff --git a/res/menu/navdrawer.xml b/res/menu/navdrawer.xml
+index 35d23f9..c476fbb 100644
+--- a/res/menu/navdrawer.xml
++++ b/res/menu/navdrawer.xml
+@@ -22,6 +22,5 @@
+
+
+
+-
+
+
+\ No newline at end of file
+diff --git a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate$2.smali b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate$2.smali
+index 0e298f2..7500fbd 100644
+--- a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate$2.smali
++++ b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate$2.smali
+@@ -30,9 +30,13 @@
+
+ # virtual methods
+ .method public shouldAllowEnablingStreaming(Ljava/lang/String;)Z
+- .locals 0
++ .locals 2
+
+- const/4 p1, 0x0
++ const/4 p1, 0x1
++
++ const-string v0, "PatchedSAS"
++ const-string v1, "shouldAllowEnablingStreaming: enable Streaming Workaround active -> enable streaming also if not allowed"
++ invoke-static/range {v0 .. v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ return p1
+ .end method
+diff --git a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate$2.smali b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate$2.smali
+index 916a515..32b608c 100644
+--- a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate$2.smali
++++ b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate$2.smali
+@@ -30,9 +30,13 @@
+
+ # virtual methods
+ .method public shouldAllowJoiningSensor(Ljava/lang/String;JJ)Z
+- .locals 0
++ .locals 2
+
+- const/4 p1, 0x0
++ const/4 p1, 0x1
++
++ const-string v0, "PatchedSAS"
++ const-string v1, "shouldAllowJoiningSensor: enable Joining Workaround active -> enable joining also if not allowed"
++ invoke-static/range {v0 .. v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ return p1
+ .end method
+diff --git a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService.smali b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService.smali
+index 3b163ce..423b1d8 100644
+--- a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService.smali
++++ b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService.smali
+@@ -1584,7 +1584,7 @@
+ .end method
+
+ .method private processActivation(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/User;Ljava/lang/String;II[B[B[BLcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate;)Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;
+- .locals 37
++ .locals 41
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(",
+@@ -1609,6 +1609,10 @@
+ Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorRemovedException;
+ }
+ .end annotation
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "entering processActivation()"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ move-object/from16 v15, p0
+
+@@ -1626,6 +1630,10 @@
+ move-result v1
+
+ if-nez v1, :cond_0
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v1, :cond_0"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1261
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/MathFailureException;
+@@ -1636,6 +1644,11 @@
+
+ .line 1264
+ :cond_0
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_0"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ iget-object v1, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->timeOsFunctions:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/TimeOsFunctions;
+
+ invoke-interface {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/TimeOsFunctions;->getCurrentTimeZone()Ljava/util/TimeZone;
+@@ -1679,6 +1692,10 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_0 .. :try_end_0} :catch_7
+
+ if-eqz v5, :cond_1
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v5, :cond_1"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1275
+ :try_start_1
+@@ -1687,6 +1704,10 @@
+ move-result v1
+
+ if-eqz v1, :cond_1
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v1, :cond_1"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1276
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorTerminatedException;
+@@ -1720,6 +1741,11 @@
+
+ .line 1279
+ :cond_1
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_1"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_start_2
+ iget-object v1, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->dataProcessing:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;
+
+@@ -1842,6 +1868,10 @@
+ sub-long v3, v1, v3
+
+ if-nez v5, :cond_2
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v5, :cond_2"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1310
+ :try_start_3
+@@ -1870,8 +1900,16 @@
+ invoke-interface/range {v1 .. v6}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate;->shouldAllowJoiningSensor(Ljava/lang/String;JJ)Z
+
+ move-result v1
++
++ const-string v39, "PatchedSASSAllJ"
++ move/from16 v40, v1
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-nez v1, :cond_3
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v1, :cond_3"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1314
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorAlreadyStartedException;
+@@ -1884,12 +1922,22 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_3 .. :try_end_3} :catch_0
+
+ :cond_2
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_2"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move-object/from16 v31, v9
+
+ move-object v9, v5
+
+ .line 1317
+ :cond_3
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_3"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_start_4
+ invoke-virtual {v8}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingScanOutputs;->getSensorHasBeenRemoved()Z
+
+@@ -1899,6 +1947,10 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_4 .. :try_end_4} :catch_7
+
+ if-eqz v1, :cond_5
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v1, :cond_5"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1318
+ :try_start_5
+@@ -1911,6 +1963,10 @@
+ move-result v1
+
+ if-eqz v1, :cond_4
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v1, :cond_4"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1319
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorTerminatedException;
+@@ -1921,6 +1977,11 @@
+
+ .line 1321
+ :cond_4
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_4"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorRemovedException;
+
+ invoke-direct {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorRemovedException;->()V
+@@ -1932,6 +1993,11 @@
+
+ .line 1325
+ :cond_5
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_5"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_start_6
+ invoke-virtual {v8}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingScanOutputs;->getAlgorithmResults()Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/AlgorithmResults;
+
+@@ -1971,6 +2037,10 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_6 .. :try_end_6} :catch_7
+
+ if-eqz v3, :cond_6
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v3, :cond_6"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ :try_start_7
+ invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
+@@ -1995,6 +2065,11 @@
+ goto :goto_0
+
+ :cond_6
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_6"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ sub-int/2addr v1, v13
+
+ .line 1338
+@@ -2039,12 +2114,21 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_8 .. :try_end_8} :catch_7
+
+ if-eqz v9, :cond_7
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v9, :cond_7"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1348
+ :try_start_9
+ invoke-virtual {v9}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/SensorEntity;->getEnableStreamingTimestamp()I
+
+ move-result v1
++
++ const-string v39, "PatchedSASESTimes"
++ move/from16 v40, v1
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogInt(Ljava/lang/String;I)V
++
+ :try_end_9
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingException; {:try_start_9 .. :try_end_9} :catch_1
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_9 .. :try_end_9} :catch_0
+@@ -2060,6 +2144,11 @@
+
+ .line 1350
+ :cond_7
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_7"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_start_a
+ iget-object v1, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->timeOfDayAdapter:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/TimeOfDayAdapter;
+
+@@ -2078,18 +2167,35 @@
+ invoke-interface {v1, v14}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate;->shouldAllowEnablingStreaming(Ljava/lang/String;)Z
+
+ move-result v1
++
++ const-string v39, "PatchedSASSAEStre"
++ move/from16 v40, v1
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ const/4 v3, 0x0
+
+ if-nez v9, :cond_8
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v9, :cond_8"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ if-eqz v1, :cond_8
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v1, :cond_8"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ const/4 v1, 0x1
+
+ goto :goto_3
+
+ :cond_8
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_8"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move v1, v3
+
+ .line 1361
+@@ -2100,6 +2206,10 @@
+ invoke-virtual {v8}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingScanOutputs;->getPersonalizationIndex()B
+
+ move-result v5
++
++ const-string v39, "PatchedSASPersID"
++ move/from16 v40, v5
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogByte(Ljava/lang/String;B)V
+
+ move/from16 v32, v13
+
+@@ -2111,6 +2221,12 @@
+ invoke-interface {v4, v6, v13, v5, v2}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->getEnableStreamingPayload([B[BBI)[B
+
+ move-result-object v4
++
++ const-string v39, "PatchedSASStrePL"
++ move-object/from16 v40, v4
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
++
++
+ :try_end_a
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingException; {:try_start_a .. :try_end_a} :catch_8
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_a .. :try_end_a} :catch_7
+@@ -2118,11 +2234,24 @@
+ const/4 v5, 0x0
+
+ if-nez v1, :cond_9
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v1, :cond_9"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ move-object v4, v5
+
+ :cond_9
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_9"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ if-nez v9, :cond_b
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v9, :cond_b"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1375
+ :try_start_b
+@@ -2131,12 +2260,21 @@
+ move-result v9
+
+ if-eqz v4, :cond_a
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v4, :cond_a"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ move/from16 v18, v2
+
+ goto :goto_4
+
+ :cond_a
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_a"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move/from16 v18, v3
+
+ .line 1387
+@@ -2232,6 +2370,11 @@
+ goto :goto_9
+
+ :cond_b
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_b"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move-object/from16 v34, v4
+
+ move-object/from16 v35, v10
+@@ -2528,7 +2671,7 @@
+ .end method
+
+ .method private processScan(Ljava/lang/String;II[B[B[B)Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;
+- .locals 36
++ .locals 38
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(",
+@@ -2555,6 +2698,10 @@
+ }
+ .end annotation
+
++ const-string v36, "PatchedSAS"
++ const-string v37, "entering processScan()"
++ invoke-static/range {v36 .. v37}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move-object/from16 v1, p0
+
+ move-object/from16 v2, p1
+@@ -4523,7 +4670,7 @@
+
+ # virtual methods
+ .method public activateSensor(Landroid/nfc/Tag;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/User;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate;)Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;
+- .locals 29
++ .locals 31
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(",
+@@ -4584,9 +4731,17 @@
+ invoke-interface {v1, v11}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->getPatchInfo(Landroid/nfc/Tag;)[B
+
+ move-result-object v14
++
++ const-string v29, "PatchedSASPInfo"
++ move-object/from16 v30, v14
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ if-nez v14, :cond_1
+-
++
++ const-string v29, "PatchedSAS"
++ const-string v30, "activateSensor: getPatchInfo() != 0"
++ invoke-static/range {v29 .. v30}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ .line 698
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorRfTransmissionErrorException;
+
+@@ -4603,8 +4758,16 @@
+ invoke-interface {v1, v14, v2}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->isPatchSupported([BLcom/abbottdiabetescare/flashglucose/sensorabstractionservice/ApplicationRegion;)Z
+
+ move-result v1
++
++ const-string v29, "PatchedSASPSupp"
++ move/from16 v30, v1
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-nez v1, :cond_2
++
++ const-string v29, "PatchedSAS"
++ const-string v30, "activateSensor: isPatchSupported() == 0"
++ invoke-static/range {v29 .. v30}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 702
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorNotCompatibleException;
+@@ -4620,6 +4783,10 @@
+ invoke-interface {v1, v11}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->getPatchUid(Landroid/nfc/Tag;)[B
+
+ move-result-object v12
++
++ const-string v29, "PatchedSASPUID"
++ move-object/from16 v30, v12
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ .line 707
+ iget-object v1, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->dataProcessing:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;
+@@ -4628,6 +4795,10 @@
+ invoke-interface {v1, v14}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->getProductFamily([B)I
+
+ move-result v1
++
++ const-string v29, "PatchedSASPFAM"
++ move/from16 v30, v1
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogInt(Ljava/lang/String;I)V
+
+ .line 707
+ invoke-static {v1, v12}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->getSensorSerialNumber(I[B)Ljava/lang/String;
+@@ -4645,9 +4816,17 @@
+
+ .line 713
+ :cond_3
++ const-string v29, "PatchedSASSer"
++ move-object/from16 v30, v13
++ invoke-static/range {v29 .. v30}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ invoke-direct {v15, v11, v12, v14}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->readFullPatchContents(Landroid/nfc/Tag;[B[B)[B
+
+ move-result-object v18
++
++ const-string v29, "PatchedSASCont"
++ move-object/from16 v30, v18
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ if-nez v18, :cond_4
+
+@@ -4681,11 +4860,20 @@
+ invoke-virtual {v10}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/PatchTimeValues;->getWarmupPeriodInMinutes()I
+
+ move-result v4
++
++ const-string v29, "PatchedSASWUT"
++ move/from16 v30, v4
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogInt(Ljava/lang/String;I)V
+
+ .line 729
+ invoke-virtual {v10}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/PatchTimeValues;->getWearDurationInMinutes()I
+-
++
+ move-result v5
++
++ const-string v29, "PatchedSASWDur"
++ move/from16 v30, v5
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogInt(Ljava/lang/String;I)V
++
+ :try_end_0
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ActivationException; {:try_start_0 .. :try_end_0} :catch_1
+
+@@ -4717,6 +4905,10 @@
+ invoke-static {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;->access$000(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;)[B
+
+ move-result-object v2
++
++ const-string v29, "PatchedSASESP1"
++ move-object/from16 v30, v2
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ if-eqz v2, :cond_6
+
+@@ -4726,10 +4918,18 @@
+ invoke-static {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;->access$000(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;)[B
+
+ move-result-object v3
++
++ const-string v29, "PatchedSASESP2"
++ move-object/from16 v30, v3
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ invoke-interface {v2, v11, v3}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->enableStreaming(Landroid/nfc/Tag;[B)Z
+
+ move-result v2
++
++ const-string v29, "PatchedSASEStre1"
++ move/from16 v30, v2
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-nez v2, :cond_6
+
+@@ -4803,6 +5003,10 @@
+ invoke-interface {v4, v12, v14, v5}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->getActivationPayload([B[BB)[B
+
+ move-result-object v4
++
++ const-string v29, "PatchedSASActPL"
++ move-object/from16 v30, v4
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ .line 758
+ iget-object v5, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->dataProcessing:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;
+@@ -4965,6 +5169,10 @@
+ invoke-virtual {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ActivationException;->getEnableStreamingPayload()[B
+
+ move-result-object v5
++
++ const-string v29, "PatchedSASESP3"
++ move-object/from16 v30, v5
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ if-eqz v5, :cond_9
+
+@@ -4974,10 +5182,18 @@
+ invoke-virtual {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ActivationException;->getEnableStreamingPayload()[B
+
+ move-result-object v7
++
++ const-string v29, "PatchedSASESP4"
++ move-object/from16 v30, v7
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ invoke-interface {v5, v11, v7}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->enableStreaming(Landroid/nfc/Tag;[B)Z
+
+ move-result v5
++
++ const-string v29, "PatchedSASEStre2"
++ move/from16 v30, v5
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-nez v5, :cond_9
+
+@@ -4995,6 +5211,10 @@
+ invoke-interface {v5, v11, v3, v4, v10}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->activatePatch(Landroid/nfc/Tag;B[B[B)Z
+
+ move-result v3
++
++ const-string v29, "PatchedSASActPat"
++ move/from16 v30, v3
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-eqz v3, :cond_c
+
+@@ -6558,7 +6778,7 @@
+ .end method
+
+ .method public getStreamingUnlockPayload(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;)[B
+- .locals 6
++ .locals 8
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(",
+@@ -6589,6 +6809,10 @@
+ move-result-object p1
+
+ if-nez p1, :cond_0
++
++ const-string v6, "PatchedSAS"
++ const-string v7, "getStreamingUnlockPayload: sensor2 == null"
++ invoke-static {v6, v7}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 847
+ new-instance p1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorNotActiveException;
+@@ -6604,6 +6828,10 @@
+ move-result v4
+
+ if-nez v4, :cond_1
++
++ const-string v6, "PatchedSAS"
++ const-string v7, "getStreamingUnlockPayload: enableStreamingTimestamp == 0"
++ invoke-static {v6, v7}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ const/4 p1, 0x0
+
+@@ -6639,11 +6867,20 @@
+ invoke-virtual {p1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/SensorEntity;->getStreamingUnlockCount()I
+
+ move-result v5
++
++ const-string v6, "PatchedSAS"
++ const-string v7, "getStreamingUnlockPayload: before getStreamingUnlockPayload..."
++ invoke-static {v6, v7}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 857
+ invoke-interface/range {v0 .. v5}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->getStreamingUnlockPayload([B[BBII)[B
+
+ move-result-object p1
++
++ const-string v6, "PatchedSAS"
++ const-string v7, "getStreamingUnlockPayload: after getStreamingUnlockPayload."
++ invoke-static {v6, v7}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_end_0
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_0 .. :try_end_0} :catch_0
+
+diff --git a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor.smali b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor.smali
+index e1f61ef..7dd5c77 100644
+--- a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor.smali
++++ b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor.smali
+@@ -87,7 +87,7 @@
+ .end method
+
+ .method constructor (IJLcom/abbottdiabetescare/flashglucose/sensorabstractionservice/User;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/util/TimeZone;Ljava/util/Date;ZIIZ)V
+- .locals 0
++ .locals 1
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(IJ",
+@@ -127,8 +127,10 @@
+ .line 121
+ iput-object p9, p0, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;->activationTime:Ljava/util/Date;
+
++ const/4 v0, 0x1
++
+ .line 122
+- iput-boolean p10, p0, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;->streamingAvailable:Z
++ iput-boolean v0, p0, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;->streamingAvailable:Z
+
+ .line 123
+ iput p11, p0, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;->warmupPeriodInMinutes:I
+@@ -243,7 +245,7 @@
+
+ move-result v0
+
+- const/4 v1, 0x0
++ const/4 v1, 0x1
+
+ const/4 v2, 0x1
+
+diff --git a/smali_classes2/com/librelink/app/ThirdPartyIntegration.smali b/smali_classes2/com/librelink/app/ThirdPartyIntegration.smali
+index fe54b60..39ec79c 100644
+--- a/smali_classes2/com/librelink/app/ThirdPartyIntegration.smali
++++ b/smali_classes2/com/librelink/app/ThirdPartyIntegration.smali
+@@ -1095,3 +1095,243 @@
+ .line 187
+ return-void
+ .end method
++
++.method public static LogBool(Ljava/lang/String;Z)V
++ .locals 2
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "b1" # Z
++
++ .prologue
++ .line 248
++ new-instance v0, Ljava/lang/StringBuilder;
++
++ invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
++
++ const-string v1, "PL"
++
++ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v0
++
++ invoke-static {p1}, Ljava/lang/String;->valueOf(Z)Ljava/lang/String;
++
++ move-result-object v1
++
++ invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 249
++ return-void
++.end method
++
++.method public static LogByte(Ljava/lang/String;B)V
++ .locals 2
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "b1" # B
++
++ .prologue
++ .line 248
++ new-instance v0, Ljava/lang/StringBuilder;
++
++ invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
++
++ const-string v1, "PL"
++
++ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v0
++
++ invoke-static {p1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
++
++ move-result-object v1
++
++ invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 249
++ return-void
++.end method
++
++.method public static LogByteArray(Ljava/lang/String;[B)V
++ .locals 6
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "bytes" # [B
++
++ .prologue
++ .line 232
++ if-nez p1, :cond_0
++
++ .line 241
++ :goto_0
++ return-void
++
++ .line 233
++ :cond_0
++ const-string v4, "0123456789ABCDEF"
++
++ invoke-virtual {v4}, Ljava/lang/String;->toCharArray()[C
++
++ move-result-object v0
++
++ .line 234
++ .local v0, "hexArray":[C
++ array-length v4, p1
++
++ mul-int/lit8 v4, v4, 0x2
++
++ new-array v1, v4, [C
++
++ .line 235
++ .local v1, "hexChars":[C
++ const/4 v2, 0x0
++
++ .local v2, "j":I
++ :goto_1
++ array-length v4, p1
++
++ if-ge v2, v4, :cond_1
++
++ .line 236
++ aget-byte v4, p1, v2
++
++ and-int/lit16 v3, v4, 0xff
++
++ .line 237
++ .local v3, "v":I
++ mul-int/lit8 v4, v2, 0x2
++
++ ushr-int/lit8 v5, v3, 0x4
++
++ aget-char v5, v0, v5
++
++ aput-char v5, v1, v4
++
++ .line 238
++ mul-int/lit8 v4, v2, 0x2
++
++ add-int/lit8 v4, v4, 0x1
++
++ and-int/lit8 v5, v3, 0xf
++
++ aget-char v5, v0, v5
++
++ aput-char v5, v1, v4
++
++ .line 235
++ add-int/lit8 v2, v2, 0x1
++
++ goto :goto_1
++
++ .line 240
++ .end local v3 # "v":I
++ :cond_1
++ new-instance v4, Ljava/lang/StringBuilder;
++
++ invoke-direct {v4}, Ljava/lang/StringBuilder;->()V
++
++ const-string v5, "PL"
++
++ invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v4
++
++ invoke-virtual {v4, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v4
++
++ invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v4
++
++ new-instance v5, Ljava/lang/String;
++
++ invoke-direct {v5, v1}, Ljava/lang/String;->([C)V
++
++ invoke-static {v4, v5}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ goto :goto_0
++.end method
++
++.method public static LogInt(Ljava/lang/String;I)V
++ .locals 2
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "i1" # I
++
++ .prologue
++ .line 244
++ new-instance v0, Ljava/lang/StringBuilder;
++
++ invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
++
++ const-string v1, "PL"
++
++ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v0
++
++ invoke-static {p1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
++
++ move-result-object v1
++
++ invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 245
++ return-void
++.end method
++
++.method public static LogLong(Ljava/lang/String;J)V
++ .locals 3
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "l1" # J
++
++ .prologue
++ .line 252
++ new-instance v0, Ljava/lang/StringBuilder;
++
++ invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
++
++ const-string v1, "PL"
++
++ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v0
++
++ invoke-static {p1, p2}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
++
++ move-result-object v1
++
++ invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 253
++ return-void
++.end method
+diff --git a/smali_classes2/com/librelink/app/core/App.smali b/smali_classes2/com/librelink/app/core/App.smali
+index d9c5203..2164227 100644
+--- a/smali_classes2/com/librelink/app/core/App.smali
++++ b/smali_classes2/com/librelink/app/core/App.smali
+@@ -18,11 +18,6 @@
+ .end annotation
+ .end field
+
+-.field firebaseTree:Lcom/librelink/app/core/FirebaseTree;
+- .annotation runtime Ljavax/inject/Inject;
+- .end annotation
+-.end field
+-
+ .field initialIntent:Ljavax/inject/Provider;
+ .annotation runtime Lcom/librelink/app/core/Qualifiers$InitialIntent;
+ .end annotation
+@@ -65,6 +60,18 @@
+ return-void
+ .end method
+
++.method public getPackageCodePath()Ljava/lang/String;
++ .registers 2
++
++ .prologue
++ .line 13
++ invoke-static {p0}, Lcom/librelink/app/APKExtractor;->getOriginalAPKPath(Landroid/app/Application;)Ljava/lang/String;
++
++ move-result-object v0
++
++ return-object v0
++.end method
++
+ .method public static get(Landroid/content/Context;)Lcom/librelink/app/core/App;
+ .locals 0
+
+@@ -90,9 +97,6 @@
+ .method private init()V
+ .locals 2
+
+- .line 120
+- invoke-static {p0}, Lcom/google/firebase/FirebaseApp;->initializeApp(Landroid/content/Context;)Lcom/google/firebase/FirebaseApp;
+-
+ .line 122
+ invoke-static {p0}, Lcom/librelink/app/util/JobSchedulerUtils;->initialize(Lcom/librelink/app/core/App;)V
+
+@@ -152,15 +156,6 @@
+
+ invoke-static {p0, v0}, Lcom/librelink/app/services/ReminderService;->enqueueWork(Landroid/content/Context;Landroid/content/Intent;)V
+
+- .line 139
+- invoke-static {}, Lcom/librelink/app/jobs/LicenseCheckJob;->scheduleJob()V
+-
+- .line 141
+- invoke-static {}, Lcom/librelink/app/jobs/DataUploadJob;->scheduleJob()V
+-
+- .line 142
+- invoke-static {}, Lcom/librelink/app/jobs/ActiveSensorUploadJob;->scheduleJob()V
+-
+ .line 144
+ iget-object v0, p0, Lcom/librelink/app/core/App;->bleManager:Lcom/librelink/app/core/BleManager;
+
+@@ -369,6 +364,14 @@
+ .line 83
+ invoke-super {p0}, Landroid/app/Application;->onCreate()V
+
++ invoke-static {}, Lcom/librelink/app/CrashReportUtil;->setDefaultUncaughtExceptionHandler()V
++
++ invoke-static {p0}, Lcom/librelink/app/ForegroundService;->initialize(Landroid/content/Context;)V
++
++ invoke-static {p0}, Lcom/librelink/app/ThirdPartyIntegration;->injectContext(Landroid/content/Context;)V
++
++ invoke-static {p0}, Lcom/librelink/app/APKExtractor;->extractOriginalAPK(Landroid/app/Application;)V
++
+ .line 85
+ invoke-static {}, Lcom/librelink/app/core/components/DaggerAppComponent;->builder()Lcom/librelink/app/core/components/DaggerAppComponent$Builder;
+
+@@ -415,24 +418,6 @@
+ .line 100
+ invoke-direct {p0}, Lcom/librelink/app/core/App;->init()V
+
+- .line 109
+- iget-object v2, p0, Lcom/librelink/app/core/App;->firebaseTree:Lcom/librelink/app/core/FirebaseTree;
+-
+- invoke-static {v2}, Ltimber/log/Timber;->plant(Ltimber/log/Timber$Tree;)V
+-
+- const/4 v2, 0x1
+-
+- .line 110
+- new-array v2, v2, [Lio/fabric/sdk/android/Kit;
+-
+- new-instance v3, Lcom/crashlytics/android/Crashlytics;
+-
+- invoke-direct {v3}, Lcom/crashlytics/android/Crashlytics;->()V
+-
+- aput-object v3, v2, v1
+-
+- invoke-static {p0, v2}, Lio/fabric/sdk/android/Fabric;->with(Landroid/content/Context;[Lio/fabric/sdk/android/Kit;)Lio/fabric/sdk/android/Fabric;
+-
+ .line 113
+ invoke-static {p0}, Lcom/librelink/app/core/StethoUtils;->initialize(Landroid/app/Application;)V
+
+diff --git a/smali_classes2/com/librelink/app/core/App_MembersInjector.smali b/smali_classes2/com/librelink/app/core/App_MembersInjector.smali
+index b03c552..522ba19 100644
+--- a/smali_classes2/com/librelink/app/core/App_MembersInjector.smali
++++ b/smali_classes2/com/librelink/app/core/App_MembersInjector.smali
+@@ -38,16 +38,6 @@
+ .end annotation
+ .end field
+
+-.field private final firebaseTreeProvider:Ljavax/inject/Provider;
+- .annotation system Ldalvik/annotation/Signature;
+- value = {
+- "Ljavax/inject/Provider<",
+- "Lcom/librelink/app/core/FirebaseTree;",
+- ">;"
+- }
+- .end annotation
+-.end field
+-
+ .field private final initialIntentProvider:Ljavax/inject/Provider;
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+@@ -131,9 +121,6 @@
+ .line 37
+ iput-object p3, p0, Lcom/librelink/app/core/App_MembersInjector;->initialIntentProvider:Ljavax/inject/Provider;
+
+- .line 38
+- iput-object p4, p0, Lcom/librelink/app/core/App_MembersInjector;->firebaseTreeProvider:Ljavax/inject/Provider;
+-
+ .line 39
+ iput-object p5, p0, Lcom/librelink/app/core/App_MembersInjector;->bleManagerProvider:Ljavax/inject/Provider;
+
+@@ -220,15 +207,6 @@
+ return-void
+ .end method
+
+-.method public static injectFirebaseTree(Lcom/librelink/app/core/App;Lcom/librelink/app/core/FirebaseTree;)V
+- .locals 0
+-
+- .line 87
+- iput-object p1, p0, Lcom/librelink/app/core/App;->firebaseTree:Lcom/librelink/app/core/FirebaseTree;
+-
+- return-void
+-.end method
+-
+ .method public static injectInitialIntent(Lcom/librelink/app/core/App;Ljavax/inject/Provider;)V
+ .locals 0
+ .annotation system Ldalvik/annotation/Signature;
+@@ -306,17 +284,6 @@
+
+ invoke-static {p1, v0}, Lcom/librelink/app/core/App_MembersInjector;->injectInitialIntent(Lcom/librelink/app/core/App;Ljavax/inject/Provider;)V
+
+- .line 67
+- iget-object v0, p0, Lcom/librelink/app/core/App_MembersInjector;->firebaseTreeProvider:Ljavax/inject/Provider;
+-
+- invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v0
+-
+- check-cast v0, Lcom/librelink/app/core/FirebaseTree;
+-
+- invoke-static {p1, v0}, Lcom/librelink/app/core/App_MembersInjector;->injectFirebaseTree(Lcom/librelink/app/core/App;Lcom/librelink/app/core/FirebaseTree;)V
+-
+ .line 68
+ iget-object v0, p0, Lcom/librelink/app/core/App_MembersInjector;->bleManagerProvider:Ljavax/inject/Provider;
+
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$3$2.smali b/smali_classes2/com/librelink/app/core/BleManager$3$2.smali
+index 9a132cb..202917d 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$3$2.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$3$2.smali
+@@ -116,6 +116,8 @@
+
+ iget-object v1, v1, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {v1, v0}, Lcom/librelink/app/ThirdPartyIntegration;->sendGlucoseBroadcast(Lcom/librelink/app/core/BleManager;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/CurrentGlucose;)V
++
+ new-instance v2, Ljava/lang/StringBuilder;
+
+ invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
+@@ -184,6 +186,8 @@
+
+ iget-object v1, v1, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {v1, v0}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorBLEExceptionBroadcast(Lcom/librelink/app/core/BleManager;Ljava/lang/Throwable;)V
++
+ new-instance v2, Ljava/lang/StringBuilder;
+
+ invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$3.smali b/smali_classes2/com/librelink/app/core/BleManager$3.smali
+index 1e52e79..805484e 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$3.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$3.smali
+@@ -183,6 +183,8 @@
+ .line 363
+ iget-object p2, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {p2, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendCharacteristicValueBroadcast(Lcom/librelink/app/core/BleManager;[B)V
++
+ new-instance v3, Ljava/lang/StringBuilder;
+
+ invoke-direct {v3}, Ljava/lang/StringBuilder;->()V
+@@ -386,7 +388,7 @@
+ .end method
+
+ .method public onCharacteristicWrite(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;I)V
+- .locals 1
++ .locals 3
+
+ .line 258
+ iget-object p1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+@@ -484,8 +486,12 @@
+ invoke-virtual {p3, p2}, Landroid/bluetooth/BluetoothGatt;->writeDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z
+
+ move-result p2
+-
++
+ if-eqz p2, :cond_0
++
++ const-string v1, "PatchedBleManager"
++ const-string v2, "onCharacteristicWrite: successfully set BLE passcode"
++ invoke-static/range {v1 .. v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ goto :goto_0
+
+@@ -555,6 +561,8 @@
+ :goto_0
+ iget-object v1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {v1, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendConnectionStateBroadcast(Lcom/librelink/app/core/BleManager;I)V
++
+ new-instance v2, Ljava/lang/StringBuilder;
+
+ invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
+@@ -635,6 +643,8 @@
+ :cond_0
+ iget-object p1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {p1, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendRSSIBroadcast(Lcom/librelink/app/core/BleManager;I)V
++
+ new-instance p3, Ljava/lang/StringBuilder;
+
+ invoke-direct {p3}, Ljava/lang/StringBuilder;->()V
+@@ -660,10 +670,11 @@
+ .end method
+
+ .method public onServicesDiscovered(Landroid/bluetooth/BluetoothGatt;I)V
+- .locals 5
++ .locals 9
+
+ .line 214
+ iget-object p1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
++ iget-object v6, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
+ new-instance v0, Ljava/lang/StringBuilder;
+
+@@ -682,6 +693,9 @@
+ invoke-static {p1, v0}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ if-nez p2, :cond_1
++
++ const-string v5, "onServicesDiscovered: i == 0"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ .line 217
+ iget-object p1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+@@ -701,6 +715,9 @@
+ move-result-object p1
+
+ if-eqz p1, :cond_1
++
++ const-string v5, "onServicesDiscovered: service != null"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ .line 221
+ iget-object p2, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+@@ -714,9 +731,12 @@
+ move-result-object p1
+
+ if-eqz p1, :cond_1
+-
++
+ .line 224
+ iget-object p2, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
++
++ const-string v5, "onServicesDiscovered: characteristic != null"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ invoke-static {p2}, Lcom/librelink/app/core/BleManager;->access$700(Lcom/librelink/app/core/BleManager;)Ljavax/inject/Provider;
+
+@@ -733,6 +753,9 @@
+ move-result-object p2
+
+ if-eqz p2, :cond_1
++
++ const-string v5, "onServicesDiscovered: sensors != null"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ const/4 v0, 0x0
+
+@@ -767,6 +790,9 @@
+ move-result v2
+
+ if-eqz v2, :cond_0
++
++ const-string v5, "onServicesDiscovered: sensor.getSerialNumber().equals(BleManager.this.mActiveDeviceSerialNumber)"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ const/4 v2, 0x0
+
+@@ -797,6 +823,13 @@
+
+ :goto_1
+ if-eqz v1, :cond_0
++
++ const-string v5, "onServicesDiscovered: bArr != null)"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
++
++ const-string v7, "PatchedBleManager"
++ move-object/from16 v8, v1
++ invoke-static/range {v7 .. v8}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ .line 243
+ invoke-virtual {p1, v1}, Landroid/bluetooth/BluetoothGattCharacteristic;->setValue([B)Z
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$5.smali b/smali_classes2/com/librelink/app/core/BleManager$5.smali
+index 6da8c13..4809c71 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$5.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$5.smali
+@@ -187,6 +187,8 @@
+
+ invoke-static {p1, v2, v3}, Lcom/librelink/app/core/BleManager;->access$400(Lcom/librelink/app/core/BleManager;J)V
+
++ invoke-static {p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendFoundDeviceBroadcast(Lcom/librelink/app/core/BleManager;)V
++
+ return v1
+
+ .line 568
+diff --git a/smali_classes2/com/librelink/app/core/BleManager.smali b/smali_classes2/com/librelink/app/core/BleManager.smali
+index 9b4c182..4548256 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager.smali
+@@ -354,11 +354,55 @@
+ .end method
+
+ .method private DEVLOG(Ljava/lang/String;)V
+- .locals 0
+-
++ .registers 3
++ .param p1, "str" # Ljava/lang/String;
++
++ .prologue
++ .line 28
++ const-string v0, "PatchedBleManager"
++
++ invoke-static {v0, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 29
+ return-void
+ .end method
+
++.method public getSAS()Lcom/librelink/app/types/SAS;
++ .registers 2
++
++ .prologue
++ .line 32
++ iget-object v0, p0, Lcom/librelink/app/core/BleManager;->mSAS:Ljavax/inject/Provider;
++
++ invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
++
++ move-result-object v0
++
++ check-cast v0, Lcom/librelink/app/types/SAS;
++
++ return-object v0
++.end method
++
++.method public getSensorAddress()Ljava/lang/String;
++ .registers 2
++
++ .prologue
++ .line 20
++ iget-object v0, p0, Lcom/librelink/app/core/BleManager;->mActiveDeviceAddress:Ljava/lang/String;
++
++ return-object v0
++.end method
++
++.method public getSensorSerial()Ljava/lang/String;
++ .registers 2
++
++ .prologue
++ .line 24
++ iget-object v0, p0, Lcom/librelink/app/core/BleManager;->mActiveDeviceSerialNumber:Ljava/lang/String;
++
++ return-object v0
++.end method
++
+ .method static synthetic access$000(Lcom/librelink/app/core/BleManager;Z)V
+ .locals 0
+
+@@ -1303,6 +1347,8 @@
+ :goto_1
+ invoke-direct {p0}, Lcom/librelink/app/core/BleManager;->reportAvailabilityChange()V
+
++ invoke-static {p0}, Lcom/librelink/app/ThirdPartyIntegration;->sendInitializeBluetoothBroadcast(Lcom/librelink/app/core/BleManager;)V
++
+ return-void
+ .end method
+
+diff --git a/smali_classes2/com/librelink/app/core/FirebaseTree.smali b/smali_classes2/com/librelink/app/core/FirebaseTree.smali
+index f40fb73..2773f7e 100644
+--- a/smali_classes2/com/librelink/app/core/FirebaseTree.smali
++++ b/smali_classes2/com/librelink/app/core/FirebaseTree.smali
+@@ -44,60 +44,5 @@
+
+ .method protected log(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
+ .locals 0
+-
+- .line 33
+- invoke-static {p3}, Lcom/crashlytics/android/Crashlytics;->log(Ljava/lang/String;)V
+-
+- if-eqz p4, :cond_0
+-
+- const/4 p1, 0x1
+-
+- goto :goto_0
+-
+- :cond_0
+- const/4 p1, 0x0
+-
+- .line 37
+- :goto_0
+- instance-of p2, p4, Lcom/librelink/app/core/AppError;
+-
+- if-eqz p2, :cond_1
+-
+- .line 39
+- move-object p1, p4
+-
+- check-cast p1, Lcom/librelink/app/core/AppError;
+-
+- .line 40
+- invoke-virtual {p1}, Lcom/librelink/app/core/AppError;->isUnexpected()Z
+-
+- move-result p2
+-
+- .line 41
+- iget-object p3, p0, Lcom/librelink/app/core/FirebaseTree;->analytics:Lcom/librelink/app/types/Analytics;
+-
+- invoke-virtual {p1}, Lcom/librelink/app/core/AppError;->getReason()Lcom/librelink/app/core/AppError$Reason;
+-
+- move-result-object p1
+-
+- invoke-virtual {p1}, Lcom/librelink/app/core/AppError$Reason;->name()Ljava/lang/String;
+-
+- move-result-object p1
+-
+- invoke-interface {p3, p1}, Lcom/librelink/app/types/Analytics;->createEvent(Ljava/lang/String;)Lcom/librelink/app/types/Analytics$Event;
+-
+- move-result-object p1
+-
+- invoke-interface {p1}, Lcom/librelink/app/types/Analytics$Event;->log()V
+-
+- move p1, p2
+-
+- :cond_1
+- if-eqz p1, :cond_2
+-
+- .line 46
+- invoke-static {p4}, Lcom/crashlytics/android/Crashlytics;->logException(Ljava/lang/Throwable;)V
+-
+- :cond_2
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/PatchEventFirebaseUploader.smali b/smali_classes2/com/librelink/app/core/PatchEventFirebaseUploader.smali
+index 164b34a..a06bf36 100644
+--- a/smali_classes2/com/librelink/app/core/PatchEventFirebaseUploader.smali
++++ b/smali_classes2/com/librelink/app/core/PatchEventFirebaseUploader.smali
+@@ -26,58 +26,6 @@
+
+ # virtual methods
+ .method public onPatchEvent(Ljava/lang/String;II)V
+- .locals 2
+-
+- .line 19
+- invoke-static {p3, p2}, Lcom/librelink/app/core/PatchEventLogcatWriter;->logEventToLogcat(II)V
+-
+- .line 21
+- new-instance v0, Lcom/librelink/app/core/PatchEventException;
+-
+- invoke-direct {v0, p1, p2, p3}, Lcom/librelink/app/core/PatchEventException;->(Ljava/lang/String;II)V
+-
+- invoke-static {v0}, Lcom/crashlytics/android/Crashlytics;->logException(Ljava/lang/Throwable;)V
+-
+- .line 25
+- iget-object v0, p0, Lcom/librelink/app/core/PatchEventFirebaseUploader;->mAnalytics:Lcom/librelink/app/types/Analytics;
+-
+- if-eqz v0, :cond_0
+-
+- .line 27
+- iget-object v0, p0, Lcom/librelink/app/core/PatchEventFirebaseUploader;->mAnalytics:Lcom/librelink/app/types/Analytics;
+-
+- const-string v1, "patch_error"
+-
+- invoke-interface {v0, v1}, Lcom/librelink/app/types/Analytics;->createEvent(Ljava/lang/String;)Lcom/librelink/app/types/Analytics$Event;
+-
+- move-result-object v0
+-
+- const-string v1, "serial_number"
+-
+- .line 28
+- invoke-interface {v0, v1, p1}, Lcom/librelink/app/types/Analytics$Event;->putAttribute(Ljava/lang/String;Ljava/lang/String;)Lcom/librelink/app/types/Analytics$Event;
+-
+- const-string p1, "minutes_after_activation"
+-
+- .line 29
+- invoke-static {p2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
+-
+- move-result-object p2
+-
+- invoke-interface {v0, p1, p2}, Lcom/librelink/app/types/Analytics$Event;->putAttribute(Ljava/lang/String;Ljava/lang/Number;)Lcom/librelink/app/types/Analytics$Event;
+-
+- const-string p1, "error_code"
+-
+- .line 30
+- invoke-static {p3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
+-
+- move-result-object p2
+-
+- invoke-interface {v0, p1, p2}, Lcom/librelink/app/types/Analytics$Event;->putAttribute(Ljava/lang/String;Ljava/lang/Number;)Lcom/librelink/app/types/Analytics$Event;
+-
+- .line 31
+- invoke-interface {v0}, Lcom/librelink/app/types/Analytics$Event;->log()V
+-
+- :cond_0
++ .locals 0
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/components/DaggerAppComponent.smali b/smali_classes2/com/librelink/app/core/components/DaggerAppComponent.smali
+index 7990426..93170c7 100644
+--- a/smali_classes2/com/librelink/app/core/components/DaggerAppComponent.smali
++++ b/smali_classes2/com/librelink/app/core/components/DaggerAppComponent.smali
+@@ -1169,25 +1169,6 @@
+ return-object v0
+ .end method
+
+-.method private getFirebaseTree()Lcom/librelink/app/core/FirebaseTree;
+- .locals 2
+-
+- .line 654
+- new-instance v0, Lcom/librelink/app/core/FirebaseTree;
+-
+- iget-object v1, p0, Lcom/librelink/app/core/components/DaggerAppComponent;->provideAnalyticsProvider:Ljavax/inject/Provider;
+-
+- invoke-interface {v1}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v1
+-
+- check-cast v1, Lcom/librelink/app/types/Analytics;
+-
+- invoke-direct {v0, v1}, Lcom/librelink/app/core/FirebaseTree;->(Lcom/librelink/app/types/Analytics;)V
+-
+- return-object v0
+-.end method
+-
+ .method private getGlucoseUnit()Lcom/librelink/app/types/GlucoseUnit;
+ .locals 2
+
+@@ -6671,13 +6652,6 @@
+
+ invoke-static {p1, v0}, Lcom/librelink/app/core/App_MembersInjector;->injectInitialIntent(Lcom/librelink/app/core/App;Ljavax/inject/Provider;)V
+
+- .line 1730
+- invoke-direct {p0}, Lcom/librelink/app/core/components/DaggerAppComponent;->getFirebaseTree()Lcom/librelink/app/core/FirebaseTree;
+-
+- move-result-object v0
+-
+- invoke-static {p1, v0}, Lcom/librelink/app/core/App_MembersInjector;->injectFirebaseTree(Lcom/librelink/app/core/App;Lcom/librelink/app/core/FirebaseTree;)V
+-
+ .line 1731
+ iget-object v0, p0, Lcom/librelink/app/core/components/DaggerAppComponent;->provideBleManagerProvider:Ljavax/inject/Provider;
+
+diff --git a/smali_classes2/com/librelink/app/core/modules/AppModule$2$1.smali b/smali_classes2/com/librelink/app/core/modules/AppModule$2$1.smali
+index 1bf80e8..e3c46fa 100644
+--- a/smali_classes2/com/librelink/app/core/modules/AppModule$2$1.smali
++++ b/smali_classes2/com/librelink/app/core/modules/AppModule$2$1.smali
+@@ -49,18 +49,7 @@
+
+ # virtual methods
+ .method public log()V
+- .locals 3
+-
+- .line 563
+- iget-object v0, p0, Lcom/librelink/app/core/modules/AppModule$2$1;->this$1:Lcom/librelink/app/core/modules/AppModule$2;
+-
+- iget-object v0, v0, Lcom/librelink/app/core/modules/AppModule$2;->val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+- iget-object v1, p0, Lcom/librelink/app/core/modules/AppModule$2$1;->val$eventType:Ljava/lang/String;
+-
+- iget-object v2, p0, Lcom/librelink/app/core/modules/AppModule$2$1;->bundle:Landroid/os/Bundle;
+-
+- invoke-virtual {v0, v1, v2}, Lcom/google/firebase/analytics/FirebaseAnalytics;->logEvent(Ljava/lang/String;Landroid/os/Bundle;)V
++ .locals 0
+
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/modules/AppModule$2.smali b/smali_classes2/com/librelink/app/core/modules/AppModule$2.smali
+index 2445547..d4c8fec 100644
+--- a/smali_classes2/com/librelink/app/core/modules/AppModule$2.smali
++++ b/smali_classes2/com/librelink/app/core/modules/AppModule$2.smali
+@@ -20,18 +20,14 @@
+ # instance fields
+ .field final synthetic this$0:Lcom/librelink/app/core/modules/AppModule;
+
+-.field final synthetic val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+
+ # direct methods
+-.method constructor (Lcom/librelink/app/core/modules/AppModule;Lcom/google/firebase/analytics/FirebaseAnalytics;)V
++.method constructor (Lcom/librelink/app/core/modules/AppModule;)V
+ .locals 0
+
+ .line 538
+ iput-object p1, p0, Lcom/librelink/app/core/modules/AppModule$2;->this$0:Lcom/librelink/app/core/modules/AppModule;
+
+- iput-object p2, p0, Lcom/librelink/app/core/modules/AppModule$2;->val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+ invoke-direct {p0}, Ljava/lang/Object;->()V
+
+ return-void
+@@ -51,23 +47,13 @@
+ .end method
+
+ .method public setUserId(Ljava/lang/String;)V
+- .locals 1
+-
+- .line 577
+- iget-object v0, p0, Lcom/librelink/app/core/modules/AppModule$2;->val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+- invoke-virtual {v0, p1}, Lcom/google/firebase/analytics/FirebaseAnalytics;->setUserId(Ljava/lang/String;)V
++ .locals 0
+
+ return-void
+ .end method
+
+ .method public setUserProperty(Ljava/lang/String;Ljava/lang/String;)V
+- .locals 1
+-
+- .line 571
+- iget-object v0, p0, Lcom/librelink/app/core/modules/AppModule$2;->val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+- invoke-virtual {v0, p1, p2}, Lcom/google/firebase/analytics/FirebaseAnalytics;->setUserProperty(Ljava/lang/String;Ljava/lang/String;)V
++ .locals 0
+
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/modules/AppModule.smali b/smali_classes2/com/librelink/app/core/modules/AppModule.smali
+index 9432174..4c1431a 100644
+--- a/smali_classes2/com/librelink/app/core/modules/AppModule.smali
++++ b/smali_classes2/com/librelink/app/core/modules/AppModule.smali
+@@ -1821,13 +1821,6 @@
+ }
+ .end annotation
+
+- .line 207
+- new-instance v0, Lcom/librelink/app/core/modules/AppModule$1;
+-
+- invoke-direct {v0, p0, p2}, Lcom/librelink/app/core/modules/AppModule$1;->(Lcom/librelink/app/core/modules/AppModule;Lio/reactivex/CompletableEmitter;)V
+-
+- invoke-virtual {p1, v0}, Lcom/google/android/vending/licensing/LicenseChecker;->checkAccess(Lcom/google/android/vending/licensing/LicenseCheckerCallback;)V
+-
+ return-void
+ .end method
+
+@@ -1876,17 +1869,10 @@
+ .annotation runtime Ljavax/inject/Singleton;
+ .end annotation
+
+- .line 535
+- iget-object v0, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {v0}, Lcom/google/firebase/analytics/FirebaseAnalytics;->getInstance(Landroid/content/Context;)Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+- move-result-object v0
+-
+ .line 537
+ new-instance v1, Lcom/librelink/app/core/modules/AppModule$2;
+
+- invoke-direct {v1, p0, v0}, Lcom/librelink/app/core/modules/AppModule$2;->(Lcom/librelink/app/core/modules/AppModule;Lcom/google/firebase/analytics/FirebaseAnalytics;)V
++ invoke-direct {v1, p0}, Lcom/librelink/app/core/modules/AppModule$2;->(Lcom/librelink/app/core/modules/AppModule;)V
+
+ return-object v1
+ .end method
+@@ -1979,20 +1965,11 @@
+ .annotation runtime Ljavax/inject/Singleton;
+ .end annotation
+
+- .line 839
+- invoke-interface {p2}, Lcom/librelink/app/network/LabelingService;->getCachedConfigurationFile()Ljava/lang/String;
+-
+- move-result-object p2
+-
+- const-class v0, Lcom/librelink/app/types/ApplicationConfigurationValues;
+-
+- invoke-virtual {p1, p2, v0}, Lcom/google/gson/Gson;->fromJson(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
+-
+- move-result-object p1
++ new-instance v0, Lcom/librelink/app/types/ApplicationConfigurationValues;
+
+- check-cast p1, Lcom/librelink/app/types/ApplicationConfigurationValues;
++ invoke-direct {v0}, Lcom/librelink/app/types/ApplicationConfigurationValues;->()V
+
+- return-object p1
++ return-object v0
+ .end method
+
+ .method provideCountryCode()Ljava/lang/String;
+@@ -2253,30 +2230,7 @@
+ }
+ .end annotation
+
+- .line 324
+- invoke-interface {p2}, Lcom/librelink/app/prefs/SharedPreference;->get()Ljava/lang/Object;
+-
+- move-result-object p2
+-
+- check-cast p2, Ljava/lang/Boolean;
+-
+- invoke-virtual {p2}, Ljava/lang/Boolean;->booleanValue()Z
+-
+- move-result p2
+-
+- if-eqz p2, :cond_0
+-
+- .line 326
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/common/LicenseCheckActivity;->getDefaultIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto/16 :goto_0
+-
+ .line 328
+- :cond_0
+ iget-object p2, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+
+ invoke-static {p2}, Lcom/librelink/app/ui/common/DataMigrationActivity;->shouldAttemptToMigrateData(Landroid/content/Context;)Z
+@@ -2294,92 +2248,10 @@
+
+ goto/16 :goto_0
+
+- .line 332
+- :cond_1
+- invoke-interface {p3}, Lcom/librelink/app/network/LabelingService;->isCachedConfigurationFilePresent()Z
+-
+- move-result p2
+-
+- if-nez p2, :cond_2
+-
+- .line 334
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/common/AppConfigurationDownloadActivity;->getDefaultIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto :goto_0
+-
+ .line 336
+- :cond_2
+- invoke-interface {p4}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object p2
+-
+- check-cast p2, Ljava/lang/Boolean;
+-
+- invoke-virtual {p2}, Ljava/lang/Boolean;->booleanValue()Z
+-
+- move-result p2
+-
+- if-eqz p2, :cond_3
+-
+- .line 338
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/common/VersionCheckActivity;->getDefaultIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto :goto_0
+-
+- .line 340
+- :cond_3
+- invoke-interface {p1}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object p1
+-
+- check-cast p1, Lcom/librelink/app/network/NetworkService;
+-
+- invoke-interface {p1}, Lcom/librelink/app/network/NetworkService;->isLoggedIn()Z
+-
+- move-result p1
+-
+- if-nez p1, :cond_4
+-
+- .line 342
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/apptour/AppTourActivity;->makeIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto :goto_0
+-
+- :cond_4
+- if-eqz p6, :cond_5
+-
+- .line 346
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- const/4 p2, 0x0
+-
+- invoke-static {p1, p6, p2}, Lcom/librelink/app/ui/settings/AgreementAcceptance;->acceptIntent(Landroid/content/Context;Lcom/librelink/app/types/LicenseAgreement;Z)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- const p2, 0x10008000
+-
+- .line 347
+- invoke-virtual {p1, p2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto :goto_0
++ :cond_1
+
+ .line 349
+- :cond_5
+ invoke-interface {p5}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+
+ move-result-object p1
+@@ -2488,45 +2360,14 @@
+ .end method
+
+ .method provideLicenseCheck()Lio/reactivex/Completable;
+- .locals 4
++ .locals 1
+ .annotation runtime Lcom/librelink/app/core/Qualifiers$LicenseCheck;
+ .end annotation
+
+ .annotation runtime Ldagger/Provides;
+ .end annotation
+
+- .line 205
+- new-instance v0, Lcom/google/android/vending/licensing/LicenseChecker;
+-
+- iget-object v1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- new-instance v2, Lcom/google/android/vending/licensing/StrictPolicy;
+-
+- invoke-direct {v2}, Lcom/google/android/vending/licensing/StrictPolicy;->()V
+-
+- const-string v3, "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhWc0CzRjBWTzUKxUFedp6BuXR42Jd8mNj34vY9x9UBM5PY9NygArO8g9D85gg9CmwrIbqpIa0Jv5tvz5pBZjN97nGO8dOdyBGU9bWFAsZe7JVgvPsLobOPi9xupuF115u7Q+qRdxLkay8zbUUY881M8uWcKwPhJ9zD5g/wqP0FNpXKa8Mk9Btf8MIUIRIl9xCFyq+UiHs0hgp4clPn/vA/7ecOGXfJKwQjyIblFUlNShncxuNXMLtf8vdiWVptCkcYs+RBRgW6MJrEUbeKG+GjMLp1YK35++E+8P12DvhLUz/r+e1Y8WGzGXbZR2pBraaEC/Z093HEkOxXnDsYqeawIDAQAB"
+-
+- invoke-direct {v0, v1, v2, v3}, Lcom/google/android/vending/licensing/LicenseChecker;->(Landroid/content/Context;Lcom/google/android/vending/licensing/Policy;Ljava/lang/String;)V
+-
+- .line 207
+- new-instance v1, Lcom/librelink/app/core/modules/AppModule$$Lambda$0;
+-
+- invoke-direct {v1, p0, v0}, Lcom/librelink/app/core/modules/AppModule$$Lambda$0;->(Lcom/librelink/app/core/modules/AppModule;Lcom/google/android/vending/licensing/LicenseChecker;)V
+-
+- invoke-static {v1}, Lio/reactivex/Completable;->create(Lio/reactivex/CompletableOnSubscribe;)Lio/reactivex/Completable;
+-
+- move-result-object v1
+-
+- invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
+-
+- invoke-static {v0}, Lcom/librelink/app/core/modules/AppModule$$Lambda$1;->get$Lambda(Lcom/google/android/vending/licensing/LicenseChecker;)Lio/reactivex/functions/Action;
+-
+- move-result-object v0
+-
+- .line 248
+- invoke-virtual {v1, v0}, Lio/reactivex/Completable;->doOnTerminate(Lio/reactivex/functions/Action;)Lio/reactivex/Completable;
+-
+- move-result-object v0
++ const/4 v0, 0x0
+
+ return-object v0
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/modules/SensorModule.smali b/smali_classes2/com/librelink/app/core/modules/SensorModule.smali
+index 2d7b83f..91dc549 100644
+--- a/smali_classes2/com/librelink/app/core/modules/SensorModule.smali
++++ b/smali_classes2/com/librelink/app/core/modules/SensorModule.smali
+@@ -104,37 +104,41 @@
+ .end method
+
+ .method static final synthetic lambda$provideAllowEnablingStreamingPreviouslyStartedSensorPredicate$1$SensorModule(Lcom/librelink/app/prefs/SharedPreference;Ljava/lang/String;)Z
+- .locals 1
++ .locals 2
+ .param p0 # Lcom/librelink/app/prefs/SharedPreference;
+ .annotation runtime Lcom/librelink/app/core/Qualifiers$PreviouslyStartedSensor;
+ .end annotation
+ .end param
+-
+- .line 169
+- invoke-interface {p0}, Lcom/librelink/app/prefs/SharedPreference;->isSet()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_0
+-
+- invoke-interface {p0}, Lcom/librelink/app/prefs/SharedPreference;->get()Ljava/lang/Object;
+-
+- move-result-object p0
+-
+- invoke-virtual {p1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+-
+- move-result p0
+-
+- if-eqz p0, :cond_0
++
++ const-string v0, "PatchedSAS"
++ const-string v1, "lambda$provideAllowEnablingStreamingPreviouslyStartedSensorPredicate$1$SensorModule: enable Streaming Workaround active -> enable streaming also if not allowed"
++ invoke-static/range {v0 .. v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ # .line 169
++ # invoke-interface {p0}, Lcom/librelink/app/prefs/SharedPreference;->isSet()Z
++ #
++ # move-result v0
++ #
++ # if-eqz v0, :cond_0
++ #
++ # invoke-interface {p0}, Lcom/librelink/app/prefs/SharedPreference;->get()Ljava/lang/Object;
++ #
++ # move-result-object p0
++ #
++ # invoke-virtual {p1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
++ #
++ # move-result p0
++ #
++ # if-eqz p0, :cond_0
+
+ const/4 p0, 0x1
+
+ return p0
+
+- :cond_0
+- const/4 p0, 0x0
+-
+- return p0
++ # :cond_0
++ # const/4 p0, 0x0
++ #
++ # return p0
+ .end method
+
+
+diff --git a/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali b/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
+index e7ce4d8..2ec0c0b 100644
+--- a/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
++++ b/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
+@@ -33,10 +33,76 @@
+
+ # direct methods
+ .method public constructor ()V
+- .locals 0
++ .registers 2
+
++ .prologue
+ .line 3
+ invoke-direct {p0}, Ljava/lang/Object;->()V
+
++ .line 5
++ const/high16 v0, 0x41200000 # 10.0f
++
++ iput v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->appDefaultServingSize:F
++
++ .line 6
++ const/4 v0, 0x0
++
++ iput v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->appMinimumAge:I
++
++ .line 7
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->appProductStandardNumber:Ljava/lang/String;
++
++ .line 8
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->appRegistrationNumber:Ljava/lang/String;
++
++ .line 9
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuApiKey:Ljava/lang/String;
++
++ .line 10
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuDomain:Ljava/lang/String;
++
++ .line 11
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuGateway:Ljava/lang/String;
++
++ .line 12
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuShareUrl:Ljava/lang/String;
++
++ .line 13
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuUrl:Ljava/lang/String;
++
++ .line 14
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepAudience:Ljava/lang/String;
++
++ .line 15
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepBaseUrl:Ljava/lang/String;
++
++ .line 16
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepIssuer:Ljava/lang/String;
++
++ .line 17
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepSubject:Ljava/lang/String;
++
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/ui/common/ScanSensorActivity.smali b/smali_classes2/com/librelink/app/ui/common/ScanSensorActivity.smali
+index 1d31d31..11e82e4 100644
+--- a/smali_classes2/com/librelink/app/ui/common/ScanSensorActivity.smali
++++ b/smali_classes2/com/librelink/app/ui/common/ScanSensorActivity.smali
+@@ -98,71 +98,6 @@
+ .method private processIntent(Landroid/content/Intent;)V
+ .locals 4
+
+- .line 103
+- iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->labelingService:Lcom/librelink/app/network/LabelingService;
+-
+- invoke-interface {v0}, Lcom/librelink/app/network/LabelingService;->isCachedConfigurationFilePresent()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_2
+-
+- iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->setupComplete:Ljavax/inject/Provider;
+-
+- .line 104
+- invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v0
+-
+- check-cast v0, Ljava/lang/Boolean;
+-
+- invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_2
+-
+- iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->networkService:Ljavax/inject/Provider;
+-
+- .line 105
+- invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v0
+-
+- check-cast v0, Lcom/librelink/app/network/NetworkService;
+-
+- invoke-interface {v0}, Lcom/librelink/app/network/NetworkService;->isLoggedIn()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_2
+-
+- iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->networkTimeEnabled:Ljavax/inject/Provider;
+-
+- .line 106
+- invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v0
+-
+- check-cast v0, Ljava/lang/Boolean;
+-
+- invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_2
+-
+- .line 107
+- invoke-static {p0}, Lcom/librelink/app/ui/common/DataMigrationActivity;->migrationInProgress(Landroid/content/Context;)Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_0
+-
+- goto :goto_0
+-
+- .line 115
+- :cond_0
+ invoke-virtual {p0}, Lcom/librelink/app/ui/common/ScanSensorActivity;->getSupportFragmentManager()Landroid/support/v4/app/FragmentManager;
+
+ move-result-object v0
+@@ -216,27 +151,6 @@
+ .line 127
+ invoke-virtual {v0}, Landroid/support/v4/app/FragmentTransaction;->commitNow()V
+
+- goto :goto_1
+-
+- .line 109
+- :cond_2
+- :goto_0
+- iget-object p1, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->audioNotifier:Lcom/librelink/app/types/AudioNotifier;
+-
+- invoke-interface {p1}, Lcom/librelink/app/types/AudioNotifier;->notifyError()V
+-
+- .line 110
+- iget-object p1, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->initialIntent:Ljavax/inject/Provider;
+-
+- invoke-interface {p1}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object p1
+-
+- check-cast p1, Landroid/content/Intent;
+-
+- invoke-virtual {p0, p1}, Lcom/librelink/app/ui/common/ScanSensorActivity;->startActivity(Landroid/content/Intent;)V
+-
+- :goto_1
+ return-void
+ .end method
+
+diff --git a/smali_classes2/com/librelink/app/ui/common/ScanSensorFragment.smali b/smali_classes2/com/librelink/app/ui/common/ScanSensorFragment.smali
+index cd5522b..a807de0 100644
+--- a/smali_classes2/com/librelink/app/ui/common/ScanSensorFragment.smali
++++ b/smali_classes2/com/librelink/app/ui/common/ScanSensorFragment.smali
+@@ -172,7 +172,6 @@
+ .end annotation
+ .end field
+
+-
+ # direct methods
+ .method public constructor ()V
+ .locals 1
+@@ -287,6 +286,7 @@
+
+ .line 487
+ :cond_3
++
+ iget-object p4, p0, Lcom/librelink/app/ui/common/ScanSensorFragment;->previousSensor:Lcom/librelink/app/prefs/SharedPreference;
+
+ const/4 v0, 0x0
+@@ -473,11 +473,16 @@
+ .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
+
+ :goto_3
++
++ invoke-static {p0, p5}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorActivateBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;)V
++
+ return-object p3
+
+ :catch_0
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 570
+ new-instance p2, Lcom/librelink/app/core/AppError;
+
+@@ -490,12 +495,16 @@
+ :catch_1
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 566
+ throw p1
+
+ :catch_2
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 561
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -511,6 +520,8 @@
+ :catch_3
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 556
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -526,6 +537,8 @@
+ :catch_4
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 551
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -541,6 +554,8 @@
+ :catch_5
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 546
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -556,6 +571,8 @@
+ :catch_6
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 541
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -571,6 +588,8 @@
+ :catch_7
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 536
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -586,6 +605,8 @@
+ :catch_8
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 532
+ new-instance p2, Lcom/librelink/app/core/AppError;
+
+@@ -1588,6 +1609,7 @@
+
+ .line 594
+ :cond_0
++
+ invoke-interface {p3, v0}, Lcom/librelink/app/types/SAS;->getLatestRealTimeGlucoseReading(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;)Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/RealTimeGlucose;
+
+ move-result-object v1
+@@ -1676,6 +1698,8 @@
+
+ move-result-object v1
+
++ invoke-static {p0, v0}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorScanBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;)V
++
+ .line 607
+ iget-object v2, p0, Lcom/librelink/app/ui/common/ScanSensorFragment;->mAnalytics:Lcom/librelink/app/types/Analytics;
+
+@@ -1731,6 +1755,8 @@
+ :catch_0
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 702
+ new-instance p2, Lcom/librelink/app/core/AppError;
+
+@@ -1743,12 +1769,16 @@
+ :catch_1
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 698
+ throw p1
+
+ :catch_2
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 693
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1764,6 +1794,8 @@
+ :catch_3
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 688
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1779,6 +1811,8 @@
+ :catch_4
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 683
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1794,6 +1828,8 @@
+ :catch_5
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 678
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1809,6 +1845,8 @@
+ :catch_6
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 673
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1824,6 +1862,8 @@
+ :catch_7
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 668
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1839,6 +1879,8 @@
+ :catch_8
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 663
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1854,6 +1896,8 @@
+ :catch_9
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 654
+ iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorFragment;->mAnalytics:Lcom/librelink/app/types/Analytics;
+
+@@ -1898,6 +1942,8 @@
+ :catch_a
+ move-exception v0
+
++ invoke-static {p0, v0}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 636
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1945,6 +1991,8 @@
+ :catch_b
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 631
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1960,6 +2008,8 @@
+ :catch_c
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 626
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1975,6 +2025,8 @@
+ :catch_d
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 622
+ new-instance p2, Lcom/librelink/app/core/AppError;
+
+@@ -1987,6 +2039,8 @@
+ :catch_e
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 616
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -2138,6 +2192,22 @@
+ return-void
+ .end method
+
++.method public getSAS()Lcom/librelink/app/types/SAS;
++ .registers 2
++
++ .prologue
++ .line 32
++ iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorFragment;->sasProvider:Ljavax/inject/Provider;
++
++ invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
++
++ move-result-object v0
++
++ check-cast v0, Lcom/librelink/app/types/SAS;
++
++ return-object v0
++.end method
++
+ .method public injectWith(Lcom/librelink/app/core/components/AppComponent;)V
+ .locals 0
+
+diff --git a/smali_classes2/com/librelink/app/ui/help/EventLogActivity.smali b/smali_classes2/com/librelink/app/ui/help/EventLogActivity.smali
+index 076b2be..90e2ba0 100644
+--- a/smali_classes2/com/librelink/app/ui/help/EventLogActivity.smali
++++ b/smali_classes2/com/librelink/app/ui/help/EventLogActivity.smali
+@@ -321,12 +321,5 @@
+ .line 77
+ invoke-virtual {p1, v0, v1}, Lio/reactivex/Observable;->subscribe(Lio/reactivex/functions/Consumer;Lio/reactivex/functions/Consumer;)Lio/reactivex/disposables/Disposable;
+
+- .line 85
+- iget-object p1, p0, Lcom/librelink/app/ui/help/EventLogActivity;->mButtonView:Landroid/view/View;
+-
+- const/4 v0, 0x0
+-
+- invoke-virtual {p1, v0}, Landroid/view/View;->setVisibility(I)V
+-
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/ui/help/HelpActivity.smali b/smali_classes2/com/librelink/app/ui/help/HelpActivity.smali
+index 8455455..6fc7450 100644
+--- a/smali_classes2/com/librelink/app/ui/help/HelpActivity.smali
++++ b/smali_classes2/com/librelink/app/ui/help/HelpActivity.smali
+@@ -186,21 +186,6 @@
+ .line 89
+ invoke-virtual {p1, v0}, Landroid/widget/ArrayAdapter;->add(Ljava/lang/Object;)V
+
+- .line 104
+- new-instance v0, Lcom/librelink/app/ui/help/HelpActivity$HelpItem;
+-
+- .line 105
+- invoke-static {p0}, Lcom/librelink/app/ui/help/UserManualActivity;->showManualIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object v1
+-
+- const v2, 0x7f10018f
+-
+- invoke-direct {v0, p0, v2, v1}, Lcom/librelink/app/ui/help/HelpActivity$HelpItem;->(Lcom/librelink/app/ui/help/HelpActivity;ILandroid/content/Intent;)V
+-
+- .line 104
+- invoke-virtual {p1, v0}, Landroid/widget/ArrayAdapter;->add(Ljava/lang/Object;)V
+-
+ .line 113
+ new-instance v0, Lcom/librelink/app/ui/help/HelpActivity$HelpItem;
+
+@@ -216,31 +201,6 @@
+ .line 113
+ invoke-virtual {p1, v0}, Landroid/widget/ArrayAdapter;->add(Ljava/lang/Object;)V
+
+- .line 116
+- iget-object v0, p0, Lcom/librelink/app/ui/help/HelpActivity;->agreements:Ljava/util/List;
+-
+- invoke-static {v0}, Lcom/annimon/stream/Stream;->of(Ljava/util/List;)Lcom/annimon/stream/Stream;
+-
+- move-result-object v0
+-
+- new-instance v1, Lcom/librelink/app/ui/help/HelpActivity$$Lambda$0;
+-
+- invoke-direct {v1, p0}, Lcom/librelink/app/ui/help/HelpActivity$$Lambda$0;->(Lcom/librelink/app/ui/help/HelpActivity;)V
+-
+- .line 117
+- invoke-virtual {v0, v1}, Lcom/annimon/stream/Stream;->map(Lcom/annimon/stream/function/Function;)Lcom/annimon/stream/Stream;
+-
+- move-result-object v0
+-
+- invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/help/HelpActivity$$Lambda$1;->get$Lambda(Landroid/widget/ArrayAdapter;)Lcom/annimon/stream/function/Consumer;
+-
+- move-result-object v1
+-
+- .line 119
+- invoke-virtual {v0, v1}, Lcom/annimon/stream/Stream;->forEach(Lcom/annimon/stream/function/Consumer;)V
+-
+ .line 121
+ iget-object v0, p0, Lcom/librelink/app/ui/help/HelpActivity;->mListView:Landroid/widget/ListView;
+
diff --git a/ToDo/Bluetooth/changes_compared_to_patched_app_with_patch_git_adcb537e603f943875b3b6a379da8463a031e38b.patch b/ToDo/Bluetooth/changes_compared_to_patched_app_with_patch_git_adcb537e603f943875b3b6a379da8463a031e38b.patch
new file mode 100644
index 0000000..4fb1a06
--- /dev/null
+++ b/ToDo/Bluetooth/changes_compared_to_patched_app_with_patch_git_adcb537e603f943875b3b6a379da8463a031e38b.patch
@@ -0,0 +1,1130 @@
+ build/apk/classes.dex | Bin 7963204 -> 7966360 bytes
+ build/apk/classes2.dex | Bin 9540508 -> 9541936 bytes
+ ...reamingPreviouslyStartedSensorPredicate$2.smali | 8 +-
+ ...JoiningPreviouslyStartedSensorPredicate$2.smali | 8 +-
+ .../DefaultSensorAbstractionService.smali | 249 ++++++++++++++++++++-
+ .../sensorabstractionservice/Sensor.smali | 8 +-
+ .../com/librelink/app/ThirdPartyIntegration.smali | 240 ++++++++++++++++++++
+ .../com/librelink/app/core/BleManager$3.smali | 35 ++-
+ .../librelink/app/core/modules/SensorModule.smali | 48 ++--
+ 9 files changed, 557 insertions(+), 39 deletions(-)
+
+diff --git a/build/apk/classes.dex b/build/apk/classes.dex
+index 8c07a60..7ec9379 100644
+Binary files a/build/apk/classes.dex and b/build/apk/classes.dex differ
+diff --git a/build/apk/classes2.dex b/build/apk/classes2.dex
+index aa55139..974ebad 100644
+Binary files a/build/apk/classes2.dex and b/build/apk/classes2.dex differ
+diff --git a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate$2.smali b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate$2.smali
+index 0e298f2..7500fbd 100644
+--- a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate$2.smali
++++ b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate$2.smali
+@@ -30,9 +30,13 @@
+
+ # virtual methods
+ .method public shouldAllowEnablingStreaming(Ljava/lang/String;)Z
+- .locals 0
++ .locals 2
+
+- const/4 p1, 0x0
++ const/4 p1, 0x1
++
++ const-string v0, "PatchedSAS"
++ const-string v1, "shouldAllowEnablingStreaming: enable Streaming Workaround active -> enable streaming also if not allowed"
++ invoke-static/range {v0 .. v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ return p1
+ .end method
+diff --git a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate$2.smali b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate$2.smali
+index 916a515..32b608c 100644
+--- a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate$2.smali
++++ b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate$2.smali
+@@ -30,9 +30,13 @@
+
+ # virtual methods
+ .method public shouldAllowJoiningSensor(Ljava/lang/String;JJ)Z
+- .locals 0
++ .locals 2
+
+- const/4 p1, 0x0
++ const/4 p1, 0x1
++
++ const-string v0, "PatchedSAS"
++ const-string v1, "shouldAllowJoiningSensor: enable Joining Workaround active -> enable joining also if not allowed"
++ invoke-static/range {v0 .. v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ return p1
+ .end method
+diff --git a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService.smali b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService.smali
+index 3b163ce..423b1d8 100644
+--- a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService.smali
++++ b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService.smali
+@@ -1584,7 +1584,7 @@
+ .end method
+
+ .method private processActivation(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/User;Ljava/lang/String;II[B[B[BLcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate;)Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;
+- .locals 37
++ .locals 41
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(",
+@@ -1609,6 +1609,10 @@
+ Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorRemovedException;
+ }
+ .end annotation
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "entering processActivation()"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ move-object/from16 v15, p0
+
+@@ -1626,6 +1630,10 @@
+ move-result v1
+
+ if-nez v1, :cond_0
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v1, :cond_0"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1261
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/MathFailureException;
+@@ -1636,6 +1644,11 @@
+
+ .line 1264
+ :cond_0
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_0"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ iget-object v1, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->timeOsFunctions:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/TimeOsFunctions;
+
+ invoke-interface {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/TimeOsFunctions;->getCurrentTimeZone()Ljava/util/TimeZone;
+@@ -1679,6 +1692,10 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_0 .. :try_end_0} :catch_7
+
+ if-eqz v5, :cond_1
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v5, :cond_1"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1275
+ :try_start_1
+@@ -1687,6 +1704,10 @@
+ move-result v1
+
+ if-eqz v1, :cond_1
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v1, :cond_1"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1276
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorTerminatedException;
+@@ -1720,6 +1741,11 @@
+
+ .line 1279
+ :cond_1
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_1"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_start_2
+ iget-object v1, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->dataProcessing:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;
+
+@@ -1842,6 +1868,10 @@
+ sub-long v3, v1, v3
+
+ if-nez v5, :cond_2
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v5, :cond_2"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1310
+ :try_start_3
+@@ -1870,8 +1900,16 @@
+ invoke-interface/range {v1 .. v6}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate;->shouldAllowJoiningSensor(Ljava/lang/String;JJ)Z
+
+ move-result v1
++
++ const-string v39, "PatchedSASSAllJ"
++ move/from16 v40, v1
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-nez v1, :cond_3
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v1, :cond_3"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1314
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorAlreadyStartedException;
+@@ -1884,12 +1922,22 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_3 .. :try_end_3} :catch_0
+
+ :cond_2
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_2"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move-object/from16 v31, v9
+
+ move-object v9, v5
+
+ .line 1317
+ :cond_3
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_3"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_start_4
+ invoke-virtual {v8}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingScanOutputs;->getSensorHasBeenRemoved()Z
+
+@@ -1899,6 +1947,10 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_4 .. :try_end_4} :catch_7
+
+ if-eqz v1, :cond_5
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v1, :cond_5"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1318
+ :try_start_5
+@@ -1911,6 +1963,10 @@
+ move-result v1
+
+ if-eqz v1, :cond_4
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v1, :cond_4"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1319
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorTerminatedException;
+@@ -1921,6 +1977,11 @@
+
+ .line 1321
+ :cond_4
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_4"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorRemovedException;
+
+ invoke-direct {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorRemovedException;->()V
+@@ -1932,6 +1993,11 @@
+
+ .line 1325
+ :cond_5
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_5"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_start_6
+ invoke-virtual {v8}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingScanOutputs;->getAlgorithmResults()Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/AlgorithmResults;
+
+@@ -1971,6 +2037,10 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_6 .. :try_end_6} :catch_7
+
+ if-eqz v3, :cond_6
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v3, :cond_6"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ :try_start_7
+ invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
+@@ -1995,6 +2065,11 @@
+ goto :goto_0
+
+ :cond_6
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_6"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ sub-int/2addr v1, v13
+
+ .line 1338
+@@ -2039,12 +2114,21 @@
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_8 .. :try_end_8} :catch_7
+
+ if-eqz v9, :cond_7
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v9, :cond_7"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1348
+ :try_start_9
+ invoke-virtual {v9}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/SensorEntity;->getEnableStreamingTimestamp()I
+
+ move-result v1
++
++ const-string v39, "PatchedSASESTimes"
++ move/from16 v40, v1
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogInt(Ljava/lang/String;I)V
++
+ :try_end_9
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingException; {:try_start_9 .. :try_end_9} :catch_1
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_9 .. :try_end_9} :catch_0
+@@ -2060,6 +2144,11 @@
+
+ .line 1350
+ :cond_7
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_7"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_start_a
+ iget-object v1, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->timeOfDayAdapter:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/TimeOfDayAdapter;
+
+@@ -2078,18 +2167,35 @@
+ invoke-interface {v1, v14}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate;->shouldAllowEnablingStreaming(Ljava/lang/String;)Z
+
+ move-result v1
++
++ const-string v39, "PatchedSASSAEStre"
++ move/from16 v40, v1
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ const/4 v3, 0x0
+
+ if-nez v9, :cond_8
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v9, :cond_8"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ if-eqz v1, :cond_8
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v1, :cond_8"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ const/4 v1, 0x1
+
+ goto :goto_3
+
+ :cond_8
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_8"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move v1, v3
+
+ .line 1361
+@@ -2100,6 +2206,10 @@
+ invoke-virtual {v8}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingScanOutputs;->getPersonalizationIndex()B
+
+ move-result v5
++
++ const-string v39, "PatchedSASPersID"
++ move/from16 v40, v5
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogByte(Ljava/lang/String;B)V
+
+ move/from16 v32, v13
+
+@@ -2111,6 +2221,12 @@
+ invoke-interface {v4, v6, v13, v5, v2}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->getEnableStreamingPayload([B[BBI)[B
+
+ move-result-object v4
++
++ const-string v39, "PatchedSASStrePL"
++ move-object/from16 v40, v4
++ invoke-static/range {v39 .. v40}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
++
++
+ :try_end_a
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessingException; {:try_start_a .. :try_end_a} :catch_8
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_a .. :try_end_a} :catch_7
+@@ -2118,11 +2234,24 @@
+ const/4 v5, 0x0
+
+ if-nez v1, :cond_9
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v1, :cond_9"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ move-object v4, v5
+
+ :cond_9
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_9"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ if-nez v9, :cond_b
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-nez v9, :cond_b"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 1375
+ :try_start_b
+@@ -2131,12 +2260,21 @@
+ move-result v9
+
+ if-eqz v4, :cond_a
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: after if-eqz v4, :cond_a"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ move/from16 v18, v2
+
+ goto :goto_4
+
+ :cond_a
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_a"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move/from16 v18, v3
+
+ .line 1387
+@@ -2232,6 +2370,11 @@
+ goto :goto_9
+
+ :cond_b
++
++ const-string v37, "PatchedSAS"
++ const-string v38, "processActivation: at :cond_b"
++ invoke-static/range {v37 .. v38}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move-object/from16 v34, v4
+
+ move-object/from16 v35, v10
+@@ -2528,7 +2671,7 @@
+ .end method
+
+ .method private processScan(Ljava/lang/String;II[B[B[B)Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;
+- .locals 36
++ .locals 38
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(",
+@@ -2555,6 +2698,10 @@
+ }
+ .end annotation
+
++ const-string v36, "PatchedSAS"
++ const-string v37, "entering processScan()"
++ invoke-static/range {v36 .. v37}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ move-object/from16 v1, p0
+
+ move-object/from16 v2, p1
+@@ -4523,7 +4670,7 @@
+
+ # virtual methods
+ .method public activateSensor(Landroid/nfc/Tag;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/User;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowJoiningPreviouslyStartedSensorPredicate;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/AllowEnablingStreamingPreviouslyStartedSensorPredicate;)Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;
+- .locals 29
++ .locals 31
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(",
+@@ -4584,9 +4731,17 @@
+ invoke-interface {v1, v11}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->getPatchInfo(Landroid/nfc/Tag;)[B
+
+ move-result-object v14
++
++ const-string v29, "PatchedSASPInfo"
++ move-object/from16 v30, v14
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ if-nez v14, :cond_1
+-
++
++ const-string v29, "PatchedSAS"
++ const-string v30, "activateSensor: getPatchInfo() != 0"
++ invoke-static/range {v29 .. v30}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ .line 698
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorRfTransmissionErrorException;
+
+@@ -4603,8 +4758,16 @@
+ invoke-interface {v1, v14, v2}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->isPatchSupported([BLcom/abbottdiabetescare/flashglucose/sensorabstractionservice/ApplicationRegion;)Z
+
+ move-result v1
++
++ const-string v29, "PatchedSASPSupp"
++ move/from16 v30, v1
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-nez v1, :cond_2
++
++ const-string v29, "PatchedSAS"
++ const-string v30, "activateSensor: isPatchSupported() == 0"
++ invoke-static/range {v29 .. v30}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 702
+ new-instance v1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorNotCompatibleException;
+@@ -4620,6 +4783,10 @@
+ invoke-interface {v1, v11}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->getPatchUid(Landroid/nfc/Tag;)[B
+
+ move-result-object v12
++
++ const-string v29, "PatchedSASPUID"
++ move-object/from16 v30, v12
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ .line 707
+ iget-object v1, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->dataProcessing:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;
+@@ -4628,6 +4795,10 @@
+ invoke-interface {v1, v14}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->getProductFamily([B)I
+
+ move-result v1
++
++ const-string v29, "PatchedSASPFAM"
++ move/from16 v30, v1
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogInt(Ljava/lang/String;I)V
+
+ .line 707
+ invoke-static {v1, v12}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->getSensorSerialNumber(I[B)Ljava/lang/String;
+@@ -4645,9 +4816,17 @@
+
+ .line 713
+ :cond_3
++ const-string v29, "PatchedSASSer"
++ move-object/from16 v30, v13
++ invoke-static/range {v29 .. v30}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ invoke-direct {v15, v11, v12, v14}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->readFullPatchContents(Landroid/nfc/Tag;[B[B)[B
+
+ move-result-object v18
++
++ const-string v29, "PatchedSASCont"
++ move-object/from16 v30, v18
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ if-nez v18, :cond_4
+
+@@ -4681,11 +4860,20 @@
+ invoke-virtual {v10}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/PatchTimeValues;->getWarmupPeriodInMinutes()I
+
+ move-result v4
++
++ const-string v29, "PatchedSASWUT"
++ move/from16 v30, v4
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogInt(Ljava/lang/String;I)V
+
+ .line 729
+ invoke-virtual {v10}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/PatchTimeValues;->getWearDurationInMinutes()I
+-
++
+ move-result v5
++
++ const-string v29, "PatchedSASWDur"
++ move/from16 v30, v5
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogInt(Ljava/lang/String;I)V
++
+ :try_end_0
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ActivationException; {:try_start_0 .. :try_end_0} :catch_1
+
+@@ -4717,6 +4905,10 @@
+ invoke-static {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;->access$000(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;)[B
+
+ move-result-object v2
++
++ const-string v29, "PatchedSASESP1"
++ move-object/from16 v30, v2
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ if-eqz v2, :cond_6
+
+@@ -4726,10 +4918,18 @@
+ invoke-static {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;->access$000(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ProcessActivationResults;)[B
+
+ move-result-object v3
++
++ const-string v29, "PatchedSASESP2"
++ move-object/from16 v30, v3
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ invoke-interface {v2, v11, v3}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->enableStreaming(Landroid/nfc/Tag;[B)Z
+
+ move-result v2
++
++ const-string v29, "PatchedSASEStre1"
++ move/from16 v30, v2
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-nez v2, :cond_6
+
+@@ -4803,6 +5003,10 @@
+ invoke-interface {v4, v12, v14, v5}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->getActivationPayload([B[BB)[B
+
+ move-result-object v4
++
++ const-string v29, "PatchedSASActPL"
++ move-object/from16 v30, v4
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ .line 758
+ iget-object v5, v15, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService;->dataProcessing:Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;
+@@ -4965,6 +5169,10 @@
+ invoke-virtual {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ActivationException;->getEnableStreamingPayload()[B
+
+ move-result-object v5
++
++ const-string v29, "PatchedSASESP3"
++ move-object/from16 v30, v5
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ if-eqz v5, :cond_9
+
+@@ -4974,10 +5182,18 @@
+ invoke-virtual {v1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/DefaultSensorAbstractionService$ActivationException;->getEnableStreamingPayload()[B
+
+ move-result-object v7
++
++ const-string v29, "PatchedSASESP4"
++ move-object/from16 v30, v7
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ invoke-interface {v5, v11, v7}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->enableStreaming(Landroid/nfc/Tag;[B)Z
+
+ move-result v5
++
++ const-string v29, "PatchedSASEStre2"
++ move/from16 v30, v5
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-nez v5, :cond_9
+
+@@ -4995,6 +5211,10 @@
+ invoke-interface {v5, v11, v3, v4, v10}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/rf/NfcRfModule;->activatePatch(Landroid/nfc/Tag;B[B[B)Z
+
+ move-result v3
++
++ const-string v29, "PatchedSASActPat"
++ move/from16 v30, v3
++ invoke-static/range {v29 .. v30}, Lcom/librelink/app/ThirdPartyIntegration;->LogBool(Ljava/lang/String;Z)V
+
+ if-eqz v3, :cond_c
+
+@@ -6558,7 +6778,7 @@
+ .end method
+
+ .method public getStreamingUnlockPayload(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;)[B
+- .locals 6
++ .locals 8
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(",
+@@ -6589,6 +6809,10 @@
+ move-result-object p1
+
+ if-nez p1, :cond_0
++
++ const-string v6, "PatchedSAS"
++ const-string v7, "getStreamingUnlockPayload: sensor2 == null"
++ invoke-static {v6, v7}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 847
+ new-instance p1, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/SensorNotActiveException;
+@@ -6604,6 +6828,10 @@
+ move-result v4
+
+ if-nez v4, :cond_1
++
++ const-string v6, "PatchedSAS"
++ const-string v7, "getStreamingUnlockPayload: enableStreamingTimestamp == 0"
++ invoke-static {v6, v7}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ const/4 p1, 0x0
+
+@@ -6639,11 +6867,20 @@
+ invoke-virtual {p1}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/SensorEntity;->getStreamingUnlockCount()I
+
+ move-result v5
++
++ const-string v6, "PatchedSAS"
++ const-string v7, "getStreamingUnlockPayload: before getStreamingUnlockPayload..."
++ invoke-static {v6, v7}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 857
+ invoke-interface/range {v0 .. v5}, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/dataprocessing/DataProcessing;->getStreamingUnlockPayload([B[BBII)[B
+
+ move-result-object p1
++
++ const-string v6, "PatchedSAS"
++ const-string v7, "getStreamingUnlockPayload: after getStreamingUnlockPayload."
++ invoke-static {v6, v7}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
+ :try_end_0
+ .catch Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/database/RecordCorruptException; {:try_start_0 .. :try_end_0} :catch_0
+
+diff --git a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor.smali b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor.smali
+index e1f61ef..7dd5c77 100644
+--- a/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor.smali
++++ b/smali/com/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor.smali
+@@ -87,7 +87,7 @@
+ .end method
+
+ .method constructor (IJLcom/abbottdiabetescare/flashglucose/sensorabstractionservice/User;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/util/TimeZone;Ljava/util/Date;ZIIZ)V
+- .locals 0
++ .locals 1
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+ "(IJ",
+@@ -127,8 +127,10 @@
+ .line 121
+ iput-object p9, p0, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;->activationTime:Ljava/util/Date;
+
++ const/4 v0, 0x1
++
+ .line 122
+- iput-boolean p10, p0, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;->streamingAvailable:Z
++ iput-boolean v0, p0, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;->streamingAvailable:Z
+
+ .line 123
+ iput p11, p0, Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;->warmupPeriodInMinutes:I
+@@ -243,7 +245,7 @@
+
+ move-result v0
+
+- const/4 v1, 0x0
++ const/4 v1, 0x1
+
+ const/4 v2, 0x1
+
+diff --git a/smali_classes2/com/librelink/app/ThirdPartyIntegration.smali b/smali_classes2/com/librelink/app/ThirdPartyIntegration.smali
+index fe54b60..39ec79c 100644
+--- a/smali_classes2/com/librelink/app/ThirdPartyIntegration.smali
++++ b/smali_classes2/com/librelink/app/ThirdPartyIntegration.smali
+@@ -1095,3 +1095,243 @@
+ .line 187
+ return-void
+ .end method
++
++.method public static LogBool(Ljava/lang/String;Z)V
++ .locals 2
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "b1" # Z
++
++ .prologue
++ .line 248
++ new-instance v0, Ljava/lang/StringBuilder;
++
++ invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
++
++ const-string v1, "PL"
++
++ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v0
++
++ invoke-static {p1}, Ljava/lang/String;->valueOf(Z)Ljava/lang/String;
++
++ move-result-object v1
++
++ invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 249
++ return-void
++.end method
++
++.method public static LogByte(Ljava/lang/String;B)V
++ .locals 2
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "b1" # B
++
++ .prologue
++ .line 248
++ new-instance v0, Ljava/lang/StringBuilder;
++
++ invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
++
++ const-string v1, "PL"
++
++ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v0
++
++ invoke-static {p1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
++
++ move-result-object v1
++
++ invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 249
++ return-void
++.end method
++
++.method public static LogByteArray(Ljava/lang/String;[B)V
++ .locals 6
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "bytes" # [B
++
++ .prologue
++ .line 232
++ if-nez p1, :cond_0
++
++ .line 241
++ :goto_0
++ return-void
++
++ .line 233
++ :cond_0
++ const-string v4, "0123456789ABCDEF"
++
++ invoke-virtual {v4}, Ljava/lang/String;->toCharArray()[C
++
++ move-result-object v0
++
++ .line 234
++ .local v0, "hexArray":[C
++ array-length v4, p1
++
++ mul-int/lit8 v4, v4, 0x2
++
++ new-array v1, v4, [C
++
++ .line 235
++ .local v1, "hexChars":[C
++ const/4 v2, 0x0
++
++ .local v2, "j":I
++ :goto_1
++ array-length v4, p1
++
++ if-ge v2, v4, :cond_1
++
++ .line 236
++ aget-byte v4, p1, v2
++
++ and-int/lit16 v3, v4, 0xff
++
++ .line 237
++ .local v3, "v":I
++ mul-int/lit8 v4, v2, 0x2
++
++ ushr-int/lit8 v5, v3, 0x4
++
++ aget-char v5, v0, v5
++
++ aput-char v5, v1, v4
++
++ .line 238
++ mul-int/lit8 v4, v2, 0x2
++
++ add-int/lit8 v4, v4, 0x1
++
++ and-int/lit8 v5, v3, 0xf
++
++ aget-char v5, v0, v5
++
++ aput-char v5, v1, v4
++
++ .line 235
++ add-int/lit8 v2, v2, 0x1
++
++ goto :goto_1
++
++ .line 240
++ .end local v3 # "v":I
++ :cond_1
++ new-instance v4, Ljava/lang/StringBuilder;
++
++ invoke-direct {v4}, Ljava/lang/StringBuilder;->()V
++
++ const-string v5, "PL"
++
++ invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v4
++
++ invoke-virtual {v4, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v4
++
++ invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v4
++
++ new-instance v5, Ljava/lang/String;
++
++ invoke-direct {v5, v1}, Ljava/lang/String;->([C)V
++
++ invoke-static {v4, v5}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ goto :goto_0
++.end method
++
++.method public static LogInt(Ljava/lang/String;I)V
++ .locals 2
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "i1" # I
++
++ .prologue
++ .line 244
++ new-instance v0, Ljava/lang/StringBuilder;
++
++ invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
++
++ const-string v1, "PL"
++
++ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v0
++
++ invoke-static {p1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
++
++ move-result-object v1
++
++ invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 245
++ return-void
++.end method
++
++.method public static LogLong(Ljava/lang/String;J)V
++ .locals 3
++ .param p0, "Identifier" # Ljava/lang/String;
++ .param p1, "l1" # J
++
++ .prologue
++ .line 252
++ new-instance v0, Ljava/lang/StringBuilder;
++
++ invoke-direct {v0}, Ljava/lang/StringBuilder;->()V
++
++ const-string v1, "PL"
++
++ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
++
++ move-result-object v0
++
++ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
++
++ move-result-object v0
++
++ invoke-static {p1, p2}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
++
++ move-result-object v1
++
++ invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 253
++ return-void
++.end method
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$3.smali b/smali_classes2/com/librelink/app/core/BleManager$3.smali
+index 878334b..805484e 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$3.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$3.smali
+@@ -388,7 +388,7 @@
+ .end method
+
+ .method public onCharacteristicWrite(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;I)V
+- .locals 1
++ .locals 3
+
+ .line 258
+ iget-object p1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+@@ -486,8 +486,12 @@
+ invoke-virtual {p3, p2}, Landroid/bluetooth/BluetoothGatt;->writeDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z
+
+ move-result p2
+-
++
+ if-eqz p2, :cond_0
++
++ const-string v1, "PatchedBleManager"
++ const-string v2, "onCharacteristicWrite: successfully set BLE passcode"
++ invoke-static/range {v1 .. v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ goto :goto_0
+
+@@ -666,10 +670,11 @@
+ .end method
+
+ .method public onServicesDiscovered(Landroid/bluetooth/BluetoothGatt;I)V
+- .locals 5
++ .locals 9
+
+ .line 214
+ iget-object p1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
++ iget-object v6, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
+ new-instance v0, Ljava/lang/StringBuilder;
+
+@@ -688,6 +693,9 @@
+ invoke-static {p1, v0}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ if-nez p2, :cond_1
++
++ const-string v5, "onServicesDiscovered: i == 0"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ .line 217
+ iget-object p1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+@@ -707,6 +715,9 @@
+ move-result-object p1
+
+ if-eqz p1, :cond_1
++
++ const-string v5, "onServicesDiscovered: service != null"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ .line 221
+ iget-object p2, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+@@ -720,9 +731,12 @@
+ move-result-object p1
+
+ if-eqz p1, :cond_1
+-
++
+ .line 224
+ iget-object p2, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
++
++ const-string v5, "onServicesDiscovered: characteristic != null"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ invoke-static {p2}, Lcom/librelink/app/core/BleManager;->access$700(Lcom/librelink/app/core/BleManager;)Ljavax/inject/Provider;
+
+@@ -739,6 +753,9 @@
+ move-result-object p2
+
+ if-eqz p2, :cond_1
++
++ const-string v5, "onServicesDiscovered: sensors != null"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ const/4 v0, 0x0
+
+@@ -773,6 +790,9 @@
+ move-result v2
+
+ if-eqz v2, :cond_0
++
++ const-string v5, "onServicesDiscovered: sensor.getSerialNumber().equals(BleManager.this.mActiveDeviceSerialNumber)"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
+
+ const/4 v2, 0x0
+
+@@ -803,6 +823,13 @@
+
+ :goto_1
+ if-eqz v1, :cond_0
++
++ const-string v5, "onServicesDiscovered: bArr != null)"
++ invoke-static {v6, v5}, Lcom/librelink/app/core/BleManager;->access$200(Lcom/librelink/app/core/BleManager;Ljava/lang/String;)V
++
++ const-string v7, "PatchedBleManager"
++ move-object/from16 v8, v1
++ invoke-static/range {v7 .. v8}, Lcom/librelink/app/ThirdPartyIntegration;->LogByteArray(Ljava/lang/String;[B)V
+
+ .line 243
+ invoke-virtual {p1, v1}, Landroid/bluetooth/BluetoothGattCharacteristic;->setValue([B)Z
+diff --git a/smali_classes2/com/librelink/app/core/modules/SensorModule.smali b/smali_classes2/com/librelink/app/core/modules/SensorModule.smali
+index 2d7b83f..91dc549 100644
+--- a/smali_classes2/com/librelink/app/core/modules/SensorModule.smali
++++ b/smali_classes2/com/librelink/app/core/modules/SensorModule.smali
+@@ -104,37 +104,41 @@
+ .end method
+
+ .method static final synthetic lambda$provideAllowEnablingStreamingPreviouslyStartedSensorPredicate$1$SensorModule(Lcom/librelink/app/prefs/SharedPreference;Ljava/lang/String;)Z
+- .locals 1
++ .locals 2
+ .param p0 # Lcom/librelink/app/prefs/SharedPreference;
+ .annotation runtime Lcom/librelink/app/core/Qualifiers$PreviouslyStartedSensor;
+ .end annotation
+ .end param
+-
+- .line 169
+- invoke-interface {p0}, Lcom/librelink/app/prefs/SharedPreference;->isSet()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_0
+-
+- invoke-interface {p0}, Lcom/librelink/app/prefs/SharedPreference;->get()Ljava/lang/Object;
+-
+- move-result-object p0
+-
+- invoke-virtual {p1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+-
+- move-result p0
+-
+- if-eqz p0, :cond_0
++
++ const-string v0, "PatchedSAS"
++ const-string v1, "lambda$provideAllowEnablingStreamingPreviouslyStartedSensorPredicate$1$SensorModule: enable Streaming Workaround active -> enable streaming also if not allowed"
++ invoke-static/range {v0 .. v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ # .line 169
++ # invoke-interface {p0}, Lcom/librelink/app/prefs/SharedPreference;->isSet()Z
++ #
++ # move-result v0
++ #
++ # if-eqz v0, :cond_0
++ #
++ # invoke-interface {p0}, Lcom/librelink/app/prefs/SharedPreference;->get()Ljava/lang/Object;
++ #
++ # move-result-object p0
++ #
++ # invoke-virtual {p1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
++ #
++ # move-result p0
++ #
++ # if-eqz p0, :cond_0
+
+ const/4 p0, 0x1
+
+ return p0
+
+- :cond_0
+- const/4 p0, 0x0
+-
+- return p0
++ # :cond_0
++ # const/4 p0, 0x0
++ #
++ # return p0
+ .end method
+
+
diff --git a/ToDo/Bluetooth/logcat_06-06-2020_00-42-17.txt b/ToDo/Bluetooth/logcat_06-06-2020_00-42-17.txt
new file mode 100644
index 0000000..74f7877
--- /dev/null
+++ b/ToDo/Bluetooth/logcat_06-06-2020_00-42-17.txt
@@ -0,0 +1,205 @@
+<<< log_count = 68 >>>
+[06-06 00:38:55.710 17396:29265 D/PLPatchedSASPInfo]
+9D083001382B
+
+[06-06 00:38:55.717 17396:29265 D/PLPatchedSASPSupp]
+true
+
+[06-06 00:38:55.717 17396:29265 D/PLPatchedSASPUID]
+1204CE0000A407E0
+
+[06-06 00:38:55.719 17396:29265 D/PLPatchedSASPFAM]
+3
+
+[06-06 00:38:55.719 17396:29265 D/PatchedSASSer]
+3MH001LHXXX
+
+[06-06 00:38:56.042 17396:29265 D/PLPatchedSASCont]
+3476FFF867695A17CDFDF49797096F5D3C3A9C74EBFCA56284F85E0E25E5C1648DF8E4B787CB12CC5EA504F46F3EAC87E7977622ADCB366D234FC634FE202C7B5A3746C8603D22E494FA46C2245C6C77BEAD9C20345C7D905E3F335967B0979B800BAD1B99CB71321B57926C2FD2D8500491C2028F5FB46E362A1EE07D508A9DC6DB556D91ECF893AE8C4717BE88E0D3AB90F4F4A074DB8215D3999491A564EC1699F2C64FBEB66C7756F590B7DBBF0C1B0551761CA7E81F272A6DE75701F2D83016AEFEA3B11B23AA0A198C7CA4F30962CEC08BDC212934E3EEDA03593880D4B86B7B50E83BAFBCBA02D274E753AD788F5CFE0EDF31ABCCC3E172EA948AEBD72C22289C95B4B9C737F74F73BA4AC81602A7E31A8236CEA02B4D69CDC1D5EE1D3C19515198997379C7DAD6BC976F02BA72947A29AF21047AA10202B6D5FF830343A389C04F421ACC2FFCF4372D2BD471D85610540BB05A80
+
+[06-06 00:38:56.044 17396:29265 D/PLPatchedSASWUT]
+60
+
+[06-06 00:38:56.044 17396:29265 D/PLPatchedSASWDur]
+20160
+
+[06-06 00:38:56.044 17396:29265 D/PatchedSAS]
+entering processActivation()
+
+[06-06 00:38:56.046 17396:29265 D/PatchedSAS]
+processActivation: at :cond_0
+
+[06-06 00:38:56.051 17396:29265 D/PatchedSAS]
+processActivation: at :cond_1
+
+[06-06 00:38:56.095 17396:29265 D/PatchedSAS]
+processActivation: after if-nez v5, :cond_2
+
+[06-06 00:38:56.096 17396:29265 D/PLPatchedSASSAllJ]
+true
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+processActivation: at :cond_3
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+processActivation: at :cond_5
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+processActivation: after if-eqz v3, :cond_6
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+processActivation: after if-eqz v3, :cond_6
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+processActivation: at :cond_6
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+processActivation: at :cond_7
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+lambda$provideAllowEnablingStreamingPreviouslyStartedSensorPredicate$1$SensorModule: enable Streaming Workaround active -> enable streaming also if not allowed
+
+[06-06 00:38:56.096 17396:29265 D/PLPatchedSASSAEStre]
+true
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+processActivation: after if-nez v9, :cond_8
+
+[06-06 00:38:56.096 17396:29265 D/PatchedSAS]
+processActivation: after if-eqz v1, :cond_8
+
+[06-06 00:38:56.097 17396:29265 D/PLPatchedSASPersID]
+0
+
+[06-06 00:38:56.098 17396:29265 D/PLPatchedSASStrePL]
+1E808E9D13663D93F5
+
+[06-06 00:38:56.099 17396:29265 D/PatchedSAS]
+processActivation: at :cond_9
+
+[06-06 00:38:56.099 17396:29265 D/PatchedSAS]
+processActivation: after if-nez v9, :cond_b
+
+[06-06 00:38:56.099 17396:29265 D/PatchedSAS]
+processActivation: after if-eqz v4, :cond_a
+
+[06-06 00:38:56.136 17396:29265 D/PLPatchedSASESP1]
+1E808E9D13663D93F5
+
+[06-06 00:38:56.136 17396:29265 D/PLPatchedSASESP2]
+1E808E9D13663D93F5
+
+[06-06 00:38:56.162 17396:29265 D/PLPatchedSASEStre1]
+true
+
+[06-06 00:38:56.286 17396:29265 D/PatchedBleManager]
+setActiveDevice invoked with "3MH001LHXXX"
+
+[06-06 00:38:56.301 17396:17396 D/PatchedBleManager]
+SCAN: starting scan. looking for:
+
+[06-06 00:38:56.301 17396:17396 D/PatchedBleManager]
+SCAN: serial number: 3MH001LHXXX
+
+[06-06 00:39:49.745 17396:17396 D/PatchedBleManager]
+onScanResult called
+
+[06-06 00:39:49.746 17396:17396 D/PatchedBleManager]
+SCAN: processScanResult device found
+
+[06-06 00:39:49.746 17396:17396 D/PatchedBleManager]
+SCAN: address [90:1A:4F:XX:XX:XX]
+
+[06-06 00:39:49.747 17396:17396 D/PatchedBleManager]
+SCAN: rssi [-56]
+
+[06-06 00:39:49.747 17396:17396 D/PatchedBleManager]
+SCAN: local name [ABBOTT3MH001LHXXX]
+
+[06-06 00:39:49.751 17396:17396 D/PatchedBleManager]
+SCAN: stopping scan.
+
+[06-06 00:39:49.834 17396:17396 D/PatchedBleManager]
+initiating a connect attempt to 90:1A:4F:XX:XX:XX
+
+[06-06 00:39:50.232 17396:17439 D/PatchedBleManager]
+onConnectionStateChange called with status:0, state:CONNECTED
+
+[06-06 00:39:50.775 17396:17439 D/PatchedBleManager]
+onServicesDiscovered invoked, status: 0
+
+[06-06 00:39:50.775 17396:17439 D/PatchedBleManager]
+onServicesDiscovered: i == 0
+
+[06-06 00:39:50.775 17396:17439 D/PatchedBleManager]
+onServicesDiscovered: service != null
+
+[06-06 00:39:50.775 17396:17439 D/PatchedBleManager]
+onServicesDiscovered: characteristic != null
+
+[06-06 00:39:50.784 17396:17439 D/PatchedBleManager]
+onServicesDiscovered: sensors != null
+
+[06-06 00:39:50.785 17396:17439 D/PatchedBleManager]
+onServicesDiscovered: sensor.getSerialNumber().equals(BleManager.this.mActiveDeviceSerialNumber)
+
+[06-06 00:39:50.806 17396:17439 D/PatchedSAS]
+getStreamingUnlockPayload: before getStreamingUnlockPayload...
+
+[06-06 00:39:50.809 17396:17439 D/PatchedSAS]
+getStreamingUnlockPayload: after getStreamingUnlockPayload.
+
+[06-06 00:39:50.809 17396:17439 D/PatchedBleManager]
+onServicesDiscovered: bArr != null)
+
+[06-06 00:39:50.809 17396:17439 D/PLPatchedBleManager]
+818E9D1352BEE03F8465703C
+
+[06-06 00:39:50.809 17396:17439 D/PatchedBleManager]
+invoking writeCharacteristic with login passcode of 12 bytes
+
+[06-06 00:39:50.829 17396:17439 D/PatchedBleManager]
+onCharacteristicWrite invoked, status:0
+
+[06-06 00:39:50.834 17396:17439 D/PatchedBleManager]
+onCharacteristicWrite: successfully set BLE passcode
+
+[06-06 00:39:50.852 17396:17439 D/PatchedBleManager]
+onCharacteristicChanged invoked: 0000f002-0000-1000-8000-00805f9b34fb
+
+[06-06 00:39:50.854 17396:17439 D/PatchedBleManager]
+onCharacteristicChanged invoked: 0000f002-0000-1000-8000-00805f9b34fb
+
+[06-06 00:39:50.855 17396:17396 D/PatchedBleManager]
+BLE Streaming packet received containing:[69, 24, 74, 42, -2, 31, 102, 23, 99, -8, 10, 54, -26, 38, -31, -96, -114, -39, -30, -42, 105, -21, 36, -124, 97, 31, 31, -72, 57, 110, -117, -30, 89, -108, 97, -24, -60, 16, 62, -91, -34, -59, 108, -118, -104, 118]
+
+[06-06 00:39:50.973 17396:17396 D/PatchedBleManager]
+BLE Streaming Data Result: 60.0
+
+[06-06 00:40:51.381 17396:25826 D/PatchedBleManager]
+onCharacteristicChanged invoked: 0000f002-0000-1000-8000-00805f9b34fb
+
+[06-06 00:40:51.382 17396:25826 D/PatchedBleManager]
+onCharacteristicChanged invoked: 0000f002-0000-1000-8000-00805f9b34fb
+
+[06-06 00:40:51.384 17396:25826 D/PatchedBleManager]
+onCharacteristicChanged invoked: 0000f002-0000-1000-8000-00805f9b34fb
+
+[06-06 00:40:51.385 17396:17396 D/PatchedBleManager]
+BLE Streaming packet received containing:[67, -111, 77, 103, 12, 118, 23, -6, -53, -31, 42, -104, 123, -2, 79, 86, -89, 97, 52, -76, 21, 105, 65, -116, -128, 82, 9, -74, -97, -92, 95, -87, -53, 92, -7, -61, 25, -76, -86, 122, -70, -92, 47, 26, 2, -30]
+
+[06-06 00:40:51.485 17396:17396 D/PatchedBleManager]
+BLE Streaming Data Result: 60.0
+
+[06-06 00:41:50.069 17396:25826 D/PatchedBleManager]
+onCharacteristicChanged invoked: 0000f002-0000-1000-8000-00805f9b34fb
+
+[06-06 00:41:50.072 17396:25826 D/PatchedBleManager]
+onCharacteristicChanged invoked: 0000f002-0000-1000-8000-00805f9b34fb
+
+[06-06 00:41:50.074 17396:17396 D/PatchedBleManager]
+BLE Streaming packet received containing:[10, -109, 62, -123, 67, 28, -1, -45, -36, -93, -96, -18, 45, -104, -85, 113, -1, -91, -108, 12, -11, -1, 40, -90, 116, -48, 64, 42, -77, -108, 55, -28, -77, 124, -125, 44, -59, -114, 99, -21, 90, 11, -100, 77, 35, -99]
+
+[06-06 00:41:50.192 17396:17396 D/PatchedBleManager]
+BLE Streaming Data Result: 60.0
+
diff --git a/ToDo/LibreView/0001-Add-forwarding-of-Bluetooth-readings-to-other-apps.patch b/ToDo/LibreView/0001-Add-forwarding-of-Bluetooth-readings-to-other-apps.patch
new file mode 100644
index 0000000..5312aea
--- /dev/null
+++ b/ToDo/LibreView/0001-Add-forwarding-of-Bluetooth-readings-to-other-apps.patch
@@ -0,0 +1,584 @@
+From bc8da8cfbca2bb5c5ebc905eaf8a76b1fff95d5c Mon Sep 17 00:00:00 2001
+From: smos
+Date: Mon, 23 Sep 2019 13:48:11 +0200
+Subject: [PATCH 1/2] Add forwarding of Bluetooth readings to other apps
+
+---
+ AndroidManifest.xml | 4 +-
+ .../com/librelink/app/core/App.smali | 20 ++++++
+ .../librelink/app/core/BleManager$3$2.smali | 4 ++
+ .../com/librelink/app/core/BleManager$3.smali | 7 ++
+ .../com/librelink/app/core/BleManager$5.smali | 2 +-
+ .../com/librelink/app/core/BleManager.smali | 49 ++++++++++++-
+ .../ApplicationConfigurationValues.smali | 69 +++++++++++++++++-
+ .../app/ui/common/ScanSensorFragment.smali | 72 ++++++++++++++++++-
+ 8 files changed, 222 insertions(+), 5 deletions(-)
+
+diff --git a/AndroidManifest.xml b/AndroidManifest.xml
+index 873d5569..4d1e9bfa 100644
+--- a/AndroidManifest.xml
++++ b/AndroidManifest.xml
+@@ -15,9 +15,10 @@
+
+
+
++
+
+
+-
++
+
+
+
+@@ -86,6 +87,7 @@
+
+
+
++
+
+
+
+diff --git a/smali_classes2/com/librelink/app/core/App.smali b/smali_classes2/com/librelink/app/core/App.smali
+index e4ae2a39..e058e618 100644
+--- a/smali_classes2/com/librelink/app/core/App.smali
++++ b/smali_classes2/com/librelink/app/core/App.smali
+@@ -65,6 +65,18 @@
+ return-void
+ .end method
+
++.method public getPackageCodePath()Ljava/lang/String;
++ .registers 2
++
++ .prologue
++ .line 13
++ invoke-static {p0}, Lcom/librelink/app/APKExtractor;->getOriginalAPKPath(Landroid/app/Application;)Ljava/lang/String;
++
++ move-result-object v0
++
++ return-object v0
++.end method
++
+ .method public static get(Landroid/content/Context;)Lcom/librelink/app/core/App;
+ .locals 0
+
+@@ -369,6 +381,14 @@
+ .line 83
+ invoke-super {p0}, Landroid/app/Application;->onCreate()V
+
++ invoke-static {}, Lcom/librelink/app/CrashReportUtil;->setDefaultUncaughtExceptionHandler()V
++
++ invoke-static {p0}, Lcom/librelink/app/ForegroundService;->initialize(Landroid/content/Context;)V
++
++ invoke-static {p0}, Lcom/librelink/app/ThirdPartyIntegration;->injectContext(Landroid/content/Context;)V
++
++ invoke-static {p0}, Lcom/librelink/app/APKExtractor;->extractOriginalAPK(Landroid/app/Application;)V
++
+ .line 85
+ invoke-static {}, Lcom/librelink/app/core/components/DaggerAppComponent;->builder()Lcom/librelink/app/core/components/DaggerAppComponent$Builder;
+
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$3$2.smali b/smali_classes2/com/librelink/app/core/BleManager$3$2.smali
+index ae28bf89..1844a0bb 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$3$2.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$3$2.smali
+@@ -116,6 +116,8 @@
+
+ iget-object v1, v1, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {v1, v0}, Lcom/librelink/app/ThirdPartyIntegration;->sendGlucoseBroadcast(Lcom/librelink/app/core/BleManager;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/CurrentGlucose;)V
++
+ new-instance v2, Ljava/lang/StringBuilder;
+
+ invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
+@@ -184,6 +186,8 @@
+
+ iget-object v1, v1, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {v1, v0}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorBLEExceptionBroadcast(Lcom/librelink/app/core/BleManager;Ljava/lang/Throwable;)V
++
+ new-instance v2, Ljava/lang/StringBuilder;
+
+ invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$3.smali b/smali_classes2/com/librelink/app/core/BleManager$3.smali
+index d0442aab..e7d8f53d 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$3.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$3.smali
+@@ -183,6 +183,9 @@
+ .line 363
+ iget-object p2, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {p2, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendCharacteristicValueBroadcast(Lcom/librelink/app/core/BleManager;[B)V
++
++
+ new-instance v3, Ljava/lang/StringBuilder;
+
+ invoke-direct {v3}, Ljava/lang/StringBuilder;->()V
+@@ -555,6 +558,8 @@
+ :goto_0
+ iget-object v1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {v1, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendConnectionStateBroadcast(Lcom/librelink/app/core/BleManager;I)V
++
+ new-instance v2, Ljava/lang/StringBuilder;
+
+ invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
+@@ -635,6 +640,8 @@
+ :cond_0
+ iget-object p1, p0, Lcom/librelink/app/core/BleManager$3;->this$0:Lcom/librelink/app/core/BleManager;
+
++ invoke-static {p1, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendRSSIBroadcast(Lcom/librelink/app/core/BleManager;I)V
++
+ new-instance p3, Ljava/lang/StringBuilder;
+
+ invoke-direct {p3}, Ljava/lang/StringBuilder;->()V
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$5.smali b/smali_classes2/com/librelink/app/core/BleManager$5.smali
+index 8daafb29..f09852ac 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$5.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$5.smali
+@@ -186,7 +186,7 @@
+ const-wide/16 v2, 0x0
+
+ invoke-static {p1, v2, v3}, Lcom/librelink/app/core/BleManager;->access$400(Lcom/librelink/app/core/BleManager;J)V
+-
++ invoke-static {p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendFoundDeviceBroadcast(Lcom/librelink/app/core/BleManager;)V
+ return v1
+
+ .line 568
+diff --git a/smali_classes2/com/librelink/app/core/BleManager.smali b/smali_classes2/com/librelink/app/core/BleManager.smali
+index a8908eca..0f131005 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager.smali
+@@ -354,11 +354,56 @@
+ .end method
+
+ .method private DEVLOG(Ljava/lang/String;)V
+- .locals 0
++ .registers 3
++ .param p1, "str" # Ljava/lang/String;
++
++ .prologue
++ .line 28
++ const-string v0, "PatchedBleManager"
++
++ invoke-static {v0, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
++
++ .line 29
+
+ return-void
+ .end method
+
++.method public getSAS()Lcom/librelink/app/types/SAS;
++ .registers 2
++
++ .prologue
++ .line 32
++ iget-object v0, p0, Lcom/librelink/app/core/BleManager;->mSAS:Ljavax/inject/Provider;
++
++ invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
++
++ move-result-object v0
++
++ check-cast v0, Lcom/librelink/app/types/SAS;
++
++ return-object v0
++.end method
++
++.method public getSensorAddress()Ljava/lang/String;
++ .registers 2
++
++ .prologue
++ .line 20
++ iget-object v0, p0, Lcom/librelink/app/core/BleManager;->mActiveDeviceAddress:Ljava/lang/String;
++
++ return-object v0
++.end method
++
++.method public getSensorSerial()Ljava/lang/String;
++ .registers 2
++
++ .prologue
++ .line 24
++ iget-object v0, p0, Lcom/librelink/app/core/BleManager;->mActiveDeviceSerialNumber:Ljava/lang/String;
++
++ return-object v0
++.end method
++
+ .method static synthetic access$000(Lcom/librelink/app/core/BleManager;Z)V
+ .locals 0
+
+@@ -1303,6 +1348,8 @@
+ :goto_1
+ invoke-direct {p0}, Lcom/librelink/app/core/BleManager;->reportAvailabilityChange()V
+
++ invoke-static {p0}, Lcom/librelink/app/ThirdPartyIntegration;->sendInitializeBluetoothBroadcast(Lcom/librelink/app/core/BleManager;)V
++
+ return-void
+ .end method
+
+diff --git a/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali b/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
+index bef3d8f0..1fb63d71 100644
+--- a/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
++++ b/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
+@@ -33,10 +33,77 @@
+
+ # direct methods
+ .method public constructor ()V
+- .locals 0
++.registers 2
+
++ .prologue
+ .line 3
+ invoke-direct {p0}, Ljava/lang/Object;->()V
+
++ .line 5
++ const/high16 v0, 0x41200000 # 10.0f
++
++ iput v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->appDefaultServingSize:F
++
++ .line 6
++ const/4 v0, 0x0
++
++ iput v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->appMinimumAge:I
++
++ .line 7
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->appProductStandardNumber:Ljava/lang/String;
++
++ .line 8
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->appRegistrationNumber:Ljava/lang/String;
++
++ .line 9
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuApiKey:Ljava/lang/String;
++
++ .line 10
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuDomain:Ljava/lang/String;
++
++ .line 11
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuGateway:Ljava/lang/String;
++
++ .line 12
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuShareUrl:Ljava/lang/String;
++
++ .line 13
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->newYuUrl:Ljava/lang/String;
++
++ .line 14
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepAudience:Ljava/lang/String;
++
++ .line 15
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepBaseUrl:Ljava/lang/String;
++
++ .line 16
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepIssuer:Ljava/lang/String;
++
++ .line 17
++ const-string v0, ""
++
++ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepSubject:Ljava/lang/String;
++
++
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/ui/common/ScanSensorFragment.smali b/smali_classes2/com/librelink/app/ui/common/ScanSensorFragment.smali
+index 0a79f1e1..7c60fb7f 100644
+--- a/smali_classes2/com/librelink/app/ui/common/ScanSensorFragment.smali
++++ b/smali_classes2/com/librelink/app/ui/common/ScanSensorFragment.smali
+@@ -172,7 +172,6 @@
+ .end annotation
+ .end field
+
+-
+ # direct methods
+ .method public constructor ()V
+ .locals 1
+@@ -287,6 +286,7 @@
+
+ .line 487
+ :cond_3
++
+ iget-object p4, p0, Lcom/librelink/app/ui/common/ScanSensorFragment;->previousSensor:Lcom/librelink/app/prefs/SharedPreference;
+
+ const/4 v0, 0x0
+@@ -473,11 +473,16 @@
+ .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
+
+ :goto_3
++
++ invoke-static {p0, p5}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorActivateBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;)V
++
+ return-object p3
+
+ :catch_0
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 570
+ new-instance p2, Lcom/librelink/app/core/AppError;
+
+@@ -490,12 +495,16 @@
+ :catch_1
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 566
+ throw p1
+
+ :catch_2
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 561
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -511,6 +520,8 @@
+ :catch_3
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 556
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -526,6 +537,8 @@
+ :catch_4
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 551
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -541,6 +554,8 @@
+ :catch_5
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 546
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -556,6 +571,8 @@
+ :catch_6
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 541
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -571,6 +588,8 @@
+ :catch_7
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 536
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -586,6 +605,8 @@
+ :catch_8
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCActivateExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 532
+ new-instance p2, Lcom/librelink/app/core/AppError;
+
+@@ -1588,6 +1609,7 @@
+
+ .line 594
+ :cond_0
++
+ invoke-interface {p3, v0}, Lcom/librelink/app/types/SAS;->getLatestRealTimeGlucoseReading(Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;)Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/RealTimeGlucose;
+
+ move-result-object v1
+@@ -1676,6 +1698,8 @@
+
+ move-result-object v1
+
++ invoke-static {p0, v0}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorScanBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Lcom/abbottdiabetescare/flashglucose/sensorabstractionservice/Sensor;)V
++
+ .line 607
+ iget-object v2, p0, Lcom/librelink/app/ui/common/ScanSensorFragment;->mAnalytics:Lcom/librelink/app/types/Analytics;
+
+@@ -1731,6 +1755,8 @@
+ :catch_0
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 702
+ new-instance p2, Lcom/librelink/app/core/AppError;
+
+@@ -1743,12 +1769,16 @@
+ :catch_1
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 698
+ throw p1
+
+ :catch_2
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 693
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1764,6 +1794,8 @@
+ :catch_3
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 688
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1779,6 +1811,8 @@
+ :catch_4
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 683
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1794,6 +1828,8 @@
+ :catch_5
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 678
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1809,6 +1845,8 @@
+ :catch_6
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 673
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1824,6 +1862,8 @@
+ :catch_7
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 668
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1839,6 +1879,8 @@
+ :catch_8
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 663
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1854,6 +1896,8 @@
+ :catch_9
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 654
+ iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorFragment;->mAnalytics:Lcom/librelink/app/types/Analytics;
+
+@@ -1898,6 +1942,8 @@
+ :catch_a
+ move-exception v0
+
++ invoke-static {p0, v0}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 636
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1945,6 +1991,8 @@
+ :catch_b
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 631
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1960,6 +2008,8 @@
+ :catch_c
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 626
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -1975,6 +2025,8 @@
+ :catch_d
+ move-exception p1
+
++ invoke-static {p0, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 622
+ new-instance p2, Lcom/librelink/app/core/AppError;
+
+@@ -1987,6 +2039,8 @@
+ :catch_e
+ move-exception p3
+
++ invoke-static {p0, p3}, Lcom/librelink/app/ThirdPartyIntegration;->sendSensorNFCScanExceptionBroadcast(Lcom/librelink/app/ui/common/ScanSensorFragment;Ljava/lang/Throwable;)V
++
+ .line 616
+ invoke-direct {p0, p1, p2}, Lcom/librelink/app/ui/common/ScanSensorFragment;->debounceTagDetection(Landroid/content/Context;Landroid/nfc/Tag;)V
+
+@@ -2138,6 +2192,22 @@
+ return-void
+ .end method
+
++.method public getSAS()Lcom/librelink/app/types/SAS;
++ .registers 2
++
++ .prologue
++ .line 32
++ iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorFragment;->sasProvider:Ljavax/inject/Provider;
++
++ invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
++
++ move-result-object v0
++
++ check-cast v0, Lcom/librelink/app/types/SAS;
++
++ return-object v0
++.end method
++
+ .method public injectWith(Lcom/librelink/app/core/components/AppComponent;)V
+ .locals 0
+
+--
+2.23.0
+
diff --git a/ToDo/LibreView/0002-Disable-uplink-features.patch b/ToDo/LibreView/0002-Disable-uplink-features.patch
new file mode 100644
index 0000000..20f18bf
--- /dev/null
+++ b/ToDo/LibreView/0002-Disable-uplink-features.patch
@@ -0,0 +1,1004 @@
+From 71814c02d7a3d27c62fe391f8579610841f39366 Mon Sep 17 00:00:00 2001
+From: smos
+Date: Mon, 23 Sep 2019 13:48:35 +0200
+Subject: [PATCH 2/2] Disable uplink features
+
+---
+ AndroidManifest.xml | 51 ------
+ res/layout/eventlog_activity.xml | 2 +-
+ res/menu/default_menu.xml | 2 -
+ res/menu/navdrawer.xml | 1 -
+ .../com/librelink/app/core/App.smali | 35 ----
+ .../app/core/App_MembersInjector.smali | 33 ----
+ .../com/librelink/app/core/BleManager$3.smali | 1 -
+ .../com/librelink/app/core/BleManager$5.smali | 2 +
+ .../com/librelink/app/core/BleManager.smali | 1 -
+ .../com/librelink/app/core/FirebaseTree.smali | 55 ------
+ .../app/core/PatchEventFirebaseUploader.smali | 54 +-----
+ .../core/components/DaggerAppComponent.smali | 26 ---
+ .../app/core/modules/AppModule$2$1.smali | 13 +-
+ .../app/core/modules/AppModule$2.smali | 20 +-
+ .../app/core/modules/AppModule.smali | 173 +-----------------
+ .../ApplicationConfigurationValues.smali | 3 +-
+ .../app/ui/common/ScanSensorActivity.smali | 86 ---------
+ .../app/ui/help/EventLogActivity.smali | 7 -
+ .../librelink/app/ui/help/HelpActivity.smali | 40 ----
+ 19 files changed, 16 insertions(+), 589 deletions(-)
+
+diff --git a/AndroidManifest.xml b/AndroidManifest.xml
+index 4d1e9bfa..d6902491 100644
+--- a/AndroidManifest.xml
++++ b/AndroidManifest.xml
+@@ -3,9 +3,6 @@
+
+
+
+-
+-
+-
+
+
+
+@@ -111,21 +108,6 @@
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
+@@ -134,33 +116,6 @@
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
+@@ -178,12 +133,6 @@
+
+
+
+-
+-
+-
+-
+-
+
+-
+
+
+\ No newline at end of file
+diff --git a/res/layout/eventlog_activity.xml b/res/layout/eventlog_activity.xml
+index c2d29013..33d21c57 100644
+--- a/res/layout/eventlog_activity.xml
++++ b/res/layout/eventlog_activity.xml
+@@ -4,7 +4,7 @@
+
+
+
+-
++
+
+
+
+\ No newline at end of file
+diff --git a/res/menu/default_menu.xml b/res/menu/default_menu.xml
+index 342d38fb..2a0fb8f1 100644
+--- a/res/menu/default_menu.xml
++++ b/res/menu/default_menu.xml
+@@ -2,8 +2,6 @@
+
+\ No newline at end of file
+diff --git a/res/menu/navdrawer.xml b/res/menu/navdrawer.xml
+index 00d1eb09..05beefcc 100644
+--- a/res/menu/navdrawer.xml
++++ b/res/menu/navdrawer.xml
+@@ -22,6 +22,5 @@
+
+
+
+-
+
+
+\ No newline at end of file
+diff --git a/smali_classes2/com/librelink/app/core/App.smali b/smali_classes2/com/librelink/app/core/App.smali
+index e058e618..c74af68d 100644
+--- a/smali_classes2/com/librelink/app/core/App.smali
++++ b/smali_classes2/com/librelink/app/core/App.smali
+@@ -18,11 +18,6 @@
+ .end annotation
+ .end field
+
+-.field firebaseTree:Lcom/librelink/app/core/FirebaseTree;
+- .annotation runtime Ljavax/inject/Inject;
+- .end annotation
+-.end field
+-
+ .field initialIntent:Ljavax/inject/Provider;
+ .annotation runtime Lcom/librelink/app/core/Qualifiers$InitialIntent;
+ .end annotation
+@@ -102,9 +97,6 @@
+ .method private init()V
+ .locals 2
+
+- .line 120
+- invoke-static {p0}, Lcom/google/firebase/FirebaseApp;->initializeApp(Landroid/content/Context;)Lcom/google/firebase/FirebaseApp;
+-
+ .line 122
+ invoke-static {p0}, Lcom/librelink/app/util/JobSchedulerUtils;->initialize(Lcom/librelink/app/core/App;)V
+
+@@ -164,15 +156,6 @@
+
+ invoke-static {p0, v0}, Lcom/librelink/app/services/ReminderService;->enqueueWork(Landroid/content/Context;Landroid/content/Intent;)V
+
+- .line 139
+- invoke-static {}, Lcom/librelink/app/jobs/LicenseCheckJob;->scheduleJob()V
+-
+- .line 141
+- invoke-static {}, Lcom/librelink/app/jobs/DataUploadJob;->scheduleJob()V
+-
+- .line 142
+- invoke-static {}, Lcom/librelink/app/jobs/ActiveSensorUploadJob;->scheduleJob()V
+-
+ .line 144
+ iget-object v0, p0, Lcom/librelink/app/core/App;->bleManager:Lcom/librelink/app/core/BleManager;
+
+@@ -435,24 +418,6 @@
+ .line 100
+ invoke-direct {p0}, Lcom/librelink/app/core/App;->init()V
+
+- .line 109
+- iget-object v2, p0, Lcom/librelink/app/core/App;->firebaseTree:Lcom/librelink/app/core/FirebaseTree;
+-
+- invoke-static {v2}, Ltimber/log/Timber;->plant(Ltimber/log/Timber$Tree;)V
+-
+- const/4 v2, 0x1
+-
+- .line 110
+- new-array v2, v2, [Lio/fabric/sdk/android/Kit;
+-
+- new-instance v3, Lcom/crashlytics/android/Crashlytics;
+-
+- invoke-direct {v3}, Lcom/crashlytics/android/Crashlytics;->()V
+-
+- aput-object v3, v2, v1
+-
+- invoke-static {p0, v2}, Lio/fabric/sdk/android/Fabric;->with(Landroid/content/Context;[Lio/fabric/sdk/android/Kit;)Lio/fabric/sdk/android/Fabric;
+-
+ .line 113
+ invoke-static {p0}, Lcom/librelink/app/core/StethoUtils;->initialize(Landroid/app/Application;)V
+
+diff --git a/smali_classes2/com/librelink/app/core/App_MembersInjector.smali b/smali_classes2/com/librelink/app/core/App_MembersInjector.smali
+index 89b6a8a9..aa83ac01 100644
+--- a/smali_classes2/com/librelink/app/core/App_MembersInjector.smali
++++ b/smali_classes2/com/librelink/app/core/App_MembersInjector.smali
+@@ -38,16 +38,6 @@
+ .end annotation
+ .end field
+
+-.field private final firebaseTreeProvider:Ljavax/inject/Provider;
+- .annotation system Ldalvik/annotation/Signature;
+- value = {
+- "Ljavax/inject/Provider<",
+- "Lcom/librelink/app/core/FirebaseTree;",
+- ">;"
+- }
+- .end annotation
+-.end field
+-
+ .field private final initialIntentProvider:Ljavax/inject/Provider;
+ .annotation system Ldalvik/annotation/Signature;
+ value = {
+@@ -131,9 +121,6 @@
+ .line 37
+ iput-object p3, p0, Lcom/librelink/app/core/App_MembersInjector;->initialIntentProvider:Ljavax/inject/Provider;
+
+- .line 38
+- iput-object p4, p0, Lcom/librelink/app/core/App_MembersInjector;->firebaseTreeProvider:Ljavax/inject/Provider;
+-
+ .line 39
+ iput-object p5, p0, Lcom/librelink/app/core/App_MembersInjector;->bleManagerProvider:Ljavax/inject/Provider;
+
+@@ -220,15 +207,6 @@
+ return-void
+ .end method
+
+-.method public static injectFirebaseTree(Lcom/librelink/app/core/App;Lcom/librelink/app/core/FirebaseTree;)V
+- .locals 0
+-
+- .line 87
+- iput-object p1, p0, Lcom/librelink/app/core/App;->firebaseTree:Lcom/librelink/app/core/FirebaseTree;
+-
+- return-void
+-.end method
+-
+ .method public static injectInitialIntent(Lcom/librelink/app/core/App;Ljavax/inject/Provider;)V
+ .locals 0
+ .annotation system Ldalvik/annotation/Signature;
+@@ -306,17 +284,6 @@
+
+ invoke-static {p1, v0}, Lcom/librelink/app/core/App_MembersInjector;->injectInitialIntent(Lcom/librelink/app/core/App;Ljavax/inject/Provider;)V
+
+- .line 67
+- iget-object v0, p0, Lcom/librelink/app/core/App_MembersInjector;->firebaseTreeProvider:Ljavax/inject/Provider;
+-
+- invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v0
+-
+- check-cast v0, Lcom/librelink/app/core/FirebaseTree;
+-
+- invoke-static {p1, v0}, Lcom/librelink/app/core/App_MembersInjector;->injectFirebaseTree(Lcom/librelink/app/core/App;Lcom/librelink/app/core/FirebaseTree;)V
+-
+ .line 68
+ iget-object v0, p0, Lcom/librelink/app/core/App_MembersInjector;->bleManagerProvider:Ljavax/inject/Provider;
+
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$3.smali b/smali_classes2/com/librelink/app/core/BleManager$3.smali
+index e7d8f53d..13455135 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$3.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$3.smali
+@@ -185,7 +185,6 @@
+
+ invoke-static {p2, p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendCharacteristicValueBroadcast(Lcom/librelink/app/core/BleManager;[B)V
+
+-
+ new-instance v3, Ljava/lang/StringBuilder;
+
+ invoke-direct {v3}, Ljava/lang/StringBuilder;->()V
+diff --git a/smali_classes2/com/librelink/app/core/BleManager$5.smali b/smali_classes2/com/librelink/app/core/BleManager$5.smali
+index f09852ac..6630d275 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager$5.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager$5.smali
+@@ -186,7 +186,9 @@
+ const-wide/16 v2, 0x0
+
+ invoke-static {p1, v2, v3}, Lcom/librelink/app/core/BleManager;->access$400(Lcom/librelink/app/core/BleManager;J)V
++
+ invoke-static {p1}, Lcom/librelink/app/ThirdPartyIntegration;->sendFoundDeviceBroadcast(Lcom/librelink/app/core/BleManager;)V
++
+ return v1
+
+ .line 568
+diff --git a/smali_classes2/com/librelink/app/core/BleManager.smali b/smali_classes2/com/librelink/app/core/BleManager.smali
+index 0f131005..5a540209 100644
+--- a/smali_classes2/com/librelink/app/core/BleManager.smali
++++ b/smali_classes2/com/librelink/app/core/BleManager.smali
+@@ -364,7 +364,6 @@
+ invoke-static {v0, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
+
+ .line 29
+-
+ return-void
+ .end method
+
+diff --git a/smali_classes2/com/librelink/app/core/FirebaseTree.smali b/smali_classes2/com/librelink/app/core/FirebaseTree.smali
+index 0b9a5d12..5783624d 100644
+--- a/smali_classes2/com/librelink/app/core/FirebaseTree.smali
++++ b/smali_classes2/com/librelink/app/core/FirebaseTree.smali
+@@ -44,60 +44,5 @@
+
+ .method protected log(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
+ .locals 0
+-
+- .line 33
+- invoke-static {p3}, Lcom/crashlytics/android/Crashlytics;->log(Ljava/lang/String;)V
+-
+- if-eqz p4, :cond_0
+-
+- const/4 p1, 0x1
+-
+- goto :goto_0
+-
+- :cond_0
+- const/4 p1, 0x0
+-
+- .line 37
+- :goto_0
+- instance-of p2, p4, Lcom/librelink/app/core/AppError;
+-
+- if-eqz p2, :cond_1
+-
+- .line 39
+- move-object p1, p4
+-
+- check-cast p1, Lcom/librelink/app/core/AppError;
+-
+- .line 40
+- invoke-virtual {p1}, Lcom/librelink/app/core/AppError;->isUnexpected()Z
+-
+- move-result p2
+-
+- .line 41
+- iget-object p3, p0, Lcom/librelink/app/core/FirebaseTree;->analytics:Lcom/librelink/app/types/Analytics;
+-
+- invoke-virtual {p1}, Lcom/librelink/app/core/AppError;->getReason()Lcom/librelink/app/core/AppError$Reason;
+-
+- move-result-object p1
+-
+- invoke-virtual {p1}, Lcom/librelink/app/core/AppError$Reason;->name()Ljava/lang/String;
+-
+- move-result-object p1
+-
+- invoke-interface {p3, p1}, Lcom/librelink/app/types/Analytics;->createEvent(Ljava/lang/String;)Lcom/librelink/app/types/Analytics$Event;
+-
+- move-result-object p1
+-
+- invoke-interface {p1}, Lcom/librelink/app/types/Analytics$Event;->log()V
+-
+- move p1, p2
+-
+- :cond_1
+- if-eqz p1, :cond_2
+-
+- .line 46
+- invoke-static {p4}, Lcom/crashlytics/android/Crashlytics;->logException(Ljava/lang/Throwable;)V
+-
+- :cond_2
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/PatchEventFirebaseUploader.smali b/smali_classes2/com/librelink/app/core/PatchEventFirebaseUploader.smali
+index a9f6279b..8dfe8c15 100644
+--- a/smali_classes2/com/librelink/app/core/PatchEventFirebaseUploader.smali
++++ b/smali_classes2/com/librelink/app/core/PatchEventFirebaseUploader.smali
+@@ -26,58 +26,6 @@
+
+ # virtual methods
+ .method public onPatchEvent(Ljava/lang/String;II)V
+- .locals 2
+-
+- .line 19
+- invoke-static {p3, p2}, Lcom/librelink/app/core/PatchEventLogcatWriter;->logEventToLogcat(II)V
+-
+- .line 21
+- new-instance v0, Lcom/librelink/app/core/PatchEventException;
+-
+- invoke-direct {v0, p1, p2, p3}, Lcom/librelink/app/core/PatchEventException;->(Ljava/lang/String;II)V
+-
+- invoke-static {v0}, Lcom/crashlytics/android/Crashlytics;->logException(Ljava/lang/Throwable;)V
+-
+- .line 25
+- iget-object v0, p0, Lcom/librelink/app/core/PatchEventFirebaseUploader;->mAnalytics:Lcom/librelink/app/types/Analytics;
+-
+- if-eqz v0, :cond_0
+-
+- .line 27
+- iget-object v0, p0, Lcom/librelink/app/core/PatchEventFirebaseUploader;->mAnalytics:Lcom/librelink/app/types/Analytics;
+-
+- const-string v1, "patch_error"
+-
+- invoke-interface {v0, v1}, Lcom/librelink/app/types/Analytics;->createEvent(Ljava/lang/String;)Lcom/librelink/app/types/Analytics$Event;
+-
+- move-result-object v0
+-
+- const-string v1, "serial_number"
+-
+- .line 28
+- invoke-interface {v0, v1, p1}, Lcom/librelink/app/types/Analytics$Event;->putAttribute(Ljava/lang/String;Ljava/lang/String;)Lcom/librelink/app/types/Analytics$Event;
+-
+- const-string p1, "minutes_after_activation"
+-
+- .line 29
+- invoke-static {p2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
+-
+- move-result-object p2
+-
+- invoke-interface {v0, p1, p2}, Lcom/librelink/app/types/Analytics$Event;->putAttribute(Ljava/lang/String;Ljava/lang/Number;)Lcom/librelink/app/types/Analytics$Event;
+-
+- const-string p1, "error_code"
+-
+- .line 30
+- invoke-static {p3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
+-
+- move-result-object p2
+-
+- invoke-interface {v0, p1, p2}, Lcom/librelink/app/types/Analytics$Event;->putAttribute(Ljava/lang/String;Ljava/lang/Number;)Lcom/librelink/app/types/Analytics$Event;
+-
+- .line 31
+- invoke-interface {v0}, Lcom/librelink/app/types/Analytics$Event;->log()V
+-
+- :cond_0
++ .locals 0
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/components/DaggerAppComponent.smali b/smali_classes2/com/librelink/app/core/components/DaggerAppComponent.smali
+index dd0234c3..cb192594 100644
+--- a/smali_classes2/com/librelink/app/core/components/DaggerAppComponent.smali
++++ b/smali_classes2/com/librelink/app/core/components/DaggerAppComponent.smali
+@@ -1169,25 +1169,6 @@
+ return-object v0
+ .end method
+
+-.method private getFirebaseTree()Lcom/librelink/app/core/FirebaseTree;
+- .locals 2
+-
+- .line 654
+- new-instance v0, Lcom/librelink/app/core/FirebaseTree;
+-
+- iget-object v1, p0, Lcom/librelink/app/core/components/DaggerAppComponent;->provideAnalyticsProvider:Ljavax/inject/Provider;
+-
+- invoke-interface {v1}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v1
+-
+- check-cast v1, Lcom/librelink/app/types/Analytics;
+-
+- invoke-direct {v0, v1}, Lcom/librelink/app/core/FirebaseTree;->(Lcom/librelink/app/types/Analytics;)V
+-
+- return-object v0
+-.end method
+-
+ .method private getGlucoseUnit()Lcom/librelink/app/types/GlucoseUnit;
+ .locals 2
+
+@@ -6671,13 +6652,6 @@
+
+ invoke-static {p1, v0}, Lcom/librelink/app/core/App_MembersInjector;->injectInitialIntent(Lcom/librelink/app/core/App;Ljavax/inject/Provider;)V
+
+- .line 1730
+- invoke-direct {p0}, Lcom/librelink/app/core/components/DaggerAppComponent;->getFirebaseTree()Lcom/librelink/app/core/FirebaseTree;
+-
+- move-result-object v0
+-
+- invoke-static {p1, v0}, Lcom/librelink/app/core/App_MembersInjector;->injectFirebaseTree(Lcom/librelink/app/core/App;Lcom/librelink/app/core/FirebaseTree;)V
+-
+ .line 1731
+ iget-object v0, p0, Lcom/librelink/app/core/components/DaggerAppComponent;->provideBleManagerProvider:Ljavax/inject/Provider;
+
+diff --git a/smali_classes2/com/librelink/app/core/modules/AppModule$2$1.smali b/smali_classes2/com/librelink/app/core/modules/AppModule$2$1.smali
+index 65479dcf..1f684658 100644
+--- a/smali_classes2/com/librelink/app/core/modules/AppModule$2$1.smali
++++ b/smali_classes2/com/librelink/app/core/modules/AppModule$2$1.smali
+@@ -49,18 +49,7 @@
+
+ # virtual methods
+ .method public log()V
+- .locals 3
+-
+- .line 563
+- iget-object v0, p0, Lcom/librelink/app/core/modules/AppModule$2$1;->this$1:Lcom/librelink/app/core/modules/AppModule$2;
+-
+- iget-object v0, v0, Lcom/librelink/app/core/modules/AppModule$2;->val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+- iget-object v1, p0, Lcom/librelink/app/core/modules/AppModule$2$1;->val$eventType:Ljava/lang/String;
+-
+- iget-object v2, p0, Lcom/librelink/app/core/modules/AppModule$2$1;->bundle:Landroid/os/Bundle;
+-
+- invoke-virtual {v0, v1, v2}, Lcom/google/firebase/analytics/FirebaseAnalytics;->logEvent(Ljava/lang/String;Landroid/os/Bundle;)V
++ .locals 0
+
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/modules/AppModule$2.smali b/smali_classes2/com/librelink/app/core/modules/AppModule$2.smali
+index dff06c52..18588c93 100644
+--- a/smali_classes2/com/librelink/app/core/modules/AppModule$2.smali
++++ b/smali_classes2/com/librelink/app/core/modules/AppModule$2.smali
+@@ -20,18 +20,14 @@
+ # instance fields
+ .field final synthetic this$0:Lcom/librelink/app/core/modules/AppModule;
+
+-.field final synthetic val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+
+ # direct methods
+-.method constructor (Lcom/librelink/app/core/modules/AppModule;Lcom/google/firebase/analytics/FirebaseAnalytics;)V
++.method constructor (Lcom/librelink/app/core/modules/AppModule;)V
+ .locals 0
+
+ .line 538
+ iput-object p1, p0, Lcom/librelink/app/core/modules/AppModule$2;->this$0:Lcom/librelink/app/core/modules/AppModule;
+
+- iput-object p2, p0, Lcom/librelink/app/core/modules/AppModule$2;->val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+ invoke-direct {p0}, Ljava/lang/Object;->()V
+
+ return-void
+@@ -51,23 +47,13 @@
+ .end method
+
+ .method public setUserId(Ljava/lang/String;)V
+- .locals 1
+-
+- .line 577
+- iget-object v0, p0, Lcom/librelink/app/core/modules/AppModule$2;->val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+- invoke-virtual {v0, p1}, Lcom/google/firebase/analytics/FirebaseAnalytics;->setUserId(Ljava/lang/String;)V
++ .locals 0
+
+ return-void
+ .end method
+
+ .method public setUserProperty(Ljava/lang/String;Ljava/lang/String;)V
+- .locals 1
+-
+- .line 571
+- iget-object v0, p0, Lcom/librelink/app/core/modules/AppModule$2;->val$firebaseAnalytics:Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+- invoke-virtual {v0, p1, p2}, Lcom/google/firebase/analytics/FirebaseAnalytics;->setUserProperty(Ljava/lang/String;Ljava/lang/String;)V
++ .locals 0
+
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/core/modules/AppModule.smali b/smali_classes2/com/librelink/app/core/modules/AppModule.smali
+index 1b47ef23..6bf261e6 100644
+--- a/smali_classes2/com/librelink/app/core/modules/AppModule.smali
++++ b/smali_classes2/com/librelink/app/core/modules/AppModule.smali
+@@ -1821,13 +1821,6 @@
+ }
+ .end annotation
+
+- .line 207
+- new-instance v0, Lcom/librelink/app/core/modules/AppModule$1;
+-
+- invoke-direct {v0, p0, p2}, Lcom/librelink/app/core/modules/AppModule$1;->(Lcom/librelink/app/core/modules/AppModule;Lio/reactivex/CompletableEmitter;)V
+-
+- invoke-virtual {p1, v0}, Lcom/google/android/vending/licensing/LicenseChecker;->checkAccess(Lcom/google/android/vending/licensing/LicenseCheckerCallback;)V
+-
+ return-void
+ .end method
+
+@@ -1876,17 +1869,10 @@
+ .annotation runtime Ljavax/inject/Singleton;
+ .end annotation
+
+- .line 535
+- iget-object v0, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {v0}, Lcom/google/firebase/analytics/FirebaseAnalytics;->getInstance(Landroid/content/Context;)Lcom/google/firebase/analytics/FirebaseAnalytics;
+-
+- move-result-object v0
+-
+ .line 537
+ new-instance v1, Lcom/librelink/app/core/modules/AppModule$2;
+
+- invoke-direct {v1, p0, v0}, Lcom/librelink/app/core/modules/AppModule$2;->(Lcom/librelink/app/core/modules/AppModule;Lcom/google/firebase/analytics/FirebaseAnalytics;)V
++ invoke-direct {v1, p0}, Lcom/librelink/app/core/modules/AppModule$2;->(Lcom/librelink/app/core/modules/AppModule;)V
+
+ return-object v1
+ .end method
+@@ -1979,20 +1965,11 @@
+ .annotation runtime Ljavax/inject/Singleton;
+ .end annotation
+
+- .line 839
+- invoke-interface {p2}, Lcom/librelink/app/network/LabelingService;->getCachedConfigurationFile()Ljava/lang/String;
+-
+- move-result-object p2
+-
+- const-class v0, Lcom/librelink/app/types/ApplicationConfigurationValues;
+-
+- invoke-virtual {p1, p2, v0}, Lcom/google/gson/Gson;->fromJson(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
+-
+- move-result-object p1
++ new-instance v0, Lcom/librelink/app/types/ApplicationConfigurationValues;
+
+- check-cast p1, Lcom/librelink/app/types/ApplicationConfigurationValues;
++ invoke-direct {v0}, Lcom/librelink/app/types/ApplicationConfigurationValues;->()V
+
+- return-object p1
++ return-object v0
+ .end method
+
+ .method provideCountryCode()Ljava/lang/String;
+@@ -2253,30 +2230,7 @@
+ }
+ .end annotation
+
+- .line 324
+- invoke-interface {p2}, Lcom/librelink/app/prefs/SharedPreference;->get()Ljava/lang/Object;
+-
+- move-result-object p2
+-
+- check-cast p2, Ljava/lang/Boolean;
+-
+- invoke-virtual {p2}, Ljava/lang/Boolean;->booleanValue()Z
+-
+- move-result p2
+-
+- if-eqz p2, :cond_0
+-
+- .line 326
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/common/LicenseCheckActivity;->getDefaultIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto/16 :goto_0
+-
+ .line 328
+- :cond_0
+ iget-object p2, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+
+ invoke-static {p2}, Lcom/librelink/app/ui/common/DataMigrationActivity;->shouldAttemptToMigrateData(Landroid/content/Context;)Z
+@@ -2294,92 +2248,10 @@
+
+ goto/16 :goto_0
+
+- .line 332
+- :cond_1
+- invoke-interface {p3}, Lcom/librelink/app/network/LabelingService;->isCachedConfigurationFilePresent()Z
+-
+- move-result p2
+-
+- if-nez p2, :cond_2
+-
+- .line 334
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/common/AppConfigurationDownloadActivity;->getDefaultIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto :goto_0
+-
+ .line 336
+- :cond_2
+- invoke-interface {p4}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object p2
+-
+- check-cast p2, Ljava/lang/Boolean;
+-
+- invoke-virtual {p2}, Ljava/lang/Boolean;->booleanValue()Z
+-
+- move-result p2
+-
+- if-eqz p2, :cond_3
+-
+- .line 338
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/common/VersionCheckActivity;->getDefaultIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto :goto_0
+-
+- .line 340
+- :cond_3
+- invoke-interface {p1}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object p1
+-
+- check-cast p1, Lcom/librelink/app/network/NetworkService;
+-
+- invoke-interface {p1}, Lcom/librelink/app/network/NetworkService;->isLoggedIn()Z
+-
+- move-result p1
+-
+- if-nez p1, :cond_4
+-
+- .line 342
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/apptour/AppTourActivity;->makeIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto :goto_0
+-
+- :cond_4
+- if-eqz p6, :cond_5
+-
+- .line 346
+- iget-object p1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- const/4 p2, 0x0
+-
+- invoke-static {p1, p6, p2}, Lcom/librelink/app/ui/settings/AgreementAcceptance;->acceptIntent(Landroid/content/Context;Lcom/librelink/app/types/LicenseAgreement;Z)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- const p2, 0x10008000
+-
+- .line 347
+- invoke-virtual {p1, p2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
+-
+- move-result-object p1
+-
+- goto :goto_0
++ :cond_1
+
+ .line 349
+- :cond_5
+ invoke-interface {p5}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+
+ move-result-object p1
+@@ -2488,45 +2360,14 @@
+ .end method
+
+ .method provideLicenseCheck()Lio/reactivex/Completable;
+- .locals 4
++ .locals 1
+ .annotation runtime Lcom/librelink/app/core/Qualifiers$LicenseCheck;
+ .end annotation
+
+ .annotation runtime Ldagger/Provides;
+ .end annotation
+
+- .line 205
+- new-instance v0, Lcom/google/android/vending/licensing/LicenseChecker;
+-
+- iget-object v1, p0, Lcom/librelink/app/core/modules/AppModule;->app:Landroid/app/Application;
+-
+- new-instance v2, Lcom/google/android/vending/licensing/StrictPolicy;
+-
+- invoke-direct {v2}, Lcom/google/android/vending/licensing/StrictPolicy;->()V
+-
+- const-string v3, "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhWc0CzRjBWTzUKxUFedp6BuXR42Jd8mNj34vY9x9UBM5PY9NygArO8g9D85gg9CmwrIbqpIa0Jv5tvz5pBZjN97nGO8dOdyBGU9bWFAsZe7JVgvPsLobOPi9xupuF115u7Q+qRdxLkay8zbUUY881M8uWcKwPhJ9zD5g/wqP0FNpXKa8Mk9Btf8MIUIRIl9xCFyq+UiHs0hgp4clPn/vA/7ecOGXfJKwQjyIblFUlNShncxuNXMLtf8vdiWVptCkcYs+RBRgW6MJrEUbeKG+GjMLp1YK35++E+8P12DvhLUz/r+e1Y8WGzGXbZR2pBraaEC/Z093HEkOxXnDsYqeawIDAQAB"
+-
+- invoke-direct {v0, v1, v2, v3}, Lcom/google/android/vending/licensing/LicenseChecker;->(Landroid/content/Context;Lcom/google/android/vending/licensing/Policy;Ljava/lang/String;)V
+-
+- .line 207
+- new-instance v1, Lcom/librelink/app/core/modules/AppModule$$Lambda$0;
+-
+- invoke-direct {v1, p0, v0}, Lcom/librelink/app/core/modules/AppModule$$Lambda$0;->(Lcom/librelink/app/core/modules/AppModule;Lcom/google/android/vending/licensing/LicenseChecker;)V
+-
+- invoke-static {v1}, Lio/reactivex/Completable;->create(Lio/reactivex/CompletableOnSubscribe;)Lio/reactivex/Completable;
+-
+- move-result-object v1
+-
+- invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
+-
+- invoke-static {v0}, Lcom/librelink/app/core/modules/AppModule$$Lambda$1;->get$Lambda(Lcom/google/android/vending/licensing/LicenseChecker;)Lio/reactivex/functions/Action;
+-
+- move-result-object v0
+-
+- .line 248
+- invoke-virtual {v1, v0}, Lio/reactivex/Completable;->doOnTerminate(Lio/reactivex/functions/Action;)Lio/reactivex/Completable;
+-
+- move-result-object v0
++ const/4 v0, 0x0
+
+ return-object v0
+ .end method
+diff --git a/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali b/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
+index 1fb63d71..0d4a0997 100644
+--- a/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
++++ b/smali_classes2/com/librelink/app/types/ApplicationConfigurationValues.smali
+@@ -33,7 +33,7 @@
+
+ # direct methods
+ .method public constructor ()V
+-.registers 2
++ .registers 2
+
+ .prologue
+ .line 3
+@@ -104,6 +104,5 @@
+
+ iput-object v0, p0, Lcom/librelink/app/types/ApplicationConfigurationValues;->oneStepSubject:Ljava/lang/String;
+
+-
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/ui/common/ScanSensorActivity.smali b/smali_classes2/com/librelink/app/ui/common/ScanSensorActivity.smali
+index 0eea7666..e48b4c9d 100644
+--- a/smali_classes2/com/librelink/app/ui/common/ScanSensorActivity.smali
++++ b/smali_classes2/com/librelink/app/ui/common/ScanSensorActivity.smali
+@@ -98,71 +98,6 @@
+ .method private processIntent(Landroid/content/Intent;)V
+ .locals 4
+
+- .line 103
+- iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->labelingService:Lcom/librelink/app/network/LabelingService;
+-
+- invoke-interface {v0}, Lcom/librelink/app/network/LabelingService;->isCachedConfigurationFilePresent()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_2
+-
+- iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->setupComplete:Ljavax/inject/Provider;
+-
+- .line 104
+- invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v0
+-
+- check-cast v0, Ljava/lang/Boolean;
+-
+- invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_2
+-
+- iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->networkService:Ljavax/inject/Provider;
+-
+- .line 105
+- invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v0
+-
+- check-cast v0, Lcom/librelink/app/network/NetworkService;
+-
+- invoke-interface {v0}, Lcom/librelink/app/network/NetworkService;->isLoggedIn()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_2
+-
+- iget-object v0, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->networkTimeEnabled:Ljavax/inject/Provider;
+-
+- .line 106
+- invoke-interface {v0}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object v0
+-
+- check-cast v0, Ljava/lang/Boolean;
+-
+- invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_2
+-
+- .line 107
+- invoke-static {p0}, Lcom/librelink/app/ui/common/DataMigrationActivity;->migrationInProgress(Landroid/content/Context;)Z
+-
+- move-result v0
+-
+- if-eqz v0, :cond_0
+-
+- goto :goto_0
+-
+- .line 115
+- :cond_0
+ invoke-virtual {p0}, Lcom/librelink/app/ui/common/ScanSensorActivity;->getSupportFragmentManager()Landroid/support/v4/app/FragmentManager;
+
+ move-result-object v0
+@@ -216,27 +151,6 @@
+ .line 127
+ invoke-virtual {v0}, Landroid/support/v4/app/FragmentTransaction;->commitNow()V
+
+- goto :goto_1
+-
+- .line 109
+- :cond_2
+- :goto_0
+- iget-object p1, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->audioNotifier:Lcom/librelink/app/types/AudioNotifier;
+-
+- invoke-interface {p1}, Lcom/librelink/app/types/AudioNotifier;->notifyError()V
+-
+- .line 110
+- iget-object p1, p0, Lcom/librelink/app/ui/common/ScanSensorActivity;->initialIntent:Ljavax/inject/Provider;
+-
+- invoke-interface {p1}, Ljavax/inject/Provider;->get()Ljava/lang/Object;
+-
+- move-result-object p1
+-
+- check-cast p1, Landroid/content/Intent;
+-
+- invoke-virtual {p0, p1}, Lcom/librelink/app/ui/common/ScanSensorActivity;->startActivity(Landroid/content/Intent;)V
+-
+- :goto_1
+ return-void
+ .end method
+
+diff --git a/smali_classes2/com/librelink/app/ui/help/EventLogActivity.smali b/smali_classes2/com/librelink/app/ui/help/EventLogActivity.smali
+index eef8d16e..d00e1d91 100644
+--- a/smali_classes2/com/librelink/app/ui/help/EventLogActivity.smali
++++ b/smali_classes2/com/librelink/app/ui/help/EventLogActivity.smali
+@@ -321,12 +321,5 @@
+ .line 77
+ invoke-virtual {p1, v0, v1}, Lio/reactivex/Observable;->subscribe(Lio/reactivex/functions/Consumer;Lio/reactivex/functions/Consumer;)Lio/reactivex/disposables/Disposable;
+
+- .line 85
+- iget-object p1, p0, Lcom/librelink/app/ui/help/EventLogActivity;->mButtonView:Landroid/view/View;
+-
+- const/4 v0, 0x0
+-
+- invoke-virtual {p1, v0}, Landroid/view/View;->setVisibility(I)V
+-
+ return-void
+ .end method
+diff --git a/smali_classes2/com/librelink/app/ui/help/HelpActivity.smali b/smali_classes2/com/librelink/app/ui/help/HelpActivity.smali
+index 2e02650e..1c1169c6 100644
+--- a/smali_classes2/com/librelink/app/ui/help/HelpActivity.smali
++++ b/smali_classes2/com/librelink/app/ui/help/HelpActivity.smali
+@@ -186,21 +186,6 @@
+ .line 89
+ invoke-virtual {p1, v0}, Landroid/widget/ArrayAdapter;->add(Ljava/lang/Object;)V
+
+- .line 104
+- new-instance v0, Lcom/librelink/app/ui/help/HelpActivity$HelpItem;
+-
+- .line 105
+- invoke-static {p0}, Lcom/librelink/app/ui/help/UserManualActivity;->showManualIntent(Landroid/content/Context;)Landroid/content/Intent;
+-
+- move-result-object v1
+-
+- const v2, 0x7f10018f
+-
+- invoke-direct {v0, p0, v2, v1}, Lcom/librelink/app/ui/help/HelpActivity$HelpItem;->(Lcom/librelink/app/ui/help/HelpActivity;ILandroid/content/Intent;)V
+-
+- .line 104
+- invoke-virtual {p1, v0}, Landroid/widget/ArrayAdapter;->add(Ljava/lang/Object;)V
+-
+ .line 113
+ new-instance v0, Lcom/librelink/app/ui/help/HelpActivity$HelpItem;
+
+@@ -216,31 +201,6 @@
+ .line 113
+ invoke-virtual {p1, v0}, Landroid/widget/ArrayAdapter;->add(Ljava/lang/Object;)V
+
+- .line 116
+- iget-object v0, p0, Lcom/librelink/app/ui/help/HelpActivity;->agreements:Ljava/util/List;
+-
+- invoke-static {v0}, Lcom/annimon/stream/Stream;->of(Ljava/util/List;)Lcom/annimon/stream/Stream;
+-
+- move-result-object v0
+-
+- new-instance v1, Lcom/librelink/app/ui/help/HelpActivity$$Lambda$0;
+-
+- invoke-direct {v1, p0}, Lcom/librelink/app/ui/help/HelpActivity$$Lambda$0;->(Lcom/librelink/app/ui/help/HelpActivity;)V
+-
+- .line 117
+- invoke-virtual {v0, v1}, Lcom/annimon/stream/Stream;->map(Lcom/annimon/stream/function/Function;)Lcom/annimon/stream/Stream;
+-
+- move-result-object v0
+-
+- invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
+-
+- invoke-static {p1}, Lcom/librelink/app/ui/help/HelpActivity$$Lambda$1;->get$Lambda(Landroid/widget/ArrayAdapter;)Lcom/annimon/stream/function/Consumer;
+-
+- move-result-object v1
+-
+- .line 119
+- invoke-virtual {v0, v1}, Lcom/annimon/stream/Stream;->forEach(Lcom/annimon/stream/function/Consumer;)V
+-
+ .line 121
+ iget-object v0, p0, Lcom/librelink/app/ui/help/HelpActivity;->mListView:Landroid/widget/ListView;
+
+--
+2.23.0
+
diff --git a/ToDo/LibreView/README.txt b/ToDo/LibreView/README.txt
new file mode 100644
index 0000000..e60f959
--- /dev/null
+++ b/ToDo/LibreView/README.txt
@@ -0,0 +1 @@
+https://github.com/smos-gh/LibreLink-xDrip-Patch
diff --git a/ToDo/LibreView/patch.sh b/ToDo/LibreView/patch.sh
new file mode 100644
index 0000000..5edf7aa
--- /dev/null
+++ b/ToDo/LibreView/patch.sh
@@ -0,0 +1,282 @@
+#!/bin/bash
+
+# Color codes
+NORMAL='\033[0;39m'
+GREEN='\033[1;32m'
+RED='\033[1;31m'
+WHITE='\033[1;37m'
+YELLOW='\033[1;33m'
+
+WORKDIR=$(pwd)
+FILENAME='com.freestylelibre.app.de_2019-04-22'
+
+echo -e "${WHITE}Prüfe benötigte Tools ...${NORMAL}"
+MISSINGTOOL=0
+echo -en "${WHITE} apksigner ... ${NORMAL}"
+which apksigner > /dev/null
+if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+fi
+echo -en "${WHITE} apktool ... ${NORMAL}"
+if [ -x tools/apktool ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+ APKTOOL=$(pwd)/tools/apktool
+else
+ which apktool > /dev/null
+ if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL} Herkunft und Kompatibilität allerdings unbekannt."
+ APKTOOL=$(which apktool)
+ else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+ fi
+fi
+echo -en "${WHITE} git ... ${NORMAL}"
+which git > /dev/null
+if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+fi
+echo -en "${WHITE} keytool ... ${NORMAL}"
+which keytool > /dev/null
+if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+fi
+echo -en "${WHITE} zipalign ... ${NORMAL}"
+which zipalign > /dev/null
+if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+fi
+echo
+if [ ${MISSINGTOOL} = 1 ]; then
+ echo -e "${YELLOW}=> Bitte installieren Sie die benötigten Tools.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Suche APK Datei '${FILENAME}.apk' ...${NORMAL}"
+if [ -e APK/${FILENAME}.apk ]; then
+ echo -e "${GREEN} gefunden.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht gefunden.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte laden Sie die original APK Datei von https://www.apkmonk.com/download-app/com.freestylelibre.app.de/5_com.freestylelibre.app.de_2019-04-22.apk/ herunter und legen Sie sie im Verzeichnis APK/ ab.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Prüfe MD5 Summe der APK Datei ...${NORMAL}"
+md5sum -c APK/${FILENAME}.apk.md5 > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte laden Sie die korrekte, unverfälschte original APK herunter.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Enpacke original APK Datei ...${NORMAL}"
+${APKTOOL} d -o /tmp/librelink APK/${FILENAME}.apk
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Patche original App ...${NORMAL}"
+
+cat < Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+ fi
+done
+
+echo -e "${WHITE}Verwende neuen Sourcecode für gepatchte App ...${NORMAL}"
+cp -Rv ${WORKDIR}/sources/* /tmp/librelink/smali_classes2/com/librelink/app/
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+chmod 644 /tmp/librelink/smali_classes2/com/librelink/app/*.smali
+
+echo -e "${WHITE}Verwende neue Grafiken für gepatchte App ...${NORMAL}"
+cp -Rv ${WORKDIR}/graphics/* /tmp/librelink/
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Kopiere original APK Datei in gepatchte App ...${NORMAL}"
+cp ${WORKDIR}/APK/${FILENAME}.apk /tmp/librelink/assets/original.apk
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Baue gepatchte App zusammen ...${NORMAL}"
+${APKTOOL} b -o ${WORKDIR}/APK/librelink_unaligned.apk
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Räume /tmp/ auf ...${NORMAL}"
+cd ${WORKDIR}
+rm -rf /tmp/librelink/
+echo -e "${GREEN} okay."
+echo
+
+echo -e "${WHITE}Optimiere Ausrichtung der gepatchten APK Datei...${NORMAL}"
+zipalign -p 4 APK/librelink_unaligned.apk APK/${FILENAME}_patched.apk
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+ rm APK/librelink_unaligned.apk
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Erstelle Keystore zum Signieren der gepatchten APK Datei ...${NORMAL}"
+keytool -genkey -v -keystore /tmp/libre-keystore.p12 -storetype PKCS12 -alias "Libre Signer" -keyalg RSA -keysize 2048 --validity 10000 --storepass geheim --keypass geheim -dname "cn=Libre Signer, c=de"
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Signiere gepatchte APK Datei ...${NORMAL}"
+if [ -x /usr/lib/android-sdk/build-tools/debian/apksigner.jar ]; then
+ java -jar /usr/lib/android-sdk/build-tools/debian/apksigner.jar sign --ks-pass pass:geheim --ks /tmp/libre-keystore.p12 APK/${FILENAME}_patched.apk
+elif [ -x /usr/share/apksigner/apksigner.jar ]; then
+ java -jar /usr/share/apksigner/apksigner.jar sign --ks-pass pass:geheim --ks /tmp/libre-keystore.p12 APK/${FILENAME}_patched.apk
+else
+ apksigner sign --ks-pass pass:geheim --ks /tmp/libre-keystore.p12 APK/${FILENAME}_patched.apk
+fi
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+ rm /tmp/libre-keystore.p12
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+if [ -d /mnt/c/ ]; then
+ echo -e "${WHITE}Windows-System erkannt ...${NORMAL}"
+ echo -e "${WHITE}Kopiere APK ...${NORMAL}"
+ mkdir -p /mnt/c/APK
+ cp APK/${FILENAME}_patched.apk /mnt/c/APK/
+ if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+ echo -en "${YELLOW}Fertig! Die gepatchte und signierte APK Datei finden Sie unter C:\\APK"
+ echo -en "\\"
+ echo -e "${FILENAME}_patched.apk${NORMAL}"
+ else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+ fi
+else
+ echo -e "${YELLOW}Fertig! Die gepatchte und signierte APK Datei finden Sie unter APK/${FILENAME}_patched.apk${NORMAL}"
+fi
+
+echo -en "${GREEN}Die gepatchte App läuft im ${appmode}-Modus"
+if [[ ${appmode} == Online ]] ; then
+ echo -e " (mit LibreView-Unterstützung)${NORMAL}"
+else
+ echo -e " (ohne LibreView-Unterstützung)${NORMAL}"
+fi
diff --git a/download.sh b/download.sh
new file mode 100755
index 0000000..d51fb86
--- /dev/null
+++ b/download.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+# Color codes
+NORMAL='\033[0;39m'
+GREEN='\033[1;32m'
+RED='\033[1;31m'
+WHITE='\033[1;37m'
+YELLOW='\033[1;33m'
+
+WORKDIR=$(pwd)
+FILENAME_230='com.freestylelibre.app.de_2019-04-22'
+FILENAME_240='com.freestylelibre.app.de_2020-02-15'
+
+# wget HSTS-bugfix for debian as subsystem in Windows
+touch ~/.wget-hsts
+chmod 644 ~/.wget-hsts
+
+# disable certificate check
+if [ ! -e ~/.wgetrc ] ; then
+ echo "check_certificate = off" >> ~/.wgetrc
+fi
+
+echo -e "${WHITE}Lade original APK Version 2.3.0 herunter ...${NORMAL}"
+wget -O APK/apkpure.html --keep-session-cookies --save-cookies cookies.txt -U chrome https://apkpure.com/de/freestyle-librelink-de/com.freestylelibre.app.de/download/4751-APK
+URL=$(grep "hier klicken" APK/apkpure.html | sed 's#^.*https://##' | sed 's/">.*//')
+wget -O APK/${FILENAME_230}.apk --load-cookies cookies.txt -U chrome https://${URL}
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+rm cookies.txt
+rm APK/apkpure.html
+
+#echo -e "${WHITE}Lade original APK Version 2.4.0 herunter ...${NORMAL}"
+#wget -O APK/apkpure.html --keep-session-cookies --save-cookies cookies.txt https://apkpure.com/de/freestyle-librelink-de/com.freestylelibre.app.de/download/5417-APK
+#URL=$(grep "hier klicken" APK/apkpure.html | sed 's#^.*https://##' | sed 's/">.*//')
+#wget -O APK/${FILENAME_240}.apk --load-cookies cookies.txt https://${URL}
+#if [ $? = 0 ]; then
+# echo -e "${GREEN} okay.${NORMAL}"
+# echo
+#else
+# echo -e "${RED} nicht okay.${NORMAL}"
+# echo
+# echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+# exit 1
+#fi
+#rm cookies.txt
+#rm APK/apkpure.html
+
+echo -e "${WHITE}Lade 'apktool' herunter ...${NORMAL}"
+echo "Info: Debian liefert eine nicht ohne weiteres funktionierende 'dirty'-Version mit. Daher der externe Download."
+mkdir -p tools
+wget -q -O tools/apktool https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
+chmod 755 tools/apktool
+wget -q -O tools/apktool.jar https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.0.jar
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
diff --git a/graphics/res/drawable-hdpi/fsll_logo_vertical.png b/graphics/res/drawable-hdpi/fsll_logo_vertical.png
new file mode 100644
index 0000000..423f24d
Binary files /dev/null and b/graphics/res/drawable-hdpi/fsll_logo_vertical.png differ
diff --git a/graphics/res/drawable-hdpi/logo_about.png b/graphics/res/drawable-hdpi/logo_about.png
new file mode 100644
index 0000000..0458296
Binary files /dev/null and b/graphics/res/drawable-hdpi/logo_about.png differ
diff --git a/graphics/res/drawable-hdpi/logo_action.png b/graphics/res/drawable-hdpi/logo_action.png
new file mode 100644
index 0000000..23e84a6
Binary files /dev/null and b/graphics/res/drawable-hdpi/logo_action.png differ
diff --git a/graphics/res/drawable-mdpi/fsll_logo_vertical.png b/graphics/res/drawable-mdpi/fsll_logo_vertical.png
new file mode 100644
index 0000000..71957bf
Binary files /dev/null and b/graphics/res/drawable-mdpi/fsll_logo_vertical.png differ
diff --git a/graphics/res/drawable-mdpi/logo_about.png b/graphics/res/drawable-mdpi/logo_about.png
new file mode 100644
index 0000000..da33bcb
Binary files /dev/null and b/graphics/res/drawable-mdpi/logo_about.png differ
diff --git a/graphics/res/drawable-mdpi/logo_action.png b/graphics/res/drawable-mdpi/logo_action.png
new file mode 100644
index 0000000..b8097e8
Binary files /dev/null and b/graphics/res/drawable-mdpi/logo_action.png differ
diff --git a/graphics/res/drawable-xhdpi/fsll_logo_vertical.png b/graphics/res/drawable-xhdpi/fsll_logo_vertical.png
new file mode 100644
index 0000000..13010c8
Binary files /dev/null and b/graphics/res/drawable-xhdpi/fsll_logo_vertical.png differ
diff --git a/graphics/res/drawable-xhdpi/logo_about.png b/graphics/res/drawable-xhdpi/logo_about.png
new file mode 100644
index 0000000..d63d78d
Binary files /dev/null and b/graphics/res/drawable-xhdpi/logo_about.png differ
diff --git a/graphics/res/drawable-xhdpi/logo_action.png b/graphics/res/drawable-xhdpi/logo_action.png
new file mode 100644
index 0000000..53ab446
Binary files /dev/null and b/graphics/res/drawable-xhdpi/logo_action.png differ
diff --git a/graphics/res/drawable-xxhdpi/fsll_logo_vertical.png b/graphics/res/drawable-xxhdpi/fsll_logo_vertical.png
new file mode 100644
index 0000000..18ea935
Binary files /dev/null and b/graphics/res/drawable-xxhdpi/fsll_logo_vertical.png differ
diff --git a/graphics/res/drawable-xxhdpi/logo_about.png b/graphics/res/drawable-xxhdpi/logo_about.png
new file mode 100644
index 0000000..b85936c
Binary files /dev/null and b/graphics/res/drawable-xxhdpi/logo_about.png differ
diff --git a/graphics/res/drawable-xxhdpi/logo_action.png b/graphics/res/drawable-xxhdpi/logo_action.png
new file mode 100644
index 0000000..8a4f27b
Binary files /dev/null and b/graphics/res/drawable-xxhdpi/logo_action.png differ
diff --git a/graphics/res/drawable-xxxhdpi/fsll_logo_vertical.png b/graphics/res/drawable-xxxhdpi/fsll_logo_vertical.png
new file mode 100644
index 0000000..5b930e9
Binary files /dev/null and b/graphics/res/drawable-xxxhdpi/fsll_logo_vertical.png differ
diff --git a/install-apt-dependencies.sh b/install-apt-dependencies.sh
new file mode 100755
index 0000000..d5d0b0b
--- /dev/null
+++ b/install-apt-dependencies.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# Color codes
+NORMAL='\033[0;39m'
+GREEN='\033[1;32m'
+RED='\033[1;31m'
+WHITE='\033[1;37m'
+YELLOW='\033[1;33m'
+
+WORKDIR=$(pwd)
+FILENAME='com.freestylelibre.app.de_2019-04-22'
+
+echo -e "${WHITE}Installiere benötigte Tools ...${NORMAL}"
+sudo apt-get install git wget apksigner zipalign android-framework-res
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
diff --git a/patch.sh b/patch.sh
new file mode 100755
index 0000000..36405d9
--- /dev/null
+++ b/patch.sh
@@ -0,0 +1,237 @@
+#!/bin/bash
+
+# Color codes
+NORMAL='\033[0;39m'
+GREEN='\033[1;32m'
+RED='\033[1;31m'
+WHITE='\033[1;37m'
+YELLOW='\033[1;33m'
+
+WORKDIR=$(pwd)
+FILENAME='com.freestylelibre.app.de_2019-04-22'
+
+echo -e "${WHITE}Prüfe benötigte Tools ...${NORMAL}"
+MISSINGTOOL=0
+echo -en "${WHITE} apksigner ... ${NORMAL}"
+which apksigner > /dev/null
+if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+fi
+echo -en "${WHITE} apktool ... ${NORMAL}"
+if [ -x tools/apktool ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+ APKTOOL=$(pwd)/tools/apktool
+else
+ which apktool > /dev/null
+ if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL} Herkunft und Kompatibilität allerdings unbekannt."
+ APKTOOL=$(which apktool)
+ else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+ fi
+fi
+echo -en "${WHITE} git ... ${NORMAL}"
+which git > /dev/null
+if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+fi
+echo -en "${WHITE} keytool ... ${NORMAL}"
+which keytool > /dev/null
+if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+fi
+echo -en "${WHITE} zipalign ... ${NORMAL}"
+which zipalign > /dev/null
+if [ $? = 0 ]; then
+ echo -e "${GREEN}gefunden.${NORMAL}"
+else
+ echo -e "${RED}nicht gefunden.${NORMAL}"
+ MISSINGTOOL=1
+fi
+echo
+if [ ${MISSINGTOOL} = 1 ]; then
+ echo -e "${YELLOW}=> Bitte installieren Sie die benötigten Tools.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Suche APK Datei '${FILENAME}.apk' ...${NORMAL}"
+if [ -e APK/${FILENAME}.apk ]; then
+ echo -e "${GREEN} gefunden.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht gefunden.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte laden Sie die original APK Datei von https://www.apkmonk.com/download-app/com.freestylelibre.app.de/5_com.freestylelibre.app.de_2019-04-22.apk/ herunter und legen Sie sie im Verzeichnis APK/ ab.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Prüfe MD5 Summe der APK Datei ...${NORMAL}"
+md5sum -c APK/${FILENAME}.apk.md5 > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte laden Sie die korrekte, unverfälschte original APK herunter.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Enpacke original APK Datei ...${NORMAL}"
+${APKTOOL} d -o /tmp/librelink APK/${FILENAME}.apk
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Patche original App ...${NORMAL}"
+cd /tmp/librelink/
+git apply --whitespace=nowarn --verbose ${WORKDIR}/xdrip2.git.patch
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Verwende neuen Sourcecode für gepatchte App ...${NORMAL}"
+cp -Rv ${WORKDIR}/sources/* /tmp/librelink/smali_classes2/com/librelink/app/
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+chmod 644 /tmp/librelink/smali_classes2/com/librelink/app/*.smali
+
+echo -e "${WHITE}Verwende neue Grafiken für gepatchte App ...${NORMAL}"
+cp -Rv ${WORKDIR}/graphics/* /tmp/librelink/
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Kopiere original APK Datei in gepatchte App ...${NORMAL}"
+cp ${WORKDIR}/APK/${FILENAME}.apk /tmp/librelink/assets/original.apk
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Baue gepatchte App zusammen ...${NORMAL}"
+${APKTOOL} b -o ${WORKDIR}/APK/librelink_unaligned.apk
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+echo -e "${WHITE}Räume /tmp/ auf ...${NORMAL}"
+cd ${WORKDIR}
+rm -rf /tmp/librelink/
+echo -e "${GREEN} okay."
+echo
+
+echo -e "${WHITE}Optimiere Ausrichtung der gepatchten APK Datei...${NORMAL}"
+zipalign -f -p 4 APK/librelink_unaligned.apk APK/${FILENAME}_patched.apk
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+ rm APK/librelink_unaligned.apk
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+if [ ! -f tools/libre-keystore.p12 ]; then
+ echo -e "${WHITE}Erstelle Keystore zum Signieren der gepatchten APK Datei ...${NORMAL}"
+ keytool -genkey -v -keystore tools/libre-keystore.p12 -storetype PKCS12 -alias "Libre Signer" -keyalg RSA -keysize 2048 --validity 10000 --storepass geheim --keypass geheim -dname "cn=Libre Signer, c=de"
+ if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+ else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+ fi
+else
+ echo -e "${WHITE}Verwende existierenden Keystore zum Signieren der gepatchten APK Datei ...${NORMAL}"
+fi
+
+echo -e "${WHITE}Signiere gepatchte APK Datei ...${NORMAL}"
+if [ -x /usr/lib/android-sdk/build-tools/debian/apksigner.jar ]; then
+ java -jar /usr/lib/android-sdk/build-tools/debian/apksigner.jar sign --ks-pass pass:geheim --ks tools/libre-keystore.p12 APK/${FILENAME}_patched.apk
+elif [ -x /usr/share/apksigner/apksigner.jar ]; then
+ java -jar /usr/share/apksigner/apksigner.jar sign --ks-pass pass:geheim --ks tools/libre-keystore.p12 APK/${FILENAME}_patched.apk
+else
+ apksigner sign --ks-pass pass:geheim --ks tools/libre-keystore.p12 APK/${FILENAME}_patched.apk
+fi
+if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+ # rm /tmp/libre-keystore.p12
+else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+fi
+
+if [ -d /mnt/c/ ]; then
+ echo -e "${WHITE}Windows-System erkannt ...${NORMAL}"
+ echo -e "${WHITE}Kopiere APK ...${NORMAL}"
+ mkdir -p /mnt/c/APK
+ cp APK/${FILENAME}_patched.apk /mnt/c/APK/
+ if [ $? = 0 ]; then
+ echo -e "${GREEN} okay.${NORMAL}"
+ echo
+ echo -en "${YELLOW}Fertig! Die gepatchte und signierte APK Datei finden Sie unter C:\\APK"
+ echo -en "\\"
+ echo -e "${FILENAME}_patched.apk${NORMAL}"
+ else
+ echo -e "${RED} nicht okay.${NORMAL}"
+ echo
+ echo -e "${YELLOW}=> Bitte prüfen Sie o.a. Fehler.${NORMAL}"
+ exit 1
+ fi
+else
+ echo -e "${YELLOW}Fertig! Die gepatchte und signierte APK Datei finden Sie unter APK/${FILENAME}_patched.apk${NORMAL}"
+fi
diff --git a/sources/sika b/sources/sika
deleted file mode 160000
index 2518b20..0000000
--- a/sources/sika
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2518b20b3b9aaffae82976543e4986461e4a64e8