[tor-commits] [Git][tpo/applications/tor-browser][tor-browser-128.3.0esr-14.0-1] Bug_43099: 2024 YEC

ma1 (@ma1) git at gitlab.torproject.org
Mon Sep 30 22:04:47 UTC 2024



ma1 pushed to branch tor-browser-128.3.0esr-14.0-1 at The Tor Project / Applications / Tor Browser


Commits:
217346c0 by clairehurst at 2024-09-30T22:03:33+00:00
Bug_43099: 2024 YEC

- - - - -


12 changed files:

- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeScreenViewModel.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
- + mobile/android/fenix/app/src/main/res/drawable/heart.xml
- + mobile/android/fenix/app/src/main/res/drawable/illo_green_browse.xml
- + mobile/android/fenix/app/src/main/res/drawable/illo_purple_speak.xml
- + mobile/android/fenix/app/src/main/res/drawable/illo_red_search.xml
- + mobile/android/fenix/app/src/main/res/font/spacegrotesk_bold.ttf
- mobile/android/fenix/app/src/main/res/layout/fragment_home.xml
- mobile/android/fenix/app/src/main/res/values/colors.xml
- mobile/android/fenix/app/src/main/res/values/preference_keys.xml
- mobile/android/fenix/app/src/main/res/values/torbrowser_strings.xml


Changes:

=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
=====================================
@@ -16,23 +16,58 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.activity.result.ActivityResultLauncher
+import androidx.annotation.ColorRes
+import androidx.annotation.DrawableRes
+import androidx.annotation.StringRes
 import androidx.annotation.VisibleForTesting
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.BoxWithConstraints
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.heightIn
 import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.Button
 import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
 import androidx.compose.material.Text
 import androidx.compose.material.TextButton
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
 import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.drawBehind
+import androidx.compose.ui.draw.scale
+import androidx.compose.ui.geometry.CornerRadius
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.ViewCompositionStrategy
+import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.semantics.testTag
 import androidx.compose.ui.semantics.testTagsAsResourceId
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import androidx.compose.ui.viewinterop.AndroidView
 import androidx.coordinatorlayout.widget.CoordinatorLayout
 import androidx.core.content.ContextCompat
@@ -87,6 +122,7 @@ import mozilla.components.lib.state.ext.consumeFrom
 import mozilla.components.service.glean.private.NoExtras
 import mozilla.components.support.base.feature.UserInteractionHandler
 import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
+import mozilla.components.support.locale.LocaleManager
 import mozilla.components.support.utils.ext.isLandscape
 import mozilla.components.ui.colors.PhotonColors
 import org.mozilla.fenix.BrowserDirection
@@ -155,6 +191,8 @@ import org.mozilla.fenix.nimbus.FxNimbus
 import org.mozilla.fenix.perf.MarkersFragmentLifecycleCallbacks
 import org.mozilla.fenix.search.toolbar.DefaultSearchSelectorController
 import org.mozilla.fenix.search.toolbar.SearchSelectorMenu
+import org.mozilla.fenix.settings.SupportUtils
+import org.mozilla.fenix.settings.advanced.getSelectedLocale
 import org.mozilla.fenix.tabstray.Page
 import org.mozilla.fenix.tabstray.TabsTrayAccessPoint
 import org.mozilla.fenix.theme.FirefoxTheme
@@ -513,6 +551,8 @@ class HomeFragment : Fragment(), UserInteractionHandler {
 
         activity.themeManager.applyStatusBarTheme(activity)
 
+        setDonationScreen()
+
         // FxNimbus.features.homescreen.recordExposure()
 
         // DO NOT MOVE ANYTHING BELOW THIS addMarker CALL!
@@ -524,6 +564,19 @@ class HomeFragment : Fragment(), UserInteractionHandler {
         return binding.root
     }
 
+    private fun setDonationScreen() {
+        if (homeViewModel.shouldShowDonationScreen()) {
+            binding.exploreprivately.visibility = View.GONE
+            binding.onionPatternImage.visibility = View.GONE
+            binding.composeYec2024.apply {
+                setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
+                setContent {
+                    DonationScreen()
+                }
+            }
+        }
+    }
+
     private fun reinitializeNavBar() {
         initializeNavBar(activity = requireActivity() as HomeActivity)
     }
@@ -1402,4 +1455,311 @@ class HomeFragment : Fragment(), UserInteractionHandler {
         requireActivity().finish()
         return true
     }
+
+    @Composable
+    fun DonationScreen() {
+        BoxWithConstraints(
+            contentAlignment = Alignment.Center,
+            modifier = Modifier
+                .fillMaxWidth()
+                .wrapContentHeight()
+        ) {
+            val alternateLayout = this.maxWidth >= 500.dp
+
+            YecLayout(
+                alternateLayout,
+                maxWidth = this.maxWidth,
+                getYecStyle(),
+                modifier = Modifier
+                    .padding(top = 55.dp, bottom = 56.dp),
+            )
+        }
+    }
+
+    @Composable
+    private fun YecLayout(
+        alternateLayout: Boolean,
+        maxWidth: Dp,
+        yecStyle: YecStyle,
+        modifier: Modifier
+    ) {
+        Column(
+            modifier = modifier
+                .padding(horizontal = 22.dp)
+                .verticalScroll(rememberScrollState())
+                .fillMaxWidth(getVariableWidth(maxWidth)),
+            horizontalAlignment = Alignment.CenterHorizontally,
+        ) {
+            PurpleYecBox(alternateLayout, yecStyle, horizontalPadding = 16.dp)
+            AlwaysFreeText()
+        }
+    }
+
+    private fun getVariableWidth(width: Dp): Float = (500.dp / width).coerceIn(0.75f, 1.0f)
+
+    @Composable
+    private fun PurpleYecBox(
+        alternateLayout: Boolean,
+        yecStyle: YecStyle,
+        horizontalPadding: Dp,
+    ) {
+        Box(
+            modifier = Modifier.background(PhotonColors.Ink90, shape = RoundedCornerShape(8.dp)),
+        ) {
+            ExitIcon()
+            DynamicYecContent(alternateLayout, yecStyle, horizontalPadding)
+        }
+    }
+
+    @Composable
+    private fun AlwaysFreeText() {
+        Text(
+            text = getString(
+                R.string.YEC_2024_tor_browser_for_android_will_always_be_free_no_donation_required,
+                getString(R.string.app_name),
+            ),
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            color = Color(0xFFFBFBFE),
+            fontSize = 12.5.sp,
+            textAlign = TextAlign.Center,
+            lineHeight = 18.75.sp,
+        )
+    }
+
+    @Composable
+    private fun ExitIcon() {
+        Row(
+            modifier = Modifier.fillMaxWidth(),
+            horizontalArrangement = Arrangement.End,
+        ) {
+            IconButton(
+                onClick = {
+                    binding.exploreprivately.visibility = View.VISIBLE
+                    binding.onionPatternImage.visibility = View.VISIBLE
+                    binding.composeYec2024.visibility = View.GONE
+                    homeViewModel.yecDismissed = true
+                },
+            ) {
+                Icon(
+                    painter = painterResource(id = R.drawable.ic_close),
+                    tint = Color(
+                        getColor(
+                            requireContext(),
+                            R.color.photonWhite,
+                        ),
+                    ),
+                    contentDescription = getString(R.string.YEC_2024_close),
+                    modifier = Modifier
+                        .size(48.dp)
+                        .padding(8.dp)
+                        .scale(0.65f),
+                )
+            }
+        }
+    }
+
+    @Composable
+    private fun DynamicYecContent(
+        alternateLayout: Boolean,
+        yecStyle: YecStyle,
+        horizontalPadding: Dp,
+    ) {
+        Row(verticalAlignment = Alignment.CenterVertically) {
+            Column(
+                modifier = Modifier.fillMaxWidth(fraction = if (alternateLayout) .70f else 1f),
+                horizontalAlignment = if (alternateLayout) Alignment.Start else Alignment.CenterHorizontally,
+            ) {
+                if (!alternateLayout) {
+                    IlloYecImage(yecStyle, false, horizontalPadding)
+                }
+
+                YecRightsText(yecStyle, alternateLayout, horizontalPadding)
+
+                DonationEncouragementText(alternateLayout, horizontalPadding)
+
+                DonationMatchText(alternateLayout, horizontalPadding)
+
+                DonateNowButton(alternateLayout, horizontalPadding)
+            }
+            if (alternateLayout) {
+                IlloYecImage(yecStyle, true, horizontalPadding)
+            }
+        }
+    }
+
+    @Composable
+    private fun IlloYecImage(yecStyle: YecStyle, alternateLayout: Boolean, horizontalPadding: Dp) {
+        Image(
+            painter = painterResource(id = yecStyle.illo),
+            contentDescription = null,
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(
+                    top = if (alternateLayout) 0.dp else 41.dp,
+                    bottom = if (alternateLayout) 0.dp else 25.dp,
+                    end = if (alternateLayout) horizontalPadding else 0.dp,
+                ),
+        )
+    }
+
+    @Composable
+    private fun YecRightsText(
+        yecStyle: YecStyle,
+        alternateLayout: Boolean,
+        horizontalPadding: Dp,
+    ) {
+        var textLayoutResult by remember { mutableStateOf<TextLayoutResult?>(null) }
+
+        Text(
+            text = getString(yecStyle.text),
+            color = PhotonColors.Ink90,
+            textAlign = if (alternateLayout) TextAlign.Left else TextAlign.Center,
+            fontFamily = FontFamily(Font(R.font.spacegrotesk_bold, FontWeight.Bold)),
+            fontSize = 18.sp,
+            lineHeight = 30.sp,
+            onTextLayout = { textLayoutResult = it },
+            modifier = Modifier
+                .padding(
+                    top = if (alternateLayout) 24.dp else 0.dp,
+                    start = horizontalPadding,
+                    end = if (alternateLayout) 0.dp else horizontalPadding,
+                    bottom = if (alternateLayout) 8.dp else 16.dp,
+                )
+                .drawBehind {
+                    textLayoutResult?.let { result ->
+                        for (i in 0 until result.lineCount) {
+                            val endOfLineSpacing = 4.dp
+
+                            val lineTop = result.getLineTop(i)
+                            val lineBottom = result.getLineBottom(i)
+                            val lineLeft = result.getLineLeft(i) - endOfLineSpacing.toPx()
+                            val lineRight = result.getLineRight(i) + endOfLineSpacing.toPx()
+
+                            drawRoundRect(
+                                color = Color(getColor(requireContext(), yecStyle.color)),
+                                topLeft = Offset(
+                                    lineLeft,
+                                    lineTop + 2.dp.toPx(),
+                                ),
+                                size = Size(
+                                    lineRight - lineLeft,
+                                    lineBottom - lineTop - 4.dp.toPx(),
+                                ),
+                                cornerRadius = CornerRadius(2.dp.toPx(), 2.dp.toPx()),
+                            )
+                        }
+                    }
+                },
+        )
+    }
+
+    @Composable
+    private fun DonationEncouragementText(alternateLayout: Boolean, horizontalPadding: Dp) {
+        Text(
+            text = getString(R.string.YEC_2024_donation_encouragement),
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(
+                    start = horizontalPadding,
+                    end = if (alternateLayout) 0.dp else horizontalPadding,
+                    bottom = if (alternateLayout) 8.dp else 16.dp,
+                ),
+            color = Color(0xFFFBFBFE),
+            textAlign = TextAlign.Left,
+        )
+    }
+
+    @Composable
+    private fun DonationMatchText(alternateLayout: Boolean, horizontalPadding: Dp) {
+        Text(
+            text = getString(R.string.YEC_2024_donation_match_text),
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(
+                    start = horizontalPadding,
+                    end = if (alternateLayout) horizontalPadding else 0.dp,
+                    bottom = 16.dp,
+                ),
+            color = Color(0xFFFBFBFE),
+            fontWeight = FontWeight.Bold,
+            textAlign = TextAlign.Left,
+        )
+    }
+
+    @Composable
+    private fun DonateNowButton(alternateLayout: Boolean, horizontalPadding: Dp) {
+        var locale = LocaleManager.getSelectedLocale(requireContext()).language
+        if (locale.isNotEmpty()) {
+            locale += '-'
+        }
+        Button(
+            onClick = {
+                (activity as HomeActivity).openToBrowserAndLoad(
+                    searchTermOrURL = "https://www.torproject.org/donate/donate-${locale}mobile-yec2024",
+                    newTab = true,
+                    from = BrowserDirection.FromHome,
+                )
+            },
+            modifier = Modifier
+                .padding(bottom = if (alternateLayout) 24.dp else 40.dp)
+                .padding(horizontal = horizontalPadding),
+            colors = ButtonDefaults.buttonColors(
+                backgroundColor = Color(
+                    0xFFFFBD4F,
+                ),
+            ),
+            shape = RoundedCornerShape(4.dp),
+        ) {
+            Text(
+                text = getString(R.string.YEC_2024_donate_now),
+                color = PhotonColors.DarkGrey80,
+                modifier = Modifier.padding(
+                    horizontal = if (alternateLayout) 6.dp else 8.dp,
+                    vertical = if (alternateLayout) 3.dp else 6.dp,
+                ),
+                fontSize = 16.sp,
+                fontWeight = FontWeight.Bold,
+                letterSpacing = 0.sp,
+            )
+            Icon(
+                painter = painterResource(R.drawable.heart),
+                contentDescription = null,
+                modifier = Modifier.size(20.dp),
+            )
+        }
+    }
+
+    private fun getYecStyle(): YecStyle {
+        if (homeViewModel.firstYecLoad) {
+            homeViewModel.firstYecLoad = false
+            homeViewModel.yecStyleIndex = requireContext().settings().yecStyleIndex
+            requireContext().settings().yecStyleIndex =
+                (requireContext().settings().yecStyleIndex + 1) % 3
+        }
+        return YecStyle.entries[homeViewModel.yecStyleIndex]
+    }
+
+    enum class YecStyle(
+        @DrawableRes val illo: Int,
+        @StringRes val text: Int,
+        @ColorRes val color: Int,
+    ) {
+        PurpleSpeak(
+            illo = R.drawable.illo_purple_speak,
+            text = R.string.YEC_2024_right_to_speak,
+            color = R.color.YEC_2024_speak_purple,
+        ),
+        GreenBrowse(
+            illo = R.drawable.illo_green_browse,
+            text = R.string.YEC_2024_right_to_BROWSE,
+            color = R.color.YEC_2024_browse_green,
+        ),
+        RedSearch(
+            illo = R.drawable.illo_red_search,
+            text = R.string.YEC_2024_right_to_SEARCH,
+            color = R.color.YEC_2024_search_red,
+        )
+    }
 }


=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeScreenViewModel.kt
=====================================
@@ -4,11 +4,35 @@
 
 package org.mozilla.fenix.home
 
+import android.annotation.SuppressLint
+import androidx.annotation.IntRange
 import androidx.lifecycle.ViewModel
+import org.mozilla.fenix.BuildConfig
+import java.text.SimpleDateFormat
+import java.util.Date
 
 class HomeScreenViewModel : ViewModel() {
     /**
      * Used to delete a specific session once the home screen is resumed
      */
     var sessionToDelete: String? = null
+
+    @IntRange(0, 2)
+    var yecStyleIndex: Int = 0
+    var firstYecLoad: Boolean = true
+    var yecDismissed: Boolean = false
+
+    fun shouldShowDonationScreen(): Boolean {
+        @SuppressLint("SimpleDateFormat")
+        val dateFormat = SimpleDateFormat("yyyy-MM-dd")
+        val startDate = dateFormat.parse("2024-10-14") // Change to a date in the past to test
+        val endDate = dateFormat.parse("2025-1-2")
+        val currentDate = Date()
+
+        @Suppress("KotlinConstantConditions")
+        return !yecDismissed
+                && BuildConfig.BUILD_TYPE == "release" // Comment this line out to test
+                && currentDate.after(startDate)
+                && currentDate.before(endDate)
+    }
 }


=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
=====================================
@@ -339,6 +339,11 @@ class Settings(private val appContext: Context) : PreferencesHolder {
         default = false
     )
 
+    var yecStyleIndex by intPreference(
+        appContext.getPreferenceKey(R.string.pref_key_yec_style_index),
+        default = 0
+    )
+
     var defaultSearchEngineName by stringPreference(
         appContext.getPreferenceKey(R.string.pref_key_search_engine),
         default = "",


=====================================
mobile/android/fenix/app/src/main/res/drawable/heart.xml
=====================================
@@ -0,0 +1,7 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="16dp" android:viewportHeight="17" android:viewportWidth="17" android:width="16dp">
+      
+    <path android:fillColor="#1C1B22" android:pathData="M8.5,6.5C8.5,6.5 8.5,2.5 12,2.5C15.5,2.5 15.5,5.5 15.5,6.5C15.5,11 8.5,15.5 8.5,15.5V6.5Z"/>
+      
+    <path android:fillColor="#1C1B22" android:pathData="M8.5,6.5C8.5,6.5 8.5,2.5 5,2.5C1.5,2.5 1.5,5.5 1.5,6.5C1.5,11 8.5,15.5 8.5,15.5L9.5,9.5L8.5,6.5Z"/>
+    
+</vector>


=====================================
mobile/android/fenix/app/src/main/res/drawable/illo_green_browse.xml
=====================================
@@ -0,0 +1,59 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="144dp" android:viewportHeight="144" android:viewportWidth="198" android:width="198dp">
+      
+    <group>
+            
+        <clip-path android:pathData="M8.49,0L189.97,0A8,8 0,0 1,197.97 8L197.97,136A8,8 0,0 1,189.97 144L8.49,144A8,8 0,0 1,0.49 136L0.49,8A8,8 0,0 1,8.49 0z"/>
+            
+        <path android:fillColor="#1D1133" android:pathData="M8.49,0L189.97,0A8,8 0,0 1,197.97 8L197.97,136A8,8 0,0 1,189.97 144L8.49,144A8,8 0,0 1,0.49 136L0.49,8A8,8 0,0 1,8.49 0z"/>
+            
+        <path android:fillAlpha="0.7" android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M41.55,66.09C42.32,66.09 42.94,66.71 42.94,67.47V74.16H90.02C90.79,74.16 91.41,74.78 91.41,75.55V82.24H91.41V90.32H99.27V82.46H99.26V75.55C99.26,74.78 99.88,74.16 100.65,74.16H138.49C138.98,74.16 139.41,74.42 139.66,74.8V74.16H178.88C179.65,74.16 180.27,74.78 180.27,75.55V81.08C180.27,81.57 180.02,82 179.63,82.24H180.27V90.54H179.63C180.02,90.79 180.27,91.22 180.27,91.7V106.49H195.05C195.81,106.49 196.43,107.1 196.43,107.87V113.4C196.43,114.16 195.81,114.78 195.05,114.78H180.27V121.46C180.27,122.22 179.65,122.84 178.89,122.84H164.11V129.54C164.11,130.3 163.49,130.92 162.73,130.92H157.2C156.43,130.92 155.81,130.3 155.81,129.54V122.84H139.88V129.54C139.88,130.3 139.26,130.92 138.49,130.92H132.96C132.2,130.92 131.58,130.3 131.58,129.54V122.84L19.87,122.84C19.1,122.84 18.48,122.22 18.48,121.46V114.54H34.64V106.7H11.79C11.02,106.7 10.4,106.08 10.4,105.31V98.62H3.71C2.94,98.62 2.32,98 2.32,97.24V91.7C2.32,90.94 2.94,90.32 3.71,90.32H10.4V83.63C10.4,82.86 11.02,82.24 11.79,82.24H18.48V75.55C18.48,74.78 19.1,74.16 19.86,74.16H34.64V67.47C34.64,66.71 35.26,66.09 36.02,66.09H41.55ZM36.02,66.31H41.55C42.19,66.31 42.72,66.83 42.72,67.47V74.16H34.86V67.47C34.86,66.83 35.38,66.31 36.02,66.31ZM171.97,122.62V114.78H164.11L164.11,122.62H171.97ZM171.98,114.54V106.71H164.12V114.54H171.98ZM180.05,114.54H172.2V106.71H180.05V114.54ZM172.19,122.62H178.89C179.53,122.62 180.05,122.1 180.05,121.46V114.78H172.19L172.19,122.62ZM163.9,106.71V114.54H156.04V106.71H163.9ZM163.89,114.78V122.62H156.04V114.78H163.89ZM155.82,114.78V122.62H147.96L147.96,114.78H155.82ZM155.82,114.54V106.71H147.96V114.54H155.82ZM139.66,122.62V114.78H131.8L131.8,122.62H139.66ZM139.66,114.54L139.66,114.54V106.71H131.8V114.54L139.66,114.54ZM147.74,114.54H139.88V106.71H147.74V114.54ZM139.88,122.62H147.74V114.78H139.88L139.88,122.62ZM131.58,106.71V114.54H123.72V106.71H131.58ZM131.58,114.78V122.62H123.72L123.72,114.78H131.58ZM123.5,122.62V114.78H115.64L115.64,122.62H123.5ZM123.5,114.54L123.5,114.54V106.71H115.65V114.54L123.5,114.54ZM115.42,114.78V122.62H107.57V114.78L115.42,114.78ZM107.35,114.54L107.35,114.54V106.71H99.49V114.54L107.35,114.54ZM115.43,114.54H107.57V106.71H115.43V114.54ZM107.35,122.62H99.49L99.49,114.78L107.35,114.78V122.62ZM91.41,114.78H99.27V122.62H91.41L91.41,114.78ZM91.19,122.62V114.78H83.33L83.33,122.62H91.19ZM91.19,114.54V106.71H83.33V114.54H91.19ZM99.27,114.54H91.41V106.71H99.27V114.54ZM83.11,106.71V114.54H75.25V106.71H83.11ZM83.11,114.78V122.62H75.25V114.78H83.11ZM75.03,114.54L75.03,114.54V106.71H67.18V114.54L75.03,114.54ZM67.17,114.78V122.62H75.03V114.78H67.17ZM66.96,106.71V114.54H59.1V106.71H66.96ZM66.95,114.78V122.62H59.09V114.78H66.95ZM58.88,114.54V106.71H51.02V114.54H58.88ZM51.02,114.78V122.62H58.87V114.78H51.02ZM50.8,106.71V114.54H42.94V106.71H50.8ZM50.8,114.78V122.62H42.94V114.78L50.8,114.78ZM42.72,114.54V106.71H34.86V114.54H42.72ZM42.72,122.62H34.86L34.86,114.78H42.72V122.62ZM34.64,114.76V122.62H26.78V114.76H34.64ZM188.13,106.71H180.27V114.56H188.13V106.71ZM188.35,114.56H195.05C195.69,114.56 196.21,114.04 196.21,113.4V107.87C196.21,107.23 195.69,106.71 195.05,106.71H188.35V114.56ZM18.7,106.48L18.7,98.62H26.56L26.56,106.48H18.7ZM18.48,98.62H10.62V105.31C10.62,105.96 11.14,106.48 11.79,106.48H18.48L18.48,98.62ZM34.64,106.48H26.78L26.78,98.62H34.64V106.48ZM34.86,106.48H42.72L42.72,98.62L34.86,98.62V106.48ZM50.79,106.48H42.94V98.62H50.79V106.48ZM66.95,106.48H59.09V98.62L66.95,98.62L66.95,106.48ZM58.87,106.48H51.01V98.62L58.87,98.62L58.87,106.48ZM67.17,106.48H75.03L75.03,98.62L67.17,98.62V106.48ZM83.11,106.48H75.25V98.62L83.11,98.62L83.11,106.48ZM83.33,106.48H91.19L91.19,98.62L83.33,98.62V106.48ZM99.26,106.48H91.41V98.62H99.26V106.48ZM115.42,106.48H107.56V98.62L115.42,98.62L115.42,106.48ZM107.34,106.48H99.48V98.62L107.34,98.62L107.34,106.48ZM115.64,106.48H123.5L123.5,98.62L115.64,98.62V106.48ZM131.58,106.48H123.72V98.62L131.58,98.62L131.58,106.48ZM131.8,106.48H139.66V98.62H131.8V106.48ZM147.96,106.48H155.81L155.81,98.62L147.96,98.62V106.48ZM147.73,98.62L139.88,98.62V106.48H147.73L147.73,98.62ZM163.89,106.48H156.03V98.62L163.89,98.62L163.89,106.48ZM164.11,106.48H171.97L171.97,98.62L164.11,98.62V106.48ZM180.05,106.48H172.19V98.62H180.05V106.48ZM18.48,98.4H10.62V90.54H18.48V98.4ZM10.4,98.4V90.54H3.71C3.06,90.54 2.54,91.06 2.54,91.7V97.24C2.54,97.88 3.06,98.4 3.71,98.4H10.4ZM10.62,90.32V83.63C10.62,82.98 11.14,82.46 11.79,82.46H18.48V90.32H10.62ZM18.7,98.4V90.54H26.56V98.4H18.7ZM34.64,98.4H26.78V90.54H34.64L34.64,98.4ZM26.56,82.46V90.32H18.7V82.46H26.56ZM26.78,90.32V82.46H34.64V90.32H26.78ZM34.86,90.54V98.4H42.72L42.72,90.54H34.86ZM50.79,98.4H42.94V90.54H50.79V98.4ZM42.72,82.46V90.32H34.86V82.46H42.72ZM42.94,90.32V82.46L50.79,82.46L50.79,90.32H42.94ZM66.95,98.4H59.09V90.54H66.95L66.95,98.4ZM58.87,82.46L58.87,90.32H51.01V82.46L58.87,82.46ZM51.01,90.54V98.4H58.87L58.87,90.54H51.01ZM59.09,90.32V82.46H66.95V90.32H59.09ZM67.17,98.4H75.03L75.03,90.54H67.17V98.4ZM83.11,98.4H75.25V90.54L75.25,90.54H83.11L83.11,98.4ZM75.03,82.46V90.32L75.03,90.32H67.17V82.46L75.03,82.46ZM75.25,90.32L83.11,90.32L83.11,90.32L83.11,82.46L75.25,82.46V90.32ZM83.33,98.4H91.19L91.19,90.54H83.33L83.33,90.54V98.4ZM99.26,98.4H91.41V90.54L91.41,90.54L99.26,90.54V98.4ZM91.19,82.46V90.32L91.19,90.32L83.33,90.32V82.46H91.19ZM50.79,74.38H42.94V82.24H50.79V74.38ZM51.01,82.24H58.87V74.38H51.01V82.24ZM172.19,74.38H178.88C179.53,74.38 180.05,74.91 180.05,75.55V81.08C180.05,81.72 179.53,82.24 178.88,82.24H172.19V74.38ZM115.42,98.4H107.56V90.54L107.56,90.54H115.42L115.42,98.4ZM107.34,82.46L107.34,90.32L107.34,90.32L99.49,90.32V82.46L107.34,82.46ZM107.34,90.54L99.48,90.54V98.4H107.34L107.34,90.54ZM107.56,90.32L115.42,90.32L115.42,90.32L115.42,82.46L107.56,82.46V90.32ZM115.64,98.4H123.5L123.5,90.54H115.64L115.64,90.54V98.4ZM131.58,98.4H123.72V90.54L123.72,90.54H131.58L131.58,98.4ZM123.5,82.46V90.32L123.5,90.32L115.64,90.32V82.46H123.5ZM123.72,90.32L131.58,90.32L131.58,90.32V82.46L123.72,82.46V90.32ZM131.8,98.4H139.66L139.66,90.54H131.8L131.8,90.54V98.4ZM139.66,82.46V90.32L139.66,90.32L131.8,90.32V82.46H139.66ZM139.88,90.32L147.73,90.32L147.74,90.32L147.74,82.46L139.88,82.46V90.32ZM147.96,98.4H155.81L155.81,90.54H147.96L147.96,90.54V98.4ZM139.88,98.4H147.73L147.73,90.54H139.88L139.88,90.54V98.4ZM163.89,98.4H156.03V90.54L156.03,90.54H163.89L163.89,98.4ZM155.81,82.46L155.81,90.32L155.81,90.32L147.96,90.32V82.46L155.81,82.46ZM156.03,90.32L163.89,90.32L163.89,90.32L163.89,82.46L156.03,82.46V90.32ZM164.11,90.54L164.11,90.54V98.4H171.97L171.97,90.54H164.11ZM180.05,98.4H172.19V90.54L172.19,90.54H178.89C179.53,90.55 180.05,91.07 180.05,91.7V98.4ZM171.97,82.46L171.97,90.32L171.97,90.32L164.11,90.32V82.46L171.97,82.46ZM178.9,90.32L178.88,90.32L172.19,90.32V82.46H180.05V90.32H178.9ZM163.89,82.24L156.03,82.24L156.03,82.24V74.38H163.89V82.24ZM115.42,74.38H107.56V82.24H115.42V74.38ZM107.34,74.38H100.65C100,74.38 99.48,74.91 99.48,75.55V82.24H107.34V74.38ZM123.5,82.24H115.64V74.38H123.5V82.24ZM139.66,82.24H131.8V74.38H138.49C139.13,74.38 139.65,74.9 139.66,75.54L139.66,75.55V82.24ZM123.72,74.38H131.58V82.24H123.72V74.38ZM147.73,74.38H139.88V75.54L139.88,75.55L139.88,82.24H147.73V74.38ZM155.81,82.24H147.96V74.38H155.81V82.24ZM171.97,82.24H164.11V74.38H171.97V82.24ZM83.33,74.38H90.02C90.66,74.38 91.19,74.91 91.19,75.55V82.24H83.33V74.38ZM66.95,82.24H59.09V74.38H66.95V82.24ZM83.11,82.24H75.25V74.38H83.11V82.24ZM67.17,74.38H75.03V82.24H67.17V74.38ZM34.86,74.38H42.72V82.24H34.86V74.38ZM34.64,74.38H26.78V82.24H34.64V74.38ZM19.86,74.38H26.56V82.24H18.7V75.55C18.7,74.91 19.22,74.38 19.86,74.38ZM26.56,122.62H19.87C19.22,122.62 18.7,122.1 18.7,121.46L18.7,114.76H26.56V122.62ZM131.8,122.84V129.54C131.8,130.18 132.32,130.7 132.96,130.7H138.49C139.13,130.7 139.66,130.18 139.66,129.54V122.84H131.8ZM156.03,129.54V122.84H163.89V129.54C163.89,130.18 163.37,130.7 162.73,130.7H157.2C156.55,130.7 156.03,130.18 156.03,129.54Z" android:strokeAlpha="0.7"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M28.14,100.94a6.85,23.41 89.68,1 0,46.82 -0.26a6.85,23.41 89.68,1 0,-46.82 0.26z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M121.77,100.94a6.85,23.41 89.68,1 0,46.82 -0.26a6.85,23.41 89.68,1 0,-46.82 0.26z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M144.92,14.5C144.92,15.23 144.33,15.82 143.6,15.82C142.87,15.82 142.27,15.23 142.27,14.5C142.27,13.76 142.87,13.17 143.6,13.17C144.33,13.17 144.92,13.76 144.92,14.5ZM144.4,14.5C144.4,14.94 144.04,15.3 143.6,15.3C143.15,15.3 142.79,14.94 142.79,14.5C142.79,14.05 143.15,13.69 143.6,13.69C144.04,13.69 144.4,14.05 144.4,14.5Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M143.6,16.82C144.88,16.82 145.92,15.78 145.92,14.5C145.92,13.21 144.88,12.17 143.6,12.17C142.32,12.17 141.28,13.21 141.28,14.5C141.28,15.78 142.32,16.82 143.6,16.82ZM143.6,16.3C144.59,16.3 145.4,15.49 145.4,14.5C145.4,13.5 144.59,12.69 143.6,12.69C142.6,12.69 141.8,13.5 141.8,14.5C141.8,15.49 142.6,16.3 143.6,16.3Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M143.6,17.81C145.43,17.81 146.91,16.33 146.91,14.5C146.91,12.66 145.43,11.18 143.6,11.18C141.77,11.18 140.29,12.66 140.29,14.5C140.29,16.33 141.77,17.81 143.6,17.81ZM143.6,17.29C145.14,17.29 146.39,16.04 146.39,14.5C146.39,12.95 145.14,11.7 143.6,11.7C142.05,11.7 140.8,12.95 140.8,14.5C140.8,16.04 142.05,17.29 143.6,17.29Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M126.45,45.24C127.77,45.93 129.4,45.66 130.28,44.46C130.93,43.58 131.52,42.71 131.98,42C132.62,41 132.59,39.73 131.9,38.77C128.1,33.47 114.83,16.71 98.94,16.71C83.24,16.71 69.93,33.06 65.88,38.57C65.1,39.63 65.15,41.06 65.96,42.11C66.38,42.66 66.89,43.29 67.43,43.95C68.37,45.1 69.99,45.38 71.31,44.71C79.89,40.36 88.77,37.93 98.77,37.93C108.84,37.93 117.82,40.78 126.45,45.24Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M130.04,44.28C130.69,43.41 131.27,42.54 131.73,41.84C132.3,40.94 132.27,39.81 131.65,38.94C129.76,36.3 125.51,30.81 119.76,25.98C114,21.14 106.78,17 98.94,17C91.19,17 84.01,21.04 78.23,25.8C72.46,30.56 68.14,36 66.13,38.74C65.42,39.7 65.46,40.98 66.19,41.92C66.62,42.47 67.12,43.11 67.66,43.76C68.5,44.8 69.97,45.05 71.17,44.44C79.79,40.07 88.72,37.63 98.77,37.63C108.9,37.63 117.93,40.49 126.59,44.98C127.8,45.6 129.26,45.35 130.04,44.28ZM130.28,44.46C129.4,45.66 127.77,45.93 126.45,45.24C117.82,40.78 108.84,37.93 98.77,37.93C88.77,37.93 79.89,40.36 71.31,44.71C69.99,45.38 68.37,45.1 67.43,43.95C66.89,43.29 66.38,42.66 65.96,42.11C65.15,41.06 65.1,39.63 65.88,38.57C69.93,33.06 83.24,16.71 98.94,16.71C114.83,16.71 128.1,33.47 131.9,38.77C132.59,39.73 132.62,41 131.98,42C131.52,42.71 130.93,43.58 130.28,44.46Z"/>
+            
+        <path android:fillColor="#212529" android:pathData="M107.52,34.94C109.36,34.94 110.94,33.86 111.68,32.3C112.69,34.16 113.31,36.26 113.43,38.49C108.65,37.37 103.71,36.79 98.68,36.79C93.74,36.79 88.88,37.35 84.18,38.43C84.63,30.74 91.01,24.63 98.81,24.63C101.18,24.63 103.42,25.2 105.4,26.21C103.92,26.97 102.9,28.52 102.9,30.31C102.9,32.87 104.96,34.94 107.52,34.94Z"/>
+            
+        <path android:fillColor="#C1ED75" android:pathData="M132.12,102.6C129.93,102.6 128.16,100.82 128.16,98.63C128.16,82.31 114.9,69.04 98.6,69.04C82.3,69.04 69.04,82.31 69.04,98.63C69.04,100.82 67.27,102.6 65.08,102.6C62.9,102.6 61.12,100.82 61.12,98.63C61.12,77.94 77.93,61.11 98.6,61.11C119.27,61.11 136.08,77.94 136.08,98.63C136.08,100.82 134.31,102.6 132.12,102.6Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M128.46,98.63C128.46,100.65 130.1,102.3 132.12,102.3C134.14,102.3 135.78,100.65 135.78,98.63C135.78,78.11 119.1,61.41 98.6,61.41C78.1,61.41 61.42,78.11 61.42,98.63C61.42,100.65 63.06,102.3 65.08,102.3C67.1,102.3 68.74,100.65 68.74,98.63C68.74,82.15 82.13,68.74 98.6,68.74C115.07,68.74 128.46,82.15 128.46,98.63ZM128.16,98.63C128.16,100.82 129.93,102.6 132.12,102.6C134.31,102.6 136.08,100.82 136.08,98.63C136.08,77.94 119.27,61.11 98.6,61.11C77.93,61.11 61.12,77.94 61.12,98.63C61.12,100.82 62.9,102.6 65.08,102.6C67.27,102.6 69.04,100.82 69.04,98.63C69.04,82.31 82.3,69.04 98.6,69.04C114.9,69.04 128.16,82.31 128.16,98.63Z"/>
+            
+        <path android:fillColor="#C1ED75" android:pathData="M158.51,102.6C156.33,102.6 154.55,100.82 154.55,98.63C154.55,67.74 129.46,42.61 98.6,42.61C67.75,42.61 42.65,67.74 42.65,98.63C42.65,100.82 40.87,102.6 38.69,102.6C36.5,102.6 34.73,100.82 34.73,98.63C34.73,81.55 41.37,65.49 53.44,53.42C65.5,41.34 81.54,34.69 98.6,34.69C115.66,34.69 131.7,41.34 143.76,53.42C155.83,65.49 162.47,81.55 162.47,98.63C162.47,100.82 160.7,102.6 158.51,102.6Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M154.85,98.63C154.85,100.65 156.49,102.3 158.51,102.3C160.53,102.3 162.18,100.65 162.18,98.63C162.18,81.63 155.56,65.65 143.55,53.63C131.55,41.61 115.58,34.99 98.6,34.99C81.62,34.99 65.66,41.61 53.65,53.63C41.64,65.65 35.03,81.63 35.03,98.63C35.03,100.65 36.67,102.3 38.69,102.3C40.71,102.3 42.35,100.65 42.35,98.63C42.35,67.58 67.58,42.32 98.6,42.32C129.62,42.32 154.85,67.58 154.85,98.63ZM154.55,98.63C154.55,100.82 156.33,102.6 158.51,102.6C160.7,102.6 162.47,100.82 162.47,98.63C162.47,81.55 155.83,65.49 143.76,53.42C131.7,41.34 115.66,34.69 98.6,34.69C81.54,34.69 65.5,41.34 53.44,53.42C41.37,65.49 34.73,81.55 34.73,98.63C34.73,100.82 36.5,102.6 38.69,102.6C40.87,102.6 42.65,100.82 42.65,98.63C42.65,67.74 67.75,42.61 98.6,42.61C129.46,42.61 154.55,67.74 154.55,98.63Z"/>
+            
+        <path android:fillColor="#C1ED75" android:pathData="M145.32,102.6C143.13,102.6 141.36,100.82 141.36,98.63C141.36,75.03 122.18,55.83 98.6,55.83C75.02,55.83 55.84,75.03 55.84,98.63C55.84,100.82 54.07,102.6 51.88,102.6C49.7,102.6 47.92,100.82 47.92,98.63C47.92,70.66 70.66,47.9 98.6,47.9C126.54,47.9 149.28,70.66 149.28,98.63C149.28,100.82 147.5,102.6 145.32,102.6Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M141.66,98.63C141.66,100.65 143.3,102.3 145.32,102.3C147.34,102.3 148.98,100.65 148.98,98.63C148.98,70.82 126.38,48.2 98.6,48.2C70.82,48.2 48.22,70.82 48.22,98.63C48.22,100.65 49.86,102.3 51.88,102.3C53.9,102.3 55.54,100.65 55.54,98.63C55.54,74.86 74.86,55.53 98.6,55.53C122.34,55.53 141.66,74.86 141.66,98.63ZM141.36,98.63C141.36,100.82 143.13,102.6 145.32,102.6C147.5,102.6 149.28,100.82 149.28,98.63C149.28,70.66 126.54,47.9 98.6,47.9C70.66,47.9 47.92,70.66 47.92,98.63C47.92,100.82 49.7,102.6 51.88,102.6C54.07,102.6 55.84,100.82 55.84,98.63C55.84,75.03 75.02,55.83 98.6,55.83C122.18,55.83 141.36,75.03 141.36,98.63Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M166.69,66.45V55.84H166.99V66.45H166.69Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M171.2,61.3L162.37,61.27L162.37,60.97L171.2,61L171.2,61.3Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M37.89,31.19V7.2H38.19V31.19H37.89Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M47.98,19.45L28.1,19.4L28.1,19.1L47.98,19.15L47.98,19.45Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M42.05,23.48L33.74,15.15L33.95,14.94L42.26,23.26L42.05,23.48Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M33.95,23.48L42.26,15.15L42.05,14.94L33.74,23.26L33.95,23.48Z"/>
+            
+        <path android:fillColor="#C1ED75" android:pathData="M168.11,43.01C168.11,43.75 167.52,44.34 166.79,44.34C166.05,44.34 165.46,43.75 165.46,43.01C165.46,42.28 166.05,41.69 166.79,41.69C167.52,41.69 168.11,42.28 168.11,43.01Z"/>
+            
+        <path android:fillColor="#C1ED75" android:fillType="evenOdd" android:pathData="M157.07,51.42C158.41,51.42 159.5,50.33 159.5,48.98C159.5,47.64 158.41,46.55 157.07,46.55C155.73,46.55 154.64,47.64 154.64,48.98C154.64,50.33 155.73,51.42 157.07,51.42ZM157.07,51.12C158.24,51.12 159.2,50.16 159.2,48.98C159.2,47.81 158.24,46.85 157.07,46.85C155.89,46.85 154.94,47.81 154.94,48.98C154.94,50.16 155.89,51.12 157.07,51.12Z"/>
+            
+        <path android:fillColor="#C1ED75" android:pathData="M33.84,62.47C33.84,63.2 33.25,63.8 32.52,63.8C31.79,63.8 31.19,63.2 31.19,62.47C31.19,61.74 31.79,61.14 32.52,61.14C33.25,61.14 33.84,61.74 33.84,62.47Z"/>
+          
+    </group>
+    
+</vector>


=====================================
mobile/android/fenix/app/src/main/res/drawable/illo_purple_speak.xml
=====================================
@@ -0,0 +1,97 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="127.75595dp" android:viewportHeight="127" android:viewportWidth="168" android:width="169dp">
+      
+    <group>
+            
+        <clip-path android:pathData="M0.17,0.74h167.66v126h-167.66z"/>
+            
+        <path android:fillColor="#D898FA" android:pathData="M66.66,57.55C68.64,60.1 70.08,62.41 70.99,64.47C72.26,67.35 71.75,70.57 71.59,73.71C71.31,78.94 72.47,86.11 81.99,86.11C97.83,86.11 108.25,38.11 90.46,25.38C78.73,16.99 70.37,21.54 64.51,30.96C58.22,41.07 62.15,51.71 66.66,57.55Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M70.96,32.96C73.91,29.73 78.49,27.95 84.17,29.71C90.36,31.63 93.43,37.78 94.41,44.69C95.39,51.6 94.26,59.22 92.13,64.02C92.1,64.09 92.13,64.17 92.2,64.2C92.27,64.23 92.35,64.2 92.39,64.13C94.55,59.28 95.67,51.6 94.69,44.65C93.71,37.7 90.61,31.41 84.25,29.44C78.47,27.64 73.77,29.46 70.75,32.76C67.74,36.06 66.4,40.84 67.3,44.97C67.73,46.95 68.41,48.23 69.24,49.06C70.07,49.9 71.04,50.29 72.02,50.51C72.51,50.62 73.01,50.68 73.5,50.75C73.57,50.75 73.64,50.76 73.71,50.77C74.12,50.82 74.53,50.87 74.92,50.94C75.83,51.11 76.65,51.39 77.29,52.03C77.87,52.61 78.15,53.52 78.16,54.49C78.17,55.47 77.91,56.49 77.44,57.28C76.97,58.08 76.29,58.63 75.46,58.71C74.64,58.79 73.62,58.4 72.46,57.2C72.41,57.15 72.32,57.15 72.26,57.2C72.21,57.25 72.2,57.34 72.26,57.4C73.45,58.63 74.55,59.08 75.49,58.99C76.43,58.9 77.18,58.27 77.68,57.43C78.19,56.58 78.46,55.51 78.44,54.49C78.43,53.47 78.14,52.48 77.49,51.83C76.79,51.13 75.91,50.84 74.97,50.67C74.57,50.59 74.16,50.54 73.74,50.49C73.67,50.48 73.6,50.47 73.53,50.46C73.05,50.4 72.56,50.34 72.08,50.23C71.13,50.02 70.22,49.65 69.44,48.87C68.66,48.08 68,46.86 67.58,44.91C66.7,40.87 68.01,36.19 70.96,32.96Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M74.66,44.44C73.27,45.39 72.11,47.19 71.47,49.96C71.46,50.04 71.5,50.11 71.58,50.13C71.66,50.15 71.73,50.1 71.75,50.02C72.37,47.29 73.51,45.57 74.82,44.68C76.13,43.79 77.63,43.71 79.03,44.3C81.82,45.48 84.21,49.38 83.6,54.86C83.4,56.56 82.67,57.58 81.97,58.42C81.9,58.51 81.83,58.59 81.76,58.67C81.14,59.41 80.57,60.1 80.57,61.09C80.57,61.21 80.62,61.32 80.7,61.43C80.77,61.53 80.88,61.65 81,61.77C81.13,61.89 81.27,62.02 81.43,62.17L81.44,62.17C81.6,62.32 81.78,62.48 81.96,62.65C82.71,63.36 83.62,64.34 84.25,65.74C84.55,66.4 84.42,67.45 83.96,68.46C83.49,69.47 82.7,70.41 81.74,70.86C80.79,71.3 79.66,71.27 78.45,70.32C77.23,69.36 75.94,67.46 74.71,64.15C74.69,64.07 74.61,64.04 74.53,64.06C74.46,64.09 74.42,64.17 74.45,64.25C75.68,67.57 76.99,69.53 78.27,70.54C79.56,71.56 80.81,71.6 81.86,71.11C82.9,70.63 83.73,69.63 84.21,68.58C84.69,67.53 84.86,66.39 84.51,65.63C83.86,64.18 82.92,63.17 82.16,62.45C81.97,62.27 81.79,62.11 81.63,61.96L81.62,61.96C81.46,61.81 81.32,61.68 81.2,61.56C81.08,61.45 80.99,61.35 80.93,61.26C80.87,61.18 80.85,61.12 80.85,61.09C80.85,60.2 81.35,59.6 81.99,58.84C82.05,58.76 82.12,58.69 82.18,58.6C82.9,57.74 83.68,56.68 83.88,54.89C84.5,49.33 82.08,45.29 79.14,44.04C77.66,43.41 76.06,43.49 74.66,44.44Z"/>
+            
+        <path android:fillColor="#D898FA" android:pathData="M63.18,74.94L63.62,76.88L70.34,96.04L51.86,108.67L23.05,89.16L27.26,79.04L58.45,68.17L63.18,74.94Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M27.27,80.09C47.15,81.57 57.64,73.32 60.39,69.01L53.37,63.05L33.93,69.24L27.27,80.09Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M57.31,95.39C58.88,94.84 63.78,89.37 66.04,86.7L68.09,93.95L60.83,103L42.92,99.83C47.06,98.58 55.73,95.94 57.31,95.39Z"/>
+            
+        <path android:fillColor="#8C3EB2" android:fillType="evenOdd" android:pathData="M22.96,89.15C23.89,83.54 25.28,72.35 25.27,69.69C25.26,66.31 30.23,60.72 37.4,62.07C41.88,62.92 44.65,61.26 47.2,59.75C48.73,58.83 50.17,57.97 51.86,57.73C55.74,57.19 64.52,58.88 63.59,76.2C63.77,76.35 63.9,76.65 64.19,77.33C64.8,78.79 66.13,81.96 70.24,89.06C78.29,102.96 70.79,108.38 57.8,112.21C44.81,116.04 31.76,100.93 30.36,98.29C29.01,95.71 24.96,91.31 23,89.32C22.99,89.31 22.98,89.3 22.98,89.28C22.96,89.24 22.96,89.19 22.96,89.15ZM23.24,89.17C24.88,87.75 26.63,85.76 28.47,83.18C29.08,82.33 29.63,81.03 30.24,79.58C31.54,76.5 33.13,72.75 36.09,71.41C37.47,70.79 38.88,71.08 40.34,71.38C42.56,71.84 44.89,72.32 47.36,69.7C51.47,65.35 55.73,66.43 56.92,68.47C57.77,69.95 61.38,74.16 63.38,76.22C62.69,77.2 62.22,82.56 65.85,90.59C70.58,101.09 47.2,103.75 39.32,97.04C36.53,94.65 26.77,89.67 23.24,89.17Z"/>
+            
+        <path android:fillColor="#D898FA" android:fillType="evenOdd" android:pathData="M28.73,64.22C30.84,62.59 33.84,61.54 37.38,62.21C41.9,63.07 44.72,61.39 47.26,59.87L47.27,59.87C48.8,58.95 50.23,58.11 51.88,57.87C53.79,57.61 56.9,57.89 59.43,60.37C61.95,62.84 63.9,67.52 63.46,76.1C62.46,75.07 61.08,73.52 59.83,72.04C58.57,70.54 57.46,69.13 57.04,68.4C55.79,66.25 51.41,65.21 47.26,69.6C46.04,70.89 44.87,71.41 43.74,71.56C42.59,71.7 41.48,71.47 40.37,71.24L40.35,71.24C38.9,70.94 37.45,70.64 36.04,71.28C34.52,71.97 33.36,73.27 32.42,74.77C31.49,76.27 30.76,77.98 30.11,79.52L30.11,79.53C29.49,80.98 28.95,82.27 28.36,83.1C26.52,85.67 24.78,87.66 23.15,89.06C23.13,89.07 23.12,89.08 23.12,89.1C23.58,86.29 24.15,82.13 24.61,78.33C25.07,74.5 25.42,71.03 25.41,69.69C25.41,68.06 26.61,65.85 28.73,64.22ZM23.1,89.19C23.1,89.2 23.1,89.2 23.1,89.21C23.11,89.22 23.11,89.23 23.12,89.25C23.12,89.24 23.11,89.23 23.1,89.23C23.1,89.22 23.1,89.21 23.1,89.19ZM23.16,89.28C23.18,89.29 23.2,89.3 23.22,89.31C24.09,89.43 25.35,89.83 26.8,90.4C28.25,90.98 29.88,91.72 31.5,92.52C34.73,94.13 37.85,95.96 39.23,97.14C41.23,98.85 44.19,99.95 47.43,100.48C50.68,101.01 54.2,100.98 57.34,100.41C60.47,99.84 63.23,98.72 64.91,97.07C65.75,96.25 66.32,95.28 66.53,94.19C66.74,93.09 66.58,91.87 65.97,90.54C64.17,86.53 63.38,83.2 63.14,80.75C63.01,79.52 63.02,78.52 63.11,77.76C63.19,77 63.34,76.52 63.49,76.3C63.5,76.3 63.5,76.3 63.5,76.3C63.5,76.3 63.5,76.3 63.5,76.3C63.57,76.36 63.64,76.46 63.72,76.63C63.81,76.81 63.91,77.05 64.06,77.39C64.67,78.85 66.01,82.02 70.12,89.13C74.13,96.06 74.24,100.83 71.79,104.33C69.33,107.86 64.26,110.16 57.76,112.07C51.33,113.97 44.86,111.18 39.82,107.56C37.29,105.75 35.13,103.74 33.52,102.02C31.9,100.3 30.83,98.87 30.49,98.22C29.8,96.92 28.44,95.17 27.02,93.49C25.61,91.85 24.14,90.28 23.16,89.28ZM28.56,63.99C26.4,65.66 25.12,67.94 25.13,69.69C25.14,71.01 24.79,74.46 24.33,78.3C23.87,82.13 23.29,86.33 22.82,89.13C22.81,89.19 22.82,89.27 22.84,89.34C22.86,89.37 22.87,89.4 22.9,89.42C23.88,90.41 25.38,92.01 26.8,93.68C28.23,95.35 29.57,97.08 30.24,98.36C30.6,99.03 31.68,100.49 33.31,102.21C34.94,103.95 37.11,105.97 39.65,107.79C44.72,111.43 51.28,114.28 57.84,112.34C64.33,110.43 69.5,108.11 72.02,104.49C74.56,100.86 74.4,95.96 70.36,88.99C66.26,81.9 64.93,78.73 64.32,77.28L64.32,77.27C64.17,76.94 64.07,76.69 63.98,76.5C63.9,76.35 63.83,76.23 63.74,76.14C64.19,67.5 62.23,62.72 59.63,60.17C57.02,57.61 53.81,57.32 51.84,57.59C50.13,57.83 48.66,58.71 47.14,59.62L47.12,59.63C44.58,61.14 41.85,62.77 37.43,61.93C33.8,61.25 30.72,62.32 28.56,63.99ZM36.15,71.54C37.48,70.94 38.84,71.22 40.31,71.52L40.32,71.52C41.42,71.75 42.58,71.99 43.77,71.84C44.98,71.68 46.21,71.13 47.46,69.8C51.54,65.48 55.67,66.62 56.79,68.54C57.23,69.29 58.35,70.73 59.61,72.22C60.84,73.68 62.21,75.21 63.2,76.24C63.04,76.54 62.9,77.05 62.82,77.73C62.74,78.51 62.73,79.53 62.85,80.77C63.1,83.26 63.9,86.62 65.72,90.65C66.3,91.94 66.45,93.1 66.25,94.13C66.06,95.16 65.52,96.08 64.71,96.87C63.09,98.47 60.4,99.56 57.29,100.13C54.19,100.7 50.69,100.73 47.48,100.2C44.27,99.67 41.36,98.58 39.41,96.93C38,95.73 34.85,93.88 31.62,92.27C30,91.46 28.36,90.72 26.9,90.14C25.6,89.63 24.43,89.24 23.56,89.08C25.14,87.67 26.82,85.73 28.59,83.26C29.2,82.4 29.76,81.09 30.36,79.65L30.37,79.64C31.02,78.09 31.74,76.4 32.66,74.92C33.59,73.44 34.71,72.19 36.15,71.54Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M128.88,24.35C119.46,24.35 110.89,32.44 107.28,37.1C106.97,37.49 107.07,38.05 107.47,38.33C112.04,41.53 119.8,46.43 128.88,46.43C137.97,46.43 144.99,41.51 149.13,38.31C149.49,38.03 149.58,37.52 149.32,37.15C146.16,32.49 138.33,24.35 128.88,24.35Z"/>
+            
+        <path android:fillColor="#D898FA" android:fillType="evenOdd" android:pathData="M115.98,29.09C112.22,31.69 109.19,34.87 107.39,37.19C107.13,37.51 107.21,37.98 107.55,38.22C112.12,41.41 119.85,46.29 128.88,46.29C137.92,46.29 144.91,41.39 149.04,38.2C149.35,37.96 149.42,37.54 149.2,37.23C147.63,34.91 144.89,31.72 141.37,29.12C137.85,26.51 133.56,24.49 128.88,24.49C124.21,24.49 119.74,26.5 115.98,29.09ZM115.82,28.86C119.6,26.25 124.13,24.21 128.88,24.21C133.64,24.21 137.99,26.26 141.54,28.89C145.09,31.52 147.85,34.73 149.44,37.07C149.74,37.51 149.63,38.1 149.21,38.42C145.08,41.62 138.02,46.57 128.88,46.57C119.75,46.57 111.96,41.65 107.39,38.45C106.92,38.12 106.81,37.47 107.16,37.01C108.98,34.67 112.04,31.48 115.82,28.86Z"/>
+            
+        <path android:fillColor="#D898FA" android:pathData="M128.17,41.65C134.28,41.65 139.24,36.71 139.24,30.61C139.24,29.42 139.05,28.27 138.7,27.19C135.76,25.5 132.43,24.35 128.88,24.35C124.78,24.35 120.85,25.88 117.42,27.99C117.21,28.83 117.1,29.71 117.1,30.61C117.1,36.71 122.06,41.65 128.17,41.65Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M128.8,10.35C128.88,10.35 128.94,10.41 128.94,10.49V21.45C128.94,21.53 128.88,21.59 128.8,21.59C128.72,21.59 128.66,21.53 128.66,21.45V10.49C128.66,10.41 128.72,10.35 128.8,10.35Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M101.93,22.96C101.98,22.9 102.07,22.9 102.13,22.96L109.9,30.71C109.96,30.76 109.96,30.85 109.9,30.91C109.84,30.96 109.75,30.96 109.7,30.91L101.93,23.16C101.87,23.1 101.87,23.01 101.93,22.96Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M155.43,22.96C155.38,22.9 155.29,22.9 155.23,22.96L147.46,30.71C147.41,30.76 147.41,30.85 147.46,30.91C147.52,30.96 147.61,30.96 147.66,30.91L155.43,23.16C155.49,23.1 155.49,23.01 155.43,22.96Z"/>
+            
+        <path android:fillColor="#D898FA" android:pathData="M124.8,105.07C124.8,116.65 115.39,126.04 103.78,126.04C92.17,126.04 82.76,116.65 82.76,105.07C82.76,93.5 92.17,84.11 103.78,84.11C115.39,84.11 124.8,93.5 124.8,105.07Z"/>
+            
+        <path android:fillColor="#D898FA" android:fillType="evenOdd" android:pathData="M125.08,105.07C125.08,116.81 115.54,126.32 103.78,126.32C92.01,126.32 82.47,116.81 82.47,105.07C82.47,93.34 92.01,83.83 103.78,83.83C115.54,83.83 125.08,93.34 125.08,105.07ZM103.78,126.04C115.39,126.04 124.8,116.65 124.8,105.07C124.8,93.5 115.39,84.11 103.78,84.11C92.17,84.11 82.76,93.5 82.76,105.07C82.76,116.65 92.17,126.04 103.78,126.04Z"/>
+            
+        <group>
+                  
+            <clip-path android:pathData="M124.8,105.07C124.8,116.65 115.39,126.04 103.78,126.04C92.17,126.04 82.76,116.65 82.76,105.07C82.76,93.5 92.17,84.11 103.78,84.11C115.39,84.11 124.8,93.5 124.8,105.07Z"/>
+                  
+            <path android:fillColor="#D898FA" android:pathData="M129.47,105.18C129.47,119.38 117.92,130.9 103.68,130.9C89.43,130.9 77.88,119.38 77.88,105.18C77.88,90.97 89.43,79.45 103.68,79.45C117.92,79.45 129.47,90.97 129.47,105.18Z"/>
+                  
+            <path android:fillColor="#D898FA" android:pathData="M129.47,105.18C129.47,119.38 117.92,130.9 103.68,130.9C89.43,130.9 77.88,119.38 77.88,105.18C77.88,90.97 89.43,79.45 103.68,79.45C117.92,79.45 129.47,90.97 129.47,105.18Z"/>
+                  
+            <path android:fillColor="#8C3EB2" android:pathData="M110.19,97.89C115.28,97.89 118.43,96.06 119.93,94.6C120.38,94.17 121.15,94.14 121.53,94.63L126.5,100.9C126.96,101.49 126.55,102.38 125.81,102.48C123.18,102.83 119.39,103.93 117.09,106.61C113.44,110.86 107.65,105.32 103.49,105.32C99.33,105.32 98.72,109.44 95.27,112.89C91.82,116.34 88.17,107.62 86.14,104.31C84.11,101 91.82,102.35 96.59,102.35C101.36,102.35 98.72,100.18 93.85,99.58C88.98,98.97 87.36,96.4 90.1,95.25C92.84,94.1 102.27,97.89 110.19,97.89Z"/>
+                  
+            <path android:fillColor="#8C3EB2" android:pathData="M98.6,119.96C97.13,119.96 94.67,121.51 92.97,122.78C92.43,123.18 92.56,124.01 93.19,124.26L104.1,128.55C104.29,128.63 104.49,128.64 104.69,128.58L119.02,124.14C119.66,123.95 119.85,123.15 119.33,122.72C117.81,121.46 115.48,119.96 113.53,119.96C110.38,119.96 107.13,121.68 104.39,121.68C101.65,121.68 100.94,119.96 98.6,119.96Z"/>
+                  
+            <path android:fillColor="#8C3EB2" android:pathData="M109.48,111.76C111.43,113.29 109.84,116.6 108.21,117.45C108.1,117.51 107.97,117.53 107.84,117.51C106.72,117.29 103.68,115.55 101.99,114.74C99.73,113.65 103.16,113.93 104.52,113.2C105.87,112.48 106.95,109.78 109.48,111.76Z"/>
+                  
+            <path android:fillColor="#8C3EB2" android:pathData="M103.58,89.78C99.95,90.75 94.7,89.85 91.21,88.94C90.42,88.73 90.37,87.67 91.13,87.36L103.3,82.3C103.48,82.23 103.68,82.21 103.86,82.26C109.28,83.66 118.99,86.23 116.68,85.83C113.73,85.33 109.26,88.26 103.58,89.78Z"/>
+                
+        </group>
+            
+        <path android:fillColor="#D898FA" android:pathData="M103.78,66.64C103.78,59.47 109.59,53.66 116.76,53.66H154.62C161.79,53.66 167.6,59.47 167.6,66.64C167.6,73.81 161.79,79.62 154.62,79.62H116.76C109.59,79.62 103.78,73.81 103.78,66.64Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M132.3,72.66L132.79,70.46C133.74,70.46 134.61,70.45 135.41,70.44C136.21,70.41 136.9,70.38 137.5,70.34C138.11,70.31 138.62,70.25 139.02,70.18C139.43,70.09 139.71,69.98 139.86,69.84C140.11,69.64 140.28,69.33 140.38,68.9C140.48,68.47 140.53,67.84 140.53,67.03C140.53,66.6 140.5,66.2 140.44,65.85C140.38,65.5 140.28,65.21 140.14,64.96C140.02,64.69 139.87,64.5 139.69,64.38C139.52,64.24 139.32,64.17 139.09,64.17C138.87,64.17 138.66,64.25 138.46,64.41C138.26,64.58 138.1,64.79 137.97,65.07C137.86,65.33 137.8,65.61 137.8,65.91C137.8,66.11 137.85,66.28 137.93,66.43C138.03,66.58 138.19,66.7 138.4,66.79C138.61,66.86 138.88,66.9 139.21,66.9C139.52,66.9 139.84,66.86 140.16,66.79C140.5,66.71 140.8,66.61 141.06,66.49L141.13,68.38C140.93,68.52 140.7,68.64 140.44,68.74C140.19,68.83 139.92,68.91 139.64,68.96C139.35,69.01 139.06,69.03 138.77,69.03C138.11,69.03 137.55,68.95 137.09,68.77C136.63,68.6 136.27,68.32 136.01,67.93C135.76,67.53 135.63,67.01 135.63,66.38C135.63,65.85 135.72,65.34 135.89,64.82C136.07,64.3 136.32,63.83 136.64,63.4C136.97,62.97 137.35,62.62 137.78,62.37C138.22,62.11 138.71,61.98 139.24,61.98C140.03,61.98 140.68,62.22 141.19,62.69C141.7,63.15 142.08,63.78 142.33,64.56C142.58,65.35 142.7,66.2 142.7,67.13C142.7,67.72 142.65,68.3 142.55,68.85C142.47,69.4 142.34,69.88 142.16,70.31C141.99,70.73 141.77,71.08 141.51,71.35C141.27,71.62 140.88,71.83 140.33,72.01C139.79,72.18 139.12,72.32 138.33,72.4C137.53,72.5 136.62,72.57 135.59,72.61C134.58,72.65 133.49,72.66 132.3,72.66ZM132.3,72.66C131.04,72.66 129.96,72.57 129.07,72.38C128.18,72.21 127.45,71.95 126.88,71.6C126.3,71.25 125.88,70.82 125.6,70.33C125.33,69.83 125.19,69.25 125.19,68.6C125.19,68.24 125.22,67.87 125.29,67.5C125.35,67.11 125.43,66.74 125.53,66.38C125.63,66 125.72,65.66 125.81,65.35L127.79,65.84C127.74,66.05 127.69,66.28 127.62,66.55C127.56,66.8 127.51,67.05 127.46,67.29C127.42,67.54 127.4,67.77 127.4,67.99C127.4,68.51 127.56,68.96 127.89,69.33C128.22,69.71 128.78,69.99 129.57,70.18C130.36,70.36 131.43,70.46 132.79,70.46L133.16,72.07L132.3,72.66ZM139.07,60.17C138.74,60.17 138.45,60.05 138.21,59.83C137.98,59.59 137.86,59.31 137.86,58.97C137.86,58.63 137.98,58.35 138.21,58.11C138.45,57.86 138.74,57.73 139.07,57.73C139.4,57.73 139.68,57.86 139.92,58.11C140.15,58.35 140.27,58.63 140.27,58.97C140.27,59.31 140.15,59.59 139.92,59.83C139.68,60.05 139.4,60.17 139.07,60.17Z"/>
+            
+        <path android:fillColor="#8C3EB2" android:pathData="M79.14,15.69C58.83,15.05 51.84,33.31 56.62,49.77C56.72,50.13 56.6,50.53 56.29,50.74C44.7,59.06 34.75,47.74 30.77,40.07C25.12,29.2 25.33,11.83 37.62,5.05C53.1,-3.49 74.77,3.56 79.99,14.51C80.26,15.09 79.78,15.71 79.14,15.69Z"/>
+            
+        <path android:fillColor="#D898FA" android:fillType="evenOdd" android:pathData="M62.69,2.34C70.72,4.41 77.48,8.92 80.12,14.45C80.44,15.14 79.86,15.86 79.14,15.84C69.03,15.51 62.25,19.89 58.59,26.39C54.93,32.89 54.37,41.53 56.76,49.73C56.88,50.15 56.73,50.61 56.37,50.86C53.45,52.95 50.63,53.82 47.97,53.81C45.31,53.79 42.83,52.91 40.6,51.52C36.14,48.76 32.64,43.99 30.64,40.14C27.8,34.67 26.44,27.58 27.33,21.01C28.21,14.43 31.36,8.35 37.55,4.93C45.33,0.64 54.66,0.27 62.69,2.34ZM62.62,2.61C54.64,0.55 45.39,0.93 37.69,5.18C31.59,8.54 28.49,14.53 27.61,21.04C26.73,27.56 28.08,34.59 30.89,40.01C32.88,43.83 36.35,48.55 40.75,51.28C42.95,52.65 45.38,53.51 47.97,53.52C50.56,53.53 53.33,52.69 56.21,50.63C56.46,50.45 56.57,50.12 56.48,49.81C54.09,41.55 54.64,32.83 58.35,26.25C62.06,19.66 68.94,15.23 79.14,15.55C79.7,15.57 80.08,15.04 79.86,14.57C77.28,9.15 70.6,4.67 62.62,2.61Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M49.09,24.47C49.08,24.68 49.1,24.87 49.15,25.06C49.19,25.22 49.25,25.35 49.32,25.45C49.39,25.54 49.46,25.61 49.52,25.67C49.59,25.72 49.64,25.75 49.66,25.78C49.84,25.88 49.95,26.01 49.99,26.15C49.99,26.18 50,26.25 50,26.38C49.99,26.59 49.9,26.77 49.72,26.91C49.56,27.03 49.27,27.14 48.87,27.25L43.76,28.59C43.46,28.67 43.21,28.69 43.01,28.63C42.83,28.57 42.72,28.46 42.67,28.28C42.65,28.2 42.65,28.1 42.66,27.99C42.67,27.86 42.71,27.76 42.77,27.68C42.83,27.59 42.93,27.48 43.05,27.35C43.25,27.16 43.39,26.97 43.5,26.78C43.6,26.58 43.65,26.29 43.66,25.9L43.74,23.9L40.38,24.79L40.12,26.17C40.01,26.76 40,27.21 40.08,27.52C40.12,27.69 40.19,27.82 40.27,27.92C40.36,28.01 40.47,28.09 40.62,28.18C40.75,28.27 40.84,28.35 40.89,28.43C40.95,28.49 40.99,28.59 40.99,28.73C40.99,28.96 40.91,29.14 40.74,29.27C40.59,29.39 40.32,29.5 39.93,29.6L36.72,30.45C36.39,30.53 36.12,30.54 35.92,30.47C35.72,30.39 35.59,30.25 35.53,30.05C35.47,29.82 35.51,29.61 35.65,29.44C35.77,29.25 35.98,29.04 36.27,28.79C36.64,28.47 36.93,28.17 37.14,27.9C37.34,27.61 37.49,27.26 37.57,26.84L39.33,17.88C39.6,16.49 40.06,15.41 40.71,14.66C41.36,13.89 42.35,13.33 43.65,12.98C45.12,12.6 46.33,12.6 47.29,12.99C48.25,13.37 48.87,14.09 49.14,15.16C49.26,15.6 49.31,16.08 49.29,16.59L49.09,24.47ZM43.82,21.58L43.97,17.48C43.99,17.3 43.97,17.11 43.92,16.92C43.85,16.65 43.72,16.47 43.53,16.38C43.34,16.28 43.12,16.26 42.84,16.33C42.5,16.42 42.23,16.6 42.04,16.86C41.85,17.13 41.7,17.55 41.59,18.13L40.81,22.37L43.82,21.58Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M143.43,111.19V84.11H143.71V111.19H143.43Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M154.83,97.91L132.31,97.85L132.31,97.57L154.83,97.63L154.83,97.91Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M148.13,102.46L138.72,93.07L138.92,92.87L148.34,102.26L148.13,102.46Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M138.92,102.46L148.34,93.07L148.13,92.87L138.72,102.26L138.92,102.46Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M11.29,78V50.92H11.57V78H11.29Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M22.69,64.72L0.17,64.66L0.17,64.38L22.7,64.44L22.69,64.72Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M16,69.27L6.58,59.88L6.78,59.68L16.2,69.07L16,69.27Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M6.78,69.27L16.2,59.88L16,59.68L6.58,69.07L6.78,69.27Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M14.06,45.68C15.1,45.68 15.94,44.78 15.94,43.68C15.94,42.58 15.1,41.69 14.06,41.69C13.02,41.69 12.18,42.58 12.18,43.68C12.18,44.78 13.02,45.68 14.06,45.68ZM14.06,45.4C14.93,45.4 15.65,44.65 15.65,43.68C15.65,42.72 14.93,41.97 14.06,41.97C13.2,41.97 12.47,42.72 12.47,43.68C12.47,44.65 13.2,45.4 14.06,45.4Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M3.93,50.92C3.93,52.02 3.08,52.92 2.05,52.92C1.01,52.92 0.17,52.02 0.17,50.92C0.17,49.82 1.01,48.92 2.05,48.92C3.08,48.92 3.93,49.82 3.93,50.92Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M154.21,108.07C155.24,108.07 156.08,107.18 156.08,106.07C156.08,104.97 155.24,104.08 154.21,104.08C153.17,104.08 152.33,104.97 152.33,106.07C152.33,107.18 153.17,108.07 154.21,108.07Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M151.83,118.55C151.83,120.07 150.6,121.29 149.08,121.29C147.56,121.29 146.32,120.07 146.32,118.55C146.32,117.03 147.56,115.81 149.08,115.81C150.6,115.81 151.83,117.03 151.83,118.55ZM151.55,118.55C151.55,119.91 150.44,121.01 149.08,121.01C147.71,121.01 146.61,119.91 146.61,118.55C146.61,117.19 147.71,116.09 149.08,116.09C150.44,116.09 151.55,117.19 151.55,118.55Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M22.61,54.66V43.68H22.9V54.66H22.61Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M27.2,49.32L18.19,49.29L18.19,49.01L27.2,49.03L27.2,49.32Z"/>
+          
+    </group>
+    
+</vector>


=====================================
mobile/android/fenix/app/src/main/res/drawable/illo_red_search.xml
=====================================
@@ -0,0 +1,77 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="144dp" android:viewportHeight="144" android:viewportWidth="199" android:width="199dp">
+      
+    <group>
+            
+        <clip-path android:pathData="M8.97,0L190.46,0A8,8 0,0 1,198.46 8L198.46,136A8,8 0,0 1,190.46 144L8.97,144A8,8 0,0 1,0.97 136L0.97,8A8,8 0,0 1,8.97 0z"/>
+            
+        <path android:fillColor="#1D1133" android:pathData="M8.97,0L190.46,0A8,8 0,0 1,198.46 8L198.46,136A8,8 0,0 1,190.46 144L8.97,144A8,8 0,0 1,0.97 136L0.97,8A8,8 0,0 1,8.97 0z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M153.93,33.4V22.78H154.22V33.4H153.93Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M158.43,28.24L149.6,28.22L149.6,27.92L158.43,27.94L158.43,28.24Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M40.59,125.46V101.47H40.89V125.46H40.59Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M50.67,113.72L30.8,113.67L30.8,113.37L50.68,113.42L50.67,113.72Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M44.75,117.74L36.44,109.42L36.65,109.21L44.96,117.53L44.75,117.74Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M36.65,117.74L44.96,109.42L44.75,109.21L36.44,117.53L36.65,117.74Z"/>
+            
+        <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M143.94,17.65C145.08,17.65 146,16.72 146,15.59C146,14.45 145.08,13.53 143.94,13.53C142.81,13.53 141.89,14.45 141.89,15.59C141.89,16.72 142.81,17.65 143.94,17.65ZM143.94,17.35C144.91,17.35 145.7,16.56 145.7,15.59C145.7,14.61 144.91,13.82 143.94,13.82C142.97,13.82 142.18,14.61 142.18,15.59C142.18,16.56 142.97,17.35 143.94,17.35Z"/>
+            
+        <path android:fillColor="#ffffff" android:pathData="M49.91,96.62C49.91,97.36 49.31,97.95 48.58,97.95C47.85,97.95 47.26,97.36 47.26,96.62C47.26,95.89 47.85,95.3 48.58,95.3C49.31,95.3 49.91,95.89 49.91,96.62Z"/>
+            
+        <path android:fillColor="#FF6A75" android:pathData="M57.46,51.13C57.46,26.69 77.27,6.88 101.7,6.88C126.14,6.88 145.95,26.69 145.95,51.13V134.61C145.95,135.63 145.12,136.46 144.1,136.46H59.31C58.28,136.46 57.46,135.63 57.46,134.61V51.13Z"/>
+            
+        <path android:fillColor="#FF6A75" android:fillType="evenOdd" android:pathData="M146.24,51.13V134.61C146.24,135.79 145.28,136.75 144.1,136.75H59.31C58.12,136.75 57.17,135.79 57.17,134.61V51.13C57.17,26.53 77.11,6.59 101.7,6.59C126.3,6.59 146.24,26.53 146.24,51.13ZM101.7,6.88C77.27,6.88 57.46,26.69 57.46,51.13V134.61C57.46,135.63 58.28,136.46 59.31,136.46H144.1C145.12,136.46 145.95,135.63 145.95,134.61V51.13C145.95,26.69 126.14,6.88 101.7,6.88Z"/>
+            
+        <group>
+                  
+            <clip-path android:pathData="M73.89,38.09h56.95v56.95h-56.95z"/>
+                  
+            <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M102.37,84.36C108.27,84.36 113.05,79.58 113.05,73.69C113.05,67.79 108.27,63.01 102.37,63.01C96.47,63.01 91.69,67.79 91.69,73.69C91.69,79.58 96.47,84.36 102.37,84.36ZM102.37,87.92C110.23,87.92 116.61,81.55 116.61,73.69C116.61,65.82 110.23,59.45 102.37,59.45C94.5,59.45 88.13,65.82 88.13,73.69C88.13,81.55 94.5,87.92 102.37,87.92Z"/>
+                  
+            <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M102.37,77.24C104.33,77.24 105.93,75.65 105.93,73.69C105.93,71.72 104.33,70.13 102.37,70.13C100.4,70.13 98.81,71.72 98.81,73.69C98.81,75.65 100.4,77.24 102.37,77.24ZM102.37,80.8C106.3,80.8 109.49,77.62 109.49,73.69C109.49,69.75 106.3,66.57 102.37,66.57C98.44,66.57 95.25,69.75 95.25,73.69C95.25,77.62 98.44,80.8 102.37,80.8Z"/>
+                  
+            <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M116.61,57.77C120.98,61.68 123.73,67.36 123.73,73.69C123.73,85.48 114.16,95.04 102.37,95.04C90.57,95.04 81.01,85.48 81.01,73.69C81.01,67.36 83.76,61.68 88.13,57.77V52.33C88.13,44.46 94.5,38.09 102.37,38.09C110.23,38.09 116.61,44.46 116.61,52.33V57.77ZM92.58,54.7C95.51,53.18 98.84,52.33 102.37,52.33C105.9,52.33 109.22,53.18 112.16,54.7V52.33C112.16,46.92 107.78,42.54 102.37,42.54C96.96,42.54 92.58,46.92 92.58,52.33V54.7ZM120.17,73.69C120.17,83.51 112.2,91.48 102.37,91.48C92.54,91.48 84.57,83.51 84.57,73.69C84.57,63.86 92.54,55.89 102.37,55.89C112.2,55.89 120.17,63.86 120.17,73.69Z"/>
+                
+        </group>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M115.47,34.1V15.2H115.76V34.1H115.47Z"/>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M123.54,24.88L107.69,24.84L107.69,24.55L123.54,24.59L123.54,24.88Z"/>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M118.79,28.04L112.17,21.49L112.37,21.28L119,27.84L118.79,28.04Z"/>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M112.37,28.04L119,21.49L118.79,21.28L112.17,27.84L112.37,28.04Z"/>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M137.74,78.54V65.77H138.03V78.54H137.74Z"/>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M143.19,72.3L132.44,72.28L132.44,71.99L143.19,72.01L143.19,72.3Z"/>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M66.64,91.05V82.53H66.93V91.05H66.64Z"/>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M70.23,86.94L63.24,86.92L63.25,86.63L70.23,86.65L70.23,86.94Z"/>
+            
+        <path android:fillColor="#212529" android:pathData="M95.76,27.98C95.76,28.85 95.05,29.56 94.16,29.56C93.28,29.56 92.56,28.85 92.56,27.98C92.56,27.11 93.28,26.4 94.16,26.4C95.05,26.4 95.76,27.11 95.76,27.98ZM141.16,53.26C141.16,54.13 140.45,54.84 139.56,54.84C138.68,54.84 137.96,54.13 137.96,53.26C137.96,52.39 138.68,51.68 139.56,51.68C140.45,51.68 141.16,52.39 141.16,53.26ZM75.77,95.18C75.77,96.05 75.06,96.76 74.17,96.76C73.29,96.76 72.58,96.05 72.58,95.18C72.58,94.3 73.29,93.59 74.17,93.59C75.06,93.59 75.77,94.3 75.77,95.18Z" android:strokeColor="#212529" android:strokeWidth="0.563343"/>
+            
+        <path android:fillColor="#212529" android:pathData="M57.19,118.34H146.21V134.92C146.21,135.95 145.39,136.77 144.36,136.77H59.04C58.02,136.77 57.19,135.95 57.19,134.92V118.34Z"/>
+            
+        <path android:fillColor="#FF6A75" android:fillType="evenOdd" android:pathData="M145.93,118.63H57.48V134.92C57.48,135.79 58.18,136.49 59.04,136.49H144.36C145.23,136.49 145.93,135.79 145.93,134.92V118.63ZM57.19,118.34V134.92C57.19,135.95 58.02,136.77 59.04,136.77H144.36C145.39,136.77 146.21,135.95 146.21,134.92V118.34H57.19Z"/>
+            
+        <path android:fillColor="#212529" android:pathData="M73.66,101.33C73.66,100.82 74.07,100.41 74.58,100.41H146.21V118.54H73.66V101.33Z"/>
+            
+        <path android:fillColor="#FF6A75" android:fillType="evenOdd" android:pathData="M145.93,100.7H74.58C74.23,100.7 73.95,100.98 73.95,101.33V118.25H145.93V100.7ZM74.58,100.41C74.07,100.41 73.66,100.82 73.66,101.33V118.54H146.21V100.41H74.58Z"/>
+            
+        <path android:fillColor="#212529" android:pathData="M89.42,83.57C89.42,83.06 89.83,82.65 90.35,82.65H146.21V100.66H89.42V83.57Z"/>
+            
+        <path android:fillColor="#FF6A75" android:fillType="evenOdd" android:pathData="M145.93,82.94H90.35C89.99,82.94 89.71,83.22 89.71,83.57V100.37H145.93V82.94ZM90.35,82.65C89.83,82.65 89.42,83.06 89.42,83.57V100.66H146.21V82.65H90.35Z"/>
+            
+        <path android:fillColor="#FF6A75" android:pathData="M129.31,83.04H146.21V134.37C146.21,135.72 145.42,136.77 144.1,136.51H95.5V118.33H112.4V100.42H129.31V83.04Z"/>
+            
+        <path android:fillColor="#212529" android:fillType="evenOdd" android:pathData="M90.6,82.93L146.23,82.8L146.23,83.09L90.6,83.22L90.6,82.93Z"/>
+          
+    </group>
+    
+</vector>


=====================================
mobile/android/fenix/app/src/main/res/font/spacegrotesk_bold.ttf
=====================================
Binary files /dev/null and b/mobile/android/fenix/app/src/main/res/font/spacegrotesk_bold.ttf differ


=====================================
mobile/android/fenix/app/src/main/res/layout/fragment_home.xml
=====================================
@@ -53,7 +53,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginStart="16dp"
-                android:layout_marginTop="18dp"
+                android:layout_marginTop="8dp"
                 android:layout_marginBottom="32dp"
                 android:clickable="false"
                 android:focusable="false"
@@ -134,6 +134,12 @@
 
     </com.google.android.material.appbar.AppBarLayout>
 
+    <androidx.compose.ui.platform.ComposeView
+        android:id="@+id/composeYec2024"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"/>
+
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/sessionControlRecyclerView"
         android:layout_width="match_parent"


=====================================
mobile/android/fenix/app/src/main/res/values/colors.xml
=====================================
@@ -382,4 +382,10 @@
     <color name="connect_button_purple">#9059FF</color>
     <color name="configure_connection_button_white">#E1E0E7</color>
     <color name="warning_yellow">#FFA436</color>
+    
+    <!-- 2024 YEC -->
+    <color name="YEC_2024_speak_purple">#D898FA</color>
+    <color name="YEC_2024_browse_green">#C1ED75</color>
+    <color name="YEC_2024_search_red">#FF6A75</color>
+
 </resources>


=====================================
mobile/android/fenix/app/src/main/res/values/preference_keys.xml
=====================================
@@ -431,4 +431,5 @@
     <string name="pref_key_tor_network_settings_bridges_enabled">pref_key_tor_network_settings_bridges_enabled</string>
 
     <string name="pref_key_spoof_english" translatable="false">pref_key_spoof_english</string>
+    <string name="pref_key_yec_style_index" translatable="false">pref_key_yec_style_index</string>
 </resources>


=====================================
mobile/android/fenix/app/src/main/res/values/torbrowser_strings.xml
=====================================
@@ -149,4 +149,26 @@
     <string name="connection_assist_final_error_troubleshoot_connection_link">troubleshooting your connection</string>
     <!-- Connection assist. -->
     <string name="connection_assist_final_error_learn_more_link">Learn more</string>
+
+    <!-- 2024 YEC. -->
+    <string name="YEC_2024_right_to_speak">You have a right to SPEAK without uninvited listeners.</string>
+    <!-- 2024 YEC. -->
+    <string name="YEC_2024_right_to_BROWSE">You have a right to BROWSE without being watched.</string>
+    <!-- 2024 YEC. -->
+    <string name="YEC_2024_right_to_SEARCH">You have a right to SEARCH without being followed.</string>
+
+    <!-- 2024 YEC. -->
+    <string name="YEC_2024_donation_encouragement">Join the thousands of Tor supporters building an internet powered by privacy. Make a donation today.</string>
+
+    <!-- 2024 YEC. -->
+    <string name="YEC_2024_donation_match_text">Through December 31, your gift will be matched, up to $300,000!</string>
+
+    <!-- 2024 YEC. %1$s is the app name "Tor Browser". Since this will only ever show on release, it will always be "Tor Browser" (and not "Tor Browser Alpha" for instance) -->
+    <string name="YEC_2024_tor_browser_for_android_will_always_be_free_no_donation_required">%1$s for Android will always be free to use—no donation is required to use this app.</string>
+
+    <!-- 2024 YEC. Accessible name for the "X" button. -->
+    <string name="YEC_2024_close">Close</string>
+
+    <!-- 2024 YEC. -->
+    <string name="YEC_2024_donate_now">Donate now</string>
 </resources>



View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/217346c097a5ace0b3c40b5289067a6ca8db3083

-- 
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/217346c097a5ace0b3c40b5289067a6ca8db3083
You're receiving this email because of your account on gitlab.torproject.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tor-commits/attachments/20240930/7135d715/attachment-0001.htm>


More information about the tor-commits mailing list