From 7d778c71410e145371fc90fd48e41c9c9d020708 Mon Sep 17 00:00:00 2001 From: Mihai Adrian Carare <48995920+mcarare@users.noreply.github.com> Date: Wed, 28 Oct 2020 22:46:02 +0200 Subject: [PATCH] [fenix] For # 15929: Remove the search widget discoverability experiment. (https://github.com/mozilla-mobile/fenix/pull/16081) * For https://github.com/mozilla-mobile/fenix/issues/15929: Remove SearchWidgetCFR telemetry. * For https://github.com/mozilla-mobile/fenix/issues/15929: Remove SearchWidgetCFR and search widget experiment. * For https://github.com/mozilla-mobile/fenix/issues/15929: Remove unit tests references to search widget experiment. --- mobile/android/fenix/app/metrics.yaml | 59 ------------ .../java/org/mozilla/fenix/ExperimentsManager.kt | 39 -------- .../java/org/mozilla/fenix/FenixApplication.kt | 7 +- .../java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt | 107 --------------------- .../org/mozilla/fenix/components/metrics/Event.kt | 4 - .../components/metrics/GleanMetricsService.kt | 13 --- .../java/org/mozilla/fenix/home/HomeFragment.kt | 17 ---- .../sessioncontrol/SessionControlController.kt | 1 - .../mozilla/fenix/search/SearchDialogController.kt | 3 - .../main/java/org/mozilla/fenix/utils/Settings.kt | 51 ---------- .../drawable-xhdpi/search_widget_illustration.png | Bin 23276 -> 0 bytes .../app/src/main/res/layout/search_widget_cfr.xml | 102 -------------------- .../app/src/main/res/values/preference_keys.xml | 5 - .../fenix/app/src/main/res/values/strings.xml | 8 -- .../home/DefaultSessionControlControllerTest.kt | 1 - .../fenix/search/SearchDialogControllerTest.kt | 1 - mobile/android/fenix/docs/metrics.md | 4 - 17 files changed, 2 insertions(+), 420 deletions(-) delete mode 100644 mobile/android/fenix/app/src/main/java/org/mozilla/fenix/ExperimentsManager.kt delete mode 100644 mobile/android/fenix/app/src/main/java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt delete mode 100644 mobile/android/fenix/app/src/main/res/drawable-xhdpi/search_widget_illustration.png delete mode 100644 mobile/android/fenix/app/src/main/res/layout/search_widget_cfr.xml diff --git a/mobile/android/fenix/app/metrics.yaml b/mobile/android/fenix/app/metrics.yaml index fd6de67c9ad7..1a48b2ad2632 100644 --- a/mobile/android/fenix/app/metrics.yaml +++ b/mobile/android/fenix/app/metrics.yaml @@ -2591,65 +2591,6 @@ search_widget: - fenix-core@mozilla.com expires: "2021-08-01" -search_widget_cfr: - displayed: - type: event - description: | - The search widget cfr was displayed. - bugs: - - https://github.com/mozilla-mobile/fenix/issues/9488 - data_reviews: - - https://github.com/mozilla-mobile/fenix/pull/10958 - - https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068 - data_sensitivity: - - interaction - notification_emails: - - fenix-core@mozilla.com - expires: "2021-08-01" - add_widget_pressed: - type: event - description: | - The user pressed the "add widget" button. - bugs: - - https://github.com/mozilla-mobile/fenix/issues/9488 - data_reviews: - - https://github.com/mozilla-mobile/fenix/pull/10958 - - https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068 - data_sensitivity: - - interaction - notification_emails: - - fenix-core@mozilla.com - expires: "2021-08-01" - not_now_pressed: - type: event - description: | - The user pressed the "not now" button. - bugs: - - https://github.com/mozilla-mobile/fenix/issues/9488 - data_reviews: - - https://github.com/mozilla-mobile/fenix/pull/10958 - - https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068 - data_sensitivity: - - interaction - notification_emails: - - fenix-core@mozilla.com - expires: "2021-08-01" - canceled: - type: event - description: | - The user dismissed the search widget cfr by - tapping outside of the prompt - bugs: - - https://github.com/mozilla-mobile/fenix/issues/9488 - data_reviews: - - https://github.com/mozilla-mobile/fenix/pull/10958 - - https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068 - data_sensitivity: - - interaction - notification_emails: - - fenix-core@mozilla.com - expires: "2021-08-01" - private_browsing_mode: garbage_icon: type: event diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/ExperimentsManager.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/ExperimentsManager.kt deleted file mode 100644 index d93b77bad953..000000000000 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/ExperimentsManager.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix - -import android.content.Context -import mozilla.components.service.experiments.Experiments -import org.mozilla.fenix.ext.settings - -object ExperimentsManager { - - fun optOutSearchWidgetExperiment(context: Context) { - // Release user has opted out of search widget CFR experiment, reset them to not see it. - context.settings().setSearchWidgetExperiment(false) - } - - fun initSearchWidgetExperiment(context: Context) { - // When the `search-widget-discoverability` experiment is active,set the pref to either - // show or hide the search widget CFR (given other criteria are met as well). - // Note that this will not take effect the first time the application has launched, - // since there won't be enough time for the experiments library to get a list of experiments. - // It will take effect the second time the application is launched. - Experiments.withExperiment("fenix-search-widget") { branchName -> - when (branchName) { - "control_no_cfr" -> { - context.settings().setSearchWidgetExperiment(false) - } - "treatment_cfr" -> { - context.settings().setSearchWidgetExperiment(true) - } - else -> { - // No branch matches so we're defaulting to no CFR - context.settings().setSearchWidgetExperiment(false) - } - } - } - } -} diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 64a76a06790c..d147eb010507 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -171,24 +171,21 @@ open class FenixApplication : LocaleAwareApplication(), Provider { } fun queueInitExperiments() { + @Suppress("ControlFlowWithEmptyBody") if (settings().isExperimentationEnabled) { queue.runIfReadyOrQueue { Experiments.initialize( applicationContext = applicationContext, - onExperimentsUpdated = { - ExperimentsManager.initSearchWidgetExperiment(this) - }, + onExperimentsUpdated = null, configuration = mozilla.components.service.experiments.Configuration( httpClient = components.core.client, kintoEndpoint = KINTO_ENDPOINT_PROD ) ) - ExperimentsManager.initSearchWidgetExperiment(this) } } else { // We should make a better way to opt out for when we have more experiments // See https://github.com/mozilla-mobile/fenix/issues/6278 - ExperimentsManager.optOutSearchWidgetExperiment(this) } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt deleted file mode 100644 index 2b37185b0606..000000000000 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt +++ /dev/null @@ -1,107 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.cfr - -import android.app.Dialog -import android.content.Context -import android.graphics.Color -import android.graphics.drawable.ColorDrawable -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import androidx.core.view.isVisible -import androidx.core.view.marginTop -import kotlinx.android.synthetic.main.search_widget_cfr.view.* -import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.view.drop_down_triangle -import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.view.pop_up_triangle -import org.mozilla.fenix.R -import org.mozilla.fenix.components.SearchWidgetCreator -import org.mozilla.fenix.components.metrics.Event -import org.mozilla.fenix.components.metrics.MetricController -import org.mozilla.fenix.components.toolbar.ToolbarPosition -import org.mozilla.fenix.utils.Settings - -/** - * Displays a CFR above the HomeFragment toolbar that recommends usage / installation of the search widget. - */ -class SearchWidgetCFR( - private val context: Context, - private val settings: Settings, - private val metrics: MetricController, - private val getToolbar: () -> View -) { - - fun displayIfNecessary() { - if (settings.isInSearchWidgetExperiment && - settings.shouldDisplaySearchWidgetCfr() && - !isShown - ) { - isShown = true - showSearchWidgetCFR() - } - } - - @Suppress("InflateParams") - private fun showSearchWidgetCFR() { - settings.lastCfrShownTimeInMillis = System.currentTimeMillis() - settings.incrementSearchWidgetCFRDisplayed() - - val searchWidgetCFRDialog = Dialog(context) - val layout = LayoutInflater.from(context) - .inflate(R.layout.search_widget_cfr, null) - val toolbarPosition = settings.toolbarPosition - - layout.drop_down_triangle.isVisible = toolbarPosition == ToolbarPosition.TOP - layout.pop_up_triangle.isVisible = toolbarPosition == ToolbarPosition.BOTTOM - - val toolbar = getToolbar() - - val gravity = Gravity.CENTER_HORIZONTAL or toolbarPosition.androidGravity - - layout.cfr_neg_button.setOnClickListener { - metrics.track(Event.SearchWidgetCFRNotNowPressed) - searchWidgetCFRDialog.dismiss() - settings.manuallyDismissSearchWidgetCFR() - } - - layout.cfr_pos_button.setOnClickListener { - metrics.track(Event.SearchWidgetCFRAddWidgetPressed) - SearchWidgetCreator.createSearchWidget(context) - searchWidgetCFRDialog.dismiss() - settings.manuallyDismissSearchWidgetCFR() - } - - searchWidgetCFRDialog.apply { - setContentView(layout) - } - - searchWidgetCFRDialog.window?.let { - it.setGravity(gravity) - val attr = it.attributes - attr.y = - (toolbar.y + toolbar.height - toolbar.marginTop - toolbar.paddingTop).toInt() - it.attributes = attr - it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) - } - - searchWidgetCFRDialog.setOnCancelListener { - isShown = false - metrics.track(Event.SearchWidgetCFRCanceled) - } - - searchWidgetCFRDialog.setOnDismissListener { - isShown = false - settings.incrementSearchWidgetCFRDismissed() - } - - searchWidgetCFRDialog.show() - metrics.track(Event.SearchWidgetCFRDisplayed) - } - - companion object { - // Used to ensure multiple dialogs are not shown on top of each other - var isShown = false - } -} diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt index bd79b6f9f17c..39cc5b48cf8f 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt @@ -152,10 +152,6 @@ sealed class Event { object FennecToFenixMigrated : Event() object AddonsOpenInSettings : Event() object VoiceSearchTapped : Event() - object SearchWidgetCFRDisplayed : Event() - object SearchWidgetCFRCanceled : Event() - object SearchWidgetCFRNotNowPressed : Event() - object SearchWidgetCFRAddWidgetPressed : Event() object SearchWidgetInstalled : Event() object OnboardingAutoSignIn : Event() object OnboardingManualSignIn : Event() diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index 86ddc6a51270..89101ff0b818 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -44,7 +44,6 @@ import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine import org.mozilla.fenix.GleanMetrics.SearchShortcuts import org.mozilla.fenix.GleanMetrics.SearchSuggestions import org.mozilla.fenix.GleanMetrics.SearchWidget -import org.mozilla.fenix.GleanMetrics.SearchWidgetCfr import org.mozilla.fenix.GleanMetrics.SyncAccount import org.mozilla.fenix.GleanMetrics.SyncAuth import org.mozilla.fenix.GleanMetrics.Tab @@ -579,18 +578,6 @@ private val Event.wrapper: EventWrapper<*>? is Event.VoiceSearchTapped -> EventWrapper( { VoiceSearch.tapped.record(it) } ) - is Event.SearchWidgetCFRDisplayed -> EventWrapper( - { SearchWidgetCfr.displayed.record(it) } - ) - is Event.SearchWidgetCFRCanceled -> EventWrapper( - { SearchWidgetCfr.canceled.record(it) } - ) - is Event.SearchWidgetCFRNotNowPressed -> EventWrapper( - { SearchWidgetCfr.notNowPressed.record(it) } - ) - is Event.SearchWidgetCFRAddWidgetPressed -> EventWrapper( - { SearchWidgetCfr.addWidgetPressed.record(it) } - ) is Event.TabCounterMenuItemTapped -> EventWrapper( { Events.tabCounterMenuAction.record(it) }, { Events.tabCounterMenuActionKeys.valueOf(it) } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 7a6e20d2e260..7f22d1c790d0 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -28,7 +28,6 @@ import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.TOP import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.content.ContextCompat -import androidx.core.view.doOnLayout import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment @@ -75,7 +74,6 @@ import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.browser.BrowserAnimator.Companion.getToolbarNavOptions import org.mozilla.fenix.browser.browsingmode.BrowsingMode -import org.mozilla.fenix.cfr.SearchWidgetCFR import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.PrivateShortcutCreateManager import org.mozilla.fenix.components.StoreProvider @@ -427,21 +425,6 @@ class HomeFragment : Fragment() { } } - // We call this onLayout so that the bottom bar width is correctly set for us to center - // the CFR in. - view.toolbar_wrapper.doOnLayout { - val willNavigateToSearch = !bundleArgs.getBoolean(FOCUS_ON_ADDRESS_BAR) - if (!browsingModeManager.mode.isPrivate && !willNavigateToSearch) { - SearchWidgetCFR( - context = view.context, - settings = view.context.settings(), - metrics = view.context.components.analytics.metrics - ) { - view.toolbar_wrapper - }.displayIfNecessary() - } - } - if (browsingModeManager.mode.isPrivate) { requireActivity().window.addFlags(FLAG_SECURE) } else { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt index c2a35df94eca..8b0ff89406c4 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt @@ -414,7 +414,6 @@ class DefaultSessionControlController( Event.EnteredUrl(false) } else { val searchAccessPoint = Event.PerformedSearch.SearchAccessPoint.ACTION - activity.settings().incrementActiveSearchCount() searchAccessPoint.let { sap -> MetricsUtils.createSearchEvent( activity.components.search.provider.getDefaultEngine(activity), diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt index 742f7fab1862..c6ffbf66b724 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt @@ -91,8 +91,6 @@ class SearchDialogController( val event = if (url.isUrl()) { Event.EnteredUrl(false) } else { - settings.incrementActiveSearchCount() - val searchAccessPoint = when (store.state.searchAccessPoint) { Event.PerformedSearch.SearchAccessPoint.NONE -> Event.PerformedSearch.SearchAccessPoint.ACTION else -> store.state.searchAccessPoint @@ -149,7 +147,6 @@ class SearchDialogController( } override fun handleSearchTermsTapped(searchTerms: String) { - settings.incrementActiveSearchCount() clearToolbarFocus() activity.openToBrowserAndLoad( diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index d9fd08908fe6..b17e5ba22521 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -195,57 +195,6 @@ class Settings(private val appContext: Context) : PreferencesHolder { true ) - private val activeSearchCount = counterPreference( - appContext.getPreferenceKey(R.string.pref_key_search_count) - ) - - fun incrementActiveSearchCount() = activeSearchCount.increment() - - private val isActiveSearcher: Boolean - get() = activeSearchCount.value > 2 - - fun shouldDisplaySearchWidgetCfr(): Boolean = canShowCfr && isActiveSearcher && - searchWidgetCFRDismissCount.underMaxCount() && - !searchWidgetInstalled && - !searchWidgetCFRManuallyDismissed - - private val searchWidgetCFRDisplayCount = counterPreference( - appContext.getPreferenceKey(R.string.pref_key_search_widget_cfr_display_count) - ) - - fun incrementSearchWidgetCFRDisplayed() = searchWidgetCFRDisplayCount.increment() - - private val searchWidgetCFRManuallyDismissed by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_search_widget_cfr_manually_dismissed), - default = false - ) - - fun manuallyDismissSearchWidgetCFR() { - preferences.edit().putBoolean( - appContext.getPreferenceKey(R.string.pref_key_search_widget_cfr_manually_dismissed), - true - ).apply() - } - - private val searchWidgetCFRDismissCount = counterPreference( - appContext.getPreferenceKey(R.string.pref_key_search_widget_cfr_dismiss_count), - maxCount = 3 - ) - - fun incrementSearchWidgetCFRDismissed() = searchWidgetCFRDismissCount.increment() - - val isInSearchWidgetExperiment by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_is_in_search_widget_experiment), - default = false - ) - - fun setSearchWidgetExperiment(value: Boolean) { - preferences.edit().putBoolean( - appContext.getPreferenceKey(R.string.pref_key_is_in_search_widget_experiment), - value - ).apply() - } - var defaultSearchEngineName by stringPreference( appContext.getPreferenceKey(R.string.pref_key_search_engine), default = "" diff --git a/mobile/android/fenix/app/src/main/res/drawable-xhdpi/search_widget_illustration.png b/mobile/android/fenix/app/src/main/res/drawable-xhdpi/search_widget_illustration.png deleted file mode 100644 index dc6539813c9afdba638ef3b44e01af4c0042f227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcwPel00001 literal 23276 zcwV%*WmFtr&^|ag!QDML!3h#v5(vSAJAvTt?(Q0b&Y;2FT>=D~!QE|ecU_X-`=0-v z-LoIJKlQnNyQ*&0Q%_ZOM<^*sqoa_Z0002=&oWXf008V5003i%jQF~e=%U~Z0BF~K zmJ(NWhdEsS=x#FaF|hv9u9o{_`p9UM8_)Fh+EKH|EwnMkSGdkeseQxkRP%IKAPwyxngTCl&pAV!e-;7(FD}457&G%rW zW1;&l0swH($)_Lj5Yuj}Pds|bJ~!{xcQ%fdJ*y|ikg3#?b_#?yuS|y_>f}M>CVfn0 zFW%5?OZZQs0)nqR)6X-Qj@ZlIUHVcFmXnG3@dejX289u@Cl3eNt&qK6)mKqhsVRjA z02FG^LhT04=$6gU8-_v2=k25WLzwhh5D^~W^B%+uCo1Y>V)1@e^e%E@`z}$47y$U` zAb;*SxpNm{CVD!M7)>wOb9N`1Cft6?r)U$~;Md5^docV-&(}Z*4q!hs zy+ht;H<+4|C}e*1WiZHFYc@p#0RR9;sSva#YSh~#>4|1Pm^)F*Ct)7S`qBab_88Ly z74mJZ=Y^#{lXjZsgxMu#*;YPCukY+BINNO8nXVTvr|{`M-47lJJ!Q9#zT8a$-FAop z{=d_9J#m*eoG4Gl?cDqH{P@zps%?5@e_3IFJ<6JE?82YVzWkNr-u+0vUrNqzheC8I z9$S~q0DzUBd^&^sLyL4;kP276%&!_gUbbhCJFm7R=QW%k%j(%YnQYJONXk!odjSCc zd|!3$HhPvMTUlP$tKQ#_s0_*ex7^HoaV)DN`uR1I6lkyR8C`O=Abe0{E8qdfBf$ay zmfY;u+1i$kL)&reOoZoR0Dzdy&H~tm*o87n7zO~S&sya1_;vW^_0^*#`t76FSL8r# zdKo;JuP*y3cA=D!m~w~?05EDQh-ehvMUt1aB?COI)UfWQAM%3)rg!jb?0@H_wj zviWNSfpGp6&hsntL)Z2!z3bPv!+Ew0db39r%1_T{%mwg(!g7oBI{AnF>1$Vw4E;rj zw;#2W(?uFkr^tZ9Pn7J7n54$1`8jRK{m#NM)M}o@cBc;3Uq$xQ_vCwEbf`ysNORvi z)_2gJjq_tD;RJ6x84)Z=OT}<|j9_!Ct03tj>1SCm&MQzPT$VfB-hNIhxGT`r_5H42 z?QGFzg$|n@QD%c-$ukRqjANq#80Y8oDJx4G4Z!CcvN3yS(3=4N(8TWh<)t<+8}ID9 zHn=YAcrQ}7fzs?0-`fpit!8`9&$zqL%)Dr~3_FYpv!>cCK19G&Ou;ap!JnAc3lI10 z@fH>zeMu4+c^~Dq`bBod(?Br*$d*U1`AWrhwKZ)(|8DE{V;B@3Hr=)^>A%im+wwqZvkE7r8hEmwv}dA z31(cg8N+D37(6OFHG4mYd>u|Om}AH1@o}R%IsE#U(N7(%_AlthIdG z`PFj~5ujvt`JIwZL>QiD_C!A|z$+W3OL*MH^esrh$ci**iDK!`9ui7L%zwkI~DNo zwNm9_mE|R&`#$Ro--@jA|Jc+yVIJFczoU(TA$7T(!47YzZu>-K^G|M@uo{xAms zpw>XlX$w5BR|4oNT6_bWF3DK1^#}m8RG_}z@3ttv?s%1BQs_WP3oyKX3wi?nClLHf zI;NukceWAx|DvJ)&j%n%e%p(7o|EeI9X+7T#Z-Zb3*C1Qw$TaQ2|GBzL&Ic&HQHnu zdeU%EGT}-7V{b}wXM3h~9G4f?Sd|cP=Lsl#;S0(4fJ~d@0Qsii0T?-}g<4uN``SJq z({DVvMt^mDt*K8s=S%(i{P?2seAs7VBlwFHmW1HmLiCC}3F4W`6Xle~3mD1Sfy<_- ztPzm&eWsjz8tRPhy>}KDlU&Td``IXead(oilhX(2`b=uKZhOqP@m5JXW?Fo9v)yy2}_dxi|xD0E25}D zMlN)?uz*@j81&cJ|Ighk1n3d|?Yp;mMJ?R_6FFF~ogEbj=Kl?;|9>BJDKmdRaq&y$ zN^$Xg-6M8Nz5(^{y-~xcKUS23gC$uD&OPC%c6%|nIXo#kVgGqzcP={cM%3+91TysV zrgdCX#u{|=I`$ss?G08=+W^ow5<>o(9!sK`HyDtQ|y4EaDpIm~S(Hn*1H7eoP99Lb+QvI;o3Cv{B!y9zmi zSe-@^-+e(0po`&|yrJ`P-oIS=%G^pb>Y4nwn$6`LSJ?8<{oDa{O?ePP0SJ{EQ7G71 z4`e0|xliGz001<|*U>TG7XMH^H@mSsFErvW?-_}~|KO}zwVNXA-@06RC$I)Rs()8r zHsBEx6`z7kx$KDf4sKKs!o9yxRadhf4?jzJq#NdwR_A*>c|Q^nP6UbwU)RbiWqQ|x zUz@s?_@j4RRTm=_56u)mwQut_oxaVr`}6HhHu>#Zq2O573TD@%n^=lJR#vYc9;3ti zr_90-{z?mMf|OZUfI7ytM+c-AaaUb;!I2*$MD)t0zvE1K&WvS}H1~g1)#HqkM@ zJb1OguwYw$^dVI!X$AmSJlTDx+6lsmNtcAw#+RP+#IhK%}hRjQ(eS zm7MFdj(@^^8@j2}!^2_H!)1OGavXL4nrYa`ldcf^D2`20dLAgz=CRIH#PqH^wNcc3 zQU?PzOHjxw@FFqtzG=eSb+YI7{?U5DEzH8so`8%wK?VcZ{88#RKwb(B!l2f;<}{og zgNNqbfQD%Zox@6xV&Uj)^PGTmnyge4jhdbwfib$mhw|x##zIz8ZN~Xq&&CO2`ZRTw zN!95ySXWB#?7^(e+e(- zViQrRA-W-1DB3?Om?1q+wR&t66-{%CE|~D%+AAL2UJ65UfPJup8h%O z4}P{WdzKs7&JXqO?F*gb-qc2+@Si0#H-*xtccV9(20n|Yd)pB4ub&0#8p*FsbbVj! zu;x$cVSL8dpTHWU0yymHUeUJW$h7ehC*1cW)TcPV)z+lL!ka1=DQ;97g!R4V2FE-H zKAjHeWdN{|=_>?x-i-T7N$Db`him${hCmU%Pd7E#5bNsK?^E8M?;ruN1rPmbYX&|b z-k&ChJx8xwBQC7tyEHjo zeb&_h9l_@qxaxIvz0Ij!ZctDyXTu-iy{0yoH$$kApcl^5B(Tf+fgvt-bx2US4AOf) z_fVO(&yn;1kWhs>-zo>5=dTF|OthcPz6Ehh0VlBxPNr>! zK~F7SaQ6d~Rk%cXIs%u%%`Xc7pu8mq=2zP3oug;$3ePCarQbypaOoJzRYPY=zgOvOH2zM576mPgzJH624ab9>@ax`MvQYRsxkbHe zxg)3J%i4GA+rBurvhIr=O47>1gv+fKb<%So>IJaIS5=%F)x{2dKlg^?h1rnR!zKTh z!_`Tx?D;T}PcMwiRDxD8;tj)Uoi1nrzn=R^OeOzID&@Ps_vcL_6ScJ)eFu^M4(7TRfS25qgWqn4(KF|m=fuO= zuWb2A(x3lPI=skP!;tEs`v!GL~7n$=>IZrKCSx;ez(Gg+ot3gI$|9lOf0P14Fx@=+T)6`TBd$_rpgM{i!iZdgm z!nW$yeJ&e($14RFp4$8{wc};YU#GT2#amz;=}dwlS9rckP2$NQ?eN$n99s%yn{B0& z*hodvxMPnC4`(HllA0u{L6|x6`mpZkvUpx~TBbYG0MC{XuK&KLT_u!;#>l7rliB?X z!lp>!qJVBWS*-rIgV>6?}3yxD7ns5H}G>)qIYGYpJAU^$3 zaUE5yFf%?jG5+5+NbFkfuw)zCXNj|khhd0vhIGr5#${?nv8jn>wIArXGKb5q3qzHy=>VeBElf}Z8UF<<-7YAfoiaLP#$KXnQf zE%Fh)=K5dMtruwHGm;OyjJG0Gx}UNW#nk+ayeV%c_FJtdX2U#LJve$npauEO%{i>8 zvHh+liWod|!l=Bb&{>S$q$FNoZ<#S>@)|07(NCGc5{W2x39r}){)Lu4TU$6UeU8#1G-&<1z-z-7Hlfo$_Dk8N z_nC_Y2mh5FR&rP(orGz%MNs_D=)7SoQsr$;zI#z0olK9}@G}kI`sh^b0q?c1kRvI_ z$G{SZMm<}U8|73-t1&*F-PL@xgRJ`l;(tv*XUtoNKMjuVK~1-A7;Tm-j^?DH*SW?Z z%>Jgvw(DBaO#>^fNi}mH%4Ro?X{h_+#jsAC^L6y1&5T|isg_)3MLs z_D?n8T}9a&N*6<=4m*b*$9yN-!K<<`1}uT!K*bMNk8oXLSK?3#sWqp;!?&6E4<{$P zVq2(#h=XQ7F8&8*)hOje(g%{}i9Sczil1c35BvKP$bbFopJpqdvQJI_9Zfni&Vam<+SSJ}@;I~itp3-n73jO9 zq-i{3ibIB$XhM#UJ)pVG6`(+^1$O$Ep`52&udL%BM!Dc;u7{Uhu1 z8^nW{Pg4R{x!N1th#%nl*}K-WhSk@~=A-DBXS@vP%NO~kggTzhf+TxsD>w;LEW0NU zcD^ZpWUcGGvK7}@>t_;>{8ylKd%)^B?W8ft@cl`wRw!TW@0PxwMUtZTeYd}Jg7n^6 zLFl{WT#5U^8LB^J*Qf5AU+Y-Z^BL#T@@mXzUXX{rBX2i5<_bTg)$J9hL3+}ELx~=M_@hK*@fuy@y164ByGorHgzp_bIX_FB{0k*jMX) z_Hq+o;W|P5G0!c^Z_$=bPx_zP9@i2^{P}tBIy!CWIy&xr(MB=j z!)d`G2%XwZx*20$$2U&0?*RAS#unayf@Ab+H{+Lg z%=sTmIrTAM%G?x@v>K>ewj#sp&4Az zUym@jv?Nc*Xhb5Yk9>bRvbK6W+r0xsfmsmyI}?SrQKx>kr0oY*7qOQ^YU@u0Gc#;8qP^A2z91tK>N zwsK^ge|UxYTsUU^as+WN5x>U|SxLuvzMoPLwi~ssfQC|SG_=FB!QNU|?O`|c? zvF}MI{48Tqb-5*|s{-c+{C;4JpJ&KUC6oO1C8XRx&`mqKeiqS?8cUyxaty9l=I!QcbO5a#x_h~8}h>;Z#eXp z)iZKw39%88a|s_|AVyHT^26qcm`c{Zc>|=@#n;(i5=|vi>ecyp6=u3goG#kdvU43` z?l(6(YX!Rl+-N&KJuJ@t*Mcf{6tNKX{aUo^Z7$F1k|Dq{7o+d_qWxiGWtX^5jPp44 z_|a&=k7A5kH4cF23u83H58M8dPQFSkQh9ItBFYubAViAwPtbFk8b=^|-D)7i`(wmV zF8^@BW)t`rwN3Yro3bMu>-b+s$xD{S$AZH)KKsq-^j)t4JEX~Vm%Hb8u@2H#d-*&1 zg&I82OCkS=+@pv$rQeKTDKd}rK485Jg#~t(JWslYztVzKUDcVU6QPXhu;eGnCPfF8 zIkB*WC;#KRmZ0JE9K4*(ny;(tuJN)~A6qJx~IXqBjy0f95_ zgAOx7n*;c%=u3=Wat(mGdJ8{F$v=418BGy~MPW+|lJCg2)^MM!rXk`jd|UQ#>b-dYJz@YT#G$^Z){ieAdlY+pB7S z0qhUI%=CS-|8dcIH@b_JgVDitlMNiKVEpb%mDFW*Q_5yfVLAUVOVsnUUx^2AJR%v8 z_fG}OA5(EDEPdV%Qf0mYenm11HTzpGbK6`T=M~y=>*0uEtoa)ZRoz2%XgOfpEWkeI z?EAoZYHi?6YL;*}x1mtO8kuHugCy#`^=;-PUfaJphLLiLFnU9;_C&%#9Nq*03qW%Q zpd~gvtp3Tr@PR9^I)u-Y_(gI{akP;st^>K3VpIZhMG*L z{j=ajxV#J(3R&P9zj=o%sg{1FLIyjK=$f0_(5uFpVQ+DTxYg{BVxv^RYrVzs$FqVZ z)hWa;wS)IR=<|K251Qp&ih_lsQd#%-#&~>+=D=nXR46SO$hYhb%ePDZtqTt`>cQmnurw>;=Q&yXjTyZ)(E52KWkL2KG|Drf1t{eZ?I_! ztn-Xh%DSny-}M*H?Aw#qbN6`?mZAA?kj49?mHdbQd|Kc;>A0pvDTG-_63K$Rh}Er6 zi(XVTz3=@fse|M+GuA&6Rz9?NdvF$$WA{y~5cjSKnOIl10fPwABI$^?XIZx&&@k|n zQ4%f|)ye(V-R1(0ztbBoJUl#`5hVv3o4LlK&2=rVNyv*&DKk(C@osmkhwUBPGEzPa z5uhIc+cjtO5-Xz?zv&c#srf<3%awTqMFpX2QTw>30_?byZHs{Yk1`cGP^G<2r&lW1 z&vzB5NMZ7@;a_ECCdP0e0BEY;D*L$B*-6<~j!;{6$%k3~Rx?i~{B$cbJj!2Fh54Uz z6sZ`F{D=&Wo|t31)eUKh#W?8-xI$$=8-JMo2CvApWSUx03!{w$l|eT%oayZ(LAo>; zpqWaI-83G35&vR|{6A6vkmXh!;PMrE-5-5J9&A}^4*DKrWk#(`!485|;+OY3(hnS2 zvFy7&WfRI&N%cAN;gn%^>%$dkkwOZ{V}Und^B zFY{igi~_NxMi0%?+_kl3De5(2Si`btFasFe{F#`NtHUGzUGaP`q^5{TXj~B<8rtb; z6)l}^tqWf*Z_4szFx*czot&avd9;DtzK)PAOW*xJKu!vR9MTe2EFR=ccEy9kZA`-F z5TN6UNs_^ue%i*j^R|8;s{C@&2r3P_52m80s3A{cr57ba3>QNtOsBumxgW=-T90DQ zdpXd0;TJe4%G(Zi2ks)^{KR#<#=cbevcP>ehVnp%R6Dvb!EG_CX)lV|Wdk5oubvMC zx=~Rdzj!TCJ>(or?mLn(&}3B<2i|;~Q9F*r@K+CHE>=y#ItgEC0@{&0aHutypb9nm z#6wij{zq4~+o7wk_o~4JhTbkL^(W?B#)C&#Xix19#hPN=BWmUFN$&VpO*Bwd+#5Ff z)S-8alxQt#4izKy(M>zOTAn$QYGso}*gGbyqhA8pSDG?r>+Kk}^X<;?lUnb_V<=6f zJiQ5wh(e8s=*L3OZqwQyw|s_Eplp}B8U{Wi5mK==e=PaYy{FeP&#c0pqgXtD8H$Lp zcc^19NMu9}zIXg-%0eqa=0r06J_hy(Nw_+ms6`g7M1+MY_}iW!uWv9ZNf@J6Zube~ zc;m%-6=G-WiYC73&Au{1WXlH{KI($t8)Y z#xtb_rKOUV)EeSg&w7(iasrS*48(q3_ncK*&7S9YopsyoWp3mmlAM2|iEG|_TiCkt z8$Ig*1ZR!|b80d3Z3$I(MtDeOH_>ta5v|i@n6%mGnDJfmd0G5$8qPAD8XJktQH}73 zSf%xP_wUt_H?_K@9TMChz(h`jo84&t;?_5 zy_l0cd9WGL{~nrM&>j`&b-O$^?Yk}Tn@BYRY?K6Cj|5}ORtUKSu0H-IZML)^_#lF9 z>d_?SMUASafFWx5vmhWy21&bFZlG;MO=?z%YcV&4C+dLE8wX}FTi7#k;U@7b)ESO7c>5`5RR zYOXSt>>ur+TE$gxdGBJgwQZ=u!>yk~F%YiuX?Bo>rWlrSi(@(KA%A!*l1l){=}|J+ zGEdD5iF4%fdq2?H3lB`FZ{b-$MT;4o(06<6<`=i}CLrDiz~;bE!zB$-F9h2P1Ma_a!Z_uXFTh?S=I)hZ+S{z;4bRlaF2gOc7P% zl(C-!4O=AdU)-dcDU`PbZT;SorUeNN)zViMt8A$j`D}yI;-47g^y5A!=0Xp8K!=NmaWddLmAN5?ietxJXz}YW_6#R69 z(~t*WOrrwV%m{6_8oY%YM-@+lU24ZrvDO56eWEjN%FPr-2J`TGIaKA#M9cps_vczi zg|=@eHf`>vd__M3b%z{jAc==+&;D$OBN%5$557?mE+nbk$i(KjkB&T42C?rNg3Ynf z=ce=k-_=O;oA*~ZD_-VIU02?ZPVK$n(sqXx7nTJPK1h&^4poZbBk-79DpYQ6jd;c` zd$4+~oHK{gD^#tQEY3YoxmDjS#7z*1B6y&}rZDq7$&LQp*MAg5i3pxeTETo0I5^%I zjS{?-X$pR^vn5s3^g~hm=sC0%4)rP&>Cqtbpr9DYBkJV{=2m{6#w!PkiHiMP>+7ht zH(2noV;#(Q!!im3nrOjJ^e8(1_!-YA*9A5+Fo~!FIe~F%R6>DpvFf$ArbpJz;pVxZ zXfG2_F|81~!zFdUe{iibUPa_0?hm67$kzRVC5APWnd=|#8pBxf+tN9&ynz{?2K2WENP?DF=P7N#b45tVVA~47^0aVF1)U*`X=z&a7QbnDhpf}$Bs7+tFQuGqe?ZIb zJ-n^!X^$GYwukLpe5yr@Z6+4XETQE?Fw{JhX1DrXc5)jYJyWDADDHWW(CH?_Zlk*L zmXG4%uyG?j3e@|gZ*FpB$&;VdjXsgSW3r^2&GCNtMQg5i)w$x^O%JW2CZQdEK+5Cv zWaHV)cE*QCWZ-wAQ0h$ba%@Y)`k3N~I-^E=B53qrt@=ZY?5a`MJtUKcr|S=mwSa`z1E=lJ)v%I^-}kt&kcW#b?_=O{ zR|8zeo+YLtrZ@!~gyv(HY!mH-55p5Mk-wtidyH7^vhnk&smQIDLBEdQb*q3cl+7Mh ztVrKXgv)Zm4>ZXa?gXvlE^R20<-E-_WycAXQ;0vP4@`)4SoL zyE{mgCTnVy)30G8!blTgfkQRPVc9dGl1yvBir1izd)Cf)c#JVGhQ2h%?@luOvI~wT zXpwiqLr=6Wsz;N~wx2A_Ayd6fTH(UDyz$If5ZJx4%)UM&D)h9t~M&02Izl~P+$CoE0ikrw639gW_qT9+J zCrrgENh6se1#3dm^^HmBtbuNq3F#fC#U>lR-}QD+l4A3w*_Y$w+VHacC^rbi>z6{-0apd=HGZR;@2OaFO1a`*?+^&QKU#+S%<)4u(d^6V3D(5fRctI7cwQC|L#8P0{?-%zRw1i|j?JN8ry?(FK~olO#`&{l=evBOWP(prd!kn-A10IC^WEpZRsKlpx+jKGM9d zm8|7Eq1|(FrP=W*{U6T=sidvT7pnXN&bm(xuMJvN>7U|8F(So~Hukw*a!q$st5;wD z5Ism0y-*f|DCeU8WhIZ;98ig_fKWGSgK+G{PLQ3{2L|dXjiiHtVx?9`T>-ZWobsRn zirw#ro(sV9tqkAnH8OpYV8)>wgYODEc*GGGzQ<86ezCL$VsbADzG6ZerVc!zo@A{L zTr20?2BSS^S8GD>>XlNzniWdkBXa(753wiGS_*Sb#+i0+A~k$w#rjZ&j@GOBJYw*C zs4*>-J59U55x^Vm=@BdC@hN52dN~Alz3mic<%L}t3|7l7wW77c!&Xn)rIi4br|i=D z+a_i4JrnaSU4D&6XlsZpxsb#+myX{(SB`E^Y9fU6U3Hyn(~LLOiIe0Il|qoSa%fsU z-li;R&%;SO6%8b`vTYu9o`1X~SfrvZm#R#3IrS{^k}%@ZZ);U4o}szHyM)nf3#kt< zB2qBfuBB8{t=IoKnt|RL(pz<~Uq=={#NEaHtHGgTx4p6ZdAW?r#Z4HsDcuF!Q1}Ey zPZr3H&xOf^lfi)NNwaFF*U*1~M$3_H^xECQ?3l3?%pYPYWde}JQ~0H@r0R)SlC{36 z-79XgChh!z-Op*{|GkvJw1Z(|xbrNZ`JpNnyo3e5ntNEca(|(G zG01+x_k)qeR=Ehb8*g&MXmnHpBgn$WdnmEeoLMP{s3S(51dfwx!V!fg_+FRh`sY)6 zPG|6MEOE?)ijjum6sMZ0&QDNmdXHm1^C{qYGq>i`WJc2wGc?=UxI`$7(f<0u7@`_B zq}|x}gJpFD_1DP;?#VMRMbl;qzgR5=8wq;DDJ*$DQy_mUM5s&zG`Rd zbn?nO!t_+K09%%!`d&z*K)v7FFcDAuoAv{3jMbW;jF&qPIfFAmoY&rB4)+wHIr9b@ zRlWe{W27AS?Q9Yj1g;&h9<)YCMcVz^S_=1>bux!fec{0(L^m#fohtHuAegVlZwN!6 z;@NK-J4oBI=V?GeB_rwKRhJ0FU0Ib=W7oE*l zPX+^r;{)S=TKLbf5Qy(5q62BUjuKq}@^l|$t<8L+1z(>1YEH5gw-?xNzcdKH2*;aY zk!h6-cK6S42CoHmU&-i&GQr?%Q)|^E?%-i>goW^jo43?>PR$RS zz=576QxYwt1pgu$*aD?rHe@8VzeA>=!_}sdq{m!--szZ+kFzxw;Nj-$ix5mjX%_}cz+=<;i(lha| zn8_i*(q$UIQiEEy{xte2MrtKlc%aP}DZHMv)_@rRkF0!3mNJX)AE~5K3p?11W{$#x zuPvtD;ks)ePbhQ?P`SGpDs!L;cqTRDid60HVkRf!j=oj;;6_@TqP7*cv?WP!a&{vck z=I-eZ=!a&CvFil&LOorj`*1Nu@e?>vxEQ7xK&VksAe<`V6VU7+gm* zdvDa%677BtRduIs;ppmZwwhP>6DYGMnA*jtVavCF7_MFBF>2*98sUbwlhxd-C-q; zSxO~^R`#vDB6$XZ%2kipUzi<(~<0%=tuv4(=bm|i{hue zUXB6SQtk7-M&hfSJhidM7#LsjBxO4ol8uGm0t{BZq5osY(L)R1Tf&PMaason=p{7tx} z--*yzyW8938a0MC?Nw4%6zMR-O%>`;TAE*(X~kvKR}ZviZGmw885{!eFuNYRTVs3T z>_|XKP}gTPBzdHAdbIaOO$cu#KT;gkJaifioJk4}k_d<+8GTE%Ci$R=P}mc7to1p0!a}Pp3^1*^`b-J2=kV#SRK|j6`^o1m*0cs@{)$q z&fkd%D6AI2Nf=}^v5aA;B3SH@H9w#nyKg!*AHRRW_`djKG=|2-21 z2i!)Zv^_F=?w<`1MT&VtvHe;*y$K8P_RPUn8tLd(>l|e-9`7%`5kA24S7E}Y%%DeH zv}7Kl+Sj2Yg?$MqwPO*V6fzV7DW=PQ2{wpT3TAHF#`=^0M?#2FN3czzp=*74_Tq== zok&YNHqX~U{x;mUru>w*p>M%VJ9r1$U=R1UPaC!2(BoGyLXkRVOoM=l!D3oI3=C zl*|0Gb@bWa510-E=y#gjV`nf(I z6#G8t;o8H{-em!et^-T(Hqmy;zsDF6g<5)&O0&A+h8e-y{M2NDhJZ)9iYK9}HVRHP z8o`83R%jRv;&?>w2BEqk73x)+zR6IjBHV!Agwzzegnyd1^(r?-pD!8Gbmjn~kL!Ha zw6k*sYS7&>wFHq`6xI}G=ePC)i@;DIDYI8n5;Et;PbC@WrLx_sl+=IP(SLkQM-GO)TT~n8Sle!UELI>E+2n>2U*fnzdp7{if*? z)fyI$hr28%V}B%o3K<21Hs1~ni%~g3fcQ(V(_z37S^EVSuYnuVB?+38zbj@wg1*>L z(e;O$*{Jwu-$_Y;Qha_~`|oi-y(}|yL!waTa6DoxhWvxjYWlz9>-#KSB^U7>MVMnb zQj>aiY}th3<2MK>4~ra&!Q|vWk3S|T=o>Jfs97QirVYqLa}t8=oGeXIrDKo0Ib0n! zw(v8vTZ0Pu2_cV=8FU#{P=Wb}Et^7CpoiLwu8@kAF-Wfeh5u1M`=U z%(tBg5sH^4{(W;+j;!}b1gF@a!efL`;S(!(?!ZO}g{kHqluqPwoUFwf&CLeJ2*@E2 zp^r_d9$Ri{QGX10hlIosX8=BK1@>m$2xa6ARDR2;r6`Et?=FWAPp0PYsu!Z@?&GS) zjaQAFz_5`B?T@9}Wg~#4JSa zM2(2~ZC7}YF{}(TWSeS3$Rs=Hp>n64^11VH<$`QSkklUi4@snzv;71dluATd={L0s za}C~kG!-nHZ?S^v2C-O5jRcD})1~Ez15L!8WdX`EgbM6*zD7@=Aji>Sgcw*_4V8)} z72wD8$kR{9jwgwrI1UVD1W&x&;D{O5lS>C6rRy^O@3-ETu>(JDwqmJS)gQPKKhobL zWaSZ#G-t_=ZRDaMA0%-_6Nt*Gg|(-u$)6C_><{e+Mlgu|Fe3mT96` zEbOP=p$~??WNs-+iPUIp!Yr@Py$`tPTUcjKEC7{@}guv+!3 z$@)O5t0VGUvuyFCFn?N{H)Ds6&|}iOTEBaOogXuk*6dicl7libTk7IN)d!VPzdi0c zu~hAG29Vhz>mmuDxm0k-4rP%=^yisE#k9rgR?UP^@%78I&tm{;02c_ERm?izY)?oa zBa$c3l*%{?E0G%pi?xRE9=U`HX6WL7Ls~MuC$O2S9d8zYrJibD+&)y%v2X~m^i}u< za7Um^Pzo?jeK=_j6}?}yGprVr;H?XuMN9ULFDasT3j2-XRy=~!$A77z#QKmUUJyTg zI!2aX_NlZmaRs6s=_GUF!G`|;lXbVwut_riQ|{yyZJx!!0CS2( zq({pPF7jZQ=Z=7jBb?tgrU7`Vha)D(mKuVLpzNQQ^eaE`3k_H~<7-50%@QQN#WdMW znrS?z>;r=j1cl_A+J_1{nsRua=S`R4f2b1su+R zxDsZd|Ci@ztO3G*4*Q$0AOut!B9W}2Q$WN_I)xcxqxDpT69{wwV&N!DCVe?ueTixh zYvkft>P~`*u-=F&)4rQ9vaXJ&iQ=b1aZVdfL(bi^?c68BZ&uaP)n)pq#dAs5sLSwa z{DI7gdafkU@`ZE7N0%Awpz9&zc9p}#iHC$6HMZaHbP0#zar`D%Wfd+9l`#B&%n6OI z8&r&&(DdVJA39#5ZCNN(7B;|#UM6m{Rnc;gb$MKi*wdXn?M|BW5WLyXRe&on~0 z;77z#77WueDUPx6Q}6>d%5EYQI=3C0XJQ$|3%b%?B^Dzw>)id#8iLwH1`*H z-~-hk3Jwy{!RD`9WVmFi;eMRFuPM*jvDmr5}Bv@(#| zTOi@3kFqfbfGBduCgO&4qsaJZ8Jqaot~3*`(ecRwacX6S*dlm>EQyuVVKgG^5NU&J zQ1q~&bq$FqD$;F8)8b4h_qqb z(#rmH2k;Lyo4{9UOpt2g>?@5g+q2@& z^|y!NrJf`?2^>QHpWliNu&_c2*%8$D*KHK0#{2d`pNWa$~ zmUR7mQr;{9j!S=b5rFycKTk(KE%1UeZq(A+M_`Yd49kr4_}!CZrA4BUjRneX6#bq` zkF-Pz6v;DwdIX;wuo@U>z~^!HsjU%Ijxm#Kx%u5wWC`y{>(6;=WRqnne->D&NkmJ#t`Ub%QYbtHE)Yk6M?)}5x476s&h zwRPF7*CM+Xyd4Oc^ffQ*k@v>6fzxwY4(QcOgQ9eMvgigZNw|I@fxZ?%p3d=C94Mbl zH6}4*i!xcFNTyQ#GQ%ym>!LD>iAA1Z@nyg-RbV$7*l(n-Gpf%w zES4$}$F!jMRlLo5TEn3Z3`kkk*n0ems7zBs3o)<{K_5M>I~7r*^59gtLwFy^}q8ANVN`tFN?X{`8Z`<2{M(Q{HddYhBEIa7Hx93s8nTHCeq2Xar>hF-n@Rn zWr3+J2lu)|y4A6MQGii&8Z^5_Lvmz7{>eX(R84eQJKs?S^MS(J;dEfQx`$Yx80sGN zhxM8dg*jB2*`?n3$$W|7D1JxLm4mqEMO@ z!#7pz%;ade;nRMRzhu7}$gD+o5kfU1g(OS5q%^VgB{W}-Cg%`nD?-b!#%Z$;$S@x< zMyT$%8}|6hWI0{9_8TWCTDGb;mPk^wLnKciPVI!&FJ46Qng8K>_WItDS%2eBTn&Tg zm*+LE{I;@*KpG6HJZpoozp22y{`XD$t?A2tH~%pw3!?LHU;%%8)Nr(@Pso%8dvtlC zHI&M#0$l@EqF zm>N^I>5H9Wv))>)8LfK~a{5zEDvu?Pq5JYWa%XAqY({L$&OQb0PHv4zz}x%U)z`iK zLf&zr)Ny#LN?^;M=2uhEs*uA_DCD0B(N=<6)^5M?$MvB+-lqQ0^MWbVAzC||eXBf% zm!JT=>L+Ih>WC#b7Lm5AN>2>EkzT}#iHdvD8Rb1+8NAiF;};fvuIbw|S7Qt|Wc@P? zGLKH*p8{pHM3=AqddMuaA#~WI_`UvguG<|A*7>O@&rf7sqJ+W zG$GRR-z`taM~R~$4|hX1MgJyUh7>r1nHrw~tbKJ`-h$4IYB%ksl~JXc=BPD68(%#Y29$Jol&2#e0=-}!w&rZ$i}mAXk*e_iOvPeQqI;O zp84{*r3!>*I?B(-Q9|@%28s5`m}V$TM>71 zc*!x5C09&cU-jzVq!*Z_Y)kXCcLU=+U&N^akvDY{#<#{J7#?xQx-|mu>6(1NqmNFP zkm_$jV8=DpZ6x&`w#&9v6TvPJVXAF7>D&}7sSpE;GDbB54bW^p_Sw<;wzK+KQD`W_ z2_O>P5m$U+CQbl_8Q6%;CCo+5(*sTa-8Mo7&L$Q zN+}3H?5UDAIK9}LWq$4Vnppwx_~o*P5zI!De@;?8i_;-N?lCowSUv|hSoq;Vb(dx- zEKZk$){!$yo(VZ+^LO@)XgqNE*b|v;E3F#dJpW>IhDX!%rQPHe+SC8a$mu?iOnT*v ze|~@Kpe5@{tjcG19z}YDTKTPy0;Y=-(#BFM(Wcg`56R3vl5@gbo(=2-W^HeNQOTVc z@Q~U;b=nX#o%vy5&pdY4#JVKM=+|d z9UYUlteRq76e9Un0GoD5Mt1WTwy$vwHI+l6iVWI|chF3#VRQ*xVzhuQNv1~2^YIud zw?7EKvvPb9yU|^8W*_mp{^F(lrTM|>lXfF8zu^OT{}i0N*>@+W!L3V!q+=hnCcxmq zYTxckq5ch}X(};b!>l%Q@A+U>^csjHUko2U!J{Z+stqwSRHjoUnC?4Z5$2wMEBQAi zCCSAHo>$A9pK?G#^N9exG2A;2WXFBXGNqj1t-HWb%{FZClom*<(xw9*6pK*xgiwvCW=_cI)sXndoxE7t zn7xFaU@M!eJS6v@`QV*;)_tZml}?Wjj?OhI^|}Wz(m;@Z7h7#In*z5_AYC>EXr!tU zP-=gCu(RHF6paIc!)g96E(0PwnJ>UR<7_9@=l5j{M;-$w-mmJ`9`b1DE}a>FTOr?t|7x4@Z> zF?kTK#j|sb=l%BzLP6r|Wg-!9YtpV~Inm!m{(WbX>#VV?i92W51Nvb;2o-R~a*KNS z$J+_o+rGYQq^znxS;Smv&x|k@9CQnCWzqPNT_@%I5_u zJO`9?GM03S#=&Da`6~?H^V#Ocyw2U;r8U?CalfG=qGZJ~E6G0kqEg4o{#7qtUyqXk z)kKU5t|O~Vu`w?OS1R3EEVK!4VEtJE*0NhX9UwdC31Gt5JK}_za7IcqYYj32JU8qpx)xl0M(R(InJ*M)GZ>{!4{@cX&;%8$so?T#U6d*H20SU+BK1^jn`) zITxi}HVg8Bq5Bj@V{y?4z!;BA5yqb4LLbzkA2^lWNVOKJ( zn@g|uISJj%%nZDda(f2mNtl86W~;dcAL5Gxb~s0q*PFn2eFKcypo5&McJu4k3O60} z=h47_gDx!2!;F--_4Fn7;~WSC`5r<~y=eZ*9gC7)%Ie%jWtb6r{b?CP-|IVe(t?$T zn|PQf$D50@H)pD=6v`5+!RvqIUR*N}Nqp?_DlP%&NA)=u1S< z=YgN&{_F)6Xs!t~u-g}xnvHcm6;N)N8RN9k@bMK}zK0KNDMnvaxfvqoAiVvY8T12b z&uL;FXU*u8y;^Mv&{GWu+*+ueo_3eVV0CF(!IechBd%k{M4lz6>*1W1VAP5$P-uw4 z4ST@PB^^!uL||OY!n~*~7W)cALgdZv$KWcg+jY+!W?WWI=iqHu3|2brCVCvjo6H&Q zedsTinIQzKQC1L7yyU3r5{<8YqGx`-TeZ|20+W&Y^6;j_eJdx@OIX{8-to>;=(k+* zmSDhVdLw>beVub)HS(S7&zyaJC~^h9t5?aeT^%QZeird|+c#h^$9PAoG@DxxCH=a4*lfy1|?HkSVpsiS~Vl5Jlu2*Qx;guW#fdtt*@}6){i0aE+2O<8fuI|5l^zuBb3RP`ewTUBMld(OGYIoP>QnWBq~ zwm#|QwE)@BdFu_pi9I<})djv~yaGu)bH`f#(07DbCBi;k3bE^U->sK!i9qoZWeK;JJilI37GytLF9~h5wXFE%|3-22={ry4rF*khhFEj2j;j zJ4p~xa+&K9eV}^z2PItRA@ra|+TS(&O$jc~q`lew?`Yxi{tIZI*VnhW)Uez!UBrjN zE0S=!7#%e6`8K`Bsk4&o@J!PfMRVM92gk4_WCBRx^xFDHgL|b2f22szlsBaGk4p$A z=cDfKxzB$236lI1#QEhX8s%6K?LDfqFS^ZPZOv$U3%^-Oxt-L^hHc#|Z z6mfAU*IA|u@{0ur9xX|D!}6NXKOEd8Faps&e{?>9-F}<@`+9c~H_~~YPW^{VMey`C zR)7rpWZ*sS^xMo&;i{hyCYVA!HtERi`jfNo%h&B3Q&N{0j^B=z#|&w~R!j9m#WZT$ z`8Gv3aQ?7Zxvx`quoN|8@dNFo>cF8=?Jk+$7`3oMjChq2VcL7#5AV2!`obz|r!In+ zliYbbFLuUcBC{K37lYuyR(aO4vNy%yk20JMg2dExKfUTZUMVJ5#t!G`oVk<7=l( zElcG>PhB???MJv=<{idV!}up#+rK=_pWe$~rX{0+g4$)W#i}5MqWzSj_)$#x{$V$p zBJ@{?(aC)8_P5ow!`)~9U~Y_&UDLc{N93F54#PAzas7EP--IRZFf zC4PzIPML#1=%z2!Civ+uf15w;!4^A#ZD-Ydzv5XXMA}xFz(b^A9sr3UMk+aFGTX}9 zsVqMdyFRvo=veeo`(;rx{MLFX;Cz1d)Pu$XXP!-d3t2<(l#^GBkA~;~b z0JQ$BBfl?wgy}eAYj2Es120TT;+`WVq>)(Q`gNtUe3)|U8&e2wNAC|I?N3Q-G7dqg z={wlDY3ZfwYq^3B+jyM?E;7-uq4@p!DbsRty(L<;A(ZNshg_D_%gQ`Dlv6}w0eCN( z-VPMSB&v@q;bR!c?NnJy%rB}LfBDnD7gIR1bIXfgL@PHlN;Ca^qY5)*$%Yv$rtr|_ z#x8GC_lRQ#5{U6mzV?k}5DHYT!d)m7=*RA+yiM9HKEa88yq*PA=LI!$gftea{Qp zeiOF0aha-|y_XmfvoY`|s2>ySbezMNB{j{Jv4PQB(9a5{uKWmGH2av9^-7fp2gO$B zf;BeXTM}TmI&V&uG}_7y7S7n(1TN}*%;-6e0|Rgx$XYw{b~p0`Mz?@Yrdnbt{HQIW zf7F~(gm;5Pdg+4`@k&@}?JF|h8KzPc`*7x$4@wpUe7Q47hhv;NIYN&zSE!%`Cu6nS zKc#Q0O!j*z%oxbtT;U|P_y&4rA0-2SePX-04A%T6^XO#-8R56Ok|w-c;Fsg}&<$jp7VT3e zc)KGV@%ztiFONo9Jatu7%U90|#ar|lSlC=fcOu|;t(k`gKt%I%B?=FUv|=KpzQV*cEpll>^l6cY*Ry`RWv*dr^r~?kb_V6jJHB-cVbBiS&(F0<-aebOs_PPc7v3>P zMzQ%}ZI1|OoJUfycDXSze;)Mpx9W}5CL~2EGae>4AnSduY_DG zbOQW$p@HFFNLumh5@}dnxc|NPV^Y7a(hlw!iIFtA%BTVGX}e&%Q1xeTBXX`i4(z(g PtwXicbW{;4R-yj`9+tZL diff --git a/mobile/android/fenix/app/src/main/res/layout/search_widget_cfr.xml b/mobile/android/fenix/app/src/main/res/layout/search_widget_cfr.xml deleted file mode 100644 index 9a4ffea212b6..000000000000 --- a/mobile/android/fenix/app/src/main/res/layout/search_widget_cfr.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - -