First Commit

This commit is contained in:
2025-12-18 16:28:50 +07:00
commit 8c3e4f491f
9974 changed files with 396488 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
/build
@@ -0,0 +1,47 @@
import extension.setupDependencyInjection
import extension.testCommonDependencies
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023, 2024 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
plugins {
id("io.element.android-compose-library")
}
android {
namespace = "io.element.android.features.verifysession.impl"
testOptions {
unitTests {
isIncludeAndroidResources = true
}
}
}
setupDependencyInjection()
dependencies {
implementation(projects.appconfig)
implementation(projects.libraries.androidutils)
implementation(projects.libraries.core)
implementation(projects.libraries.architecture)
implementation(projects.libraries.dateformatter.api)
implementation(projects.libraries.matrix.api)
implementation(projects.libraries.matrixui)
implementation(projects.libraries.designsystem)
implementation(projects.libraries.preferences.api)
implementation(projects.libraries.uiStrings)
implementation(projects.features.logout.api)
api(libs.statemachine)
api(projects.features.verifysession.api)
testCommonDependencies(libs, true)
testImplementation(projects.features.logout.test)
testImplementation(projects.libraries.dateformatter.test)
testImplementation(projects.libraries.matrix.test)
testImplementation(projects.libraries.preferences.test)
}
@@ -0,0 +1,87 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.emoji
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import io.element.android.features.verifysession.impl.R
internal data class EmojiResource(
@DrawableRes val drawableRes: Int,
@StringRes val nameRes: Int
)
internal fun Int.toEmojiResource(): EmojiResource {
return when (this % 64) {
0 -> EmojiResource(R.drawable.ic_verification_00, R.string.verification_emoji_00)
1 -> EmojiResource(R.drawable.ic_verification_01, R.string.verification_emoji_01)
2 -> EmojiResource(R.drawable.ic_verification_02, R.string.verification_emoji_02)
3 -> EmojiResource(R.drawable.ic_verification_03, R.string.verification_emoji_03)
4 -> EmojiResource(R.drawable.ic_verification_04, R.string.verification_emoji_04)
5 -> EmojiResource(R.drawable.ic_verification_05, R.string.verification_emoji_05)
6 -> EmojiResource(R.drawable.ic_verification_06, R.string.verification_emoji_06)
7 -> EmojiResource(R.drawable.ic_verification_07, R.string.verification_emoji_07)
8 -> EmojiResource(R.drawable.ic_verification_08, R.string.verification_emoji_08)
9 -> EmojiResource(R.drawable.ic_verification_09, R.string.verification_emoji_09)
10 -> EmojiResource(R.drawable.ic_verification_10, R.string.verification_emoji_10)
11 -> EmojiResource(R.drawable.ic_verification_11, R.string.verification_emoji_11)
12 -> EmojiResource(R.drawable.ic_verification_12, R.string.verification_emoji_12)
13 -> EmojiResource(R.drawable.ic_verification_13, R.string.verification_emoji_13)
14 -> EmojiResource(R.drawable.ic_verification_14, R.string.verification_emoji_14)
15 -> EmojiResource(R.drawable.ic_verification_15, R.string.verification_emoji_15)
16 -> EmojiResource(R.drawable.ic_verification_16, R.string.verification_emoji_16)
17 -> EmojiResource(R.drawable.ic_verification_17, R.string.verification_emoji_17)
18 -> EmojiResource(R.drawable.ic_verification_18, R.string.verification_emoji_18)
19 -> EmojiResource(R.drawable.ic_verification_19, R.string.verification_emoji_19)
20 -> EmojiResource(R.drawable.ic_verification_20, R.string.verification_emoji_20)
21 -> EmojiResource(R.drawable.ic_verification_21, R.string.verification_emoji_21)
22 -> EmojiResource(R.drawable.ic_verification_22, R.string.verification_emoji_22)
23 -> EmojiResource(R.drawable.ic_verification_23, R.string.verification_emoji_23)
24 -> EmojiResource(R.drawable.ic_verification_24, R.string.verification_emoji_24)
25 -> EmojiResource(R.drawable.ic_verification_25, R.string.verification_emoji_25)
26 -> EmojiResource(R.drawable.ic_verification_26, R.string.verification_emoji_26)
27 -> EmojiResource(R.drawable.ic_verification_27, R.string.verification_emoji_27)
28 -> EmojiResource(R.drawable.ic_verification_28, R.string.verification_emoji_28)
29 -> EmojiResource(R.drawable.ic_verification_29, R.string.verification_emoji_29)
30 -> EmojiResource(R.drawable.ic_verification_30, R.string.verification_emoji_30)
31 -> EmojiResource(R.drawable.ic_verification_31, R.string.verification_emoji_31)
32 -> EmojiResource(R.drawable.ic_verification_32, R.string.verification_emoji_32)
33 -> EmojiResource(R.drawable.ic_verification_33, R.string.verification_emoji_33)
34 -> EmojiResource(R.drawable.ic_verification_34, R.string.verification_emoji_34)
35 -> EmojiResource(R.drawable.ic_verification_35, R.string.verification_emoji_35)
36 -> EmojiResource(R.drawable.ic_verification_36, R.string.verification_emoji_36)
37 -> EmojiResource(R.drawable.ic_verification_37, R.string.verification_emoji_37)
38 -> EmojiResource(R.drawable.ic_verification_38, R.string.verification_emoji_38)
39 -> EmojiResource(R.drawable.ic_verification_39, R.string.verification_emoji_39)
40 -> EmojiResource(R.drawable.ic_verification_40, R.string.verification_emoji_40)
41 -> EmojiResource(R.drawable.ic_verification_41, R.string.verification_emoji_41)
42 -> EmojiResource(R.drawable.ic_verification_42, R.string.verification_emoji_42)
43 -> EmojiResource(R.drawable.ic_verification_43, R.string.verification_emoji_43)
44 -> EmojiResource(R.drawable.ic_verification_44, R.string.verification_emoji_44)
45 -> EmojiResource(R.drawable.ic_verification_45, R.string.verification_emoji_45)
46 -> EmojiResource(R.drawable.ic_verification_46, R.string.verification_emoji_46)
47 -> EmojiResource(R.drawable.ic_verification_47, R.string.verification_emoji_47)
48 -> EmojiResource(R.drawable.ic_verification_48, R.string.verification_emoji_48)
49 -> EmojiResource(R.drawable.ic_verification_49, R.string.verification_emoji_49)
50 -> EmojiResource(R.drawable.ic_verification_50, R.string.verification_emoji_50)
51 -> EmojiResource(R.drawable.ic_verification_51, R.string.verification_emoji_51)
52 -> EmojiResource(R.drawable.ic_verification_52, R.string.verification_emoji_52)
53 -> EmojiResource(R.drawable.ic_verification_53, R.string.verification_emoji_53)
54 -> EmojiResource(R.drawable.ic_verification_54, R.string.verification_emoji_54)
55 -> EmojiResource(R.drawable.ic_verification_55, R.string.verification_emoji_55)
56 -> EmojiResource(R.drawable.ic_verification_56, R.string.verification_emoji_56)
57 -> EmojiResource(R.drawable.ic_verification_57, R.string.verification_emoji_57)
58 -> EmojiResource(R.drawable.ic_verification_58, R.string.verification_emoji_58)
59 -> EmojiResource(R.drawable.ic_verification_59, R.string.verification_emoji_59)
60 -> EmojiResource(R.drawable.ic_verification_60, R.string.verification_emoji_60)
61 -> EmojiResource(R.drawable.ic_verification_61, R.string.verification_emoji_61)
62 -> EmojiResource(R.drawable.ic_verification_62, R.string.verification_emoji_62)
63 -> EmojiResource(R.drawable.ic_verification_63, R.string.verification_emoji_63)
else -> error("Cannot happen ($this)!")
}
}
@@ -0,0 +1,67 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.emoji
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Text
@Composable
@PreviewsDayNight
internal fun SasEmojisPreview() = ElementPreview {
Column(
modifier = Modifier.padding(8.dp),
verticalArrangement = Arrangement.spacedBy(2.dp),
) {
List(64) { it to it.toEmojiResource() }
.chunked(8)
.forEach {
Row(
horizontalArrangement = Arrangement.spacedBy(2.dp),
) {
it.forEach { emoji ->
Column(
modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Image(
painter = painterResource(id = emoji.second.drawableRes),
contentDescription = null,
modifier = Modifier
.size(32.dp)
)
Text(
text = emoji.first.toString() + ":" + stringResource(id = emoji.second.nameRes),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
style = ElementTheme.typography.fontBodySmRegular.copy(
fontSize = 8.sp
)
)
}
}
}
}
}
}
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.incoming
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesBinding
import io.element.android.features.verifysession.api.IncomingVerificationEntryPoint
import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class)
class DefaultIncomingVerificationEntryPoint : IncomingVerificationEntryPoint {
override fun createNode(
parentNode: Node,
buildContext: BuildContext,
params: IncomingVerificationEntryPoint.Params,
callback: IncomingVerificationEntryPoint.Callback,
): Node {
return parentNode.createNode<IncomingVerificationNode>(buildContext, listOf(params, callback))
}
}
@@ -0,0 +1,13 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.incoming
fun interface IncomingVerificationNavigator {
fun onFinish()
}
@@ -0,0 +1,50 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.incoming
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedInject
import io.element.android.annotations.ContributesNode
import io.element.android.features.verifysession.api.IncomingVerificationEntryPoint
import io.element.android.libraries.architecture.callback
import io.element.android.libraries.architecture.inputs
import io.element.android.libraries.di.SessionScope
@ContributesNode(SessionScope::class)
@AssistedInject
class IncomingVerificationNode(
@Assisted buildContext: BuildContext,
@Assisted plugins: List<Plugin>,
presenterFactory: IncomingVerificationPresenter.Factory,
) : Node(buildContext, plugins = plugins),
IncomingVerificationNavigator {
private val callback: IncomingVerificationEntryPoint.Callback = callback()
private val presenter = presenterFactory.create(
verificationRequest = inputs<IncomingVerificationEntryPoint.Params>().verificationRequest,
navigator = this,
)
override fun onFinish() {
callback.onDone()
}
@Composable
override fun View(modifier: Modifier) {
val state = presenter.present()
IncomingVerificationView(
state = state,
modifier = modifier,
)
}
}
@@ -0,0 +1,216 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
@file:OptIn(ExperimentalCoroutinesApi::class)
package io.element.android.features.verifysession.impl.incoming
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import com.freeletics.flowredux.compose.rememberStateAndDispatch
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject
import io.element.android.features.verifysession.impl.incoming.IncomingVerificationState.Step
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.dateformatter.api.DateFormatter
import io.element.android.libraries.dateformatter.api.DateFormatterMode
import io.element.android.libraries.di.annotations.SessionCoroutineScope
import io.element.android.libraries.matrix.api.verification.SessionVerificationRequestDetails
import io.element.android.libraries.matrix.api.verification.SessionVerificationService
import io.element.android.libraries.matrix.api.verification.VerificationFlowState
import io.element.android.libraries.matrix.api.verification.VerificationRequest
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import timber.log.Timber
import io.element.android.features.verifysession.impl.incoming.IncomingVerificationStateMachine.Event as StateMachineEvent
import io.element.android.features.verifysession.impl.incoming.IncomingVerificationStateMachine.State as StateMachineState
@AssistedInject
class IncomingVerificationPresenter(
@Assisted private val verificationRequest: VerificationRequest.Incoming,
@Assisted private val navigator: IncomingVerificationNavigator,
@SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope,
private val sessionVerificationService: SessionVerificationService,
private val stateMachine: IncomingVerificationStateMachine,
private val dateFormatter: DateFormatter,
) : Presenter<IncomingVerificationState> {
@AssistedFactory
fun interface Factory {
fun create(
verificationRequest: VerificationRequest.Incoming,
navigator: IncomingVerificationNavigator,
): IncomingVerificationPresenter
}
@Composable
override fun present(): IncomingVerificationState {
val coroutineScope = rememberCoroutineScope()
val stateAndDispatch = stateMachine.rememberStateAndDispatch()
DisposableEffect(Unit) {
coroutineScope.launch {
// Force reset, just in case the service was left in a broken state
sessionVerificationService.reset(
cancelAnyPendingVerificationAttempt = false
)
// Start this after observing state machine
observeVerificationService()
// Acknowledge the request right now
sessionVerificationService.acknowledgeVerificationRequest(verificationRequest)
}
onDispose {
sessionCoroutineScope.launch {
val currentState = stateAndDispatch.state.value
sessionVerificationService.reset(
cancelAnyPendingVerificationAttempt = currentState?.isPending() == true,
)
}
}
}
val formattedSignInTime = remember {
dateFormatter.format(
timestamp = verificationRequest.details.firstSeenTimestamp,
mode = DateFormatterMode.TimeOrDate,
)
}
val step by remember {
derivedStateOf {
stateAndDispatch.state.value.toVerificationStep(
sessionVerificationRequestDetails = verificationRequest.details,
formattedSignInTime = formattedSignInTime,
)
}
}
LaunchedEffect(stateAndDispatch.state.value) {
if ((stateAndDispatch.state.value as? StateMachineState.Initial)?.isCancelled == true) {
// The verification was canceled before it was started, maybe because another session accepted it
navigator.onFinish()
}
}
fun handleEvent(event: IncomingVerificationViewEvents) {
Timber.d("Verification user action: ${event::class.simpleName}")
when (event) {
IncomingVerificationViewEvents.StartVerification ->
stateAndDispatch.dispatchAction(StateMachineEvent.AcceptIncomingRequest)
IncomingVerificationViewEvents.IgnoreVerification ->
navigator.onFinish()
IncomingVerificationViewEvents.ConfirmVerification ->
stateAndDispatch.dispatchAction(StateMachineEvent.AcceptChallenge)
IncomingVerificationViewEvents.DeclineVerification ->
stateAndDispatch.dispatchAction(StateMachineEvent.DeclineChallenge)
IncomingVerificationViewEvents.GoBack -> {
when (val verificationStep = step) {
is Step.Initial -> if (verificationStep.isWaiting) {
stateAndDispatch.dispatchAction(StateMachineEvent.Cancel)
} else {
navigator.onFinish()
}
is Step.Verifying -> if (verificationStep.isWaiting) {
// What do we do in this case?
} else {
stateAndDispatch.dispatchAction(StateMachineEvent.DeclineChallenge)
}
Step.Canceled,
Step.Completed,
Step.Failure -> navigator.onFinish()
}
}
}
}
return IncomingVerificationState(
step = step,
request = verificationRequest,
eventSink = ::handleEvent,
)
}
private fun StateMachineState?.toVerificationStep(
sessionVerificationRequestDetails: SessionVerificationRequestDetails,
formattedSignInTime: String,
): Step =
when (val machineState = this) {
is StateMachineState.Initial,
StateMachineState.AcceptingIncomingVerification,
StateMachineState.RejectingIncomingVerification,
null -> {
Step.Initial(
deviceDisplayName = sessionVerificationRequestDetails.deviceDisplayName,
deviceId = sessionVerificationRequestDetails.deviceId,
formattedSignInTime = formattedSignInTime,
isWaiting = machineState == StateMachineState.AcceptingIncomingVerification ||
machineState == StateMachineState.RejectingIncomingVerification,
)
}
is StateMachineState.ChallengeReceived ->
Step.Verifying(
data = machineState.data,
isWaiting = false,
)
StateMachineState.Completed -> Step.Completed
StateMachineState.Canceling,
StateMachineState.Failure -> Step.Failure
is StateMachineState.AcceptingChallenge ->
Step.Verifying(
data = machineState.data,
isWaiting = true,
)
is StateMachineState.RejectingChallenge ->
Step.Verifying(
data = machineState.data,
isWaiting = true,
)
StateMachineState.Canceled -> Step.Canceled
}
private fun CoroutineScope.observeVerificationService() {
sessionVerificationService.verificationFlowState
.onEach { Timber.d("Verification flow state: ${it::class.simpleName}") }
.onEach { verificationAttemptState ->
when (verificationAttemptState) {
VerificationFlowState.Initial,
VerificationFlowState.DidAcceptVerificationRequest,
VerificationFlowState.DidStartSasVerification -> Unit
is VerificationFlowState.DidReceiveVerificationData -> {
stateMachine.dispatch(StateMachineEvent.DidReceiveChallenge(verificationAttemptState.data))
}
VerificationFlowState.DidFinish -> {
stateMachine.dispatch(StateMachineEvent.DidAcceptChallenge)
}
VerificationFlowState.DidCancel -> {
// Can happen when:
// - the remote party cancel the verification (before it is started)
// - another session has accepted the incoming verification request
// - the user reject the challenge from this application (I think this is an error). In this case, the state
// machine will ignore this event and change state to Failure.
stateMachine.dispatch(StateMachineEvent.DidCancel)
}
VerificationFlowState.DidFail -> {
stateMachine.dispatch(StateMachineEvent.DidFail)
}
}
}
.launchIn(this)
}
}
@@ -0,0 +1,43 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.incoming
import androidx.compose.runtime.Stable
import io.element.android.libraries.matrix.api.core.DeviceId
import io.element.android.libraries.matrix.api.verification.SessionVerificationData
import io.element.android.libraries.matrix.api.verification.VerificationRequest
data class IncomingVerificationState(
val step: Step,
val request: VerificationRequest.Incoming,
val eventSink: (IncomingVerificationViewEvents) -> Unit,
) {
@Stable
sealed interface Step {
data class Initial(
val deviceDisplayName: String?,
val deviceId: DeviceId,
val formattedSignInTime: String,
val isWaiting: Boolean,
) : Step
data class Verifying(
val data: SessionVerificationData,
val isWaiting: Boolean,
) : Step
data object Canceled : Step
data object Completed : Step
data object Failure : Step
val isTimeLimited: Boolean
get() = this is Initial ||
this is Verifying
}
}
@@ -0,0 +1,165 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
@file:OptIn(ExperimentalCoroutinesApi::class)
package io.element.android.features.verifysession.impl.incoming
import com.freeletics.flowredux.dsl.FlowReduxStateMachine
import dev.zacsweers.metro.Inject
import io.element.android.features.verifysession.impl.util.andLogStateChange
import io.element.android.features.verifysession.impl.util.logReceivedEvents
import io.element.android.libraries.matrix.api.verification.SessionVerificationData
import io.element.android.libraries.matrix.api.verification.SessionVerificationService
import kotlinx.coroutines.ExperimentalCoroutinesApi
import com.freeletics.flowredux.dsl.State as MachineState
@Inject
class IncomingVerificationStateMachine(
private val sessionVerificationService: SessionVerificationService,
) : FlowReduxStateMachine<IncomingVerificationStateMachine.State, IncomingVerificationStateMachine.Event>(
initialState = State.Initial(isCancelled = false)
) {
init {
spec {
inState<State.Initial> {
on<Event.AcceptIncomingRequest> { _, state ->
state.override { State.AcceptingIncomingVerification.andLogStateChange() }
}
}
inState<State.AcceptingIncomingVerification> {
onEnterEffect {
sessionVerificationService.acceptVerificationRequest()
}
on { event: Event.DidReceiveChallenge, state ->
state.override { State.ChallengeReceived(event.data).andLogStateChange() }
}
}
inState<State.ChallengeReceived> {
on<Event.AcceptChallenge> { _, state ->
state.override { State.AcceptingChallenge(state.snapshot.data).andLogStateChange() }
}
on<Event.DeclineChallenge> { _, state ->
state.override { State.RejectingChallenge(state.snapshot.data).andLogStateChange() }
}
}
inState<State.AcceptingChallenge> {
onEnterEffect {
sessionVerificationService.approveVerification()
}
on<Event.DidAcceptChallenge> { _, state ->
state.override { State.Completed.andLogStateChange() }
}
}
inState<State.RejectingChallenge> {
onEnterEffect {
sessionVerificationService.declineVerification()
}
}
inState<State.Canceling> {
onEnterEffect {
sessionVerificationService.cancelVerification()
}
}
inState {
logReceivedEvents()
on<Event.Cancel> { _, state: MachineState<State> ->
when (state.snapshot) {
State.Completed, State.Canceled -> state.noChange()
else -> {
sessionVerificationService.cancelVerification()
state.override { State.Canceled.andLogStateChange() }
}
}
}
on<Event.DidCancel> { _, state: MachineState<State> ->
when (state.snapshot) {
is State.RejectingChallenge -> {
state.override { State.Failure.andLogStateChange() }
}
is State.Initial -> state.mutate { State.Initial(isCancelled = true).andLogStateChange() }
State.AcceptingIncomingVerification,
State.RejectingIncomingVerification,
is State.ChallengeReceived,
is State.AcceptingChallenge,
State.Canceling -> state.override { State.Canceled.andLogStateChange() }
State.Canceled,
State.Completed,
State.Failure -> state.noChange()
}
}
on<Event.DidFail> { _, state: MachineState<State> ->
state.override { State.Failure.andLogStateChange() }
}
}
}
}
sealed interface State {
/** The initial state, before verification started. */
data class Initial(val isCancelled: Boolean) : State
/** User is accepting the incoming verification. */
data object AcceptingIncomingVerification : State
/** User is rejecting the incoming verification. */
data object RejectingIncomingVerification : State
/** Verification accepted and emojis received. */
data class ChallengeReceived(val data: SessionVerificationData) : State
/** Accepting the verification challenge. */
data class AcceptingChallenge(val data: SessionVerificationData) : State
/** Rejecting the verification challenge. */
data class RejectingChallenge(val data: SessionVerificationData) : State
/** The verification is being canceled. */
data object Canceling : State
/** The verification has been canceled, remotely or locally. */
data object Canceled : State
/** Verification successful. */
data object Completed : State
/** Verification failure. */
data object Failure : State
fun isPending(): Boolean = when (this) {
AcceptingIncomingVerification, RejectingIncomingVerification, Failure, is ChallengeReceived, is AcceptingChallenge, is RejectingChallenge -> true
is Initial, Canceling, Canceled, Completed -> false
}
}
sealed interface Event {
/** User accepts the incoming request. */
data object AcceptIncomingRequest : Event
/** Has received data. */
data class DidReceiveChallenge(val data: SessionVerificationData) : Event
/** Emojis match. */
data object AcceptChallenge : Event
/** Emojis do not match. */
data object DeclineChallenge : Event
/** Remote accepted challenge. */
data object DidAcceptChallenge : Event
/** Request cancellation. */
data object Cancel : Event
/** Verification cancelled. */
data object DidCancel : Event
/** Request failed. */
data object DidFail : Event
}
}
@@ -0,0 +1,94 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.incoming
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.verifysession.impl.incoming.IncomingVerificationState.Step
import io.element.android.features.verifysession.impl.ui.aDecimalsSessionVerificationData
import io.element.android.features.verifysession.impl.ui.aEmojisSessionVerificationData
import io.element.android.libraries.matrix.api.core.DeviceId
import io.element.android.libraries.matrix.api.core.FlowId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.api.verification.SessionVerificationRequestDetails
import io.element.android.libraries.matrix.api.verification.VerificationRequest
open class IncomingVerificationStateProvider : PreviewParameterProvider<IncomingVerificationState> {
override val values: Sequence<IncomingVerificationState>
get() = sequenceOf(
anIncomingVerificationState(),
anIncomingVerificationState(step = aStepInitial(isWaiting = false), verificationRequest = anIncomingSessionVerificationRequest()),
anIncomingVerificationState(step = aStepInitial(isWaiting = false), verificationRequest = anIncomingUserVerificationRequest()),
anIncomingVerificationState(step = aStepInitial(isWaiting = true), verificationRequest = anIncomingSessionVerificationRequest()),
anIncomingVerificationState(step = aStepInitial(isWaiting = true), verificationRequest = anIncomingUserVerificationRequest()),
anIncomingVerificationState(step = Step.Verifying(data = aEmojisSessionVerificationData(), isWaiting = false)),
anIncomingVerificationState(
step = Step.Verifying(data = aEmojisSessionVerificationData(), isWaiting = false),
verificationRequest = anIncomingUserVerificationRequest()
),
anIncomingVerificationState(step = Step.Verifying(data = aEmojisSessionVerificationData(), isWaiting = true)),
anIncomingVerificationState(
step = Step.Verifying(data = aEmojisSessionVerificationData(), isWaiting = true),
verificationRequest = anIncomingUserVerificationRequest()
),
anIncomingVerificationState(step = Step.Verifying(data = aDecimalsSessionVerificationData(), isWaiting = false)),
anIncomingVerificationState(step = Step.Completed),
anIncomingVerificationState(step = Step.Completed, verificationRequest = anIncomingUserVerificationRequest()),
anIncomingVerificationState(step = Step.Failure),
anIncomingVerificationState(step = Step.Canceled),
// Add other state here
)
}
internal fun aStepInitial(
isWaiting: Boolean = false,
) = Step.Initial(
deviceDisplayName = "Element X Android",
deviceId = DeviceId("ILAKNDNASDLK"),
formattedSignInTime = "12:34",
isWaiting = isWaiting,
)
internal fun anIncomingSessionVerificationRequest() = VerificationRequest.Incoming.OtherSession(
details = SessionVerificationRequestDetails(
senderProfile = MatrixUser(
userId = UserId("@alice:example.com"),
displayName = "Alice",
avatarUrl = null,
),
flowId = FlowId("1234"),
deviceId = DeviceId("ILAKNDNASDLK"),
deviceDisplayName = "a device name",
firstSeenTimestamp = 0,
)
)
internal fun anIncomingUserVerificationRequest() = VerificationRequest.Incoming.User(
details = SessionVerificationRequestDetails(
senderProfile = MatrixUser(
userId = UserId("@alice:example.com"),
displayName = "Alice",
avatarUrl = null,
),
flowId = FlowId("1234"),
deviceId = DeviceId("ILAKNDNASDLK"),
deviceDisplayName = "a device name",
firstSeenTimestamp = 0,
)
)
internal fun anIncomingVerificationState(
step: Step = aStepInitial(),
verificationRequest: VerificationRequest.Incoming = anIncomingSessionVerificationRequest(),
eventSink: (IncomingVerificationViewEvents) -> Unit = {},
) = IncomingVerificationState(
step = step,
request = verificationRequest,
eventSink = eventSink,
)
@@ -0,0 +1,302 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.incoming
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TopAppBarDefaults.topAppBarColors
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.ProgressBarRangeInfo
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.focused
import androidx.compose.ui.semantics.progressBarRangeInfo
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.verifysession.impl.R
import io.element.android.features.verifysession.impl.incoming.IncomingVerificationState.Step
import io.element.android.features.verifysession.impl.incoming.ui.SessionDetailsView
import io.element.android.features.verifysession.impl.ui.VerificationBottomMenu
import io.element.android.features.verifysession.impl.ui.VerificationContentVerifying
import io.element.android.features.verifysession.impl.ui.VerificationUserProfileContent
import io.element.android.libraries.designsystem.atomic.molecules.IconTitleSubtitleMolecule
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
import io.element.android.libraries.designsystem.components.BigIcon
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.InvisibleButton
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.matrix.api.verification.SessionVerificationData
import io.element.android.libraries.matrix.api.verification.VerificationRequest
import io.element.android.libraries.ui.strings.CommonStrings
/**
* [Figma](https://www.figma.com/design/pDlJZGBsri47FNTXMnEdXB/Compound-Android-Templates?node-id=819-7324).
*/
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun IncomingVerificationView(
state: IncomingVerificationState,
modifier: Modifier = Modifier,
) {
val step = state.step
BackHandler {
state.eventSink(IncomingVerificationViewEvents.GoBack)
}
HeaderFooterPage(
modifier = modifier,
topBar = {
TopAppBar(
title = {},
navigationIcon = {
when {
step is Step.Initial && !step.isWaiting -> Unit
step is Step.Completed -> Unit
else -> BackButton(onClick = { state.eventSink(IncomingVerificationViewEvents.GoBack) })
}
},
colors = topAppBarColors(containerColor = Color.Transparent),
)
},
header = {
IncomingVerificationHeader(step = step, request = state.request)
},
footer = {
IncomingVerificationBottomMenu(
state = state,
)
},
isScrollable = true,
) {
IncomingVerificationContent(
step = step,
request = state.request,
)
}
}
@Composable
private fun IncomingVerificationHeader(step: Step, request: VerificationRequest.Incoming) {
val iconStyle = when (step) {
Step.Canceled -> BigIcon.Style.AlertSolid
is Step.Initial -> if (step.isWaiting) {
BigIcon.Style.Loading
} else {
when (request) {
is VerificationRequest.Incoming.OtherSession -> BigIcon.Style.Default(CompoundIcons.LockSolid())
is VerificationRequest.Incoming.User -> BigIcon.Style.Default(CompoundIcons.UserProfileSolid())
}
}
is Step.Verifying -> if (step.isWaiting) {
BigIcon.Style.Loading
} else {
BigIcon.Style.Default(CompoundIcons.ReactionSolid())
}
Step.Completed -> BigIcon.Style.SuccessSolid
Step.Failure -> BigIcon.Style.AlertSolid
}
val titleTextId = when (step) {
Step.Canceled -> CommonStrings.common_verification_failed
is Step.Initial -> R.string.screen_session_verification_request_title
is Step.Verifying -> when (step.data) {
is SessionVerificationData.Decimals -> R.string.screen_session_verification_compare_numbers_title
is SessionVerificationData.Emojis -> R.string.screen_session_verification_compare_emojis_title
}
Step.Completed -> CommonStrings.common_verification_complete
Step.Failure -> R.string.screen_session_verification_request_failure_title
}
val subtitleTextId = when (step) {
Step.Canceled -> R.string.screen_session_verification_request_failure_subtitle
is Step.Initial -> when (request) {
is VerificationRequest.Incoming.OtherSession -> R.string.screen_session_verification_request_subtitle
is VerificationRequest.Incoming.User -> R.string.screen_session_verification_user_responder_subtitle
}
is Step.Verifying -> when (step.data) {
is SessionVerificationData.Decimals -> R.string.screen_session_verification_compare_numbers_subtitle
is SessionVerificationData.Emojis -> when (request) {
is VerificationRequest.Incoming.OtherSession -> R.string.screen_session_verification_compare_emojis_subtitle
is VerificationRequest.Incoming.User -> R.string.screen_session_verification_compare_emojis_user_subtitle
}
}
Step.Completed -> when (request) {
is VerificationRequest.Incoming.OtherSession -> R.string.screen_session_verification_complete_subtitle
is VerificationRequest.Incoming.User -> R.string.screen_session_verification_complete_user_subtitle
}
Step.Failure -> R.string.screen_session_verification_request_failure_subtitle
}
val timeLimitMessage = if (step.isTimeLimited) {
stringResource(CommonStrings.a11y_session_verification_time_limited_action_required)
} else {
""
}
IconTitleSubtitleMolecule(
modifier = Modifier
.padding(bottom = 16.dp)
.semantics(mergeDescendants = true) {
contentDescription = timeLimitMessage
focused = true
if (iconStyle == BigIcon.Style.Loading) {
// Same code than Modifier.progressSemantics()
progressBarRangeInfo = ProgressBarRangeInfo.Indeterminate
}
}
.focusable(),
iconStyle = iconStyle,
title = stringResource(id = titleTextId),
subTitle = stringResource(id = subtitleTextId),
)
}
@Composable
private fun IncomingVerificationContent(
step: Step,
request: VerificationRequest.Incoming,
) {
when (step) {
is Step.Initial -> ContentInitial(step, request)
is Step.Verifying -> VerificationContentVerifying(step.data)
else -> Unit
}
}
@Composable
private fun ContentInitial(
initialIncoming: Step.Initial,
request: VerificationRequest.Incoming,
) {
when (request) {
is VerificationRequest.Incoming.OtherSession -> {
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(24.dp),
) {
SessionDetailsView(
deviceName = initialIncoming.deviceDisplayName,
deviceId = initialIncoming.deviceId,
signInFormattedTimestamp = initialIncoming.formattedSignInTime,
)
Text(
modifier = Modifier
.align(Alignment.CenterHorizontally)
.padding(bottom = 16.dp),
text = stringResource(R.string.screen_session_verification_request_footer),
style = ElementTheme.typography.fontBodyMdMedium,
textAlign = TextAlign.Center,
)
}
}
is VerificationRequest.Incoming.User -> {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(top = 24.dp),
) {
VerificationUserProfileContent(
user = request.details.senderProfile,
)
}
}
}
}
@Composable
private fun IncomingVerificationBottomMenu(
state: IncomingVerificationState,
) {
val step = state.step
val eventSink = state.eventSink
when (step) {
is Step.Initial -> {
if (step.isWaiting) {
// Show nothing
} else {
VerificationBottomMenu {
Button(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_start_verification),
onClick = { eventSink(IncomingVerificationViewEvents.StartVerification) },
)
TextButton(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_ignore),
onClick = { eventSink(IncomingVerificationViewEvents.IgnoreVerification) },
)
}
}
}
is Step.Verifying -> {
if (step.isWaiting) {
// Add invisible buttons to keep the same screen layout
VerificationBottomMenu {
InvisibleButton()
InvisibleButton()
}
} else {
VerificationBottomMenu {
Button(
modifier = Modifier.fillMaxWidth(),
text = stringResource(R.string.screen_session_verification_they_match),
onClick = { eventSink(IncomingVerificationViewEvents.ConfirmVerification) },
)
TextButton(
modifier = Modifier.fillMaxWidth(),
text = stringResource(R.string.screen_session_verification_they_dont_match),
onClick = { eventSink(IncomingVerificationViewEvents.DeclineVerification) },
)
}
}
}
Step.Canceled,
is Step.Completed,
is Step.Failure -> {
VerificationBottomMenu {
Button(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_done),
onClick = { eventSink(IncomingVerificationViewEvents.GoBack) },
)
}
}
}
}
@PreviewsDayNight
@Composable
internal fun IncomingVerificationViewPreview(@PreviewParameter(IncomingVerificationStateProvider::class) state: IncomingVerificationState) = ElementPreview {
IncomingVerificationView(
state = state,
)
}
@Preview
@Composable
internal fun IncomingVerificationViewA11yPreview() = ElementPreview {
IncomingVerificationView(
state = anIncomingVerificationState(),
)
}
@@ -0,0 +1,17 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.incoming
sealed interface IncomingVerificationViewEvents {
data object GoBack : IncomingVerificationViewEvents
data object StartVerification : IncomingVerificationViewEvents
data object IgnoreVerification : IncomingVerificationViewEvents
data object ConfirmVerification : IncomingVerificationViewEvents
data object DeclineVerification : IncomingVerificationViewEvents
}
@@ -0,0 +1,103 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.incoming.ui
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.verifysession.impl.R
import io.element.android.libraries.designsystem.atomic.atoms.RoundedIconAtom
import io.element.android.libraries.designsystem.atomic.atoms.RoundedIconAtomSize
import io.element.android.libraries.designsystem.atomic.molecules.TextWithLabelMolecule
import io.element.android.libraries.designsystem.icons.CompoundDrawables
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.matrix.api.core.DeviceId
import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun SessionDetailsView(
deviceName: String?,
deviceId: DeviceId,
signInFormattedTimestamp: String,
modifier: Modifier = Modifier,
) {
Column(
modifier = modifier
.fillMaxWidth()
.border(
width = 1.dp,
color = ElementTheme.colors.borderDisabled,
shape = RoundedCornerShape(8.dp)
)
.padding(24.dp)
.semantics(mergeDescendants = true) {},
verticalArrangement = Arrangement.spacedBy(12.dp),
) {
Row(
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalAlignment = Alignment.CenterVertically,
) {
RoundedIconAtom(
modifier = Modifier,
size = RoundedIconAtomSize.Big,
resourceId = CompoundDrawables.ic_compound_devices
)
Text(
text = deviceName ?: deviceId.value,
style = ElementTheme.typography.fontBodyMdMedium,
color = ElementTheme.colors.textPrimary,
)
}
Row(
horizontalArrangement = Arrangement.spacedBy(8.dp),
) {
TextWithLabelMolecule(
label = stringResource(R.string.screen_session_verification_request_details_timestamp),
text = signInFormattedTimestamp,
modifier = Modifier.weight(2f),
)
TextWithLabelMolecule(
label = stringResource(CommonStrings.common_device_id),
text = deviceId.value,
modifier = Modifier.weight(5f),
spellText = true,
)
}
}
}
@PreviewsDayNight
@Composable
internal fun SessionDetailsViewPreview() = ElementPreview {
Column {
SessionDetailsView(
deviceName = "Element X Android",
deviceId = DeviceId("ILAKNDNASDLK"),
signInFormattedTimestamp = "12:34",
)
SessionDetailsView(
deviceName = null,
deviceId = DeviceId("ILAKNDNASDLK"),
signInFormattedTimestamp = "12:34",
)
}
}
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.outgoing
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesBinding
import io.element.android.features.verifysession.api.OutgoingVerificationEntryPoint
import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class)
class DefaultOutgoingVerificationEntryPoint : OutgoingVerificationEntryPoint {
override fun createNode(
parentNode: Node,
buildContext: BuildContext,
params: OutgoingVerificationEntryPoint.Params,
callback: OutgoingVerificationEntryPoint.Callback,
): Node {
return parentNode.createNode<OutgoingVerificationNode>(buildContext, listOf(params, callback))
}
}
@@ -0,0 +1,50 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.outgoing
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedInject
import io.element.android.annotations.ContributesNode
import io.element.android.features.verifysession.api.OutgoingVerificationEntryPoint
import io.element.android.libraries.architecture.callback
import io.element.android.libraries.architecture.inputs
import io.element.android.libraries.di.SessionScope
@ContributesNode(SessionScope::class)
@AssistedInject
class OutgoingVerificationNode(
@Assisted buildContext: BuildContext,
@Assisted plugins: List<Plugin>,
presenterFactory: OutgoingVerificationPresenter.Factory,
) : Node(buildContext, plugins = plugins) {
private val callback: OutgoingVerificationEntryPoint.Callback = callback()
private val inputs = inputs<OutgoingVerificationEntryPoint.Params>()
private val presenter = presenterFactory.create(
showDeviceVerifiedScreen = inputs.showDeviceVerifiedScreen,
verificationRequest = inputs.verificationRequest,
)
@Composable
override fun View(modifier: Modifier) {
val state = presenter.present()
OutgoingVerificationView(
state = state,
modifier = modifier,
onLearnMoreClick = callback::navigateToLearnMoreAboutEncryption,
onFinish = callback::onDone,
onBack = callback::onBack,
)
}
}
@@ -0,0 +1,181 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
@file:OptIn(ExperimentalCoroutinesApi::class)
package io.element.android.features.verifysession.impl.outgoing
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import com.freeletics.flowredux.compose.rememberStateAndDispatch
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.matrix.api.encryption.EncryptionService
import io.element.android.libraries.matrix.api.verification.SessionVerificationService
import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus
import io.element.android.libraries.matrix.api.verification.VerificationFlowState
import io.element.android.libraries.matrix.api.verification.VerificationRequest
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import timber.log.Timber
import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationStateMachine.Event as StateMachineEvent
import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationStateMachine.State as StateMachineState
@AssistedInject
class OutgoingVerificationPresenter(
@Assisted private val showDeviceVerifiedScreen: Boolean,
@Assisted private val verificationRequest: VerificationRequest.Outgoing,
private val sessionVerificationService: SessionVerificationService,
private val encryptionService: EncryptionService,
) : Presenter<OutgoingVerificationState> {
@AssistedFactory
fun interface Factory {
fun create(
verificationRequest: VerificationRequest.Outgoing,
showDeviceVerifiedScreen: Boolean,
): OutgoingVerificationPresenter
}
private val stateMachine = OutgoingVerificationStateMachine(
sessionVerificationService = sessionVerificationService,
encryptionService = encryptionService,
)
@Composable
override fun present(): OutgoingVerificationState {
val stateAndDispatch = stateMachine.rememberStateAndDispatch()
val sessionVerifiedStatus by sessionVerificationService.sessionVerifiedStatus.collectAsState()
val step by remember {
derivedStateOf {
when (verificationRequest) {
is VerificationRequest.Outgoing.CurrentSession -> {
when (sessionVerifiedStatus) {
SessionVerifiedStatus.Unknown -> OutgoingVerificationState.Step.Loading
SessionVerifiedStatus.NotVerified -> {
stateAndDispatch.state.value.toVerificationStep()
}
SessionVerifiedStatus.Verified -> {
if (stateAndDispatch.state.value != StateMachineState.Initial || showDeviceVerifiedScreen) {
// The user has verified the session, we need to show the success screen
OutgoingVerificationState.Step.Completed
} else {
// Automatic verification, which can happen on freshly created account, in this case, skip the screen
OutgoingVerificationState.Step.Exit
}
}
}
}
is VerificationRequest.Outgoing.User -> stateAndDispatch.state.value.toVerificationStep()
}
}
}
// Start this after observing state machine
LaunchedEffect(Unit) {
// Force reset, just in case the service was left in a broken state
sessionVerificationService.reset(cancelAnyPendingVerificationAttempt = true)
observeVerificationService()
}
fun handleEvent(event: OutgoingVerificationViewEvents) {
Timber.d("Verification user action: ${event::class.simpleName}")
when (event) {
// Just relay the event to the state machine
OutgoingVerificationViewEvents.RequestVerification -> StateMachineEvent.RequestVerification(verificationRequest)
OutgoingVerificationViewEvents.StartSasVerification -> StateMachineEvent.StartSasVerification
OutgoingVerificationViewEvents.ConfirmVerification -> StateMachineEvent.AcceptChallenge
OutgoingVerificationViewEvents.DeclineVerification -> StateMachineEvent.DeclineChallenge
OutgoingVerificationViewEvents.Cancel -> StateMachineEvent.Cancel
OutgoingVerificationViewEvents.Reset -> StateMachineEvent.Reset
}.let { stateMachineEvent ->
stateAndDispatch.dispatchAction(stateMachineEvent)
}
}
return OutgoingVerificationState(
step = step,
request = verificationRequest,
eventSink = ::handleEvent,
)
}
private fun StateMachineState?.toVerificationStep(): OutgoingVerificationState.Step =
when (val machineState = this) {
StateMachineState.Initial, null -> {
OutgoingVerificationState.Step.Initial
}
is StateMachineState.RequestingVerification,
is StateMachineState.StartingSasVerification,
StateMachineState.SasVerificationStarted -> {
OutgoingVerificationState.Step.AwaitingOtherDeviceResponse
}
StateMachineState.VerificationRequestAccepted -> {
OutgoingVerificationState.Step.Ready
}
is StateMachineState.Canceled -> {
OutgoingVerificationState.Step.Canceled
}
is StateMachineState.Verifying -> {
val async = when (machineState) {
is StateMachineState.Verifying.Replying -> AsyncData.Loading()
else -> AsyncData.Uninitialized
}
OutgoingVerificationState.Step.Verifying(machineState.data, async)
}
StateMachineState.Completed -> {
OutgoingVerificationState.Step.Completed
}
StateMachineState.Exit -> {
OutgoingVerificationState.Step.Exit
}
}
private fun CoroutineScope.observeVerificationService() {
sessionVerificationService.verificationFlowState
.onEach { Timber.d("Verification flow state: ${it::class.simpleName}") }
.onEach { verificationAttemptState ->
when (verificationAttemptState) {
VerificationFlowState.Initial -> stateMachine.dispatch(StateMachineEvent.Reset)
VerificationFlowState.DidAcceptVerificationRequest -> {
stateMachine.dispatch(StateMachineEvent.DidAcceptVerificationRequest)
}
VerificationFlowState.DidStartSasVerification -> {
stateMachine.dispatch(StateMachineEvent.DidStartSasVerification)
}
is VerificationFlowState.DidReceiveVerificationData -> {
stateMachine.dispatch(StateMachineEvent.DidReceiveChallenge(verificationAttemptState.data))
}
VerificationFlowState.DidFinish -> {
stateMachine.dispatch(StateMachineEvent.DidAcceptChallenge)
}
VerificationFlowState.DidCancel -> {
stateMachine.dispatch(StateMachineEvent.DidCancel)
}
VerificationFlowState.DidFail -> {
stateMachine.dispatch(StateMachineEvent.DidFail)
}
}
}
.launchIn(this)
}
}
@@ -0,0 +1,38 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.outgoing
import androidx.compose.runtime.Stable
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.matrix.api.verification.SessionVerificationData
import io.element.android.libraries.matrix.api.verification.VerificationRequest
data class OutgoingVerificationState(
val step: Step,
val request: VerificationRequest.Outgoing,
val eventSink: (OutgoingVerificationViewEvents) -> Unit,
) {
@Stable
sealed interface Step {
data object Loading : Step
data object Initial : Step
data object Canceled : Step
data object AwaitingOtherDeviceResponse : Step
data object Ready : Step
data class Verifying(val data: SessionVerificationData, val state: AsyncData<Unit>) : Step
data object Completed : Step
data object Exit : Step
val isTimeLimited: Boolean
get() = this is Initial ||
this is AwaitingOtherDeviceResponse ||
this is Ready ||
this is Verifying
}
}
@@ -0,0 +1,203 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
@file:Suppress("WildcardImport")
@file:OptIn(ExperimentalCoroutinesApi::class)
package io.element.android.features.verifysession.impl.outgoing
import com.freeletics.flowredux.dsl.FlowReduxStateMachine
import io.element.android.features.verifysession.impl.util.andLogStateChange
import io.element.android.features.verifysession.impl.util.logReceivedEvents
import io.element.android.libraries.core.bool.orFalse
import io.element.android.libraries.core.data.tryOrNull
import io.element.android.libraries.matrix.api.encryption.EncryptionService
import io.element.android.libraries.matrix.api.encryption.RecoveryState
import io.element.android.libraries.matrix.api.verification.SessionVerificationData
import io.element.android.libraries.matrix.api.verification.SessionVerificationService
import io.element.android.libraries.matrix.api.verification.VerificationRequest
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.timeout
import kotlin.time.Duration.Companion.seconds
import com.freeletics.flowredux.dsl.State as MachineState
@OptIn(FlowPreview::class)
class OutgoingVerificationStateMachine(
private val sessionVerificationService: SessionVerificationService,
private val encryptionService: EncryptionService,
) : FlowReduxStateMachine<OutgoingVerificationStateMachine.State, OutgoingVerificationStateMachine.Event>(
initialState = State.Initial,
) {
init {
spec {
inState<State.Initial> {
on<Event.RequestVerification> { event, state ->
state.override { State.RequestingVerification(event.verificationRequest).andLogStateChange() }
}
}
inState<State.RequestingVerification> {
onEnterEffect { event ->
when (event.verificationRequest) {
is VerificationRequest.Outgoing.CurrentSession -> sessionVerificationService.requestCurrentSessionVerification()
is VerificationRequest.Outgoing.User -> sessionVerificationService.requestUserVerification(event.verificationRequest.userId)
}
}
on<Event.DidAcceptVerificationRequest> { _, state ->
state.override { State.VerificationRequestAccepted.andLogStateChange() }
}
}
inState<State.StartingSasVerification> {
onEnterEffect {
sessionVerificationService.startVerification()
}
}
inState<State.VerificationRequestAccepted> {
on<Event.StartSasVerification> { _, state ->
state.override { State.StartingSasVerification.andLogStateChange() }
}
}
inState<State.Canceled> {
on<Event.Reset> { _, state ->
sessionVerificationService.reset(cancelAnyPendingVerificationAttempt = false)
state.override { State.Initial.andLogStateChange() }
}
}
inState<State.SasVerificationStarted> {
on<Event.DidReceiveChallenge> { event, state ->
state.override { State.Verifying.ChallengeReceived(event.data).andLogStateChange() }
}
}
inState<State.Verifying.ChallengeReceived> {
on<Event.AcceptChallenge> { _, state ->
state.override { State.Verifying.Replying(state.snapshot.data, accept = true).andLogStateChange() }
}
on<Event.DeclineChallenge> { _, state ->
state.override { State.Verifying.Replying(state.snapshot.data, accept = false).andLogStateChange() }
}
}
inState<State.Verifying.Replying> {
onEnterEffect { state ->
if (state.accept) {
sessionVerificationService.approveVerification()
} else {
sessionVerificationService.declineVerification()
}
}
on<Event.DidAcceptChallenge> { _, state ->
// If a key backup exists, wait until it's restored or a timeout happens
val hasBackup = encryptionService.doesBackupExistOnServer().getOrNull().orFalse()
if (hasBackup) {
tryOrNull {
encryptionService.recoveryStateStateFlow.filter { it == RecoveryState.ENABLED }
.timeout(10.seconds)
.first()
}
}
state.override { State.Completed.andLogStateChange() }
}
}
inState {
logReceivedEvents()
on<Event.DidStartSasVerification> { _, state: MachineState<State> ->
state.override { State.SasVerificationStarted.andLogStateChange() }
}
on<Event.Cancel> { event, state: MachineState<State> ->
when (state.snapshot) {
State.Initial, State.Completed, is State.Canceled -> state.override { State.Exit }
// For some reason `cancelVerification` is not calling its delegate `didCancel` method so we don't pass from
// `Canceling` state to `Canceled` automatically anymore
else -> {
sessionVerificationService.cancelVerification()
state.override { State.Canceled.andLogStateChange() }
}
}
}
on<Event.DidCancel> { event, state: MachineState<State> ->
state.override { State.Canceled.andLogStateChange() }
}
on<Event.DidFail> { event, state: MachineState<State> ->
state.override { State.Canceled.andLogStateChange() }
}
}
}
}
sealed interface State {
/** Let the user know that they need to get ready on their other session. */
data object Initial : State
/** Waiting for verification acceptance. */
data class RequestingVerification(val verificationRequest: VerificationRequest.Outgoing) : State
/** Verification request accepted. Waiting for start. */
data object VerificationRequestAccepted : State
/** Waiting for SaS verification start. */
data object StartingSasVerification : State
/** A SaS verification flow has been started. */
data object SasVerificationStarted : State
sealed class Verifying(open val data: SessionVerificationData) : State {
/** Verification accepted and emojis received. */
data class ChallengeReceived(override val data: SessionVerificationData) : Verifying(data)
/** Replying to a verification challenge. */
data class Replying(override val data: SessionVerificationData, val accept: Boolean) : Verifying(data)
}
/** The verification has been canceled, remotely or locally. */
data object Canceled : State
/** Verification successful. */
data object Completed : State
data object Exit : State
}
sealed interface Event {
/** Request verification. */
data class RequestVerification(val verificationRequest: VerificationRequest.Outgoing) : Event
/** The current verification request has been accepted. */
data object DidAcceptVerificationRequest : Event
/** Start a SaS verification flow. */
data object StartSasVerification : Event
/** Started a SaS verification flow. */
data object DidStartSasVerification : Event
/** Has received data. */
data class DidReceiveChallenge(val data: SessionVerificationData) : Event
/** Emojis match. */
data object AcceptChallenge : Event
/** Emojis do not match. */
data object DeclineChallenge : Event
/** Remote accepted challenge. */
data object DidAcceptChallenge : Event
/** Request cancellation. */
data object Cancel : Event
/** Verification cancelled. */
data object DidCancel : Event
/** Request failed. */
data object DidFail : Event
/** Reset the verification flow to the initial state. */
data object Reset : Event
}
}
@@ -0,0 +1,87 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.outgoing
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationState.Step
import io.element.android.features.verifysession.impl.ui.aDecimalsSessionVerificationData
import io.element.android.features.verifysession.impl.ui.aEmojisSessionVerificationData
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.verification.VerificationRequest
open class OutgoingVerificationStateProvider : PreviewParameterProvider<OutgoingVerificationState> {
override val values: Sequence<OutgoingVerificationState>
get() = sequenceOf(
anOutgoingVerificationState(
step = Step.Initial,
request = anOutgoingSessionVerificationRequest(),
),
anOutgoingVerificationState(
step = Step.Initial,
request = anOutgoingUserVerificationRequest(),
),
anOutgoingVerificationState(
step = Step.AwaitingOtherDeviceResponse,
request = anOutgoingSessionVerificationRequest(),
),
anOutgoingVerificationState(
step = Step.AwaitingOtherDeviceResponse,
request = anOutgoingUserVerificationRequest(),
),
anOutgoingVerificationState(
step = Step.Verifying(aEmojisSessionVerificationData(), AsyncData.Uninitialized),
request = anOutgoingSessionVerificationRequest(),
),
anOutgoingVerificationState(
step = Step.Verifying(aEmojisSessionVerificationData(), AsyncData.Uninitialized),
request = anOutgoingUserVerificationRequest(),
),
anOutgoingVerificationState(
step = Step.Verifying(aEmojisSessionVerificationData(), AsyncData.Loading())
),
anOutgoingVerificationState(
step = Step.Canceled
),
anOutgoingVerificationState(
step = Step.Ready
),
anOutgoingVerificationState(
step = Step.Verifying(aDecimalsSessionVerificationData(), AsyncData.Uninitialized)
),
anOutgoingVerificationState(
step = Step.Completed,
request = anOutgoingSessionVerificationRequest(),
),
anOutgoingVerificationState(
step = Step.Completed,
request = anOutgoingUserVerificationRequest(),
),
anOutgoingVerificationState(
step = Step.Loading
),
anOutgoingVerificationState(
step = Step.Exit
),
// Add other state here
)
}
internal fun anOutgoingUserVerificationRequest() = VerificationRequest.Outgoing.User(userId = UserId("@alice:example.com"))
internal fun anOutgoingSessionVerificationRequest() = VerificationRequest.Outgoing.CurrentSession
internal fun anOutgoingVerificationState(
step: Step = Step.Initial,
request: VerificationRequest.Outgoing = anOutgoingSessionVerificationRequest(),
eventSink: (OutgoingVerificationViewEvents) -> Unit = {},
) = OutgoingVerificationState(
step = step,
request = request,
eventSink = eventSink,
)
@@ -0,0 +1,350 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.outgoing
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.clickable
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TopAppBarDefaults.topAppBarColors
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.ProgressBarRangeInfo
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.focused
import androidx.compose.ui.semantics.progressBarRangeInfo
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.verifysession.impl.R
import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationState.Step
import io.element.android.features.verifysession.impl.ui.VerificationBottomMenu
import io.element.android.features.verifysession.impl.ui.VerificationContentVerifying
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.atomic.molecules.IconTitleSubtitleMolecule
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
import io.element.android.libraries.designsystem.components.BigIcon
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.InvisibleButton
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.matrix.api.verification.SessionVerificationData
import io.element.android.libraries.matrix.api.verification.VerificationRequest
import io.element.android.libraries.ui.strings.CommonStrings
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun OutgoingVerificationView(
state: OutgoingVerificationState,
onLearnMoreClick: () -> Unit,
onFinish: () -> Unit,
onBack: () -> Unit,
modifier: Modifier = Modifier,
) {
val step = state.step
fun cancelOrResetFlow() {
when (step) {
is Step.Canceled -> state.eventSink(OutgoingVerificationViewEvents.Reset)
Step.Initial, Step.Completed -> onBack()
Step.Ready, is Step.AwaitingOtherDeviceResponse -> state.eventSink(OutgoingVerificationViewEvents.Cancel)
is Step.Verifying -> {
if (!step.state.isLoading()) {
state.eventSink(OutgoingVerificationViewEvents.DeclineVerification)
}
}
else -> Unit
}
}
BackHandler {
cancelOrResetFlow()
}
if (step is Step.Loading) {
// Just display a loader in this case, to avoid UI glitch.
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator()
}
} else {
HeaderFooterPage(
modifier = modifier,
topBar = {
TopAppBar(
title = {},
navigationIcon = if (step != Step.Completed) {
{ BackButton(onClick = ::cancelOrResetFlow) }
} else {
{}
},
colors = topAppBarColors(containerColor = Color.Transparent)
)
},
header = {
OutgoingVerificationHeader(step = step, request = state.request)
},
footer = {
OutgoingVerificationViewBottomMenu(
screenState = state,
onCancelClick = ::cancelOrResetFlow,
onContinueClick = onFinish,
)
},
isScrollable = true,
) {
OutgoingVerificationContent(
flowState = step,
request = state.request,
onLearnMoreClick = onLearnMoreClick,
)
}
}
}
@Composable
private fun OutgoingVerificationHeader(step: Step, request: VerificationRequest.Outgoing) {
val iconStyle = when (step) {
Step.Loading -> error("Should not happen")
Step.Initial -> when (request) {
is VerificationRequest.Outgoing.CurrentSession -> BigIcon.Style.Default(CompoundIcons.Devices())
is VerificationRequest.Outgoing.User -> BigIcon.Style.Default(CompoundIcons.LockSolid())
}
Step.AwaitingOtherDeviceResponse -> BigIcon.Style.Loading
Step.Canceled -> BigIcon.Style.AlertSolid
Step.Ready -> BigIcon.Style.Default(CompoundIcons.ReactionSolid())
Step.Completed -> BigIcon.Style.SuccessSolid
is Step.Verifying -> {
if (step.state is AsyncData.Loading<Unit>) {
BigIcon.Style.Loading
} else {
BigIcon.Style.Default(CompoundIcons.ReactionSolid())
}
}
is Step.Exit -> return
}
val titleTextId = when (step) {
Step.Loading -> error("Should not happen")
Step.Initial -> when (request) {
is VerificationRequest.Outgoing.CurrentSession -> R.string.screen_session_verification_use_another_device_title
is VerificationRequest.Outgoing.User -> R.string.screen_session_verification_user_initiator_title
}
Step.AwaitingOtherDeviceResponse -> when (request) {
is VerificationRequest.Outgoing.CurrentSession -> R.string.screen_session_verification_waiting_another_device_title
is VerificationRequest.Outgoing.User -> R.string.screen_session_verification_waiting_other_user_title
}
Step.Canceled -> CommonStrings.common_verification_failed
Step.Ready -> R.string.screen_session_verification_compare_emojis_title
Step.Completed -> when (request) {
is VerificationRequest.Outgoing.CurrentSession -> R.string.screen_session_verification_device_verified
is VerificationRequest.Outgoing.User -> CommonStrings.common_verification_complete
}
is Step.Verifying -> when (step.data) {
is SessionVerificationData.Decimals -> R.string.screen_session_verification_compare_numbers_title
is SessionVerificationData.Emojis -> R.string.screen_session_verification_compare_emojis_title
}
is Step.Exit -> return
}
val subtitleTextId = when (step) {
Step.Loading -> error("Should not happen")
Step.Initial -> when (request) {
is VerificationRequest.Outgoing.CurrentSession -> R.string.screen_session_verification_use_another_device_subtitle
is VerificationRequest.Outgoing.User -> R.string.screen_session_verification_user_initiator_subtitle
}
Step.AwaitingOtherDeviceResponse -> R.string.screen_session_verification_waiting_subtitle
Step.Canceled -> R.string.screen_session_verification_failed_subtitle
Step.Ready -> R.string.screen_session_verification_ready_subtitle
Step.Completed -> when (request) {
is VerificationRequest.Outgoing.CurrentSession -> R.string.screen_identity_confirmed_subtitle
is VerificationRequest.Outgoing.User -> R.string.screen_session_verification_complete_user_subtitle
}
is Step.Verifying -> when (step.data) {
is SessionVerificationData.Decimals -> R.string.screen_session_verification_compare_numbers_subtitle
is SessionVerificationData.Emojis -> when (request) {
is VerificationRequest.Outgoing.CurrentSession -> R.string.screen_session_verification_compare_emojis_subtitle
is VerificationRequest.Outgoing.User -> R.string.screen_session_verification_compare_emojis_user_subtitle
}
}
is Step.Exit -> return
}
val timeLimitMessage = if (step.isTimeLimited) {
stringResource(CommonStrings.a11y_session_verification_time_limited_action_required)
} else {
""
}
IconTitleSubtitleMolecule(
modifier = Modifier
.padding(bottom = 16.dp)
.semantics(mergeDescendants = true) {
contentDescription = timeLimitMessage
focused = true
if (iconStyle == BigIcon.Style.Loading) {
// Same code than Modifier.progressSemantics()
progressBarRangeInfo = ProgressBarRangeInfo.Indeterminate
}
}
.focusable(),
iconStyle = iconStyle,
title = stringResource(id = titleTextId),
subTitle = stringResource(id = subtitleTextId),
)
}
@Composable
private fun OutgoingVerificationContent(
flowState: Step,
request: VerificationRequest.Outgoing,
onLearnMoreClick: () -> Unit,
) {
when (flowState) {
is Step.Initial -> {
when (request) {
is VerificationRequest.Outgoing.CurrentSession -> Unit
is VerificationRequest.Outgoing.User -> ContentInitial(onLearnMoreClick)
}
}
is Step.Verifying -> {
VerificationContentVerifying(flowState.data)
}
else -> Unit
}
}
@Composable
private fun ContentInitial(
onLearnMoreClick: () -> Unit,
) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center,
) {
Text(
modifier = Modifier
.clickable { onLearnMoreClick() }
.padding(vertical = 4.dp, horizontal = 16.dp),
text = stringResource(CommonStrings.action_learn_more),
style = ElementTheme.typography.fontBodyLgMedium
)
}
}
@Composable
private fun OutgoingVerificationViewBottomMenu(
screenState: OutgoingVerificationState,
onCancelClick: () -> Unit,
onContinueClick: () -> Unit,
) {
val verificationViewState = screenState.step
val eventSink = screenState.eventSink
val isVerifying = (verificationViewState as? Step.Verifying)?.state is AsyncData.Loading<Unit>
when (verificationViewState) {
Step.Loading -> error("Should not happen")
is Step.Initial -> {
VerificationBottomMenu {
Button(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_start_verification),
onClick = { eventSink(OutgoingVerificationViewEvents.RequestVerification) },
)
InvisibleButton()
}
}
is Step.Canceled -> {
VerificationBottomMenu {
Button(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_done),
onClick = onCancelClick,
)
InvisibleButton()
}
}
is Step.Ready -> {
VerificationBottomMenu {
Button(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_start),
onClick = { eventSink(OutgoingVerificationViewEvents.StartSasVerification) },
)
TextButton(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_cancel),
onClick = onCancelClick,
)
}
}
is Step.AwaitingOtherDeviceResponse -> Unit
is Step.Verifying -> {
if (isVerifying) {
// Add invisible buttons to keep the same screen layout
VerificationBottomMenu {
InvisibleButton()
InvisibleButton()
}
} else {
VerificationBottomMenu {
Button(
modifier = Modifier.fillMaxWidth(),
text = stringResource(R.string.screen_session_verification_they_match),
onClick = {
eventSink(OutgoingVerificationViewEvents.ConfirmVerification)
},
)
TextButton(
modifier = Modifier.fillMaxWidth(),
text = stringResource(R.string.screen_session_verification_they_dont_match),
onClick = { eventSink(OutgoingVerificationViewEvents.DeclineVerification) },
)
}
}
}
is Step.Completed -> {
VerificationBottomMenu {
Button(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_continue),
onClick = onContinueClick,
)
InvisibleButton()
}
}
is Step.Exit -> return
}
}
@PreviewsDayNight
@Composable
internal fun OutgoingVerificationViewPreview(@PreviewParameter(OutgoingVerificationStateProvider::class) state: OutgoingVerificationState) = ElementPreview {
OutgoingVerificationView(
state = state,
onLearnMoreClick = {},
onFinish = {},
onBack = {},
)
}
@@ -0,0 +1,18 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2023-2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.outgoing
sealed interface OutgoingVerificationViewEvents {
data object RequestVerification : OutgoingVerificationViewEvents
data object StartSasVerification : OutgoingVerificationViewEvents
data object ConfirmVerification : OutgoingVerificationViewEvents
data object DeclineVerification : OutgoingVerificationViewEvents
data object Cancel : OutgoingVerificationViewEvents
data object Reset : OutgoingVerificationViewEvents
}
@@ -0,0 +1,34 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.ui
import io.element.android.libraries.matrix.api.verification.SessionVerificationData
import io.element.android.libraries.matrix.api.verification.VerificationEmoji
internal fun aEmojisSessionVerificationData(
emojiList: List<VerificationEmoji> = aVerificationEmojiList(),
): SessionVerificationData {
return SessionVerificationData.Emojis(emojiList)
}
internal fun aDecimalsSessionVerificationData(
decimals: List<Int> = listOf(123, 456, 789),
): SessionVerificationData {
return SessionVerificationData.Decimals(decimals)
}
private fun aVerificationEmojiList() = listOf(
VerificationEmoji(number = 27),
VerificationEmoji(number = 54),
VerificationEmoji(number = 54),
VerificationEmoji(number = 42),
VerificationEmoji(number = 48),
VerificationEmoji(number = 48),
VerificationEmoji(number = 63),
)
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.ui
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMolecule
@Composable
internal fun VerificationBottomMenu(
modifier: Modifier = Modifier,
buttons: @Composable ColumnScope.() -> Unit,
) {
ButtonColumnMolecule(
modifier = modifier.padding(bottom = 16.dp)
) {
buttons()
}
}
@@ -0,0 +1,105 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.ui
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.widthIn
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.verifysession.impl.emoji.toEmojiResource
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.matrix.api.verification.SessionVerificationData
import io.element.android.libraries.matrix.api.verification.VerificationEmoji
@Composable
internal fun VerificationContentVerifying(
data: SessionVerificationData,
modifier: Modifier = Modifier,
) {
Box(
modifier = modifier
.fillMaxSize()
.padding(bottom = 20.dp),
contentAlignment = Alignment.Center
) {
when (data) {
is SessionVerificationData.Decimals -> {
val text = data.decimals.joinToString(separator = " - ")
Text(
modifier = Modifier
.fillMaxWidth()
.semantics {
contentDescription = data.decimals.joinToString()
},
text = text,
style = ElementTheme.typography.fontHeadingLgBold,
color = ElementTheme.colors.textPrimary,
textAlign = TextAlign.Center,
)
}
is SessionVerificationData.Emojis -> {
// We want each row to have up to 4 emojis
val rows = data.emojis.chunked(4)
Column(
modifier = Modifier
.fillMaxWidth()
.semantics(mergeDescendants = true) {},
verticalArrangement = Arrangement.spacedBy(40.dp),
) {
rows.forEach { emojis ->
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
for (emoji in emojis) {
EmojiItemView(emoji = emoji, modifier = Modifier.widthIn(max = 60.dp))
}
}
}
}
}
}
}
}
@Composable
private fun EmojiItemView(emoji: VerificationEmoji, modifier: Modifier = Modifier) {
val emojiResource = emoji.number.toEmojiResource()
Column(horizontalAlignment = Alignment.CenterHorizontally, modifier = modifier) {
Image(
modifier = Modifier.size(48.dp),
painter = painterResource(id = emojiResource.drawableRes),
contentDescription = null,
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = stringResource(id = emojiResource.nameRes),
style = ElementTheme.typography.fontBodyMdRegular,
color = ElementTheme.colors.textSecondary,
overflow = TextOverflow.Visible,
textAlign = TextAlign.Center,
)
}
}
@@ -0,0 +1,93 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.components.avatar.Avatar
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.ui.model.getAvatarData
import io.element.android.libraries.matrix.ui.model.getBestName
/**
* Ref: https://www.figma.com/design/lMrKOhS8BEb75GXVq7FnNI/ER-96--User-Verification-by-Emoji?node-id=116-52049
*/
@Composable
fun VerificationUserProfileContent(
user: MatrixUser,
modifier: Modifier = Modifier,
) {
val avatarData = remember(user) {
user.getAvatarData(AvatarSize.UserVerification)
}
Row(
modifier = modifier
.fillMaxWidth()
.clip(RoundedCornerShape(8.dp))
.background(ElementTheme.colors.bgSubtleSecondary)
.padding(12.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Avatar(
avatarData = avatarData,
avatarType = AvatarType.User,
)
Spacer(modifier = Modifier.width(12.dp))
Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
Text(
text = user.getBestName(),
style = ElementTheme.typography.fontBodyLgMedium,
color = ElementTheme.colors.textPrimary,
)
if (user.displayName.isNullOrEmpty().not()) {
Text(
text = user.userId.value,
style = ElementTheme.typography.fontBodyMdRegular,
color = ElementTheme.colors.textSecondary,
)
}
}
}
}
@PreviewsDayNight
@Composable
internal fun VerificationUserProfileContentPreview() = ElementPreview(
drawableFallbackForImages = CommonDrawables.sample_avatar
) {
VerificationUserProfileContent(
user = MatrixUser(
userId = UserId("@alice:example.com"),
displayName = "Alice",
avatarUrl = "https://example.com/avatar.png",
)
)
}
@@ -0,0 +1,26 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.verifysession.impl.util
import com.freeletics.flowredux.dsl.InStateBuilderBlock
import kotlinx.coroutines.ExperimentalCoroutinesApi
import timber.log.Timber
import com.freeletics.flowredux.dsl.State as MachineState
internal fun <T : Any> T.andLogStateChange() = also {
Timber.w("Verification: state machine state moved to [${this::class.simpleName}]")
}
@OptIn(ExperimentalCoroutinesApi::class)
inline fun <State : Any, reified Event : Any> InStateBuilderBlock<State, State, Event>.logReceivedEvents() {
on { event: Event, state: MachineState<State> ->
Timber.w("Verification in state [${state.snapshot::class.simpleName}] receiving event [${event::class.simpleName}]")
state.noChange()
}
}
@@ -0,0 +1,45 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M15,27v6s0,3 3,3 3,-3 3,-3v-6h-6z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M15,33l0.001,0.037c1.041,-0.035 2.016,-0.274 2.632,-1.286 0.171,-0.281 0.563,-0.281 0.735,0 0.616,1.011 1.591,1.251 2.632,1.286V27h-6v6z"
android:fillColor="#BE1931"/>
<path
android:pathData="M31.954,21.619c0,6.276 -5,6.276 -5,6.276h-18s-5,0 -5,-6.276c0,-6.724 5,-18.619 14,-18.619s14,12.895 14,18.619z"
android:fillColor="#D99E82"/>
<path
android:pathData="M18,20c-7,0 -10,3.527 -10,6.395 0,3.037 2.462,5.5 5.5,5.5 1.605,0 3.042,-0.664 4.049,-2.767 0.185,-0.386 0.716,-0.386 0.901,0 1.007,2.103 2.445,2.767 4.049,2.767 3.038,0 5.5,-2.463 5.5,-5.5C28,23.527 25,20 18,20z"
android:fillColor="#F4C7B5"/>
<path
android:pathData="M15,22.895c-1,1 2,4 3,4s4,-3 3,-4 -5,-1 -6,0zM13,19c-1.1,0 -2,-0.9 -2,-2v-2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2v2c0,1.1 -0.9,2 -2,2zM23,19c-1.1,0 -2,-0.9 -2,-2v-2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2v2c0,1.1 -0.9,2 -2,2z"
android:fillColor="#292F33"/>
<path
android:pathData="M15,3.608C13.941,2.199 11.681,0.881 2.828,4.2 -1.316,5.754 0.708,17.804 3.935,18.585c1.106,0 4.426,0 4.426,-8.852 0,-0.22 -0.002,-0.423 -0.005,-0.625C10.35,6.298 12.5,4.857 15,3.608zM33.172,4.2C24.319,0.881 22.059,2.199 21,3.608c2.5,1.25 4.65,2.691 6.644,5.501 -0.003,0.201 -0.005,0.404 -0.005,0.625 0,8.852 3.319,8.852 4.426,8.852 3.227,-0.782 5.251,-12.832 1.107,-14.386z"
android:fillColor="#662113"/>
<path
android:pathData="M23.5,25.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M11.5,25.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M25.5,27.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M10.5,27.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M23,28m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M13,28m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M9.883,7.232c-0.259,-0.673 -0.634,-1.397 -1.176,-1.939 -0.391,-0.391 -1.023,-0.391 -1.414,0s-0.391,1.023 0,1.414c0.57,0.57 1.066,1.934 1.068,2.346 0.145,-0.404 0.839,-1.15 1.522,-1.821zM26.1,7.232c0.259,-0.672 0.634,-1.397 1.176,-1.939 0.391,-0.391 1.023,-0.391 1.414,0s0.391,1.023 0,1.414c-0.57,0.57 -1.066,1.934 -1.068,2.346 -0.145,-0.404 -0.839,-1.15 -1.522,-1.821z"
android:fillColor="#380F09"/>
</vector>
@@ -0,0 +1,36 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M32.348,13.999s3.445,-8.812 1.651,-11.998c-0.604,-1.073 -8,1.998 -10.723,5.442 0,0 -2.586,-0.86 -5.276,-0.86s-5.276,0.86 -5.276,0.86C10.001,3.999 2.605,0.928 2.001,2.001 0.207,5.187 3.652,13.999 3.652,13.999c-0.897,1.722 -1.233,4.345 -1.555,7.16 -0.354,3.086 0.35,5.546 0.658,6.089 0.35,0.617 2.123,2.605 4.484,4.306 3.587,2.583 8.967,3.445 10.761,3.445s7.174,-0.861 10.761,-3.445c2.361,-1.701 4.134,-3.689 4.484,-4.306 0.308,-0.543 1.012,-3.003 0.659,-6.089 -0.324,-2.814 -0.659,-5.438 -1.556,-7.16z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M2.359,2.971c0.2,-0.599 5.348,2.173 6.518,5.404 0,0 -3.808,2.624 -4.528,4.624 0,0 -2.99,-7.028 -1.99,-10.028z"
android:fillColor="#F18F26"/>
<path
android:pathData="M5.98,7.261c0,-1.414 5.457,2.733 4.457,3.733s-1.255,0.72 -2.255,1.72S5.98,8.261 5.98,7.261z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M33.641,2.971c-0.2,-0.599 -5.348,2.173 -6.518,5.404 0,0 3.808,2.624 4.528,4.624 0,0 2.99,-7.028 1.99,-10.028z"
android:fillColor="#F18F26"/>
<path
android:pathData="M30.02,7.261c0,-1.414 -5.457,2.733 -4.457,3.733s1.255,0.72 2.255,1.72 2.202,-4.453 2.202,-5.453z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M14.001,20.001c0,1.105 -0.896,1.999 -2,1.999s-2,-0.894 -2,-1.999c0,-1.104 0.896,-1.999 2,-1.999s2,0.896 2,1.999zM25.999,20.001c0,1.105 -0.896,1.999 -2,1.999 -1.105,0 -2,-0.894 -2,-1.999 0,-1.104 0.895,-1.999 2,-1.999s2,0.896 2,1.999z"
android:fillColor="#292F33"/>
<path
android:pathData="M2.201,30.458c-0.148,0 -0.294,-0.065 -0.393,-0.19 -0.171,-0.217 -0.134,-0.531 0.083,-0.702 0.162,-0.127 4.02,-3.12 10.648,-2.605 0.275,0.021 0.481,0.261 0.46,0.536 -0.021,0.275 -0.257,0.501 -0.537,0.46 -6.233,-0.474 -9.915,2.366 -9.951,2.395 -0.093,0.07 -0.202,0.106 -0.31,0.106zM11.069,25.795c-0.049,0 -0.1,-0.007 -0.149,-0.022 -4.79,-1.497 -8.737,-0.347 -8.777,-0.336 -0.265,0.081 -0.543,-0.07 -0.623,-0.335 -0.079,-0.265 0.071,-0.543 0.335,-0.622 0.173,-0.052 4.286,-1.247 9.362,0.338 0.264,0.083 0.411,0.363 0.328,0.627 -0.066,0.213 -0.263,0.35 -0.476,0.35zM33.799,30.458c0.148,0 0.294,-0.065 0.393,-0.19 0.171,-0.217 0.134,-0.531 -0.083,-0.702 -0.162,-0.127 -4.02,-3.12 -10.648,-2.605 -0.275,0.021 -0.481,0.261 -0.46,0.536 0.022,0.275 0.257,0.501 0.537,0.46 6.233,-0.474 9.915,2.366 9.951,2.395 0.093,0.07 0.202,0.106 0.31,0.106zM24.931,25.795c0.049,0 0.1,-0.007 0.149,-0.022 4.79,-1.497 8.737,-0.347 8.777,-0.336 0.265,0.081 0.543,-0.07 0.623,-0.335 0.079,-0.265 -0.071,-0.543 -0.335,-0.622 -0.173,-0.052 -4.286,-1.247 -9.362,0.338 -0.264,0.083 -0.411,0.363 -0.328,0.627 0.066,0.213 0.263,0.35 0.476,0.35z"
android:fillColor="#FEE7B8"/>
<path
android:pathData="M24.736,30.898c-0.097,-0.258 -0.384,-0.392 -0.643,-0.294 -0.552,0.206 -1.076,0.311 -1.559,0.311 -1.152,0 -1.561,-0.306 -2.033,-0.659 -0.451,-0.338 -0.956,-0.715 -1.99,-0.803v-2.339c0,-0.276 -0.224,-0.5 -0.5,-0.5s-0.5,0.224 -0.5,0.5v2.373c-0.81,0.115 -1.346,0.439 -1.816,0.743 -0.568,0.367 -1.059,0.685 -2.083,0.685 -0.482,0 -1.006,-0.104 -1.558,-0.311 -0.258,-0.095 -0.547,0.035 -0.643,0.294 -0.097,0.259 0.035,0.547 0.293,0.644 0.664,0.247 1.306,0.373 1.907,0.373 1.319,0 2.014,-0.449 2.627,-0.845 0.524,-0.339 0.98,-0.631 1.848,-0.635 0.992,0.008 1.358,0.278 1.815,0.621 0.538,0.403 1.147,0.859 2.633,0.859 0.601,0 1.244,-0.126 1.908,-0.373 0.259,-0.097 0.391,-0.385 0.294,-0.644z"
android:fillColor="#67757F"/>
<path
android:pathData="M19.4,24.807h-2.8c-0.64,0 -1.163,0.523 -1.163,1.163 0,0.639 0.523,1.163 1.163,1.163h0.237v0.345c0,0.639 0.523,1.163 1.163,1.163s1.163,-0.523 1.163,-1.163v-0.345h0.237c0.639,0 1.163,-0.523 1.163,-1.163s-0.524,-1.163 -1.163,-1.163z"
android:fillColor="#E75A70"/>
<path
android:pathData="M18.022,17.154c-0.276,0 -0.5,-0.224 -0.5,-0.5L17.522,8.37c0,-0.276 0.224,-0.5 0.5,-0.5s0.5,0.224 0.5,0.5v8.284c0,0.277 -0.223,0.5 -0.5,0.5zM21,15.572c-0.276,0 -0.5,-0.224 -0.5,-0.5 0,-2.882 1.232,-5.21 1.285,-5.308 0.13,-0.244 0.435,-0.334 0.677,-0.204 0.243,0.13 0.334,0.433 0.204,0.677 -0.012,0.021 -1.166,2.213 -1.166,4.835 0,0.276 -0.224,0.5 -0.5,0.5zM15,15.572c-0.276,0 -0.5,-0.224 -0.5,-0.5 0,-2.623 -1.155,-4.814 -1.167,-4.835 -0.13,-0.244 -0.038,-0.546 0.205,-0.677 0.242,-0.131 0.545,-0.039 0.676,0.204 0.053,0.098 1.285,2.426 1.285,5.308 0.001,0.276 -0.223,0.5 -0.499,0.5z"
android:fillColor="#F18F26"/>
</vector>
@@ -0,0 +1,54 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M32.325,10.958s2.315,0.024 3.511,1.177c-0.336,-4.971 -2.104,-8.249 -5.944,-10.13 -3.141,-1.119 -6.066,1.453 -6.066,1.453s0.862,-1.99 2.19,-2.746C23.789,0.236 21.146,0 18,0c-3.136,0 -5.785,0.227 -8.006,0.701 1.341,0.745 2.215,2.758 2.215,2.758S9.194,0.803 6,2.053C2.221,3.949 0.481,7.223 0.158,12.174c1.183,-1.19 3.55,-1.215 3.55,-1.215S-0.105,13.267 0.282,16.614c0.387,2.947 1.394,5.967 2.879,8.722C3.039,22.15 5.917,20 5.917,20s-2.492,5.96 -0.581,8.738c1.935,2.542 4.313,4.641 6.976,5.916 -0.955,-1.645 -0.136,-3.044 -0.103,-2.945 0.042,0.125 0.459,3.112 2.137,3.743 1.178,0.356 2.4,0.548 3.654,0.548 1.292,0 2.55,-0.207 3.761,-0.583 1.614,-0.691 2.024,-3.585 2.064,-3.708 0.032,-0.098 0.843,1.287 -0.09,2.921 2.706,-1.309 5.118,-3.463 7.064,-6.073 1.699,-2.846 -0.683,-8.557 -0.683,-8.557s2.85,2.13 2.757,5.288c1.556,-2.906 2.585,-6.104 2.911,-9.2 -0.035,-3.061 -3.459,-5.13 -3.459,-5.13z"
android:fillColor="#662113"/>
<path
android:pathData="M13.859,9.495c0.596,2.392 0.16,4.422 -2.231,5.017 -2.392,0.596 -6.363,0.087 -6.958,-2.304 -0.596,-2.392 0.469,-5.39 1.81,-5.724 1.341,-0.334 6.784,0.62 7.379,3.011zM22.963,27.927c0,2.74 -2.222,4.963 -4.963,4.963s-4.963,-2.223 -4.963,-4.963c0,-2.741 2.223,-4.964 4.963,-4.964 2.741,0 4.963,2.222 4.963,4.964z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M21.309,27.927c0,1.827 -1.481,3.309 -3.309,3.309s-3.309,-1.481 -3.309,-3.309c0,-1.827 1.481,-3.31 3.309,-3.31s3.309,1.483 3.309,3.31z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M11.052,8.997c0.871,1.393 0.447,3.229 -0.946,4.1 -1.394,0.871 -2.608,0.797 -3.479,-0.596 -0.871,-1.394 -0.186,-4.131 0.324,-4.45 0.51,-0.319 3.23,-0.448 4.101,0.946z"
android:fillColor="#E6AAAA"/>
<path
android:pathData="M22.141,9.495c-0.596,2.392 -0.159,4.422 2.232,5.017 2.392,0.596 6.363,0.087 6.959,-2.304 0.596,-2.392 -0.47,-5.39 -1.811,-5.724 -1.342,-0.334 -6.786,0.62 -7.38,3.011z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M24.948,8.997c-0.871,1.393 -0.447,3.229 0.945,4.1 1.394,0.871 2.608,0.797 3.479,-0.596 0.871,-1.394 0.185,-4.131 -0.324,-4.45 -0.51,-0.319 -3.229,-0.448 -4.1,0.946z"
android:fillColor="#E6AAAA"/>
<path
android:pathData="M18,7.125h-0.002C5.167,7.126 7.125,12.083 8.5,18.667 9.875,25.25 10.384,27 10.384,27h15.228s0.51,-1.75 1.885,-8.333C28.872,12.083 30.829,7.126 18,7.125z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M12,16s0,-1.5 1.5,-1.5S15,16 15,16v1.5s0,1.5 -1.5,1.5 -1.5,-1.5 -1.5,-1.5L12,16zM21,16s0,-1.5 1.5,-1.5S24,16 24,16v1.5s0,1.5 -1.5,1.5 -1.5,-1.5 -1.5,-1.5L21,16z"
android:fillColor="#272B2B"/>
<path
android:pathData="M20.168,21.521c-1.598,0 -1.385,0.848 -2.168,2.113 -0.783,-1.266 -0.571,-2.113 -2.168,-2.113 -6.865,0 -6.837,0.375 -6.865,2.828 -0.058,4.986 2.802,6.132 5.257,6.06 1.597,-0.048 2.994,-0.88 3.777,-2.131 0.783,1.251 2.179,2.083 3.776,2.131 2.455,0.072 5.315,-1.073 5.257,-6.06 -0.029,-2.453 -0.001,-2.828 -6.866,-2.828z"
android:fillColor="#FFE8B6"/>
<path
android:pathData="M14.582,21.411c-1.14,0.233 2.279,4.431 3.418,4.431s4.559,-4.198 3.419,-4.431c-1.14,-0.232 -5.698,-0.232 -6.837,0z"
android:fillColor="#272B2B"/>
<path
android:pathData="M11.5,24.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M10.5,26.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M12.5,27.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M24.5,24.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M25.5,26.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
<path
android:pathData="M23.5,27.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
android:fillColor="#D99E82"/>
</vector>
@@ -0,0 +1,33 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M28.721,12.849s3.809,1.643 5.532,0.449c1.723,-1.193 2.11,-2.773 1.159,-4.736 -0.951,-1.961 -3.623,-2.732 -3.712,-5.292 0,0 -0.298,4.141 1.513,5.505 2.562,1.933 -0.446,4.21 -3.522,3.828 -3.078,-0.382 -0.97,0.246 -0.97,0.246z"
android:fillColor="#292F33"/>
<path
android:pathData="M23.875,19.375s-0.628,2.542 0.187,5.03c0.145,0.341 0.049,0.556 -0.208,0.678 -0.256,0.122 -4.294,1.542 -4.729,1.771 -0.396,0.208 -1.142,1.78 -1.208,2.854 0.844,0.218 1.625,0.104 1.625,0.104s0.025,-1.915 0.208,-2.042c0.183,-0.127 5.686,-1.048 6.062,-1.771s1.611,-3.888 0.812,-5.292c-0.225,-0.395 -0.637,-1.15 -0.637,-1.15l-2.112,-0.182z"
android:fillColor="#8A4B38"/>
<path
android:pathData="M17.917,29.708s-0.616,1.993 0.008,2.138c0.605,0.141 1.694,-0.388 1.755,-0.646 0.081,-0.343 0.216,-1.179 0.098,-1.366 -0.118,-0.186 -1.861,-0.126 -1.861,-0.126z"
android:fillColor="#292F33"/>
<path
android:pathData="M11.812,21.875l-0.75,-2.562s-2.766,2.105 -3.938,3.594c-0.344,0.437 -1.847,3.198 -1.722,4.413 0.05,0.488 0.474,2.583 0.474,2.583l1.651,-0.465s-1.312,-1.896 -1.021,-2.562c1.428,-3.263 5.306,-5.001 5.306,-5.001z"
android:fillColor="#8A4B38"/>
<path
android:pathData="M7.679,29.424c-0.172,-0.139 -1.803,0.479 -1.803,0.479s0.057,2.085 0.695,2.022c0.618,-0.061 1.48,-0.912 1.455,-1.175 -0.034,-0.351 -0.175,-1.187 -0.347,-1.326z"
android:fillColor="#292F33"/>
<path
android:pathData="M27.188,11.188c-3.437,0.156 -7.207,0.438 -9.5,0.438 -3.655,0 -5.219,-1.428 -6.562,-2.625C8.838,6.964 8.167,4.779 6,5.501c0,0 -0.632,-0.411 -1.247,-0.778l-0.261,-0.152c-0.256,-0.148 -0.492,-0.276 -0.656,-0.347 -0.164,-0.072 -0.258,-0.087 -0.228,-0.01 0.019,0.051 0.093,0.143 0.236,0.286 0.472,0.472 0.675,0.95 0.728,1.395 -2.01,1.202 -2.093,2.276 -2.871,3.552 -0.492,0.807 -1.36,2.054 -1.56,2.515 -0.412,0.948 1.024,2.052 1.706,1.407 0.893,-0.845 0.961,-1.122 2.032,-1.744 0.983,-0.016 1.975,-0.416 2.308,-1.02 0,0 0.938,2.083 1.938,3.583s2.5,3.125 2.5,3.125c-0.131,1.227 0.12,2.176 0.549,2.922 -0.385,0.757 -0.924,1.807 -1.417,2.745 -0.656,1.245 -1.473,3.224 -1.208,3.618 0.534,0.798 2.719,2.926 4.137,3.311 1.03,0.28 2.14,0.437 2.14,0.437l-0.193,-1.574s-1.343,0.213 -1.875,-0.083c-1.427,-0.795 -2.666,-2.248 -2.708,-2.542 -0.07,-0.487 3.841,-2.868 5.14,-3.645 2.266,0.097 6.022,-0.369 8.626,-1.702 0.958,1.86 2.978,2.513 2.978,2.513s0.667,2.208 1.375,4.125c-1.017,0.533 -4.468,3.254 -4.975,3.854 -0.456,0.54 -0.856,2.49 -0.856,2.49 0.82,0.375 1.57,0.187 1.57,0.187s0.039,-1.562 0.385,-2.073c0.346,-0.511 4.701,-2.559 5.958,-3.458 0.492,-0.352 0.404,-0.903 0.262,-1.552 -0.321,-1.471 -0.97,-4.781 -0.971,-4.782 5.146,-2.979 6.458,-11.316 -2.354,-10.916z"
android:fillColor="#C1694F"/>
<path
android:pathData="M22.336,33.782s-0.616,1.993 0.008,2.138c0.605,0.141 1.694,-0.388 1.755,-0.646 0.081,-0.343 0.216,-1.179 0.098,-1.366 -0.118,-0.187 -1.861,-0.126 -1.861,-0.126zM14.66,28.486c-0.167,0.146 0.164,1.859 0.164,1.859s2.064,0.299 2.111,-0.34c0.045,-0.62 -0.647,-1.614 -0.91,-1.634 -0.351,-0.027 -1.198,-0.031 -1.365,0.115z"
android:fillColor="#292F33"/>
<path
android:pathData="M4.25,8.047m-0.349,0a0.349,0.349 0,1 1,0.698 0a0.349,0.349 0,1 1,-0.698 0"
android:fillColor="#292F33"/>
<path
android:pathData="M12.655,9.07c1.773,1.446 3.147,0.322 3.147,0.322 -1.295,-0.271 -2.056,-0.867 -2.708,-1.562 0.835,-0.131 1.287,-0.666 1.287,-0.666 -1.061,-0.013 -1.824,-0.3 -2.485,-0.699 -0.565,-0.614 -1.233,-1.202 -2.254,-1.631 -0.294,-0.125 -0.606,-0.21 -0.922,-0.276 -0.086,-0.025 -0.178,-0.063 -0.258,-0.073 -0.906,-0.114 -1.845,0.051 -2.737,0.603 -0.322,0.2 -0.214,0.639 0.117,0.623 1.741,-0.085 2.866,0.582 3.47,1.633 2.169,3.772 5.344,3.875 5.344,3.875s-1.29,-0.688 -2.001,-2.149z"
android:fillColor="#292F33"/>
</vector>
@@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M36,19.854C33.518,9.923 25.006,1.909 16.031,6.832c0,0 -4.522,-1.496 -5.174,-1.948 -0.635,-0.44 -1.635,-0.904 -0.912,0.436 0.423,0.782 0.875,1.672 2.403,3.317C8,12.958 9.279,18.262 7.743,21.75c-1.304,2.962 -2.577,4.733 -1.31,6.976 1.317,2.33 4.729,3.462 7.018,1.06 1.244,-1.307 0.471,-1.937 3.132,-4.202 2.723,-0.543 4.394,-1.791 4.394,-4.375 0,0 0.795,-0.382 1.826,6.009 0.456,2.818 -0.157,5.632 -0.039,8.783H36V19.854z"
android:fillColor="#C1CDD5"/>
<path
android:pathData="M31.906,6.062c0.531,1.312 0.848,3.71 0.595,5.318 -0.15,-3.923 -3.188,-6.581 -4.376,-7.193 -2.202,-1.137 -4.372,-0.979 -6.799,-0.772 0.111,0.168 0.403,0.814 0.32,1.547 -0.479,-0.875 -1.604,-1.42 -2.333,-1.271 -1.36,0.277 -2.561,0.677 -3.475,1.156 -0.504,0.102 -1.249,0.413 -2.372,1.101 -1.911,1.171 -4.175,4.338 -6.737,3.511 1.042,2.5 3.631,1.845 3.631,1.845 1.207,-1.95 4.067,-3.779 6.168,-4.452 7.619,-1.745 12.614,3.439 15.431,9.398 0.768,1.625 2.611,7.132 4.041,10.292V10.956c-0.749,-1.038 -1.281,-3.018 -4.094,-4.894z"
android:fillColor="#60379A"/>
<path
android:pathData="M13.789,3.662c0.573,0.788 3.236,0.794 4.596,3.82 1.359,3.026 -1.943,2.63 -3.14,1.23 -1.334,-1.561 -1.931,-2.863 -2.165,-3.992 -0.124,-0.596 -0.451,-2.649 0.709,-1.058z"
android:fillColor="#C1CDD5"/>
<path
android:pathData="M14.209,4.962c0.956,0.573 2.164,1.515 2.517,2.596 0.351,1.081 -0.707,0.891 -1.349,-0.042 -0.641,-0.934 -0.94,-1.975 -1.285,-2.263 -0.346,-0.289 0.117,-0.291 0.117,-0.291z"
android:fillColor="#758795"/>
<path
android:pathData="M15.255,14.565m-0.946,0a0.946,0.946 0,1 1,1.892 0a0.946,0.946 0,1 1,-1.892 0"
android:fillColor="#292F33"/>
<path
android:pathData="M8.63,26.877c0.119,0.658 -0.181,1.263 -0.67,1.351 -0.49,0.089 -0.984,-0.372 -1.104,-1.03 -0.119,-0.659 0.182,-1.265 0.671,-1.354 0.49,-0.088 0.984,0.373 1.103,1.033z"
android:fillColor="#53626C"/>
<path
android:pathData="M13.844,8.124l0.003,-0.002 -0.005,-0.007 -0.016,-0.014c-0.008,-0.007 -0.011,-0.019 -0.019,-0.025 -0.009,-0.007 -0.021,-0.011 -0.031,-0.018C12.621,7.078 0.933,-0.495 0.219,0.219 -0.51,0.948 10.443,9.742 11.149,10.28l0.011,0.006 0.541,0.439c0.008,0.007 0.01,0.018 0.018,0.024 0.013,0.01 0.028,0.015 0.042,0.024l0.047,0.038 -0.009,-0.016c0.565,0.361 1.427,0.114 1.979,-0.592 0.559,-0.715 0.577,-1.625 0.066,-2.079z"
android:fillColor="#EE7C0E"/>
<path
android:pathData="M4.677,2.25l0.009,-0.025c-0.301,-0.174 -0.594,-0.341 -0.878,-0.5 -0.016,0.038 -0.022,0.069 -0.041,0.11 -0.112,0.243 -0.256,0.484 -0.429,0.716 -0.166,0.224 -0.349,0.424 -0.541,0.595 -0.02,0.018 -0.036,0.026 -0.056,0.043 0.238,0.22 0.489,0.446 0.745,0.676 0.234,-0.21 0.456,-0.449 0.654,-0.717 0.214,-0.287 0.395,-0.589 0.537,-0.898zM6.952,5.195c0.306,-0.41 0.521,-0.822 0.66,-1.212 -0.292,-0.181 -0.584,-0.36 -0.876,-0.538 -0.076,0.298 -0.247,0.699 -0.586,1.152 -0.31,0.417 -0.613,0.681 -0.864,0.845 0.259,0.223 0.52,0.445 0.779,0.665 0.314,-0.244 0.619,-0.552 0.887,-0.912zM9.87,7.32c0.365,-0.49 0.609,-0.983 0.734,-1.437l-0.906,-0.586c-0.023,0.296 -0.172,0.81 -0.631,1.425 -0.412,0.554 -0.821,0.847 -1.1,0.978l0.814,0.671c0.381,-0.256 0.761,-0.611 1.089,-1.051z"
android:fillColor="#C43512"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M34.193,13.329c0.387,-0.371 0.733,-0.795 1.019,-1.28 1.686,-2.854 0.27,-10.292 -0.592,-10.8 -0.695,-0.411 -5.529,1.05 -8.246,3.132C23.876,2.884 21.031,2 18,2c-3.021,0 -5.856,0.879 -8.349,2.367C6.93,2.293 2.119,0.839 1.424,1.249c-0.861,0.508 -2.276,7.947 -0.592,10.8 0.278,0.471 0.615,0.884 0.989,1.249C0.666,15.85 0,18.64 0,21.479 0,31.468 8.011,34 18,34s18,-2.532 18,-12.521c0,-2.828 -0.66,-5.606 -1.807,-8.15z"
android:fillColor="#F4ABBA"/>
<path
android:pathData="M7.398,5.965c-2.166,-1.267 -4.402,-2.08 -4.8,-1.845 -0.57,0.337 -1.083,4.998 -0.352,8.265 1.273,-2.483 3.04,-4.682 5.152,-6.42zM33.753,12.384c0.733,-3.267 0.219,-7.928 -0.351,-8.265 -0.398,-0.235 -2.635,0.578 -4.801,1.845 2.114,1.739 3.88,3.938 5.152,6.42zM28,23.125c0,4.487 -3.097,9.375 -10,9.375 -6.904,0 -10,-4.888 -10,-9.375S11.096,17.5 18,17.5c6.903,0 10,1.138 10,5.625z"
android:fillColor="#EA596E"/>
<path
android:pathData="M15,24.6c0,1.857 -0.34,2.4 -1.5,2.4s-1.5,-0.543 -1.5,-2.4c0,-1.856 0.34,-2.399 1.5,-2.399s1.5,0.542 1.5,2.399zM24,24.6c0,1.857 -0.34,2.4 -1.5,2.4s-1.5,-0.543 -1.5,-2.4c0,-1.856 0.34,-2.399 1.5,-2.399s1.5,0.542 1.5,2.399z"
android:fillColor="#662113"/>
<path
android:pathData="M7,17m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#292F33"/>
<path
android:pathData="M29,17m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#292F33"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M34.453,15.573c-0.864,-7.3 -5.729,-10.447 -13.93,-10.447 -0.391,0 -0.763,0.017 -1.139,0.031 -0.013,-0.01 -0.022,-0.021 -0.035,-0.031C14.655,1.605 4.091,2.779 1.745,6.3c-3.255,4.883 -1.174,22.3 0,24.646 1.173,2.35 4.694,3.521 5.868,2.35 1.174,-1.176 0,-1.176 -1.173,-3.521 -0.85,-1.701 -0.466,-5.859 0.255,-8.471 0.028,0.168 0.068,0.322 0.1,0.486 0.39,2.871 1.993,7.412 1.993,9.744 0,3.564 2.102,4.107 4.694,4.107 2.593,0 4.695,-0.543 4.695,-4.107 0,-0.24 -0.008,-0.463 -0.012,-0.695 0.757,0.064 1.535,0.107 2.359,0.107 0.497,0 0.977,-0.016 1.448,-0.039 -0.004,0.209 -0.013,0.41 -0.013,0.627 0,3.564 2.103,4.107 4.694,4.107 2.593,0 4.695,-0.543 4.695,-4.107 0,-1.801 1.192,-4.625 2.039,-6.982 0.159,-0.354 0.291,-0.732 0.42,-1.117 0.118,1.307 0.193,2.706 0.193,4.206 0,0.553 0.447,1 1,1s1,-0.447 1,-1c0,-5.153 -0.771,-9.248 -1.547,-12.068z"
android:fillColor="#99AAB5"/>
<path
android:pathData="M19.35,5.126S23,10.641 20,15.641c-3,5 -7.838,5 -11,5 -2,0 -1,2 0,2 1.414,0 8.395,1.211 12,-6 3,-6 -1.65,-11.515 -1.65,-11.515z"
android:fillColor="#66757F"/>
<path
android:pathData="M6.5,14.141m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
android:fillColor="#292F33"/>
</vector>
@@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M33.799,0.005c-0.467,-0.178 -7.998,3.971 -9.969,9.131 -1.166,3.052 -1.686,6.058 -1.652,8.112C20.709,16.459 19.257,16 18,16s-2.709,0.458 -4.178,1.249c0.033,-2.055 -0.486,-5.061 -1.652,-8.112C10.2,3.977 2.668,-0.173 2.201,0.005c-0.455,0.174 4.268,16.044 7.025,20.838C6.805,23.405 5,26.661 5,29.828c0,3.234 1.635,5.14 4,5.94 2.531,0.857 5,-0.94 9,-0.94s6.469,1.798 9,0.94c2.365,-0.801 4,-2.706 4,-5.94 0,-3.166 -1.805,-6.423 -4.225,-8.984C29.53,16.049 34.255,0.179 33.799,0.005z"
android:fillColor="#99AAB5"/>
<path
android:pathData="M12.692,17.922c-0.178,-1.54 -0.68,-3.55 -1.457,-5.584 -1.534,-4.016 -5.686,-7.245 -6.049,-7.107 -0.319,0.122 2.627,10.14 4.783,14.863 0.866,-0.824 1.786,-1.563 2.723,-2.172zM26.03,20.094c2.156,-4.723 5.102,-14.741 4.784,-14.862 -0.363,-0.139 -4.516,3.091 -6.05,7.107 -0.777,2.034 -1.279,4.043 -1.457,5.583 0.937,0.609 1.857,1.348 2.723,2.172z"
android:fillColor="#F4ABBA"/>
<path
android:pathData="M25,30c0,2.762 -3.06,5 -6.834,5 -3.773,0 -6.833,-2.238 -6.833,-5s3.06,-5 6.833,-5C21.94,25 25,27.238 25,30z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M21,30.578c0,2.762 -0.238,3 -3,3 -2.761,0 -3,-0.238 -3,-3 0,-1 6,-1 6,0z"
android:fillColor="#FFF"/>
<path
android:pathData="M12.5,24.328m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
android:fillColor="#292F33"/>
<path
android:pathData="M23.5,24.328m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
android:fillColor="#292F33"/>
<path
android:pathData="M21,25.828c0,1.657 -2,3 -3,3s-3,-1.343 -3,-3 6,-1.657 6,0z"
android:fillColor="#F4ABBA"/>
</vector>
@@ -0,0 +1,42 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M7,6m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
android:fillColor="#272B2B"/>
<path
android:pathData="M29,6m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
android:fillColor="#272B2B"/>
<path
android:pathData="M7,6m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:fillColor="#66757F"/>
<path
android:pathData="M29,6m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:fillColor="#66757F"/>
<path
android:pathData="M35,22c0,7 -6.375,12 -17,12S1,29 1,22C1,22 2.308,0 18,0s17,22 17,22z"
android:fillColor="#EEE"/>
<path
android:pathData="M18,30m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M18,30m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:fillColor="#DD2E44"/>
<path
android:pathData="M20.709,12.654C25.163,9.878 32,17 26.952,22.67 23.463,26.591 20,25 20,25s-2.636,-10.26 0.709,-12.346zM15.267,12.665C10.813,9.888 3.976,17.01 9.023,22.681c3.49,3.92 6.953,2.329 6.953,2.329s2.636,-10.26 -0.709,-12.345z"
android:fillColor="#272B2B"/>
<path
android:pathData="M11,17s0,-2 2,-2 2,2 2,2v2s0,2 -2,2 -2,-2 -2,-2v-2z"
android:fillColor="#66757F"/>
<path
android:pathData="M18,20S7,23.687 7,27s2.687,6 6,6c2.088,0 3.925,-1.067 5,-2.685C19.074,31.933 20.912,33 23,33c3.313,0 6,-2.687 6,-6s-11,-7 -11,-7z"
android:fillColor="#FFF"/>
<path
android:pathData="M21,17s0,-2 2,-2 2,2 2,2v2s0,2 -2,2 -2,-2 -2,-2v-2z"
android:fillColor="#66757F"/>
<path
android:pathData="M13.125,25c-1.624,1 3.25,4 4.875,4s6.499,-3 4.874,-4 -8.124,-1 -9.749,0z"
android:fillColor="#272B2B"/>
</vector>
@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M24.88,33.097c-0.098,-0.18 -0.25,-0.302 -0.418,-0.391C22.865,31 24,28.999 24,28.999c0,-0.553 1,-2 0,-2l-1,1c-1,1 -1,4 -1,4h-2c-0.553,0 -1,0.447 -1,1 0,0.553 0.447,1 1,1h1.107l-0.222,0.12c-0.486,0.263 -0.667,0.869 -0.404,1.355s0.869,0.667 1.356,0.404l2.639,-1.427c0.486,-0.262 0.667,-0.868 0.404,-1.354zM17.88,33.097c-0.097,-0.18 -0.25,-0.302 -0.417,-0.391C15.866,31 17,28.999 17,28.999c0,-0.553 1,-2 0,-2l-1,1c-1,1 -1,4 -1,4h-2c-0.553,0 -1,0.447 -1,1 0,0.553 0.447,1 1,1h1.108l-0.222,0.12c-0.486,0.263 -0.667,0.869 -0.404,1.355s0.869,0.667 1.356,0.404l2.639,-1.427c0.485,-0.262 0.666,-0.868 0.403,-1.354zM7.516,10c0,1.104 -1.119,2 -2.5,2s-3.5,-1 -3.5,-2 2.119,-2 3.5,-2c1.38,0 2.5,0.896 2.5,2z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M13.516,2c-2,-1 -3,1 -3,1s0,-3 -3,-3 -3,3 -3,3 -3,-0.938 -3,2c0,1.482 1.101,2.411 2.484,2.387V12c0,1 0.263,3 -0.737,4s-2.484,4 0.516,4 3,-4 3,-7c1,1 4,1 4,-4 0,-0.867 -0.213,-1.512 -0.55,-2h1.287c4,0 4,-4 2,-5z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M32.516,9c4,10 0,22 -13,22 -7.732,0 -13,-6 -14,-11 -1.177,-5.883 -1,-8 -1,-12 0,-2.738 2.118,-4.824 5,-4 7,2 5,10 12,10 10,0 8.23,-11.923 11,-5z"
android:fillColor="#E1E8ED"/>
<path
android:pathData="M7.516,8m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#292F33"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M28.068,31.355c-2.229,0 -8.468,0.785 -10.068,1.832 -1.601,-1.047 -7.84,-1.832 -10.069,-1.832 -2.564,0 -1.161,1.039 -1.161,2.322C6.77,34.96 5.367,36 7.931,36c2.229,0 8.468,-0.785 10.069,-1.832C19.601,35.215 25.84,36 28.068,36c2.565,0 1.161,-1.04 1.161,-2.322 0,-1.283 1.405,-2.323 -1.161,-2.323z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M31.73,15.866c-1.25,-2.499 -3.152,-4.995 -4.942,-6.723C24.337,3.711 20.759,0 18,0s-6.337,3.71 -8.788,9.143c-1.791,1.729 -3.693,4.224 -4.943,6.724 -2.438,4.876 -3.116,11.426 -2.078,11.944 0.873,0.437 2.324,-1.552 4.208,-5.082C6.667,33.604 13.446,33.678 18,33.678c4.553,0 11.333,-0.073 11.601,-10.947 1.884,3.528 3.335,5.517 4.207,5.08 1.038,-0.519 0.361,-7.069 -2.078,-11.945z"
android:fillColor="#292F33"/>
<path
android:pathData="M21.675,6.943c-0.85,0.607 -2.172,1.186 -3.675,1.186s-2.825,-0.578 -3.675,-1.185c-3.302,2.137 -5.615,7.06 -5.615,12.798 0,7.695 4.159,13.936 9.29,13.936 5.132,0 9.291,-6.24 9.291,-13.936 0,-5.738 -2.313,-10.662 -5.616,-12.799z"
android:fillColor="#F5F8FA"/>
<path
android:pathData="M28.452,6h-5.808C18.797,6 18,5.22 18,4.257c0,-0.962 -0.364,-1.742 3.483,-1.742C27.291,2.516 29.613,6 28.452,6z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M16.839,3.483c0,0.642 -0.52,1.162 -1.161,1.162 -0.642,0 -1.161,-0.521 -1.161,-1.162 0,-0.641 0.52,-1.161 1.161,-1.161s1.161,0.52 1.161,1.161z"
android:fillColor="#F5F8FA"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M9.842,19.922c0,9.842 6.575,9.673 5.158,10.078 -7,2 -8.803,-7.618 -9.464,-7.618 -2.378,0 -5.536,-0.423 -5.536,-2.46C0,17.883 2.46,15 6.151,15c2.379,0 3.691,2.883 3.691,4.922zM36,28.638c0,1.104 -3.518,-0.741 -5,0 -2,1 -2,-0.896 -2,-2s1.343,-1 3,-1 4,1.895 4,3z"
android:fillColor="#77B255"/>
<path
android:pathData="M16.715,33.143c0,2.761 -1.279,2.857 -2.857,2.857S11,35.903 11,33.143c0,-0.489 0.085,-1.029 0.234,-1.587 0.69,-2.59 2.754,-5.556 4.052,-5.556 1.578,0 1.429,4.382 1.429,7.143zM25.286,33.143c0,2.761 1.278,2.857 2.856,2.857C29.721,36 31,35.903 31,33.143c0,-0.489 -0.085,-1.029 -0.234,-1.587 -0.691,-2.59 -2.754,-5.556 -4.052,-5.556 -1.578,0 -1.428,4.382 -1.428,7.143z"
android:fillColor="#77B255"/>
<path
android:pathData="M32,27c0,4 -5.149,4 -11.5,4S9,31 9,27c0,-6.627 5.149,-12 11.5,-12S32,20.373 32,27z"
android:fillColor="#3E721D"/>
<path
android:pathData="M5,18m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#292F33"/>
<path
android:pathData="M23.667,25.1c0,3.591 -1.418,3.9 -3.167,3.9s-3.167,-0.31 -3.167,-3.9S18.75,17 20.5,17s3.167,4.51 3.167,8.1zM30,24c0.871,3.482 -0.784,4 -2.533,4 -1.749,0 -2.533,0.69 -2.533,-2.9s-1.116,-6.5 0.633,-6.5C27.315,18.6 29,20 30,24zM16.067,25.1c0,3.591 -0.785,2.9 -2.534,2.9s-3.404,-0.518 -2.533,-4c1,-4 3.251,-5.4 5,-5.4 1.75,0 0.067,2.91 0.067,6.5z"
android:fillColor="#5C913B"/>
</vector>
@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M32.153,24c0,-1 1.523,-6.212 3.047,-7.735 1.522,-1.523 0,-3.166 -1.523,-3.166 -3.405,0 -9.139,6.901 -9.139,10.901 0,5 5.733,10.424 9.139,10.424 1.523,0 3.046,-1.404 1.523,-2.928C33.677,29.974 32.153,26 32.153,24z"
android:fillColor="#3B88C3"/>
<path
android:pathData="M9.021,14.384c0,-3.046 1.497,-6.093 3.02,-6.093 4.569,0 13.322,4.823 14.845,12.439 1.524,7.616 -17.865,-6.346 -17.865,-6.346zM13.875,32.662c1.523,1.523 4.57,3.047 7.617,3.047 3.046,0 -3.111,-4.189 -1.523,-6.092 2.18,-2.617 -6.094,3.045 -6.094,3.045z"
android:fillColor="#3B88C3"/>
<path
android:fillColor="#FF000000"
android:pathData="M2.071,28.727c0.761,-2.285 0.19,-3.935 -1.143,-5.584 -1.333,-1.651 3.872,-1.904 5.585,0.381s5.713,6.281 2.158,6.22c-3.553,-0.065 -6.6,-1.017 -6.6,-1.017z"/>
<path
android:pathData="M0.168,23.488c0.959,0.874 7.223,4.309 7.165,5.137 -0.058,0.828 -2.279,-0.088 -3.105,-0.279 -1.485,-0.342 -1.905,-0.598 -2.317,-0.526 -0.84,0.321 -0.554,1.201 -0.242,1.704 1.498,2.61 7.286,4.662 12.16,4.662 8.412,0 16.802,-7.615 16.802,-10.662 0,-3.046 -9.345,-10.663 -17.757,-10.663C4.483,12.86 0.18,18.922 0.168,23.488z"
android:fillColor="#55ACEE"/>
<path
android:fillColor="#FF000000"
android:pathData="M7,17c1.104,0 2,0.894 2,2 0,1.105 -0.896,2 -2,2 -1.105,0 -2,-0.896 -2,-2 0,-1.106 0.895,-2 2,-2z"/>
<path
android:pathData="M15.08,29.98c-0.156,0 -0.314,-0.036 -0.462,-0.113 -0.49,-0.256 -0.679,-0.86 -0.423,-1.35 1.585,-3.034 2.218,-5.768 0.154,-9.243 -0.282,-0.475 -0.126,-1.088 0.349,-1.371 0.475,-0.283 1.088,-0.124 1.371,0.349 2.693,4.535 1.46,8.202 -0.102,11.191 -0.178,0.342 -0.527,0.537 -0.887,0.537z"
android:fillColor="#269"/>
</vector>
@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M10,12c3,5 0,10.692 -3,9.692s-4,2 -1,3 9.465,-0.465 13,-4c1,-1 2,-1 2,-1L10,12z"
android:fillColor="#553788"/>
<path
android:pathData="M26,12c-3,5 0,10.692 3,9.692s4,2 1,3 -9.465,-0.465 -13,-4c-1,-1 -2,-1 -2,-1L26,12z"
android:fillColor="#553788"/>
<path
android:pathData="M30.188,16c-3,5 0,10.692 3,9.692s4,2 1,3 -9.465,-0.465 -13,-4c-1,-1 -2,-1 -2,-1l11,-7.692zM5.812,16c3,5 0,10.692 -3,9.692s-4,2 -1,3 9.465,-0.465 13,-4c1,-1 2,-1 2,-1L5.812,16z"
android:fillColor="#744EAA"/>
<path
android:pathData="M33.188,31.375c-2.729,0.91 -6.425,-5.626 -4.812,-10.578C30.022,17.554 31,13.94 31,11c0,-7.18 -5.82,-11 -13,-11S5,3.82 5,11c0,2.94 0.978,6.554 2.624,9.797 1.613,4.952 -2.083,11.488 -4.812,10.578 -3,-1 -4,3 -1,4s8.31,-0.627 12,-4c2.189,-2 4.189,-2 4.189,-2s2,0 4.188,2c3.69,3.373 9,5 12,4s1.999,-5 -1.001,-4z"
android:fillColor="#9266CC"/>
<path
android:pathData="M14,21m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#292F33"/>
<path
android:pathData="M22,21m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#292F33"/>
</vector>
@@ -0,0 +1,39 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M20.004,20.243c-0.426,0 -0.858,0.01 -1.294,0.031 -0.436,1.268 -0.468,2.747 0,5.097 0.328,1.646 2.659,6.299 4.584,7.933 0.683,0.58 1.638,0.884 2.69,0.884 2.144,0 4.691,-1.265 6.157,-4.034 3.001,-5.671 -3.474,-9.911 -12.137,-9.911z"
android:fillColor="#1C6399"/>
<path
android:pathData="M33.666,1.973c-0.204,0 -0.425,0.021 -0.663,0.066 -3.182,0.601 -9.302,5.126 -14.287,11.771 0,0 -0.789,5.16 -0.789,6.194 0,0.336 1.264,0.5 3.058,0.5 3.717,0 9.709,-0.705 11.424,-2.041 1.898,-1.479 3.65,-9.804 3.488,-14.079 -0.046,-1.175 -0.662,-2.411 -2.231,-2.411z"
android:fillColor="#1C6399"/>
<path
android:pathData="M27.098,13.936l6.629,-0.436s-1.055,3.619 -3.102,4.656 -7.719,1.5 -7.719,1.5 2.33,-4.261 3.286,-5.29c0.237,-0.256 0.559,-0.408 0.906,-0.43zM27.618,11.984l7.526,-8.151s0.002,5.365 -1.206,8.635c0,0 -5.383,0.379 -5.914,0.391 -0.703,0.016 -0.969,-0.265 -0.406,-0.875zM21.55,19.656l5.5,-8.547c0.188,-0.22 0.253,-0.52 0.171,-0.798l-0.968,-3.233 -6.722,6.609 -0.844,6.031 2.863,-0.062zM27.862,8.88c0.172,0.406 0.516,0.5 0.938,0.125s6.074,-6.094 6,-6.218c0,0 -2.832,-1.194 -7.8,3.463 0,0 0.69,2.224 0.862,2.63zM18.937,20.979l5.373,5.228c0.203,0.178 0.255,0.473 0.125,0.709L22.06,31.25s-4.187,-5.479 -3.123,-10.271zM26.219,27.28l5.549,0.741s-1.058,3.845 -3.394,4.854c-3.906,1.688 -5.312,-0.625 -5.312,-0.625l2.352,-4.562c0.151,-0.298 0.477,-0.463 0.805,-0.408zM20.269,20.854l5.375,4.958c0.077,0.066 0.169,0.11 0.269,0.129l6.119,0.903s-1.219,-3.031 -4.429,-4.531c-3.71,-1.733 -7.334,-1.459 -7.334,-1.459z"
android:fillColor="#55ACEE"/>
<path
android:pathData="M20.004,20.243c-0.426,0 -0.858,0.01 -1.294,0.031 -0.436,1.268 -0.468,2.747 0,5.097 0.328,1.646 2.659,6.299 4.584,7.933 0.683,0.58 1.638,0.884 2.69,0.884 2.144,0 4.691,-1.265 6.157,-4.034 3.001,-5.671 -3.474,-9.911 -12.137,-9.911zM30.541,29.569c-1.316,2.486 -3.05,3.473 -4.558,3.473 -0.767,0 -1.704,-0.313 -2.15,-0.691 -1.695,-1.439 -3.437,-4.58 -4.25,-7.224 -0.465,-1.513 -0.354,-4.022 -0.354,-4.022l0.667,-0.021c5.168,0 9.249,2.058 10.726,4.512 0.714,1.186 0.687,2.523 -0.081,3.973z"
android:fillColor="#292F33"/>
<path
android:pathData="M33.666,3.223c0.231,0 0.935,0 0.981,1.208 0.102,2.681 -0.594,6.061 -1.397,8.882 -0.541,1.901 -1.586,3.292 -2.094,3.687 -0.56,0.436 -1.863,1.238 -3.719,1.563 -2.03,0.355 -4.207,0.833 -6.456,0.833 -0.827,0 -1.433,0.019 -1.794,-0.021 0.131,-1.218 0.489,-3.551 0.717,-5.064 3.768,-4.94 9.711,-10.361 13.331,-11.044 0.155,-0.029 0.3,-0.044 0.431,-0.044m0,-1.25c-0.204,0 -0.425,0.021 -0.663,0.066 -3.182,0.601 -9.302,5.126 -14.287,11.771 0,0 -0.789,5.16 -0.789,6.194 0,0.336 1.264,0.5 3.058,0.5 3.717,0 9.709,-0.705 11.424,-2.041 1.898,-1.479 3.65,-9.804 3.488,-14.079 -0.046,-1.175 -0.662,-2.411 -2.231,-2.411z"
android:fillColor="#292F33"/>
<path
android:pathData="M3.902,30.154c1.466,2.769 4.012,4.034 6.157,4.034 1.052,0 2.007,-0.304 2.69,-0.884 1.925,-1.633 4.256,-6.286 4.584,-7.933 0.468,-2.35 0.436,-3.828 0,-5.097 -0.436,-0.021 -0.868,-0.031 -1.294,-0.031 -8.665,0 -15.139,4.24 -12.137,9.911z"
android:fillColor="#1C6399"/>
<path
android:pathData="M2.376,1.973C0.807,1.973 0.19,3.209 0.146,4.383c-0.162,4.275 1.59,12.601 3.488,14.079 1.715,1.336 7.706,2.041 11.424,2.041 1.794,0 3.058,-0.164 3.058,-0.5 0,-1.033 -0.789,-6.194 -0.789,-6.194C12.341,7.165 6.22,2.64 3.039,2.039c-0.238,-0.045 -0.459,-0.066 -0.663,-0.066z"
android:fillColor="#1C6399"/>
<path
android:pathData="M8.943,13.936L2.315,13.5s1.055,3.619 3.102,4.656 7.719,1.5 7.719,1.5 -2.33,-4.261 -3.286,-5.29c-0.237,-0.256 -0.559,-0.408 -0.907,-0.43zM8.424,11.984L0.898,3.833s-0.002,5.365 1.206,8.635c0,0 5.383,0.379 5.914,0.391 0.703,0.016 0.969,-0.265 0.406,-0.875zM14.492,19.656l-5.5,-8.547c-0.188,-0.22 -0.253,-0.52 -0.171,-0.798l0.968,-3.233 6.722,6.609 0.844,6.031 -2.863,-0.062zM8.179,8.88c-0.172,0.406 -0.516,0.5 -0.938,0.125s-6.074,-6.094 -6,-6.218c0,0 2.832,-1.194 7.8,3.463 0.001,0 -0.69,2.224 -0.862,2.63zM17.105,20.979l-5.373,5.228c-0.203,0.178 -0.255,0.473 -0.125,0.709l2.375,4.333c-0.001,0.001 4.187,-5.478 3.123,-10.27zM9.822,27.28l-5.549,0.741s1.058,3.845 3.394,4.854c3.906,1.688 5.312,-0.625 5.312,-0.625l-2.352,-4.562c-0.15,-0.298 -0.476,-0.463 -0.805,-0.408zM15.773,20.854l-5.375,4.958c-0.077,0.066 -0.169,0.11 -0.269,0.129l-6.119,0.903s1.219,-3.031 4.429,-4.531c3.709,-1.733 7.334,-1.459 7.334,-1.459z"
android:fillColor="#55ACEE"/>
<path
android:pathData="M3.902,30.154c1.466,2.769 4.012,4.034 6.157,4.034 1.052,0 2.007,-0.304 2.69,-0.884 1.925,-1.633 4.256,-6.286 4.584,-7.933 0.468,-2.35 0.436,-3.828 0,-5.097 -0.436,-0.021 -0.868,-0.031 -1.294,-0.031 -8.665,0 -15.139,4.24 -12.137,9.911zM5.42,25.595c1.477,-2.454 5.558,-4.512 10.726,-4.512l0.667,0.021s0.111,2.51 -0.354,4.022c-0.813,2.644 -2.555,5.785 -4.25,7.224 -0.446,0.379 -1.383,0.691 -2.15,0.691 -1.508,0 -3.242,-0.986 -4.558,-3.473 -0.768,-1.449 -0.795,-2.786 -0.081,-3.973z"
android:fillColor="#292F33"/>
<path
android:pathData="M2.376,3.223c0.131,0 0.276,0.015 0.431,0.044 3.619,0.683 9.563,6.104 13.331,11.044 0.228,1.513 0.586,3.846 0.717,5.064 -0.361,0.04 -0.967,0.021 -1.794,0.021 -2.249,0 -4.426,-0.478 -6.456,-0.833 -1.856,-0.325 -3.159,-1.127 -3.719,-1.563 -0.508,-0.396 -1.553,-1.786 -2.094,-3.687 -0.803,-2.821 -1.499,-6.201 -1.397,-8.882 0.046,-1.208 0.749,-1.208 0.981,-1.208m0,-1.25C0.807,1.973 0.19,3.209 0.146,4.383c-0.162,4.275 1.59,12.601 3.488,14.079 1.715,1.336 7.706,2.041 11.424,2.041 1.794,0 3.058,-0.164 3.058,-0.5 0,-1.033 -0.789,-6.194 -0.789,-6.194C12.341,7.165 6.22,2.64 3.039,2.039c-0.238,-0.045 -0.459,-0.066 -0.663,-0.066z"
android:fillColor="#292F33"/>
<path
android:pathData="M21.887,4.762c-0.25,-0.138 -0.563,-0.047 -0.701,0.203l-2.74,4.98c-0.018,0.033 -0.022,0.068 -0.032,0.102 -0.127,-0.007 -0.244,-0.018 -0.393,-0.018 -0.148,0 -0.266,0.01 -0.392,0.018 -0.01,-0.034 -0.014,-0.069 -0.032,-0.102l-2.74,-4.98c-0.138,-0.25 -0.452,-0.341 -0.702,-0.203 -0.25,0.137 -0.341,0.451 -0.203,0.701l2.655,4.826c-1.179,0.784 1.15,3.438 0.381,9.204 -1.033,7.75 1.033,9.817 1.033,9.817s2.067,-2.067 1.033,-9.817c-0.769,-5.766 1.56,-8.42 0.381,-9.204l2.656,-4.826c0.137,-0.25 0.046,-0.564 -0.204,-0.701z"
android:fillColor="#292F33"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M34.751,22c-3.382,0 -11.9,3.549 -15.751,7.158V17c0,-0.553 -0.447,-1 -1,-1 -0.552,0 -1,0.447 -1,1v12.341C13.247,25.669 4.491,22 1.052,22 0.123,22 11.913,35.992 17,34.599V35c0,0.553 0.448,1 1,1 0.553,0 1,-0.447 1,-1v-0.356C24.188,35.638 35.668,22 34.751,22z"
android:fillColor="#77B255"/>
<path
android:pathData="M25,13.417C25,19.768 23.293,23 18,23s-7,-3.232 -7,-9.583S16,0 18,0s7,7.066 7,13.417z"
android:fillColor="#EA596E"/>
<path
android:pathData="M22.795,2c-0.48,0 -4.106,14.271 -4.803,19.279C17.246,16.271 13.481,2 13,2c-1,0 -6,9 -6,13s5.707,8 11,8 10.795,-4 10.795,-8 -5,-13 -6,-13z"
android:fillColor="#F4ABBA"/>
</vector>
@@ -0,0 +1,54 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M22,33c0,2.209 -1.791,3 -4,3s-4,-0.791 -4,-3l1,-9c0,-2.209 0.791,-2 3,-2s3,-0.209 3,2l1,9z"
android:fillColor="#662113"/>
<path
android:pathData="M34,17c0,8.837 -7.163,12 -16,12 -8.836,0 -16,-3.163 -16,-12C2,8.164 11,0 18,0s16,8.164 16,17z"
android:fillColor="#5C913B"/>
<path
android:pathData="M4,21a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M28,21a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M8,25a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M12,22a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M8,16a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M5,12a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M27,12a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M12,10a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M20,10a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M24,16a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M16,17a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M20,22a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M16,26a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
<path
android:pathData="M24,25a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
android:fillColor="#3E721D"/>
</vector>
@@ -0,0 +1,51 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M30,4c-2.209,0 -4,1.791 -4,4v9.125c0,1.086 -0.887,1.96 -2,2.448V6c0,-3.313 -2.687,-6 -6,-6s-6,2.687 -6,6v17.629c-1.122,-0.475 -2,-1.371 -2,-2.504V16c0,-2.209 -1.791,-4 -4,-4s-4,1.791 -4,4v7c0,2.209 1.75,3.875 3.375,4.812 1.244,0.718 4.731,1.6 6.625,1.651V33c0,3.313 12,3.313 12,0v-7.549c1.981,-0.119 5.291,-0.953 6.479,-1.639C32.104,22.875 34,21.209 34,19V8c0,-2.209 -1.791,-4 -4,-4z"
android:fillColor="#77B255"/>
<path
android:pathData="M12,6m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M23,3m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M21,9m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M14,16m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M20,20m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M13,26m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M5,27m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M9,20m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M2,18m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M34,8m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M28,11m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M32,16m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M29,24m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M22,30m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
</vector>
@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M27,33c0,2.209 -1.791,3 -4,3H13c-2.209,0 -4,-0.791 -4,-3s3,-7 3,-13 12,-6 12,0 3,10.791 3,13z"
android:fillColor="#99AAB5"/>
<path
android:pathData="M34.666,11.189l-0.001,-0.002c-0.96,-2.357 -2.404,-4.453 -4.208,-6.182h-0.003C27.222,1.904 22.839,0 18,0 13.638,0 9.639,1.541 6.524,4.115c-2.19,1.809 -3.941,4.13 -5.076,6.785C0.518,13.075 0,15.473 0,18c0,2.209 1.791,4 4,4h28c2.209,0 4,-1.791 4,-4 0,-2.417 -0.48,-4.713 -1.334,-6.811z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M7.708,16.583c3.475,0 6.292,-2.817 6.292,-6.292S11.184,4 7.708,4c-0.405,0 -0.8,0.042 -1.184,0.115 -2.19,1.809 -3.941,4.13 -5.076,6.785 0.306,3.189 2.991,5.683 6.26,5.683z"
android:fillColor="#F4ABBA"/>
<path
android:pathData="M7.708,4.25c3.331,0 6.041,2.71 6.041,6.042s-2.71,6.042 -6.041,6.042c-3.107,0 -5.678,-2.314 -6.006,-5.394 1.097,-2.541 2.8,-4.817 4.931,-6.59 0.364,-0.067 0.726,-0.1 1.075,-0.1m0,-0.25c-0.405,0 -0.8,0.042 -1.184,0.115 -2.19,1.809 -3.941,4.13 -5.076,6.785 0.306,3.189 2.992,5.683 6.261,5.683 3.475,0 6.291,-2.817 6.291,-6.292S11.184,4 7.708,4zM26,9.5c0,2.485 2.015,4.5 4.5,4.5 1.887,0 3.497,-1.164 4.166,-2.811l-0.001,-0.002c-0.96,-2.357 -2.404,-4.453 -4.208,-6.182C27.992,5.028 26,7.029 26,9.5z"
android:fillColor="#F4ABBA"/>
<path
android:pathData="M21.5,16m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
android:fillColor="#F4ABBA"/>
<path
android:pathData="M20,5m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
android:fillColor="#F4ABBA"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M18,18m-18,0a18,18 0,1 1,36 0a18,18 0,1 1,-36 0"
android:fillColor="#88C9F9"/>
<path
android:pathData="M2.812,25.375c-0.062,-1 -0.062,-1.187 -0.062,-2.375s0.562,-1 1.125,-1.562 0.438,-0.625 1.375,-1.241 0.438,-1.321 0.375,-1.696 -0.625,-0.063 -1.563,0.061 -0.624,-0.312 -1.187,-0.562 -0.812,-0.625 -1.188,-1.75 -0.438,-1.438 -0.312,-2.375 0.563,-0.063 0.625,0.937 0.938,0.625 0.938,1.25 1.25,1.312 1.562,1.5 1.188,-0.938 1.5,-1.25 0.688,-0.75 0.812,-1 1.688,-0.438 2,-0.438 1.062,0.938 1.062,1.375 0.375,1.625 0.688,2.312 1,0.812 1.625,1.312 0.938,0.062 0.938,0.062 -0.25,-1.062 -0.25,-1.938 0.75,-1.625 0.75,-1.625 1.188,0.875 1.25,1.125 1,1.125 1.062,1.562 0.562,1 1.483,1.125 0.267,-1.062 0.579,-1.875 0.75,-0.938 1.312,-1.062 1,-0.625 1.375,-1.125 1.062,-1.188 1,-1.75 -0.25,-0.938 -0.5,-1.625 0.75,-0.938 1.188,-1.75 0,0 1,-0.25 0.562,-0.25 0.75,-0.625 0.312,-0.75 0.125,-1.438 -0.875,0 -1.562,0S22.938,7.75 23,7s0.938,-0.562 1.562,-0.625 0.812,0.812 1,1 2.125,-1.25 2.625,-1.938 -0.437,-0.499 -0.187,-0.789 -1.5,-0.349 -2.188,-0.46 -2.437,-0.188 -3.124,-0.612 -3.312,-0.104 -4,0.237 -1.125,-0.029 -1.438,-0.5 -1.625,-0.235 -2,-0.5 -0.75,0.437 -1.25,0.625 -0.688,0.25 -1.312,-0.125 0.187,-0.813 -0.688,-1.125c-0.586,-0.209 -1.288,-0.087 -2.38,-0.111C3.902,5.092 0,11.087 0,18c0,3.42 0.971,6.605 2.627,9.327 0.308,-0.518 0.231,-1.217 0.185,-1.952zM17.312,24.188c0.438,0.062 1.688,0 0.688,-0.812s-1.562,-0.188 -1.438,-1.125 -0.625,-0.938 -0.625,-0.938c0,0.688 -0.5,1.438 0,2.125s0.938,0.687 1.375,0.75z"
android:fillColor="#5C913B"/>
<path
android:pathData="M23.688,13.75c-1,-0.812 -0.25,-0.562 -0.125,-1.5s-0.625,-0.938 -0.625,-0.938c0,0.688 -0.5,1.438 0,2.125s-1,1.25 -0.562,1.312 2.312,-0.187 1.312,-0.999zM19.808,23.5c0.62,0.688 0.38,0 1.192,-0.312s-0.688,-1 -1.188,-1.375 -0.997,-0.389 -1.434,0.438c-0.496,0.937 0.81,0.561 1.43,1.249zM27.125,24.75c-0.312,-0.375 -1,-0.562 -1.75,-0.545 -0.75,0.018 -0.688,-0.83 -1.438,-0.768s-1.286,-0.504 -1.625,-0.679c-0.737,-0.38 -0.25,0.491 0,1.446s1.188,0.232 2.062,0.732 0.938,-0.188 1.75,0.062 1.125,0.812 1.904,0.75 -0.59,-0.623 -0.903,-0.998zM25.5,27.5c-0.312,-0.625 -1.226,-1.188 -1.601,-1.505s-0.962,-0.424 -1.462,-0.24 -0.812,0 -1.062,-0.495 -0.688,-0.322 -1.062,-0.26 -1.875,0.688 -2.75,1.125 -1.273,0.817 -1.847,1.375c-0.898,0.874 -0.403,0.312 0,0.875 0.403,0.562 -0.442,2.312 -0.504,3.312s1.602,-0.312 2.227,-0.438 0.441,-0.5 0.941,-0.875 0.825,-0.463 1.374,0.037c0.549,0.5 1.268,0.963 1.268,1.525s1.979,1.5 2.729,1.125 1.188,-1.125 1.875,-1.75 0.438,-1.812 0.625,-2.562 -0.439,-0.624 -0.751,-1.249z"
android:fillColor="#5C913B"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M30.312,0.776C32,19 20,32 0.776,30.312c8.199,7.717 21.091,7.588 29.107,-0.429C37.9,21.867 38.03,8.975 30.312,0.776z"
android:fillColor="#FFD983"/>
<path
android:pathData="M30.705,15.915c-0.453,0.454 -0.453,1.189 0,1.644 0.454,0.453 1.189,0.453 1.643,0 0.454,-0.455 0.455,-1.19 0,-1.644 -0.453,-0.454 -1.189,-0.454 -1.643,0zM14.683,30.295c-0.682,0.681 -0.682,1.783 0,2.465 0.68,0.682 1.784,0.682 2.464,0 0.681,-0.682 0.681,-1.784 0,-2.465 -0.68,-0.682 -1.784,-0.682 -2.464,0zM28.651,28.148c-1.135,1.135 -2.974,1.135 -4.108,0 -1.135,-1.135 -1.135,-2.975 0,-4.107 1.135,-1.136 2.974,-1.136 4.108,0 1.135,1.133 1.135,2.973 0,4.107z"
android:fillColor="#FFCC4D"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M27,8c-0.701,0 -1.377,0.106 -2.015,0.298 0.005,-0.1 0.015,-0.197 0.015,-0.298 0,-3.313 -2.687,-6 -6,-6 -2.769,0 -5.093,1.878 -5.785,4.427C12.529,6.154 11.783,6 11,6c-3.314,0 -6,2.686 -6,6 0,3.312 2.686,6 6,6 2.769,0 5.093,-1.878 5.785,-4.428 0.686,0.273 1.432,0.428 2.215,0.428 0.375,0 0.74,-0.039 1.096,-0.104 -0.058,0.36 -0.096,0.727 -0.096,1.104 0,3.865 3.135,7 7,7s7,-3.135 7,-7c0,-3.866 -3.135,-7 -7,-7z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M31,22c-0.467,0 -0.91,0.085 -1.339,0.204 0.216,-0.526 0.339,-1.1 0.339,-1.704 0,-2.485 -2.015,-4.5 -4.5,-4.5 -1.019,0 -1.947,0.351 -2.701,0.921C22.093,14.096 19.544,12 16.5,12c-2.838,0 -5.245,1.822 -6.131,4.357C9.621,16.125 8.825,16 8,16c-4.418,0 -8,3.582 -8,8 0,4.419 3.582,8 8,8h23c2.762,0 5,-2.238 5,-5s-2.238,-5 -5,-5z"
android:fillColor="#E1E8ED"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M35,19c0,-2.062 -0.367,-4.039 -1.04,-5.868 -0.46,5.389 -3.333,8.157 -6.335,6.868 -2.812,-1.208 -0.917,-5.917 -0.777,-8.164 0.236,-3.809 -0.012,-8.169 -6.931,-11.794 2.875,5.5 0.333,8.917 -2.333,9.125 -2.958,0.231 -5.667,-2.542 -4.667,-7.042 -3.238,2.386 -3.332,6.402 -2.333,9 1.042,2.708 -0.042,4.958 -2.583,5.208 -2.84,0.28 -4.418,-3.041 -2.963,-8.333C2.52,10.965 1,14.805 1,19c0,9.389 7.611,17 17,17s17,-7.611 17,-17z"
android:fillColor="#F4900C"/>
<path
android:pathData="M28.394,23.999c0.148,3.084 -2.561,4.293 -4.019,3.709 -2.106,-0.843 -1.541,-2.291 -2.083,-5.291s-2.625,-5.083 -5.708,-6c2.25,6.333 -1.247,8.667 -3.08,9.084 -1.872,0.426 -3.753,-0.001 -3.968,-4.007C7.352,23.668 6,26.676 6,30c0,0.368 0.023,0.73 0.055,1.09C9.125,34.124 13.342,36 18,36s8.875,-1.876 11.945,-4.91c0.032,-0.36 0.055,-0.722 0.055,-1.09 0,-2.187 -0.584,-4.236 -1.606,-6.001z"
android:fillColor="#FFCC4D"/>
</vector>
@@ -0,0 +1,36 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M28,2c2.684,-1.342 5,4 3,13 -1.106,4.977 -5,9 -9,12s-11,-1 -7,-5 8,-7 10,-13c1.304,-3.912 1,-6 3,-7z"
android:fillColor="#FFE8B6"/>
<path
android:pathData="M31,8c0,3 -1,9 -4,13s-7,5 -4,1 5,-7 6,-11 2,-7 2,-3z"
android:fillColor="#FFD983"/>
<path
android:pathData="M22,20c-0.296,0.592 1.167,-3.833 -3,-6 -1.984,-1.032 -10,1 -4,1 3,0 4,2 2,4 -0.291,0.292 -0.489,0.603 -0.622,0.912 -0.417,0.346 -0.873,0.709 -1.378,1.088 -2.263,1.697 -5.84,4.227 -10,7 -3,2 -4,3 -4,4 0,3 9,3 14,1s10,-7 10,-7l4,-4c-3,-4 -7,-2 -7,-2z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M22,20s1.792,-4.729 -3,-7c-4.042,-1.916 -8,-1 -11,1s-2,4 -3,5 1,2 3,0 8.316,-4.895 11,-4c3,1 2,2.999 3,5z"
android:fillColor="#FFE8B6"/>
<path
android:pathData="M26,35h-4c-2,0 -3,1 -4,1s-2,-2 0,-2 4,0 5,-1 5,2 3,2z"
android:fillColor="#A6D388"/>
<path
android:pathData="M18,35m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#3E721D"/>
<path
android:pathData="M32.208,28S28,35 26,35h-4c-2,0 0,-1 1,-2s5,0 5,-6c0,-3 4.208,1 4.208,1z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M26,19c3,0 8,3 7,9s-5,7 -7,7h-2c-2,0 -1,-1 0,-2s4,0 4,-6c0,-3 -4,-7 -6,-7 0,0 2,-1 4,-1z"
android:fillColor="#FFE8B6"/>
<path
android:pathData="M17,21c3,0 5,1 3,3 -1.581,1.581 -6,5 -10,6s-8,1 -5,-1 9.764,-8 12,-8z"
android:fillColor="#FFD983"/>
<path
android:pathData="M2,31c1,0 1,0 1,0.667C3,32.333 3,33 2,33s-1,-1.333 -1,-1.333S1,31 2,31z"
android:fillColor="#C1694F"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M24,7c-3,0 -3,1 -6,1s-3,-1 -6,-1c-4,0 -9,2 -9,9 0,11 6,20 10,20 3,0 3,-1 5,-1s2,1 5,1c4,0 10,-9 10,-20 0,-7.001 -5,-9 -9,-9z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M19,7s3,-4 8,-4c4,0 6,2 6,2s-4,3 -7,3 -7,-1 -7,-1z"
android:fillColor="#77B255"/>
<path
android:pathData="M18,10c-0.552,0 -1,-0.448 -1,-1 0,-3.441 1.2,-6.615 3.293,-8.707 0.391,-0.391 1.023,-0.391 1.414,0s0.391,1.024 0,1.414C19.986,3.427 19,6.085 19,9c0,0.552 -0.448,1 -1,1z"
android:fillColor="#662113"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M22.614,34.845c3.462,-1.154 6.117,-3.034 6.12,-9.373C28.736,21.461 33,17 32.999,12.921 32.998,9 28.384,2.537 17.899,3.635 7.122,4.764 3,8 2.999,15.073c0,4.927 5.304,8.381 8.127,13.518C13,32 18.551,38.187 22.614,34.845z"
android:fillColor="#BE1931"/>
<path
android:pathData="M26.252,3.572c-1.278,-1.044 -3.28,-1.55 -5.35,-1.677 0.273,-0.037 0.542,-0.076 0.82,-0.094 0.973,-0.063 3.614,-1.232 1.4,-1.087 -0.969,0.063 -1.901,0.259 -2.837,0.423 0.237,-0.154 0.479,-0.306 0.74,-0.442C21,0 17,0 14.981,1.688 14.469,1.576 14,1 11,1c-2,0 -4.685,0.926 -3,1 0.917,0.041 2,0 1.858,0.365C9.203,2.425 6,3 6,4c0,0.353 2.76,-0.173 3,0 -1.722,0.644 -3,2 -3,3 0,0.423 2.211,-0.825 3,-1 -1,1 -1.4,1.701 -1.342,2.427 0.038,0.475 2.388,-0.09 2.632,-0.169 0.822,-0.27 3.71,-1.258 4.6,-2.724 0.117,0.285 2.963,1.341 4.11,1.466 0.529,0.058 2.62,0.274 2.141,-0.711C21,6 20,5 19.695,4.025c0.446,-0.019 8.305,0.975 6.557,-0.453z"
android:fillColor="#77B255"/>
<path
android:pathData="M9.339,17.306c-0.136,-1.46 -2.54,-3.252 -2.331,-1 0.136,1.46 2.54,3.252 2.331,1zM16.797,17.859c-0.069,-0.622 -0.282,-1.191 -0.687,-1.671 -0.466,-0.55 -1.075,-0.362 -1.234,0.316 -0.187,0.799 0.082,1.752 0.606,2.372l0.041,0.048c-0.213,-0.525 -0.427,-1.05 -0.642,-1.574l0.006,0.047c0.071,0.64 0.397,1.73 1.136,1.906 0.754,0.182 0.826,-0.988 0.774,-1.444zM22.549,13.018c0.476,-0.955 0.17,-3.962 -0.831,-1.954 -0.476,0.954 -0.171,3.962 0.831,1.954zM29.76,11.561c-0.03,-0.357 -0.073,-0.78 -0.391,-1.01 -1.189,-0.858 -2.381,2.359 -1.385,3.08 0.02,0.012 0.036,0.025 0.055,0.039l-0.331,-0.919c0,0.018 0.001,0.035 0.003,0.052 0.049,0.564 0.376,1.377 1.084,0.948 0.667,-0.406 1.028,-1.444 0.965,-2.19zM28.415,20.128c1.016,-1.569 -0.545,-3.451 -1.78,-1.542 -1.016,1.568 0.546,3.45 1.78,1.542zM22.667,23.022c0.173,-1.938 -2.309,-2.752 -2.51,-0.496 -0.173,1.938 2.309,2.752 2.51,0.496zM12.771,21.81l-0.049,0.004 1.362,0.715c-0.006,-0.004 -0.011,-0.011 -0.018,-0.017 -0.306,-0.28 -1.353,-1.083 -1.788,-0.592 -0.44,0.497 0.498,1.421 0.804,1.703 0.342,0.314 0.928,0.763 1.429,0.73 1.437,-0.093 -0.783,-2.605 -1.74,-2.543zM25.998,27.717c0.969,-1.066 0.725,-4.05 -0.798,-2.376 -0.969,1.066 -0.724,4.05 0.798,2.376zM12.599,13.753c0.093,-0.005 0.187,-0.012 0.28,-0.019 0.703,-0.046 1.004,-1.454 1.042,-1.952 0.044,-0.571 -0.043,-1.456 -0.785,-1.407l-0.281,0.019c-0.702,0.047 -1.004,1.454 -1.042,1.952 -0.044,0.571 0.044,1.457 0.786,1.407zM20.445,29.01c0.395,0.764 0.252,1.623 -0.32,1.919s-1.357,-0.081 -1.753,-0.844c-0.395,-0.764 -0.252,-1.623 0.32,-1.919 0.573,-0.296 1.357,0.081 1.753,0.844z"
android:fillColor="#F4ABBA"/>
</vector>
@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M15.373,1.022C13.71,2.686 8.718,9.34 11.214,15.164c2.495,5.823 5.909,2.239 7.486,-2.495 0.832,-2.496 0.832,-5.824 -0.831,-10.815 -0.832,-2.496 -2.496,-0.832 -2.496,-0.832zM34.677,20.326c-1.663,1.663 -8.319,6.655 -14.142,4.159 -5.824,-2.496 -2.241,-5.909 2.495,-7.486 2.497,-0.832 5.823,-0.833 10.814,0.832 2.496,0.831 0.833,2.495 0.833,2.495z"
android:fillColor="#5C913B"/>
<path
android:pathData="M32.314,6.317s-0.145,-1.727 -0.781,-2.253c-0.435,-0.546 -2.018,-0.546 -2.018,-0.546 -1.664,0 -20.798,2.496 -24.125,19.133 -0.595,2.973 4.627,8.241 7.638,7.638C29.667,26.963 32.313,7.98 32.314,6.317z"
android:fillColor="#F4900C"/>
<path
android:pathData="M24.769,8.816l-1.617,-1.617c-0.446,-0.446 -1.172,-0.446 -1.618,0 -0.446,0.447 -0.446,1.171 0,1.617l1.618,1.618c0.445,0.446 1.171,0.446 1.617,0 0.446,-0.446 0.446,-1.17 0,-1.618zM15.064,10.435c0.446,0.446 1.171,0.446 1.617,0 0.447,-0.447 0.447,-1.171 0,-1.618l-0.77,-0.77c-0.654,0.398 -1.302,0.829 -1.938,1.297l1.091,1.091zM17.49,8.008c0.447,0.447 1.17,0.447 1.617,0 0.446,-0.446 0.446,-1.17 0,-1.617l-0.025,-0.025c-0.711,0.325 -1.431,0.688 -2.149,1.086l0.557,0.556zM12.637,12.861c0.447,0.446 1.171,0.446 1.619,0 0.446,-0.447 0.446,-1.171 0,-1.618l-1.198,-1.196c-0.586,0.474 -1.156,0.985 -1.707,1.528l1.286,1.286zM23.96,4.773c-0.447,0.447 -0.447,1.17 0,1.617l1.617,1.617c0.447,0.447 1.171,0.447 1.617,0 0.446,-0.446 0.446,-1.17 0,-1.617l-1.617,-1.617c-0.447,-0.446 -1.17,-0.446 -1.617,0zM26.368,3.977c0.006,0.007 0.008,0.016 0.015,0.023L28,5.617c0.447,0.447 1.171,0.447 1.617,0 0.446,-0.446 0.446,-1.17 0,-1.617l-0.462,-0.462c-0.54,0.044 -1.516,0.172 -2.787,0.439zM22.343,12.861c0.446,-0.447 0.446,-1.171 0,-1.618l-1.618,-1.617c-0.446,-0.447 -1.171,-0.447 -1.617,0 -0.447,0.446 -0.447,1.17 0,1.617l1.617,1.618c0.446,0.446 1.171,0.446 1.618,0zM19.915,15.287c0.447,-0.447 0.447,-1.171 0,-1.618l-1.617,-1.617c-0.446,-0.447 -1.17,-0.447 -1.617,0 -0.446,0.447 -0.446,1.171 0,1.617l1.617,1.618c0.447,0.446 1.172,0.446 1.617,0zM15.064,20.139c0.447,-0.447 0.446,-1.17 0,-1.618l-1.618,-1.617c-0.446,-0.446 -1.169,-0.447 -1.617,0 -0.446,0.447 -0.446,1.171 0,1.617l1.617,1.618c0.447,0.446 1.171,0.446 1.618,0zM14.256,14.478c-0.447,0.446 -0.447,1.171 0,1.618l1.617,1.617c0.447,0.446 1.17,0.446 1.618,0 0.447,-0.447 0.447,-1.171 0,-1.617l-1.618,-1.618c-0.447,-0.447 -1.171,-0.447 -1.617,0z"
android:fillColor="#F7B82D"/>
<path
android:pathData="M27.866,23.574c-7.125,-2.374 -15.097,0.652 -19.418,3.576 2.925,-4.321 5.95,-12.294 3.576,-19.418 -0.934,-2.8 -5.602,-5.601 -8.402,-2.801 -0.934,0.934 -1.867,1.868 0,1.868s4.667,2.8 3.735,5.601c-0.835,2.505 -6.889,8.742 -4.153,15.375 -0.27,0.115 -0.523,0.279 -0.744,0.499l-0.715,0.714c-0.919,0.919 -0.919,2.409 0,3.329l0.716,0.716c0.919,0.92 2.409,0.92 3.328,0l0.715,-0.716c0.123,-0.123 0.227,-0.258 0.316,-0.398 6.999,3.84 13.747,-2.799 16.379,-3.677 2.8,-0.933 5.6,1.868 5.6,3.734 0,1.867 0.934,0.934 1.867,0 2.801,-2.8 -0.001,-7.47 -2.8,-8.402z"
android:fillColor="#77B255"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M18,4c7.257,0 13,4 14.699,2 0.197,-0.323 0.301,-0.657 0.301,-1 0,-2 -6.716,-5 -15,-5C9.716,0 3,3 3,5c0,0.343 0.104,0.677 0.301,1C5,8 10.743,4 18,4z"
android:fillColor="#F4900C"/>
<path
android:pathData="M18,3C11.787,3 7.384,4.81 5.727,5.618c-0.477,0.233 -0.539,0.84 -0.415,1.278S16,34 16,34s0.896,2 2,2 2,-2 2,-2L30.704,6.779s0.213,-0.842 -0.569,-1.229C28.392,4.689 24.047,3 18,3z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M18,31c0,-2.208 -1.791,-4 -4,-4 -0.254,0 -0.5,0.029 -0.741,0.075L16,34s0.071,0.14 0.19,0.342C17.279,33.627 18,32.399 18,31zM17,20c0,-2.209 -1.792,-4 -4,-4 -1.426,0 -2.67,0.752 -3.378,1.876l2.362,5.978c0.327,0.086 0.663,0.146 1.016,0.146 2.208,0 4,-1.792 4,-4z"
android:fillColor="#BE1931"/>
<path
android:pathData="M16,8m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:fillColor="#BE1931"/>
<path
android:pathData="M25,9c-2.208,0 -4,1.791 -4,4s1.792,4 4,4c0.682,0 1.315,-0.187 1.877,-0.488l1.89,-4.806C28.227,10.135 26.752,9 25,9zM19,25c0,1.868 1.288,3.425 3.019,3.864l2.893,-7.357C24.342,21.194 23.697,21 23,21c-2.208,0 -4,1.792 -4,4zM10,12c0,-2.209 -1.791,-4 -4,-4 -0.087,0 -0.169,0.02 -0.255,0.026 0.55,1.412 1.575,4.016 2.775,7.057C9.416,14.349 10,13.248 10,12z"
android:fillColor="#BE1931"/>
</vector>
@@ -0,0 +1,42 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M0,26a18,10 0,1 0,36 0a18,10 0,1 0,-36 0z"
android:fillColor="#8899A6"/>
<path
android:pathData="M0,24.25a18,10 0,1 0,36 0a18,10 0,1 0,-36 0z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M32.675,23.685c0,4.26 -6.57,7.712 -14.675,7.712S3.325,27.945 3.325,23.685c0,-4.258 6.57,-7.711 14.675,-7.711 8.104,0 14.675,3.453 14.675,7.711z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M32.233,22.543c0,9.854 -28.466,9.854 -28.466,0v-8.759h28.466v8.759z"
android:fillColor="#F4ABBA"/>
<path
android:pathData="M17.984,18.166c-8.984,0 -14.218,-4.132 -14.218,-4.132s-0.016,0.924 -0.016,1.685c0,0 0.032,4.898 2.572,4.898 2.459,0 2.28,2.348 3.834,2.591 1.541,0.241 1.712,-0.938 3.625,-0.938s2.25,2.106 4.203,2.106c2.289,0 2.477,-2.106 4.389,-2.106s2.132,1.224 3.386,0.885c1.507,-0.408 0.814,-2.537 3.887,-2.537 2.54,0 2.603,-4.648 2.603,-4.648 0,-0.76 -0.017,-1.935 -0.017,-1.935s-5.263,4.131 -14.248,4.131z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M32.675,12.737c0,4.259 -6.57,7.712 -14.675,7.712S3.325,16.996 3.325,12.737 9.895,5.025 18,5.025c8.104,0 14.675,3.453 14.675,7.712z"
android:fillColor="#EA596E"/>
<path
android:pathData="M25.664,13.784c-0.605,0 -1.095,-0.49 -1.095,-1.095V5.025c0,-0.605 0.49,-1.095 1.095,-1.095s1.095,0.49 1.095,1.095v7.664c0,0.605 -0.49,1.095 -1.095,1.095z"
android:fillColor="#FFF8E8"/>
<path
android:pathData="M25.664,6.667c-1.162,0 -2.076,-0.532 -2.445,-1.423 -0.32,-0.773 -0.479,-2.45 2.058,-4.986 0.214,-0.214 0.56,-0.214 0.774,0 2.537,2.537 2.378,4.213 2.058,4.986 -0.369,0.891 -1.283,1.423 -2.445,1.423z"
android:fillColor="#FAAA35"/>
<path
android:pathData="M18,17.068c-0.605,0 -1.095,-0.49 -1.095,-1.095V8.31c0,-0.605 0.49,-1.095 1.095,-1.095s1.095,0.49 1.095,1.095v7.664c0,0.604 -0.49,1.094 -1.095,1.094z"
android:fillColor="#FFF8E8"/>
<path
android:pathData="M18,9.952c-1.162,0 -2.076,-0.532 -2.445,-1.423 -0.321,-0.773 -0.479,-2.45 2.058,-4.986 0.214,-0.214 0.56,-0.214 0.774,0 2.537,2.537 2.378,4.213 2.058,4.986 -0.369,0.891 -1.283,1.423 -2.445,1.423z"
android:fillColor="#FAAA35"/>
<path
android:pathData="M10.336,13.784c-0.605,0 -1.095,-0.49 -1.095,-1.095V5.025c0,-0.605 0.49,-1.095 1.095,-1.095s1.095,0.49 1.095,1.095v7.664c0,0.605 -0.49,1.095 -1.095,1.095z"
android:fillColor="#FFF8E8"/>
<path
android:pathData="M10.336,6.667c-1.162,0 -2.076,-0.532 -2.445,-1.423 -0.321,-0.773 -0.479,-2.45 2.058,-4.986 0.214,-0.214 0.56,-0.214 0.774,0 2.537,2.537 2.378,4.213 2.058,4.986 -0.369,0.891 -1.283,1.423 -2.445,1.423z"
android:fillColor="#FAAA35"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M35.885,11.833c0,-5.45 -4.418,-9.868 -9.867,-9.868 -3.308,0 -6.227,1.633 -8.018,4.129 -1.791,-2.496 -4.71,-4.129 -8.017,-4.129 -5.45,0 -9.868,4.417 -9.868,9.868 0,0.772 0.098,1.52 0.266,2.241C1.751,22.587 11.216,31.568 18,34.034c6.783,-2.466 16.249,-11.447 17.617,-19.959 0.17,-0.721 0.268,-1.469 0.268,-2.242z"
android:fillColor="#DD2E44"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M18,18m-18,0a18,18 0,1 1,36 0a18,18 0,1 1,-36 0"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M18,21c-3.623,0 -6.027,-0.422 -9,-1 -0.679,-0.131 -2,0 -2,2 0,4 4.595,9 11,9 6.404,0 11,-5 11,-9 0,-2 -1.321,-2.132 -2,-2 -2.973,0.578 -5.377,1 -9,1z"
android:fillColor="#664500"/>
<path
android:pathData="M9,22s3,1 9,1 9,-1 9,-1 -2,4 -9,4 -9,-4 -9,-4z"
android:fillColor="#FFF"/>
<path
android:pathData="M9.5,13.5a2.5,3.5 0,1 0,5 0a2.5,3.5 0,1 0,-5 0z"
android:fillColor="#664500"/>
<path
android:pathData="M21.5,13.5a2.5,3.5 0,1 0,5 0a2.5,3.5 0,1 0,-5 0z"
android:fillColor="#664500"/>
</vector>
@@ -0,0 +1,48 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M31,14.5a2.5,3.5 0,1 0,5 0a2.5,3.5 0,1 0,-5 0z"
android:fillColor="#F4900C"/>
<path
android:pathData="M0,14.5a2.5,3.5 0,1 0,5 0a2.5,3.5 0,1 0,-5 0z"
android:fillColor="#F4900C"/>
<path
android:pathData="M34,19c0,0.553 -0.447,1 -1,1h-3c-0.553,0 -1,-0.447 -1,-1v-9c0,-0.552 0.447,-1 1,-1h3c0.553,0 1,0.448 1,1v9zM7,19c0,0.553 -0.448,1 -1,1H3c-0.552,0 -1,-0.447 -1,-1v-9c0,-0.552 0.448,-1 1,-1h3c0.552,0 1,0.448 1,1v9z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M28,5c0,2.761 -4.478,4 -10,4C12.477,9 8,7.761 8,5s4.477,-5 10,-5c5.522,0 10,2.239 10,5z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M25,4.083C25,5.694 21.865,7 18,7c-3.866,0 -7,-1.306 -7,-2.917 0,-1.611 3.134,-2.917 7,-2.917 3.865,0 7,1.306 7,2.917z"
android:fillColor="#F4900C"/>
<path
android:pathData="M30,5.5C30,6.881 28.881,7 27.5,7h-19C7.119,7 6,6.881 6,5.5S7.119,3 8.5,3h19C28.881,3 30,4.119 30,5.5z"
android:fillColor="#269"/>
<path
android:pathData="M30,6H6c-1.104,0 -2,0.896 -2,2v26h28V8c0,-1.104 -0.896,-2 -2,-2z"
android:fillColor="#55ACEE"/>
<path
android:pathData="M35,33v-1c0,-1.104 -0.896,-2 -2,-2H22.071l-3.364,3.364c-0.391,0.391 -1.023,0.391 -1.414,0L13.929,30H3c-1.104,0 -2,0.896 -2,2v1c0,1.104 -0.104,2 1,2h32c1.104,0 1,-0.896 1,-2z"
android:fillColor="#3B88C3"/>
<path
android:pathData="M24.5,14.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
android:fillColor="#FFF"/>
<path
android:pathData="M24.5,14.5m-2.721,0a2.721,2.721 0,1 1,5.442 0a2.721,2.721 0,1 1,-5.442 0"
android:fillColor="#DD2E44"/>
<path
android:pathData="M11.5,14.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
android:fillColor="#FFF"/>
<path
android:pathData="M29,25.5c0,1.381 -1.119,2.5 -2.5,2.5h-17C8.119,28 7,26.881 7,25.5S8.119,23 9.5,23h17c1.381,0 2.5,1.119 2.5,2.5z"
android:fillColor="#F5F8FA"/>
<path
android:pathData="M17,23h2v5h-2zM12,23h2v5h-2zM22,23h2v5h-2zM7,25.5c0,1.21 0.859,2.218 2,2.45v-4.9c-1.141,0.232 -2,1.24 -2,2.45zM27,23.05v4.899c1.141,-0.232 2,-1.24 2,-2.45s-0.859,-2.217 -2,-2.449z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M11.5,14.5m-2.721,0a2.721,2.721 0,1 1,5.442 0a2.721,2.721 0,1 1,-5.442 0"
android:fillColor="#DD2E44"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M30.198,27.385L32,3.816c0,-0.135 -0.008,-0.263 -0.021,-0.373 0.003,-0.033 0.021,-0.075 0.021,-0.11C32,1.529 25.731,0.066 18,0.066c-7.732,0 -14,1.462 -14,3.267 0,0.035 0.017,0.068 0.022,0.102 -0.014,0.11 -0.022,0.23 -0.022,0.365l1.802,23.585C2.298,28.295 0,29.576 0,31c0,2.762 8.611,5 18,5s18,-2.238 18,-5c0,-1.424 -2.298,-2.705 -5.802,-3.615z"
android:fillColor="#31373D"/>
<path
android:pathData="M17.536,6.595c-4.89,0 -8.602,-0.896 -10.852,-1.646 -0.524,-0.175 -0.808,-0.741 -0.633,-1.265 0.175,-0.524 0.739,-0.808 1.265,-0.633 2.889,0.963 10.762,2.891 21.421,-0.016 0.529,-0.142 1.082,0.168 1.227,0.702 0.146,0.533 -0.169,1.083 -0.702,1.228 -4.406,1.202 -8.347,1.63 -11.726,1.63z"
android:fillColor="#66757F"/>
<path
android:pathData="M30.198,27.385l0.446,-5.829c-7.705,2.157 -17.585,2.207 -25.316,-0.377l0.393,5.142c0.069,0.304 0.113,0.65 0.113,1.076 0,1.75 1.289,2.828 2.771,3.396 4.458,1.708 13.958,1.646 18.807,0.149 1.467,-0.453 2.776,-1.733 2.776,-3.191 0,-0.119 0.015,-0.241 0.024,-0.361l-0.014,-0.005z"
android:fillColor="#744EAA"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M35.686,11.931c-0.507,-0.522 -6.83,-1.094 -13.263,-0.369 -1.283,0.144 -1.363,0.51 -4.425,0.63 -3.061,-0.119 -3.141,-0.485 -4.425,-0.63C7.14,10.837 0.817,11.41 0.31,11.931c-0.252,0.261 -0.252,2.077 0,2.338 0.254,0.261 1.035,0.606 1.403,1.827 0.237,0.787 0.495,5.864 2.281,7.377 1.768,1.498 7.462,1.217 9.326,0.262 2.536,-1.298 2.892,-5.785 3.292,-7.639 0.203,-0.939 1.162,-1.016 1.385,-1.016s1.182,0.077 1.385,1.016c0.401,1.853 0.757,6.34 3.292,7.639 1.865,0.955 7.558,1.236 9.326,-0.262 1.786,-1.513 2.044,-6.59 2.281,-7.377 0.368,-1.22 1.149,-1.566 1.403,-1.827 0.254,-0.26 0.254,-2.077 0.002,-2.338z"
android:fillColor="#31373D"/>
<path
android:pathData="M14.644,15.699c-0.098,1.255 -0.521,4.966 -1.757,6.083 -1.376,1.243 -6.25,1.568 -7.79,0.044 -0.808,-0.799 -1.567,-4.018 -1.503,-6.816 0.038,-1.679 2.274,-2.02 5.462,-2.02 3.148,0 5.763,0.468 5.588,2.709zM21.351,15.699c0.098,1.255 0.521,4.966 1.757,6.083 1.376,1.243 6.25,1.568 7.79,0.044 0.808,-0.799 1.567,-4.018 1.503,-6.816 -0.038,-1.679 -2.274,-2.02 -5.462,-2.02 -3.147,0 -5.763,0.468 -5.588,2.709z"
android:fillColor="#55ACEE"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M27.989,19.977c-0.622,0 -1.225,0.078 -1.806,0.213L15.811,9.818c0.134,-0.581 0.212,-1.184 0.212,-1.806C16.023,3.587 12.436,0 8.012,0 7.11,0 5.91,0.916 6.909,1.915l2.997,2.997s0.999,1.998 -0.999,3.995 -3.996,0.998 -3.996,0.998L1.915,6.909C0.916,5.91 0,7.105 0,8.012c0,4.425 3.587,8.012 8.012,8.012 0.622,0 1.225,-0.078 1.806,-0.212l10.371,10.371c-0.135,0.581 -0.213,1.184 -0.213,1.806 0,4.425 3.588,8.011 8.012,8.011 0.901,0 2.101,-0.916 1.102,-1.915l-2.997,-2.997s-0.999,-1.998 0.999,-3.995 3.995,-0.999 3.995,-0.999l2.997,2.997c1,0.999 1.916,-0.196 1.916,-1.102 0,-4.425 -3.587,-8.012 -8.011,-8.012z"
android:fillColor="#8899A6"/>
</vector>
@@ -0,0 +1,42 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M5,21c0,2.209 -1.119,4 -2.5,4S0,23.209 0,21s1.119,-4 2.5,-4S5,18.791 5,21z"
android:fillColor="#FFDC5D"/>
<path
android:pathData="M3,18.562C3,10.037 8.373,3.125 15,3.125s12,6.912 12,15.438C27,27.088 21.627,34 15,34S3,27.088 3,18.562z"
android:fillColor="#FFDC5D"/>
<path
android:pathData="M20,0c-0.249,0 -0.478,0.007 -0.713,0.012C19.19,0.01 19.097,0 19,0 9,0 2,4.582 2,9s6.373,4 13,4c4.442,0 7.648,0 9.966,-0.086L25,13l6,15h2s0.343,-3.055 1,-7c1,-6 0.533,-21 -14,-21z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M30,21c0,2.209 -1.119,4 -2.5,4S25,23.209 25,21s1.119,-4 2.5,-4 2.5,1.791 2.5,4z"
android:fillColor="#FFDC5D"/>
<path
android:pathData="M10,21c-0.552,0 -1,-0.447 -1,-1v-2c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v2c0,0.553 -0.448,1 -1,1zM20,21c-0.553,0 -1,-0.447 -1,-1v-2c0,-0.552 0.447,-1 1,-1s1,0.448 1,1v2c0,0.553 -0.447,1 -1,1z"
android:fillColor="#662113"/>
<path
android:pathData="M16,26h-2c-0.552,0 -1,-0.447 -1,-1s0.448,-1 1,-1h2c0.552,0 1,0.447 1,1s-0.448,1 -1,1z"
android:fillColor="#B7755E"/>
<path
android:pathData="M27,25c0,-2 -2.293,-0.707 -3,0 -1,1 -3,3 -5,2 -2.828,-1.414 -4,-1 -4,-1s-1.171,-0.414 -4,1c-2,1 -4,-1 -5,-2 -0.707,-0.707 -3,-2 -3,0s1,2 1,2c-1,2 1,3 1,3 0,3 3,3 3,3 0,3 4,2 4,2 1,1 3,1 3,1s2,0 3,-1c0,0 4,1 4,-2 0,0 3,0 3,-3 0,0 2,-1 1,-3 0,0 1,0 1,-2z"
android:fillColor="#E6E7E8"/>
<path
android:pathData="M15,28c7,0 4,2 0,2s-7,-2 0,-2z"
android:fillColor="#FFDC5D"/>
<path
android:pathData="M1,14a2,4 0,1 0,4 0a2,4 0,1 0,-4 0z"
android:fillColor="#D1D3D4"/>
<path
android:pathData="M24,14a2,4 0,1 0,4 0a2,4 0,1 0,-4 0z"
android:fillColor="#D1D3D4"/>
<path
android:pathData="M32,29m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:fillColor="#F1F2F2"/>
<path
android:pathData="M29,12c0,1.104 -0.896,2 -2,2H2c-1.104,0 -2,-0.896 -2,-2v-1c0,-1.104 0.896,-2 2,-2h25c1.104,0 2,0.896 2,2v1z"
android:fillColor="#F1F2F2"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M34.956,17.916c0,-0.503 -0.12,-0.975 -0.321,-1.404 -1.341,-4.326 -7.619,-4.01 -16.549,-4.221 -1.493,-0.035 -0.639,-1.798 -0.115,-5.668 0.341,-2.517 -1.282,-6.382 -4.01,-6.382 -4.498,0 -0.171,3.548 -4.148,12.322 -2.125,4.688 -6.875,2.062 -6.875,6.771v10.719c0,1.833 0.18,3.595 2.758,3.885C8.195,34.219 7.633,36 11.238,36h18.044c1.838,0 3.333,-1.496 3.333,-3.334 0,-0.762 -0.267,-1.456 -0.698,-2.018 1.02,-0.571 1.72,-1.649 1.72,-2.899 0,-0.76 -0.266,-1.454 -0.696,-2.015 1.023,-0.57 1.725,-1.649 1.725,-2.901 0,-0.909 -0.368,-1.733 -0.961,-2.336 0.757,-0.611 1.251,-1.535 1.251,-2.581z"
android:fillColor="#FFDB5E"/>
<path
android:pathData="M23.02,21.249h8.604c1.17,0 2.268,-0.626 2.866,-1.633 0.246,-0.415 0.109,-0.952 -0.307,-1.199 -0.415,-0.247 -0.952,-0.108 -1.199,0.307 -0.283,0.479 -0.806,0.775 -1.361,0.775h-8.81c-0.873,0 -1.583,-0.71 -1.583,-1.583s0.71,-1.583 1.583,-1.583H28.7c0.483,0 0.875,-0.392 0.875,-0.875s-0.392,-0.875 -0.875,-0.875h-5.888c-1.838,0 -3.333,1.495 -3.333,3.333 0,1.025 0.475,1.932 1.205,2.544 -0.615,0.605 -0.998,1.445 -0.998,2.373 0,1.028 0.478,1.938 1.212,2.549 -0.611,0.604 -0.99,1.441 -0.99,2.367 0,1.12 0.559,2.108 1.409,2.713 -0.524,0.589 -0.852,1.356 -0.852,2.204 0,1.838 1.495,3.333 3.333,3.333h5.484c1.17,0 2.269,-0.625 2.867,-1.632 0.247,-0.415 0.11,-0.952 -0.305,-1.199 -0.416,-0.245 -0.953,-0.11 -1.199,0.305 -0.285,0.479 -0.808,0.776 -1.363,0.776h-5.484c-0.873,0 -1.583,-0.71 -1.583,-1.583s0.71,-1.583 1.583,-1.583h6.506c1.17,0 2.27,-0.626 2.867,-1.633 0.247,-0.416 0.11,-0.953 -0.305,-1.199 -0.419,-0.251 -0.954,-0.11 -1.199,0.305 -0.289,0.487 -0.799,0.777 -1.363,0.777h-7.063c-0.873,0 -1.583,-0.711 -1.583,-1.584s0.71,-1.583 1.583,-1.583h8.091c1.17,0 2.269,-0.625 2.867,-1.632 0.247,-0.415 0.11,-0.952 -0.305,-1.199 -0.417,-0.246 -0.953,-0.11 -1.199,0.305 -0.289,0.486 -0.799,0.776 -1.363,0.776H23.02c-0.873,0 -1.583,-0.71 -1.583,-1.583s0.709,-1.584 1.583,-1.584z"
android:fillColor="#EE9547"/>
</vector>
@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M9,28.5c0,-0.828 0.672,-1.5 1.5,-1.5s1.5,0.672 1.5,1.5v0.5s0,3 3,3 3,-3 3,-3V3.5c0,-0.829 0.671,-1.5 1.5,-1.5s1.5,0.671 1.5,1.5V29s0,6 -6,6 -6,-6 -6,-6v-0.5z"
android:fillColor="#66757F"/>
<path
android:pathData="M19.5,4C28.612,4 36,9.82 36,17c0,0 0,2 -1,2s-3,-2 -3,-2H7s-2,2 -3,2 -1,-2 -1,-2C3,9.82 10.387,4 19.5,4z"
android:fillColor="#744EAA"/>
<path
android:pathData="M19.5,4C26.403,4 32,9.82 32,17c0,0 0,2 -2,2s-5,-2 -5,-2H14s-3,2 -5,2 -2,-2 -2,-2C7,9.82 12.596,4 19.5,4z"
android:fillColor="#9266CC"/>
<path
android:pathData="M19.5,4C23.09,4 25,9.82 25,17c0,0 -3,2 -5,2h-1c-2,0 -5,-2 -5,-2 0,-7.18 1.91,-13 5.5,-13z"
android:fillColor="#744EAA"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M21,18c0,-2.001 3.246,-3.369 5,-6 2,-3 2,-10 2,-10H8s0,7 2,10c1.754,2.631 5,3.999 5,6s-3.246,3.369 -5,6c-2,3 -2,10 -2,10h20s0,-7 -2,-10c-1.754,-2.631 -5,-3.999 -5,-6z"
android:fillColor="#FFE8B6"/>
<path
android:pathData="M20.999,24c-0.999,0 -2.057,-1 -2.057,-2C19,20.287 19,19.154 19,18c0,-3.22 3.034,-4.561 4.9,-7H12.1c1.865,2.439 4.9,3.78 4.9,7 0,1.155 0,2.289 0.058,4 0,1 -1.058,2 -2.058,2 -2,0 -3.595,1.784 -4,3 -1,3 -1,7 -1,7h16s0,-4 -1,-7c-0.405,-1.216 -2.001,-3 -4.001,-3z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M30,34c0,1.104 -0.896,2 -2,2L8,36c-1.104,0 -2,-0.896 -2,-2s0.896,-2 2,-2h20c1.104,0 2,0.896 2,2zM30,2c0,1.104 -0.896,2 -2,2L8,4c-1.104,0 -2,-0.896 -2,-2s0.896,-2 2,-2h20c1.104,0 2,0.896 2,2z"
android:fillColor="#3B88C3"/>
</vector>
@@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M20,6.042c0,1.112 -0.903,2.014 -2,2.014s-2,-0.902 -2,-2.014V2.014C16,0.901 16.903,0 18,0s2,0.901 2,2.014v4.028z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M9.18,36c-0.224,0 -0.452,-0.052 -0.666,-0.159 -0.736,-0.374 -1.035,-1.28 -0.667,-2.027l8.94,-18.127c0.252,-0.512 0.768,-0.835 1.333,-0.835s1.081,0.323 1.333,0.835l8.941,18.127c0.368,0.747 0.07,1.653 -0.666,2.027 -0.736,0.372 -1.631,0.07 -1.999,-0.676L18.121,19.74l-7.607,15.425c-0.262,0.529 -0.788,0.835 -1.334,0.835z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M18.121,20.392c-0.263,0 -0.516,-0.106 -0.702,-0.295L3.512,5.998c-0.388,-0.394 -0.388,-1.031 0,-1.424s1.017,-0.393 1.404,0L18.121,17.96 31.324,4.573c0.389,-0.393 1.017,-0.393 1.405,0 0.388,0.394 0.388,1.031 0,1.424l-13.905,14.1c-0.187,0.188 -0.439,0.295 -0.703,0.295z"
android:fillColor="#58595B"/>
<path
android:pathData="M34.015,19.385c0,8.898 -7.115,16.111 -15.894,16.111 -8.777,0 -15.893,-7.213 -15.893,-16.111 0,-8.9 7.116,-16.113 15.893,-16.113 8.778,-0.001 15.894,7.213 15.894,16.113z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M30.041,19.385c0,6.674 -5.335,12.084 -11.92,12.084 -6.583,0 -11.919,-5.41 -11.919,-12.084C6.202,12.71 11.538,7.3 18.121,7.3c6.585,-0.001 11.92,5.41 11.92,12.085z"
android:fillColor="#E6E7E8"/>
<path
android:pathData="M30.04,1.257c-1.646,0 -3.135,0.676 -4.214,1.77l8.429,8.544C35.333,10.478 36,8.968 36,7.299c0,-3.336 -2.669,-6.042 -5.96,-6.042zM5.96,1.257c1.645,0 3.135,0.676 4.214,1.77l-8.429,8.544C0.667,10.478 0,8.968 0,7.299c0,-3.336 2.668,-6.042 5.96,-6.042z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M23,20h-5c-0.552,0 -1,-0.447 -1,-1v-9c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v8h4c0.553,0 1,0.448 1,1 0,0.553 -0.447,1 -1,1z"
android:fillColor="#414042"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M33,31c0,2.2 -1.8,4 -4,4H7c-2.2,0 -4,-1.8 -4,-4V14c0,-2.2 1.8,-4 4,-4h22c2.2,0 4,1.8 4,4v17z"
android:fillColor="#FDD888"/>
<path
android:pathData="M36,11c0,2.2 -1.8,4 -4,4H4c-2.2,0 -4,-1.8 -4,-4s1.8,-4 4,-4h28c2.2,0 4,1.8 4,4z"
android:fillColor="#FDD888"/>
<path
android:pathData="M3,15h30v2H3z"
android:fillColor="#FCAB40"/>
<path
android:pathData="M19,3h-2c-1.657,0 -3,1.343 -3,3v29h8V6c0,-1.656 -1.343,-3 -3,-3z"
android:fillColor="#DA2F47"/>
<path
android:pathData="M16,7c1.1,0 1.263,-0.516 0.361,-1.147L9.639,1.147c-0.902,-0.631 -2.085,-0.366 -2.631,0.589L4.992,5.264C4.446,6.219 4.9,7 6,7h10zM20,7c-1.1,0 -1.263,-0.516 -0.361,-1.147l6.723,-4.706c0.901,-0.631 2.085,-0.366 2.631,0.589l2.016,3.527C31.554,6.219 31.1,7 30,7L20,7z"
android:fillColor="#DA2F47"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M29,11.06c0,6.439 -5,7.439 -5,13.44 0,3.098 -3.123,3.359 -5.5,3.359 -2.053,0 -6.586,-0.779 -6.586,-3.361C11.914,18.5 7,17.5 7,11.06 7,5.029 12.285,0.14 18.083,0.14 23.883,0.14 29,5.029 29,11.06z"
android:fillColor="#FFD983"/>
<path
android:pathData="M22.167,32.5c0,0.828 -2.234,2.5 -4.167,2.5 -1.933,0 -4.167,-1.672 -4.167,-2.5 0,-0.828 2.233,-0.5 4.167,-0.5 1.933,0 4.167,-0.328 4.167,0.5z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M22.707,10.293c-0.391,-0.391 -1.023,-0.391 -1.414,0L18,13.586l-3.293,-3.293c-0.391,-0.391 -1.023,-0.391 -1.414,0s-0.391,1.023 0,1.414L17,15.414V26c0,0.553 0.448,1 1,1s1,-0.447 1,-1V15.414l3.707,-3.707c0.391,-0.391 0.391,-1.023 0,-1.414z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M24,31c0,1.104 -0.896,2 -2,2h-8c-1.104,0 -2,-0.896 -2,-2v-6h12v6z"
android:fillColor="#99AAB5"/>
<path
android:pathData="M11.999,32c-0.48,0 -0.904,-0.347 -0.985,-0.836 -0.091,-0.544 0.277,-1.06 0.822,-1.15l12,-2c0.544,-0.098 1.06,0.277 1.15,0.822 0.091,0.544 -0.277,1.06 -0.822,1.15l-12,2c-0.055,0.01 -0.111,0.014 -0.165,0.014zM11.999,28c-0.48,0 -0.904,-0.347 -0.985,-0.836 -0.091,-0.544 0.277,-1.06 0.822,-1.15l12,-2c0.544,-0.097 1.06,0.277 1.15,0.822 0.091,0.544 -0.277,1.06 -0.822,1.15l-12,2c-0.055,0.01 -0.111,0.014 -0.165,0.014z"
android:fillColor="#CCD6DD"/>
</vector>
@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M35,26c0,2.209 -1.791,4 -4,4H5c-2.209,0 -4,-1.791 -4,-4V6.313C1,4.104 6.791,0 9,0h20.625C32.719,0 35,2.312 35,5.375V26z"
android:fillColor="#A0041E"/>
<path
android:pathData="M33,30c0,2.209 -1.791,4 -4,4H7c-2.209,0 -4,-1.791 -4,-4V6c0,-4.119 -0.021,-4 5,-4h21c2.209,0 4,1.791 4,4v24z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M31,31c0,1.657 -1.343,3 -3,3H4c-1.657,0 -3,-1.343 -3,-3V7c0,-1.657 1.343,-3 3,-3h24c1.657,0 3,1.343 3,3v24z"
android:fillColor="#E1E8ED"/>
<path
android:pathData="M31,32c0,2.209 -1.791,4 -4,4H6c-2.209,0 -4,-1.791 -4,-4V10c0,-2.209 1.791,-4 4,-4h21c2.209,0 4,1.791 4,4v22z"
android:fillColor="#BE1931"/>
<path
android:pathData="M29,32c0,2.209 -1.791,4 -4,4H6c-2.209,0 -4,-1.791 -4,-4V12c0,-2.209 1.791,-4 4,-4h19.335C27.544,8 29,9.456 29,11.665V32z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M6,6C4.312,6 4.269,4.078 5,3.25 5.832,2.309 7.125,2 9.438,2H11V0H8.281C4.312,0 1,2.5 1,5.375V32c0,2.209 1.791,4 4,4h2V6H6z"
android:fillColor="#A0041E"/>
</vector>
@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M35.222,33.598c-0.647,-2.101 -1.705,-6.059 -2.325,-7.566 -0.501,-1.216 -0.969,-2.438 -1.544,-3.014 -0.575,-0.575 -1.553,-0.53 -2.143,0.058 0,0 -2.469,1.675 -3.354,2.783 -1.108,0.882 -2.785,3.357 -2.785,3.357 -0.59,0.59 -0.635,1.567 -0.06,2.143 0.576,0.575 1.798,1.043 3.015,1.544 1.506,0.62 5.465,1.676 7.566,2.325 0.359,0.11 1.74,-1.271 1.63,-1.63z"
android:fillColor="#D99E82"/>
<path
android:pathData="M13.643,5.308c1.151,1.151 1.151,3.016 0,4.167l-4.167,4.168c-1.151,1.15 -3.018,1.15 -4.167,0L1.141,9.475c-1.15,-1.151 -1.15,-3.016 0,-4.167l4.167,-4.167c1.15,-1.151 3.016,-1.151 4.167,0l4.168,4.167z"
android:fillColor="#EA596E"/>
<path
android:pathData="M31.353,23.018l-4.17,4.17 -4.163,4.165L7.392,15.726l8.335,-8.334 15.626,15.626z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M32.078,34.763s2.709,1.489 3.441,0.757c0.732,-0.732 -0.765,-3.435 -0.765,-3.435s-2.566,0.048 -2.676,2.678z"
android:fillColor="#292F33"/>
<path
android:pathData="M2.183,10.517l8.335,-8.335 5.208,5.209 -8.334,8.335z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M3.225,11.558l8.334,-8.334 1.042,1.042L4.267,12.6zM5.308,13.644l8.335,-8.335 1.042,1.042 -8.335,8.334z"
android:fillColor="#99AAB5"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M35.354,25.254c0.217,-2.391 -0.513,-4.558 -2.057,-6.102L17.033,2.89c-0.391,-0.391 -1.024,-0.391 -1.414,0 -0.391,0.391 -0.391,1.024 0,1.414l16.264,16.263c1.116,1.117 1.642,2.717 1.479,4.506 -0.159,1.748 -0.957,3.456 -2.188,4.686 -1.23,1.23 -2.938,2.027 -4.685,2.187 -1.781,0.161 -3.39,-0.362 -4.506,-1.479L3.598,12.082c-0.98,-0.98 -1.059,-2.204 -0.953,-3.058 0.15,-1.196 0.755,-2.401 1.66,-3.307 1.7,-1.7 4.616,-2.453 6.364,-0.707l14.85,14.849c1.119,1.12 0.026,2.803 -0.708,3.536 -0.733,0.735 -2.417,1.826 -3.535,0.707L9.962,12.789c-0.391,-0.391 -1.024,-0.39 -1.414,0 -0.391,0.391 -0.391,1.023 0,1.414l11.313,11.314c1.859,1.858 4.608,1.05 6.363,-0.707 1.758,-1.757 2.565,-4.507 0.708,-6.364L12.083,3.597c-2.62,-2.62 -6.812,-1.673 -9.192,0.706C1.677,5.517 0.864,7.147 0.661,8.775c-0.229,1.833 0.312,3.509 1.523,4.721l18.384,18.385c1.365,1.365 3.218,2.094 5.281,2.094 0.27,0 0.544,-0.013 0.82,-0.037 2.206,-0.201 4.362,-1.209 5.918,-2.765 1.558,-1.556 2.565,-3.713 2.767,-5.919z"
android:fillColor="#99AAB5"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M16.806,10.675c-0.92,-2.047 -2.003,-4.066 -3.026,-6.26 -0.028,-0.068 -0.051,-0.138 -0.082,-0.206 -0.064,-0.142 -0.137,-0.277 -0.208,-0.413l-0.052,-0.111 -0.002,0.003C11.798,0.698 8.343,-0.674 5.46,0.621 2.414,1.988 1.164,5.813 2.67,9.163c1.505,3.351 5.194,4.957 8.24,3.589 0.106,-0.047 0.205,-0.105 0.306,-0.159 1.935,0.438 1.994,1.877 1.994,1.877s4.618,-1.521 3.596,-3.795zM4.876,8.173c-0.958,-2.133 -0.252,-4.527 1.575,-5.347 1.826,-0.822 4.084,0.242 5.042,2.374 0.958,2.132 0.253,4.526 -1.573,5.346 -1.828,0.821 -4.087,-0.241 -5.044,-2.373z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M26.978,34.868c1.163,-0.657 2.187,-2.474 1.529,-3.638L16.754,10.559c-1.103,0.496 -2.938,2.313 -3.544,3.912l13.768,20.397z"
android:fillColor="#99AAB5"/>
<path
android:pathData="M30.54,0.62c-2.882,-1.295 -6.338,0.077 -7.976,3.067l-0.003,-0.003 -0.053,0.112c-0.071,0.135 -0.145,0.27 -0.208,0.412 -0.03,0.068 -0.053,0.137 -0.081,0.206 -1.023,2.194 -2.107,4.213 -3.026,6.26 -1.021,2.274 3.597,3.796 3.597,3.796s0.059,-1.439 1.993,-1.877c0.102,0.054 0.2,0.111 0.307,0.159 3.045,1.368 6.733,-0.238 8.24,-3.589 1.505,-3.35 0.255,-7.175 -2.79,-8.543zM31.124,8.173c-0.959,2.132 -3.216,3.194 -5.044,2.373 -1.826,-0.82 -2.531,-3.214 -1.572,-5.346 0.956,-2.132 3.214,-3.195 5.041,-2.374 1.827,0.82 2.532,3.214 1.575,5.347z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M9.022,34.868c-1.163,-0.657 -2.187,-2.474 -1.529,-3.638l11.753,-20.671c1.103,0.496 2.938,2.313 3.544,3.912L9.022,34.868z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M19.562,17.396c0,0.863 -0.701,1.562 -1.562,1.562 -0.863,0 -1.562,-0.699 -1.562,-1.562 0,-0.863 0.699,-1.562 1.562,-1.562 0.862,0 1.562,0.699 1.562,1.562z"
android:fillColor="#99AAB5"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M18,3C12.477,3 8,7.477 8,13v10h4V13c0,-3.313 2.686,-6 6,-6s6,2.687 6,6v10h4V13c0,-5.523 -4.477,-10 -10,-10z"
android:fillColor="#AAB8C2"/>
<path
android:pathData="M31,32c0,2.209 -1.791,4 -4,4H9c-2.209,0 -4,-1.791 -4,-4V20c0,-2.209 1.791,-4 4,-4h18c2.209,0 4,1.791 4,4v12z"
android:fillColor="#FFAC33"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M32.614,3.414C28.31,-0.89 21.332,-0.89 17.027,3.414c-3.391,3.392 -4.098,8.439 -2.144,12.535l-3.916,3.915c-0.64,0.641 -0.841,1.543 -0.625,2.359l-1.973,1.972c-0.479,-0.48 -1.252,-0.48 -1.731,0l-1.731,1.732c-0.479,0.479 -0.479,1.253 0,1.732l-0.867,0.864c-0.479,-0.478 -1.253,-0.478 -1.731,0l-0.866,0.867c-0.479,0.479 -0.479,1.253 0,1.732 0.015,0.016 0.036,0.02 0.051,0.033 -0.794,1.189 -0.668,2.812 0.382,3.863 1.195,1.195 3.134,1.195 4.329,0L20.08,21.144c4.097,1.955 9.144,1.247 12.535,-2.146 4.302,-4.302 4.302,-11.28 -0.001,-15.584zM30.883,8.609c-0.957,0.956 -2.509,0.956 -3.464,0 -0.956,-0.956 -0.956,-2.507 0,-3.464 0.955,-0.956 2.507,-0.956 3.464,0 0.956,0.957 0.956,2.508 0,3.464z"
android:fillColor="#C1694F"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M29.879,33.879C31.045,35.045 32.9,35.1 34,34s1.045,-2.955 -0.121,-4.121L12.121,8.121C10.955,6.955 9.1,6.9 8,8s-1.045,2.955 0.121,4.121l21.758,21.758z"
android:fillColor="#F4900C"/>
<path
android:pathData="M22,3s-6,-3 -11,2l-7,7s-1,-1 -2,0l-1,1s-1,1 0,2l4,4s1,1 2,0l1,-1s1,-1 0,-2l-0.078,-0.078c0.77,-0.743 1.923,-1.5 3.078,-0.922l4,-4s-1,-3 1,-5 3,-2 5,-2 1,-1 1,-1z"
android:fillColor="#66757F"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M36,11.5C36,8.462 33,4 18,4S0,8.462 0,11.5c0,0.045 0.019,0.076 0.022,0.119 -0.012,0.196 -0.022,0.402 -0.022,0.631C0,14.873 2.239,16 5,16s5,-1.127 5,-3.75c0,-0.218 -0.021,-0.412 -0.051,-0.597C12.374,11.302 15.102,11 18,11s5.626,0.302 8.051,0.653c-0.03,0.185 -0.051,0.379 -0.051,0.597 0,2.623 2.238,3.75 5,3.75s5,-1.127 5,-3.75c0,-0.225 -0.009,-0.429 -0.024,-0.621 0.004,-0.046 0.024,-0.08 0.024,-0.129z"
android:fillColor="#BE1931"/>
<path
android:pathData="M34.934,23c-0.482,-1.031 -2.31,-4.19 -3.968,-7.007C29.408,13.346 27,11 25,11V9c0,-1.104 -0.896,-2 -2,-2s-2,0.896 -2,2v2h-6V9c0,-1.104 -0.896,-2 -2,-2s-2,0.896 -2,2v2c-2,0 -4.41,2.351 -5.97,5 -1.657,2.815 -3.483,5.97 -3.964,7C0.488,24.239 0,25 0,27s1.791,5 4,5h28c2.209,0 4,-3 4,-5s-0.448,-2.676 -1.066,-4z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M20.046,14.818c0,0.452 -0.916,0.818 -2.046,0.818s-2.045,-0.366 -2.045,-0.818c0,-0.452 0.915,-0.818 2.045,-0.818s2.046,0.366 2.046,0.818zM15.136,14.818c0,0.452 -0.915,0.818 -2.045,0.818s-2.045,-0.366 -2.045,-0.818c0,-0.452 0.916,-0.818 2.045,-0.818s2.045,0.366 2.045,0.818zM24.954,14.818c0,0.452 -0.915,0.818 -2.045,0.818s-2.046,-0.366 -2.046,-0.818c0,-0.452 0.916,-0.818 2.046,-0.818s2.045,0.366 2.045,0.818zM20.454,17.682c0,0.679 -1.099,1.228 -2.454,1.228s-2.455,-0.549 -2.455,-1.228c0,-0.677 1.099,-1.227 2.455,-1.227s2.454,0.549 2.454,1.227zM26.182,17.682c0,0.679 -1.1,1.228 -2.454,1.228 -1.355,0 -2.455,-0.549 -2.455,-1.228 0,-0.677 1.1,-1.227 2.455,-1.227 1.354,0 2.454,0.549 2.454,1.227zM14.727,17.682c0,0.679 -1.099,1.228 -2.454,1.228 -1.355,0 -2.455,-0.549 -2.455,-1.228 0,-0.677 1.099,-1.227 2.455,-1.227 1.355,0 2.454,0.549 2.454,1.227zM21.272,21.363C21.272,22.269 19.807,23 18,23c-1.807,0 -3.273,-0.731 -3.273,-1.637 0,-0.903 1.466,-1.636 3.273,-1.636 1.807,0.001 3.272,0.733 3.272,1.636zM28.637,21.363c0,0.905 -1.467,1.637 -3.273,1.637 -1.807,0 -3.273,-0.731 -3.273,-1.637 0,-0.903 1.466,-1.636 3.273,-1.636 1.806,0.001 3.273,0.733 3.273,1.636zM13.909,21.363c0,0.905 -1.466,1.637 -3.273,1.637 -1.807,0 -3.272,-0.731 -3.272,-1.637 0,-0.903 1.465,-1.636 3.272,-1.636 1.807,0.001 3.273,0.733 3.273,1.636z"
android:fillColor="#FFF"/>
</vector>
@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M5,36c-1.104,0 -2,-0.896 -2,-2V3c0,-1.104 0.896,-2 2,-2s2,0.896 2,2v31c0,1.104 -0.896,2 -2,2z"
android:fillColor="#8899A6"/>
<path
android:pathData="M5,1c-1.105,0 -2,0.895 -2,2v31c0,0.276 0.224,0.5 0.5,0.5s0.5,-0.224 0.5,-0.5V4.414C4,3.633 4.633,3 5.414,3H7c0,-1.105 -0.895,-2 -2,-2z"
android:fillColor="#AAB8C2"/>
<path
android:pathData="M5,36c-1.104,0 -2,-0.896 -2,-2V3c0,-1.104 0.896,-2 2,-2s2,0.896 2,2v31c0,1.104 -0.896,2 -2,2z"
android:fillColor="#8899A6"/>
<path
android:pathData="M5,1c-1.105,0 -2,0.895 -2,2v31c0,0.276 0.224,0.5 0.5,0.5s0.5,-0.224 0.5,-0.5V4.414C4,3.633 4.633,3 5.414,3H7c0,-1.105 -0.895,-2 -2,-2z"
android:fillColor="#AAB8C2"/>
<path
android:pathData="M32.396,3.082C30.732,2.363 28.959,2.006 27,1.974l-1.375,0.38L21,3l-1,-0.128c-0.237,0.051 -0.476,0.099 -0.711,0.15 -2.169,0.469 -4.23,0.894 -6.289,0.982L12,5 6,4v19h6l1,2h0.077c2.244,-0.096 4.472,-0.556 6.633,-1.022l0.29,-0.061 0.646,-0.645 5.438,-0.708 0.916,0.41c1.68,0.032 3.193,0.335 4.604,0.944 0.309,0.133 0.665,0.103 0.945,-0.082 0.282,-0.186 0.451,-0.499 0.451,-0.836V4c0,-0.399 -0.237,-0.76 -0.604,-0.918z"
android:fillColor="#31373D"/>
<path
android:pathData="M13,4.004c-0.239,0.01 -0.478,0.035 -0.717,0.035 -1.797,0 -3.396,-0.313 -4.887,-0.957 -0.308,-0.135 -0.665,-0.103 -0.945,0.083C6.169,3.349 6,3.664 6,4v6s3.292,1 7,1L13,4.004zM20,10s-3.75,1 -7,1v7c3,0 7,-1 7,-1v-7zM27,9L27,1.974c-0.096,-0.002 -0.186,-0.013 -0.283,-0.013 -2.267,0 -4.521,0.442 -6.717,0.911L20,10s2.167,-1 7,-1zM6.604,23.918c1.5,0.648 3.09,0.993 4.82,1.082L13,25v-7c-4.167,0 -7,-1 -7,-1v6c0,0.399 0.237,0.76 0.604,0.918zM20,17v6.916c2.313,-0.499 4.511,-0.955 6.717,-0.955 0.097,0 0.187,0.011 0.283,0.013L27,16c-4.5,0 -7,1 -7,1zM27,16c2.676,0 4.82,0.56 6,0.954L33,9.908C31.853,9.527 29.769,9 27,9v7z"
android:fillColor="#E1E8ED"/>
</vector>
@@ -0,0 +1,72 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M0,34h36v2H0z"
android:fillColor="#939598"/>
<path
android:pathData="M6,27h29v5H6z"
android:fillColor="#231F20"/>
<path
android:pathData="M6.999,32m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
android:fillColor="#58595B"/>
<path
android:pathData="M12.999,32m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
android:fillColor="#58595B"/>
<path
android:pathData="M6.999,32m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
android:fillColor="#A0041E"/>
<path
android:pathData="M12.999,32m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
android:fillColor="#A0041E"/>
<path
android:pathData="M5,33H1c-1,0 -1.5,-0.5 0,-2l4,-4c1,-1 2,-2.001 2,0v4c0,2 -0.001,2 -2,2z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M8,20c0,3.313 -1.343,6 -3,6s-3,-2.687 -3,-6c0,-3.314 1.343,-6 3,-6s3,2.686 3,6z"
android:fillColor="#231F20"/>
<path
android:pathData="M11,15H7L5,7h8z"
android:fillColor="#6D6E71"/>
<path
android:pathData="M26,25c0,1.104 -0.896,2 -2,2H6c-1.104,0 -2,-0.896 -2,-2V15c0,-1.104 0.896,-2 2,-2h18c1.104,0 2,0.896 2,2v10z"
android:fillColor="#414042"/>
<path
android:pathData="M13,26c0,0.553 -0.448,1 -1,1s-1,-0.447 -1,-1L11,13c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v13zM19,26c0,0.553 -0.447,1 -1,1 -0.553,0 -1,-0.447 -1,-1L17,13c0,-0.552 0.447,-1 1,-1 0.553,0 1,0.448 1,1v13z"
android:fillColor="#C1694F"/>
<path
android:pathData="M36,26c0,0.553 -0.447,1 -1,1H7c-0.552,0 -1,-0.447 -1,-1 0,-0.553 0.448,-1 1,-1h28c0.553,0 1,0.447 1,1z"
android:fillColor="#808285"/>
<path
android:pathData="M29.999,31m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:fillColor="#58595B"/>
<path
android:pathData="M21.999,31m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:fillColor="#58595B"/>
<path
android:pathData="M29.999,31m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#A0041E"/>
<path
android:pathData="M21.999,31m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#A0041E"/>
<path
android:pathData="M12,3H6c-0.552,0 -1,0.448 -1,1v3h8V4c0,-0.552 -0.448,-1 -1,-1z"
android:fillColor="#414042"/>
<path
android:pathData="M23,7h12v18H23z"
android:fillColor="#BE1931"/>
<path
android:pathData="M36,6c0,0.552 -0.447,1 -1,1H23c-0.553,0 -1,-0.448 -1,-1s0.447,-1 1,-1h12c0.553,0 1,0.448 1,1z"
android:fillColor="#A0041E"/>
<path
android:pathData="M25,18h8v5h-8z"
android:fillColor="#EA596E"/>
<path
android:pathData="M30,32h-8c-0.127,0 -0.253,-0.024 -0.371,-0.071L16.807,30H10c-0.552,0 -1,-0.447 -1,-1s0.448,-1 1,-1h7c0.128,0 0.253,0.024 0.372,0.071L22.192,30H30c0.553,0 1,0.447 1,1s-0.447,1 -1,1z"
android:fillColor="#F4900C"/>
<path
android:pathData="M33,10c0,-0.552 -0.447,-1 -1,-1h-6c-0.553,0 -1,0.448 -1,1v5c0,0.552 0.447,1 1,1h6c0.553,0 1,-0.448 1,-1v-5z"
android:fillColor="#55ACEE"/>
</vector>
@@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M7,24c1.957,0 3.633,1.135 4.455,2.772l3.477,-1.739C13.488,22.058 10.446,20 6.916,20c-1.301,0 -2.534,0.285 -3.649,0.787l1.668,3.67C5.566,24.17 6.262,24 7,24zM29,24c1.467,0 2.772,0.643 3.688,1.648l2.897,-2.635C33.952,21.169 31.573,20 28.916,20c-3.576,0 -6.652,2.111 -8.073,5.15l3.648,1.722C25.293,25.18 27.003,24 29,24z"
android:fillColor="#EA596E"/>
<path
android:pathData="M7,22c-3.866,0 -7,3.134 -7,7s3.134,7 7,7 7,-3.134 7,-7 -3.133,-7 -7,-7zM7,34c-2.761,0 -5,-2.238 -5,-5s2.239,-5 5,-5 5,2.238 5,5 -2.238,5 -5,5zM29,22c-3.865,0 -7,3.134 -7,7s3.135,7 7,7c3.867,0 7,-3.134 7,-7s-3.133,-7 -7,-7zM29,34c-2.761,0 -5,-2.238 -5,-5s2.239,-5 5,-5c2.762,0 5,2.238 5,5s-2.238,5 -5,5z"
android:fillColor="#292F33"/>
<path
android:pathData="M29.984,28.922c-0.005,-0.067 -0.021,-0.132 -0.04,-0.198 -0.019,-0.065 -0.04,-0.126 -0.071,-0.186 -0.013,-0.024 -0.015,-0.052 -0.029,-0.075l-7,-11c-0.297,-0.466 -0.914,-0.604 -1.381,-0.307 -0.299,0.19 -0.444,0.513 -0.445,0.843H12c-0.552,0 -1,0.447 -1,1 0,0.553 0.448,1 1,1h10c0.027,0 0.05,-0.014 0.077,-0.016L27.178,28H18c-0.552,0 -1,0.447 -1,1s0.448,1 1,1h11.001c0.116,0 0.23,-0.028 0.343,-0.069 0.034,-0.013 0.064,-0.027 0.097,-0.043 0.031,-0.017 0.066,-0.024 0.097,-0.044 0.03,-0.02 0.048,-0.051 0.075,-0.072 0.055,-0.044 0.103,-0.089 0.147,-0.143 0.041,-0.049 0.074,-0.099 0.104,-0.154 0.03,-0.056 0.055,-0.11 0.075,-0.172 0.021,-0.066 0.033,-0.132 0.04,-0.201 0.004,-0.036 0.021,-0.066 0.021,-0.102 0,-0.027 -0.014,-0.051 -0.016,-0.078z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M21.581,16l-2.899,8.117 -5.929,-6.775c-0.364,-0.415 -0.996,-0.459 -1.411,-0.094 -0.415,0.364 -0.457,0.995 -0.094,1.411l6.664,7.615 -0.854,2.39c-0.185,0.519 0.086,1.092 0.606,1.277 0.111,0.04 0.224,0.059 0.336,0.059 0.411,0 0.796,-0.255 0.942,-0.664L23.705,16h-2.124z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M7,30c-0.15,0 -0.303,-0.034 -0.446,-0.105 -0.494,-0.247 -0.694,-0.848 -0.447,-1.342l3.062,-6.106C9.186,22.419 11,19.651 11,17c0,-3.242 -2.293,-4.043 -2.316,-4.051 -0.524,-0.175 -0.807,-0.741 -0.632,-1.265 0.174,-0.524 0.739,-0.81 1.265,-0.632C9.467,11.102 13,12.333 13,17c0,3.068 -1.836,6.042 -2.131,6.497l-2.974,5.949C7.72,29.798 7.367,30 7,30z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M14.612,13.663c-0.054,0 -0.11,-0.004 -0.165,-0.014l-6,-1c-0.544,-0.091 -0.913,-0.606 -0.822,-1.151 0.091,-0.544 0.601,-0.913 1.151,-0.822l6,1c0.544,0.091 0.913,0.606 0.822,1.151 -0.082,0.489 -0.506,0.836 -0.986,0.836zM26.383,17c-0.03,0 -0.059,-0.002 -0.089,-0.006l-5.672,-0.708c-0.372,-0.046 -0.644,-0.374 -0.62,-0.748 0.023,-0.374 0.333,-0.665 0.707,-0.665 0.041,0 4.067,-0.018 5.989,-1.299 0.25,-0.167 0.582,-0.157 0.824,0.026 0.239,0.185 0.337,0.501 0.241,0.788l-0.709,2.127c-0.096,0.293 -0.369,0.485 -0.671,0.485z"
android:fillColor="#292F33"/>
<path
android:pathData="M20,29c0,1.104 -0.895,2 -2,2 -1.104,0 -2,-0.896 -2,-2s0.896,-2 2,-2c1.105,0 2,0.896 2,2z"
android:fillColor="#66757F"/>
</vector>
@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M30,23.828c-0.391,0.392 -1.023,0.392 -1.414,0l-1.414,-1.414c-0.392,-0.391 -0.392,-1.024 0,-1.414L30,18.172c0.391,-0.391 1.023,-0.391 1.414,0l1.414,1.414c0.392,0.391 0.392,1.024 0,1.414L30,23.828zM15,8.828c-0.391,0.392 -1.023,0.392 -1.414,0l-1.414,-1.414c-0.392,-0.391 -0.392,-1.023 0,-1.414L15,3.172c0.391,-0.391 1.023,-0.391 1.414,0l1.414,1.414c0.392,0.391 0.392,1.023 0,1.414L15,8.828z"
android:fillColor="#66757F"/>
<path
android:pathData="M2,22c2,0 11,1 11,1s1,9 1,11 -2,2 -3,1 -4,-6 -4,-6 -5,-3 -6,-4 -1,-3 1,-3zM4,6.039C7,6 29,7 29,7s0.924,22 0.962,25c0.038,3 -2.763,4.002 -3.862,0.001S21,15 21,15 7.045,10.583 3.995,9.898C0,9 0.999,6.077 4,6.039z"
android:fillColor="#55ACEE"/>
<path
android:pathData="M27,3c2,-2 7,-3 8,-2s0,6 -2,8 -19,18 -19,18 -6.5,4.5 -8,3 3,-8 3,-8S25,5 27,3z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M14,22s0.5,0.5 -4,5 -5,4 -5,4 -0.5,-0.5 4,-5 5,-4 5,-4zM29,4c1.657,0 3,1.343 3,3h0.805c0.114,-0.315 0.195,-0.645 0.195,-1 0,-1.657 -1.343,-3 -3,-3 -0.355,0 -0.685,0.081 -1,0.195V4z"
android:fillColor="#66757F"/>
</vector>
@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M1,17l8,-7 16,1 1,16 -7,8s0.001,-5.999 -6,-12 -12,-6 -12,-6z"
android:fillColor="#A0041E"/>
<path
android:pathData="M0.973,35s-0.036,-7.979 2.985,-11S15,21.187 15,21.187 14.999,29 11.999,32c-3,3 -11.026,3 -11.026,3z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M8.999,27m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M35.999,0s-10,0 -22,10c-6,5 -6,14 -4,16s11,2 16,-4c10,-12 10,-22 10,-22z"
android:fillColor="#55ACEE"/>
<path
android:fillColor="#FF000000"
android:pathData="M26.999,5c-1.623,0 -3.013,0.971 -3.641,2.36 0.502,-0.227 1.055,-0.36 1.641,-0.36 2.209,0 4,1.791 4,4 0,0.586 -0.133,1.139 -0.359,1.64 1.389,-0.627 2.359,-2.017 2.359,-3.64 0,-2.209 -1.791,-4 -4,-4z"/>
<path
android:pathData="M8,28s0,-4 1,-5 13.001,-10.999 14,-10 -9.001,13 -10.001,14S8,28 8,28z"
android:fillColor="#A0041E"/>
</vector>
@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M5.123,5h6C12.227,5 13,4.896 13,6L13,4c0,-1.104 -0.773,-2 -1.877,-2h-8c-2,0 -3.583,2.125 -3,5 0,0 1.791,9.375 1.917,9.958C2.373,18.5 4.164,20 6.081,20h6.958c1.105,0 -0.039,-1.896 -0.039,-3v-2c0,1.104 -0.773,2 -1.877,2h-4c-1.104,0 -1.833,-1.042 -2,-2S3.539,7.667 3.539,7.667C3.206,5.75 4.018,5 5.123,5zM30.935,5h-6C23.831,5 22,4.896 22,6L22,4c0,-1.104 1.831,-2 2.935,-2h8c2,0 3.584,2.125 3,5 0,0 -1.633,9.419 -1.771,10 -0.354,1.5 -2.042,3 -4,3h-7.146C21.914,20 22,18.104 22,17v-2c0,1.104 1.831,2 2.935,2h4c1.104,0 1.834,-1.042 2,-2s1.584,-7.333 1.584,-7.333C32.851,5.75 32.04,5 30.935,5zM20.832,22c0,-6.958 -2.709,0 -2.709,0s-3,-6.958 -3,0 -3.291,10 -3.291,10h12.292c-0.001,0 -3.292,-3.042 -3.292,-10z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M29.123,6.577c0,6.775 -6.77,18.192 -11,18.192 -4.231,0 -11,-11.417 -11,-18.192 0,-5.195 1,-6.319 3,-6.319 1.374,0 6.025,-0.027 8,-0.027l7,-0.001c2.917,-0.001 4,0.684 4,6.347z"
android:fillColor="#FFCC4D"/>
<path
android:pathData="M27,33c0,1.104 0.227,2 -0.877,2h-16C9.018,35 9,34.104 9,33v-1c0,-1.104 1.164,-2 2.206,-2h13.917c1.042,0 1.877,0.896 1.877,2v1z"
android:fillColor="#C1694F"/>
<path
android:pathData="M29,34.625c0,0.76 0.165,1.375 -1.252,1.375H8.498C7.206,36 7,35.385 7,34.625v-0.25C7,33.615 7.738,33 8.498,33h19.25c0.759,0 1.252,0.615 1.252,1.375v0.25z"
android:fillColor="#C1694F"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M18,18m-18,0a18,18 0,1 1,36 0a18,18 0,1 1,-36 0"
android:fillColor="#F5F8FA"/>
<path
android:pathData="M18,11c-0.552,0 -1,-0.448 -1,-1L17,3c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v7c0,0.552 -0.448,1 -1,1zM11.417,15.5c-0.1,0 -0.202,-0.015 -0.302,-0.047l-8.041,-2.542c-0.527,-0.167 -0.819,-0.728 -0.652,-1.255 0.166,-0.527 0.73,-0.818 1.255,-0.652l8.042,2.542c0.527,0.167 0.819,0.729 0.652,1.255 -0.136,0.426 -0.53,0.699 -0.954,0.699zM25.042,15.209c-0.434,0 -0.833,-0.285 -0.96,-0.722 -0.154,-0.531 0.151,-1.085 0.682,-1.239l6.75,-1.958c0.531,-0.153 1.085,0.153 1.238,0.682 0.154,0.531 -0.151,1.085 -0.682,1.239l-6.75,1.958c-0.092,0.027 -0.186,0.04 -0.278,0.04zM27.043,30.167c-0.306,0 -0.606,-0.14 -0.803,-0.403l-5.459,-7.333c-0.33,-0.442 -0.238,-1.069 0.205,-1.399 0.442,-0.331 1.069,-0.238 1.399,0.205l5.459,7.333c0.33,0.442 0.238,1.069 -0.205,1.399 -0.179,0.134 -0.389,0.198 -0.596,0.198zM8.749,30.084c-0.197,0 -0.395,-0.058 -0.57,-0.179 -0.454,-0.316 -0.565,-0.938 -0.25,-1.392l5.125,-7.375c0.315,-0.454 0.938,-0.566 1.392,-0.251 0.454,0.315 0.565,0.939 0.25,1.392l-5.125,7.375c-0.194,0.281 -0.506,0.43 -0.822,0.43zM3.5,27.062c-0.44,0 -0.844,-0.293 -0.965,-0.738L0.347,18.262c-0.145,-0.533 0.17,-1.082 0.704,-1.227 0.535,-0.141 1.083,0.171 1.227,0.704l2.188,8.062c0.145,0.533 -0.17,1.082 -0.704,1.226 -0.088,0.025 -0.176,0.035 -0.262,0.035zM22,34h-9c-0.552,0 -1,-0.447 -1,-1s0.448,-1 1,-1h9c0.553,0 1,0.447 1,1s-0.447,1 -1,1zM32.126,27.125c-0.079,0 -0.16,-0.009 -0.24,-0.029 -0.536,-0.132 -0.864,-0.674 -0.731,-1.21l2.125,-8.625c0.133,-0.536 0.679,-0.862 1.21,-0.732 0.536,0.132 0.864,0.674 0.731,1.211l-2.125,8.625c-0.113,0.455 -0.521,0.76 -0.97,0.76zM30.312,7.688c-0.17,0 -0.342,-0.043 -0.5,-0.134L22.25,3.179c-0.478,-0.277 -0.642,-0.888 -0.364,-1.367 0.275,-0.478 0.886,-0.643 1.366,-0.365l7.562,4.375c0.478,0.277 0.642,0.888 0.364,1.367 -0.185,0.32 -0.521,0.499 -0.866,0.499zM5.501,7.688c-0.312,0 -0.618,-0.145 -0.813,-0.417 -0.322,-0.45 -0.22,-1.074 0.229,-1.396l6.188,-4.438c0.449,-0.322 1.074,-0.219 1.396,0.229 0.322,0.449 0.219,1.074 -0.229,1.396L6.083,7.5c-0.177,0.126 -0.38,0.188 -0.582,0.188z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M25.493,13.516l-7.208,-5.083c-0.348,-0.245 -0.814,-0.243 -1.161,0.006l-7.167,5.167c-0.343,0.248 -0.494,0.684 -0.375,1.091l2.5,8.583c0.124,0.426 0.515,0.72 0.96,0.72L22,24c0.43,0 0.81,-0.274 0.948,-0.681l2.917,-8.667c0.141,-0.419 -0.011,-0.881 -0.372,-1.136zM1.292,19.542c0.058,0 0.117,-0.005 0.175,-0.016 0.294,-0.052 0.55,-0.233 0.697,-0.494l3.375,-6c0.051,-0.091 0.087,-0.188 0.108,-0.291L6.98,6.2c0.06,-0.294 -0.016,-0.6 -0.206,-0.832C6.584,5.135 6.3,5 6,5h-0.428C2.145,8.277 0,12.884 0,18c0,0.266 0.028,0.525 0.04,0.788l0.602,0.514c0.182,0.156 0.413,0.24 0.65,0.24zM10.617,2.995c0.106,0.219 0.313,0.373 0.553,0.412l6.375,1.042c0.04,0.006 0.081,0.01 0.121,0.01 0.04,0 0.081,-0.003 0.122,-0.01l6.084,-1c0.2,-0.033 0.38,-0.146 0.495,-0.314 0.116,-0.168 0.158,-0.375 0.118,-0.575l-0.292,-1.443C22.26,0.407 20.18,0 18,0c-2.425,0 -4.734,0.486 -6.845,1.356l-0.521,0.95c-0.117,0.213 -0.123,0.47 -0.017,0.689zM31.134,5.719l-1.504,-0.095c-0.228,-0.013 -0.455,0.076 -0.609,0.249 -0.152,0.173 -0.218,0.402 -0.175,0.63l1.167,6.198c0.017,0.086 0.048,0.148 0.093,0.224 1.492,2.504 3.152,5.301 3.381,5.782 0.024,0.084 0.062,0.079 0.114,0.151 0.14,0.195 0.372,0.142 0.612,0.142h0.007c0.198,0 0.323,0.094 1.768,-0.753 0.001,-0.083 0.012,-0.164 0.012,-0.247 0,-4.753 -1.856,-9.064 -4.866,-12.281zM14.541,33.376c0.011,-0.199 -0.058,-0.395 -0.191,-0.544l-4.5,-5c-0.06,-0.066 -0.131,-0.122 -0.211,-0.163 -5.885,-3.069 -5.994,-3.105 -6.066,-3.13 -0.078,-0.025 -0.161,-0.039 -0.242,-0.039 -0.537,0 -0.695,0.065 -1.185,2.024 2.236,4.149 6.053,7.316 10.644,8.703l1.5,-1.333c0.149,-0.132 0.239,-0.319 0.251,-0.518zM32.374,24.809c-0.189,-0.08 -0.405,-0.078 -0.592,0.005l-6.083,2.667c-0.106,0.046 -0.2,0.116 -0.274,0.205l-4.25,5.083c-0.129,0.154 -0.19,0.352 -0.172,0.552 0.02,0.2 0.117,0.384 0.272,0.51 0.683,0.559 1.261,1.03 1.767,1.44 4.437,-1.294 8.154,-4.248 10.454,-8.146l-0.712,-1.889c-0.072,-0.193 -0.221,-0.347 -0.41,-0.427z"
android:fillColor="#31373D"/>
</vector>
@@ -0,0 +1,51 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M21.828,20.559C19.707,21.266 19,17.731 19,17.731s0.965,-0.968 0.235,-1.829c1.138,-1.137 0.473,-1.707 0.473,-1.707 -1.954,-1.953 -5.119,-1.953 -7.071,0 -0.246,0.246 -0.414,0.467 -0.553,0.678 -0.061,0.086 -0.115,0.174 -0.17,0.262l-0.014,0.027c-0.285,0.475 -0.491,0.982 -0.605,1.509 -0.156,0.319 -0.379,0.659 -0.779,1.06 -1.414,1.414 -4.949,-0.707 -7.778,2.121 -0.029,0.029 -0.045,0.069 -0.069,0.104 -0.094,0.084 -0.193,0.158 -0.284,0.25 -3.319,3.319 -3.003,9.018 0.708,12.728 3.524,3.525 8.84,3.979 12.209,1.17 0.058,-0.031 0.117,-0.061 0.165,-0.109 0.071,-0.072 0.126,-0.14 0.193,-0.21 0.053,-0.049 0.109,-0.093 0.161,-0.143 1.693,-1.694 2.342,-3.73 2.086,-5.811 -0.068,-0.99 -0.165,-1.766 0.39,-2.321 0.707,-0.707 2.828,0 4.242,-1.414 2.117,-2.122 0.631,-3.983 -0.711,-3.537z"
android:fillColor="#BB1A34"/>
<path
android:pathData="M14.987,18.91L30.326,3.572l2.121,2.122 -15.339,15.339z"
android:fillColor="#292F33"/>
<path
android:pathData="M10.001,29.134c1.782,1.277 1.959,3.473 1.859,4.751 -0.042,0.528 0.519,0.898 0.979,0.637 2.563,-1.456 4.602,-3.789 4.038,-7.853 -0.111,-0.735 0.111,-2.117 2.272,-2.406 2.161,-0.29 2.941,-1.099 3.208,-1.485 0.153,-0.221 0.29,-0.832 -0.312,-0.854 -0.601,-0.022 -2.094,0.446 -3.431,-1.136 -1.337,-1.582 -1.559,-2.228 -1.604,-2.473 -0.045,-0.245 -1.409,-3.694 -2.525,-1.864 -0.927,1.521 -1.958,4.509 -5.287,5.287 -1.355,0.316 -3.069,1.005 -3.564,1.96 -0.832,1.604 0.46,2.725 1.574,3.483 1.115,0.757 2.793,1.953 2.793,1.953z"
android:fillColor="#F5F8FA"/>
<path
android:pathData="M13.072,19.412l1.414,-1.415 3.536,3.535 -1.414,1.414zM8.597,23.886l1.415,-1.414 3.535,3.535 -1.414,1.414z"
android:fillColor="#292F33"/>
<path
android:pathData="M7.396,27.189L29.198,5.427l0.53,0.531L7.927,27.72zM8.265,28.057L30.067,6.296l0.53,0.531L8.796,28.59z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M9.815,28.325c0.389,0.389 0.389,1.025 0,1.414s-1.025,0.389 -1.414,0l-2.122,-2.121c-0.389,-0.389 -0.389,-1.025 0,-1.414h0.001c0.389,-0.389 1.025,-0.389 1.414,0l2.121,2.121z"
android:fillColor="#292F33"/>
<path
android:pathData="M13.028,29.556m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
android:fillColor="#292F33"/>
<path
android:pathData="M14.445,31.881c0,0.379 -0.307,0.686 -0.686,0.686 -0.379,0 -0.686,-0.307 -0.686,-0.686 0,-0.379 0.307,-0.686 0.686,-0.686 0.379,0 0.686,0.307 0.686,0.686z"
android:fillColor="#292F33"/>
<path
android:pathData="M35.088,4.54c0.415,0.415 0.415,1.095 -0.001,1.51l-4.362,3.02c-0.416,0.415 -1.095,0.415 -1.51,0L26.95,6.804c-0.415,-0.415 -0.415,-1.095 0.001,-1.51l3.02,-4.361c0.416,-0.415 1.095,-0.415 1.51,0l3.607,3.607z"
android:fillColor="#BB1A34"/>
<path
android:pathData="M32.123,9.402m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
android:fillColor="#66757F"/>
<path
android:pathData="M33.381,8.557m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
android:fillColor="#66757F"/>
<path
android:pathData="M34.64,7.712m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
android:fillColor="#66757F"/>
<path
android:pathData="M26.712,3.811m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
android:fillColor="#66757F"/>
<path
android:pathData="M27.555,2.571m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
android:fillColor="#66757F"/>
<path
android:pathData="M28.398,1.332m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
android:fillColor="#66757F"/>
</vector>
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M5.622,33.051l-2.674,-2.673L23.337,9.987c3.344,-3.343 1.337,-8.021 2.007,-8.689 0.666,-0.67 1.335,-0.002 1.335,-0.002l8.023,8.023c0.668,0.668 0,1.336 0,1.336 -0.669,0.67 -5.778,-0.908 -8.692,2.006L5.622,33.051z"
android:fillColor="#FCAB40"/>
<path
android:pathData="M5.457,33.891c0.925,-0.925 0.925,-2.424 0,-3.35 -0.924,-0.924 -2.424,-0.924 -3.349,0l0.087,0.087c-0.371,-0.334 -0.938,-0.331 -1.296,0.027 -0.369,0.368 -0.369,0.968 0,1.336L4.008,35.1c0.37,0.369 0.968,0.369 1.337,0 0.355,-0.356 0.36,-0.919 0.032,-1.29l0.08,0.081z"
android:fillColor="#CCD6DD"/>
<path
android:pathData="M13.31,33.709c-1.516,0 -2.939,-0.59 -4.011,-1.661 -1.071,-1.07 -1.661,-2.495 -1.661,-4.011 0,-1.515 0.59,-2.939 1.661,-4.011L19.995,13.33c1.071,-1.071 2.496,-1.661 4.012,-1.661 1.515,0 2.94,0.59 4.011,1.661 2.211,2.212 2.211,5.811 0,8.022L17.322,32.047c-1.072,1.071 -2.496,1.662 -4.012,1.662zM24.007,15.45c-0.506,0 -0.98,0.197 -1.338,0.554L11.974,26.7c-0.357,0.357 -0.554,0.832 -0.554,1.337 0,0.506 0.197,0.979 0.553,1.336 0.358,0.357 0.832,0.555 1.337,0.555s0.98,-0.197 1.337,-0.555l10.696,-10.695c0.737,-0.737 0.736,-1.937 -0.001,-2.674 -0.356,-0.357 -0.83,-0.554 -1.335,-0.554z"
android:fillColor="#FCAB40"/>
<path
android:pathData="M25.344,24.026c0.736,0.738 1.936,0.738 2.674,0 0.738,-0.739 0.738,-1.937 0,-2.674l-8.022,-8.023c-0.739,-0.738 -1.935,-0.738 -2.673,0 -0.739,0.739 -0.739,1.937 0,2.675l8.021,8.022zM21.332,28.037c0.738,0.738 1.937,0.738 2.674,0 0.738,-0.739 0.738,-1.936 0.002,-2.674l-8.023,-8.023c-0.739,-0.738 -1.936,-0.738 -2.675,0 -0.738,0.738 -0.738,1.936 0,2.675l8.022,8.022zM17.322,32.048c0.738,0.738 1.934,0.738 2.673,0 0.738,-0.738 0.738,-1.937 0,-2.674l-8.021,-8.022c-0.739,-0.738 -1.936,-0.738 -2.675,0 -0.738,0.737 -0.738,1.935 0,2.674l8.023,8.022z"
android:fillColor="#FCAB40"/>
<path
android:pathData="M14.648,13.329c0.369,0.369 0.968,0.369 1.337,0l1.337,-1.336c0.369,-0.369 0.369,-0.968 0,-1.338 -0.37,-0.369 -0.968,-0.369 -1.337,0l-1.337,1.338c-0.37,0.369 -0.37,0.967 0,1.336zM10.637,17.341c0.37,0.371 0.967,0.37 1.337,0l1.336,-1.337c0.37,-0.37 0.371,-0.967 0,-1.337 -0.369,-0.37 -0.967,-0.37 -1.337,0l-1.337,1.337c-0.369,0.37 -0.369,0.968 0.001,1.337zM6.625,21.353c0.37,0.37 0.967,0.37 1.337,0l1.337,-1.338c0.37,-0.369 0.37,-0.967 0,-1.337 -0.369,-0.369 -0.967,-0.369 -1.336,0l-1.337,1.338c-0.37,0.369 -0.37,0.967 -0.001,1.337z"
android:fillColor="#CCD6DD"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M28,13c0,11 5,10 5,15 0,0 0,2 -2,2H5c-2,0 -2,-2 -2,-2 0,-5 5,-4 5,-15C8,7.478 12.477,3 18,3s10,4.478 10,10z"
android:fillColor="#FFAC33"/>
<path
android:pathData="M18,3m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
android:fillColor="#FFAC33"/>
<path
android:pathData="M18,36c2.209,0 4,-1.791 4,-4h-8c0,2.209 1.791,4 4,4z"
android:fillColor="#FFAC33"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M30.5,18.572L26,25h2.575c-1.13,3.988 -4.445,7.05 -8.575,7.81V17h3c1.104,0 2,-0.896 2,-2s-0.896,-2 -2,-2h-3v-1.349h-4V13h-3c-1.104,0 -2,0.896 -2,2s0.896,2 2,2h3v15.81c-4.13,-0.76 -7.445,-3.821 -8.575,-7.81H10l-4.5,-6.428L1,25h3.33C5.705,31.289 11.299,36 18,36s12.295,-4.711 13.67,-11H35l-4.5,-6.428z"
android:fillColor="#269"/>
<path
android:pathData="M18,0c-3.314,0 -6,2.686 -6,6s2.686,6 6,6 6,-2.686 6,-6 -2.686,-6 -6,-6zM18,9c-1.657,0 -3,-1.343 -3,-3s1.343,-3 3,-3 3,1.343 3,3 -1.343,3 -3,3z"
android:fillColor="#269"/>
</vector>
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M18,0C9.716,0 3,6.716 3,15v9h3v-9C6,8 11.269,2.812 18,2.812 24.73,2.812 30,8 30,15v10l3,-1v-9c0,-8.284 -6.716,-15 -15,-15z"
android:fillColor="#66757F"/>
<path
android:pathData="M6,27c0,1.104 -0.896,2 -2,2L2,29c-1.104,0 -2,-0.896 -2,-2v-9c0,-1.104 0.896,-2 2,-2h2c1.104,0 2,0.896 2,2v9zM36,27c0,1.104 -0.896,2 -2,2h-2c-1.104,0 -2,-0.896 -2,-2v-9c0,-1.104 0.896,-2 2,-2h2c1.104,0 2,0.896 2,2v9z"
android:fillColor="#31373D"/>
<path
android:pathData="M19.182,10.016l-6.364,1.313c-0.45,0.093 -0.818,0.544 -0.818,1.004v16.185c-0.638,-0.227 -1.341,-0.36 -2.087,-0.36 -2.785,0 -5.042,1.755 -5.042,3.922 0,2.165 2.258,3.827 5.042,3.827C12.649,35.905 14.922,34 15,32L15,16.39l4.204,-0.872c0.449,-0.093 0.796,-0.545 0.796,-1.004v-3.832c0,-0.458 -0.368,-0.759 -0.818,-0.666zM27.182,13.167l-4.297,0.865c-0.45,0.093 -0.885,0.544 -0.885,1.003L22,26.44c0,-0.152 -0.878,-0.24 -1.4,-0.24 -2.024,0 -3.633,1.276 -3.633,2.852 0,1.574 1.658,2.851 3.683,2.851s3.677,-1.277 3.677,-2.851l-0.014,-11.286 2.869,-0.598c0.45,-0.093 0.818,-0.544 0.818,-1.003v-2.33c0,-0.459 -0.368,-0.76 -0.818,-0.668z"
android:fillColor="#55ACEE"/>
</vector>
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M0,29c0,2.209 1.791,4 4,4h24c2.209,0 4,-1.791 4,-4V12c0,-2.209 -1.791,-4 -4,-4h-9c-3.562,0 -3,-5 -8.438,-5H4C1.791,3 0,4.791 0,7v22z"
android:fillColor="#269"/>
<path
android:pathData="M30,10h-6.562C18,10 18.562,15 15,15H6c-2.209,0 -4,1.791 -4,4v10c0,0.553 -0.448,1 -1,1s-1,-0.447 -1,-1c0,2.209 1.791,4 4,4h26c2.209,0 4,-1.791 4,-4V14c0,-2.209 -1.791,-4 -4,-4z"
android:fillColor="#55ACEE"/>
</vector>
@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M23.651,23.297L12.702,12.348l9.386,-7.821 9.385,9.385z"
android:fillColor="#BE1931"/>
<path
android:pathData="M34.6,13.912c-1.727,1.729 -4.528,1.729 -6.255,0l-6.257,-6.256c-1.729,-1.727 -1.729,-4.53 0,-6.258 1.726,-1.727 4.528,-1.727 6.257,0L34.6,7.656c1.728,1.727 1.728,4.529 0,6.256z"
android:fillColor="#DD2E44"/>
<path
android:pathData="M14,17.823S-0.593,35.029 0.188,35.813C0.97,36.596 18.177,22 18.177,22L14,17.823z"
android:fillColor="#99AAB5"/>
<path
android:pathData="M25.215,27.991c-1.726,1.729 -4.528,1.729 -6.258,0L8.009,17.041c-1.727,-1.728 -1.727,-4.528 0,-6.256 1.728,-1.729 4.53,-1.729 6.258,0l10.948,10.949c1.728,1.729 1.728,4.528 0,6.257z"
android:fillColor="#DD2E44"/>
</vector>
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Generated file, do not edit -->
<string name="verification_emoji_00">كلب</string>
<string name="verification_emoji_01">هِرَّة</string>
<string name="verification_emoji_02">أَسَد</string>
<string name="verification_emoji_03">حِصَان</string>
<string name="verification_emoji_04">حصان وحيد القرن</string>
<string name="verification_emoji_05">خِنزِير</string>
<string name="verification_emoji_06">فِيل</string>
<string name="verification_emoji_07">أَرنَب</string>
<string name="verification_emoji_08">باندَا</string>
<string name="verification_emoji_09">دِيك</string>
<string name="verification_emoji_10">بطريق</string>
<string name="verification_emoji_11">سُلحفاة</string>
<string name="verification_emoji_12">سَمَكة</string>
<string name="verification_emoji_13">أُخطُبُوط</string>
<string name="verification_emoji_14">فَرَاشَة</string>
<string name="verification_emoji_15">زَهرَة</string>
<string name="verification_emoji_16">شَجَرَة</string>
<string name="verification_emoji_17">صبار</string>
<string name="verification_emoji_18">فُطر</string>
<string name="verification_emoji_19">كُرَةٌ أرضِيَّة</string>
<string name="verification_emoji_20">قَمَر</string>
<string name="verification_emoji_21">سَحابَة</string>
<string name="verification_emoji_22">نار</string>
<string name="verification_emoji_23">مَوزَة</string>
<string name="verification_emoji_24">تُفَّاحَة</string>
<string name="verification_emoji_25">فَراوِلَة</string>
<string name="verification_emoji_26">ذُرَة</string>
<string name="verification_emoji_27">بِيتزا</string>
<string name="verification_emoji_28">كَعكَة</string>
<string name="verification_emoji_29">قَلب</string>
<string name="verification_emoji_30">اِبتِسَامَة</string>
<string name="verification_emoji_31">رُوبُوت</string>
<string name="verification_emoji_32">قُبَّعَة</string>
<string name="verification_emoji_33">نَظَّارَة</string>
<string name="verification_emoji_34">مِفتَاحُ رَبط</string>
<string name="verification_emoji_35">سانتا</string>
<string name="verification_emoji_36">رَفعُ إِبهَام</string>
<string name="verification_emoji_37">مِظَلَّة</string>
<string name="verification_emoji_38">سَاعَةٌ رَملِيَّة</string>
<string name="verification_emoji_39">سَاعَة</string>
<string name="verification_emoji_40">هَدِيَّة</string>
<string name="verification_emoji_41">مِصبَاح</string>
<string name="verification_emoji_42">كِتَاب</string>
<string name="verification_emoji_43">قَلَمُ رَصاص</string>
<string name="verification_emoji_44">مِشبَكُ وَرَق</string>
<string name="verification_emoji_45">مِقَصّ</string>
<string name="verification_emoji_46">قُفل</string>
<string name="verification_emoji_47">مِفتَاح</string>
<string name="verification_emoji_48">مِطرَقَة</string>
<string name="verification_emoji_49">تِلِفُون</string>
<string name="verification_emoji_50">عَلَم</string>
<string name="verification_emoji_51">قِطَار</string>
<string name="verification_emoji_52">دَرّاجَة</string>
<string name="verification_emoji_53">طَائِرة</string>
<string name="verification_emoji_54">صَارُوخ</string>
<string name="verification_emoji_55">كَأسُ النَّصر</string>
<string name="verification_emoji_56">كُرَة</string>
<string name="verification_emoji_57">غيتار</string>
<string name="verification_emoji_58">بُوق</string>
<string name="verification_emoji_59">جَرَس</string>
<string name="verification_emoji_60">مِرسَاة</string>
<string name="verification_emoji_61">سَمّاعَة رَأس</string>
<string name="verification_emoji_62">مُجَلَّد</string>
<string name="verification_emoji_63">دَبُّوس</string>
</resources>
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_identity_confirmation_cannot_confirm">"Не можаце пацвердзіць?"</string>
<string name="screen_identity_confirmation_create_new_recovery_key">"Стварыць новы ключ аднаўлення"</string>
<string name="screen_identity_confirmation_subtitle">"Пацвердзіце гэтую прыладу, каб наладзіць бяспечны абмен паведамленнямі."</string>
<string name="screen_identity_confirmation_title">"Пацвердзіце, што гэта вы"</string>
<string name="screen_identity_confirmation_use_another_device">"Выкарыстоўвайце іншую прыладу"</string>
<string name="screen_identity_confirmation_use_recovery_key">"Выкарыстоўваць ключ аднаўлення"</string>
<string name="screen_identity_confirmed_subtitle">"Цяпер вы можаце бяспечна чытаць і адпраўляць паведамленні, і ўсе, з кім вы маеце зносіны ў чаце, таксама могуць давяраць гэтай прыладзе."</string>
<string name="screen_identity_confirmed_title">"Прылада праверана"</string>
<string name="screen_identity_use_another_device">"Выкарыстоўвайце іншую прыладу"</string>
<string name="screen_identity_waiting_on_other_device">"Чаканне на іншай прыладзе…"</string>
<string name="screen_session_verification_cancelled_subtitle">"Здаецца, нешта не так. Альбо час чакання запыту скончыўся, альбо запыт быў адхілены."</string>
<string name="screen_session_verification_compare_emojis_subtitle">"Пераканайцеся, што прыведзеныя ніжэй эмодзі супадаюць з эмодзі, паказанымі ў вашым іншым сеансе."</string>
<string name="screen_session_verification_compare_emojis_title">"Параўнайце эмодзі"</string>
<string name="screen_session_verification_compare_numbers_subtitle">"Пераканайцеся, што прыведзеныя ніжэй лічбы супадаюць з лічбамі, паказанымі ў іншым сеансе."</string>
<string name="screen_session_verification_compare_numbers_title">"Параўнайце лічбы"</string>
<string name="screen_session_verification_complete_subtitle">"Ваш новы сеанс пацверджаны. Ён мае доступ да вашых зашыфраваных паведамленняў, і іншыя карыстальнікі будуць лічыць яго давераным."</string>
<string name="screen_session_verification_device_verified">"Прылада праверана"</string>
<string name="screen_session_verification_enter_recovery_key">"Увядзіце ключ аднаўлення"</string>
<string name="screen_session_verification_open_existing_session_subtitle">"Дакажыце, што гэта вы, каб атрымаць доступ да вашай зашыфраванай гісторыі паведамленняў."</string>
<string name="screen_session_verification_open_existing_session_title">"Адкрыйце існуючы сеанс"</string>
<string name="screen_session_verification_positive_button_canceled">"Паўтарыце праверку"</string>
<string name="screen_session_verification_positive_button_initial">"Я гатовы"</string>
<string name="screen_session_verification_positive_button_verifying_ongoing">"Чаканне супадзення"</string>
<string name="screen_session_verification_ready_subtitle">"Параўнайце ўнікальны набор эмодзі."</string>
<string name="screen_session_verification_request_accepted_subtitle">"Параўнайце ўнікальныя эмодзі, пераканаўшыся, што яны размешчаны ў тым жа парадку."</string>
<string name="screen_session_verification_request_success_subtitle">"Ваш новы сеанс пацверджаны. Ён мае доступ да вашых зашыфраваных паведамленняў, і іншыя карыстальнікі будуць лічыць яго давераным."</string>
<string name="screen_session_verification_request_success_title">"Прылада праверана"</string>
<string name="screen_session_verification_they_dont_match">"Яны не супадаюць"</string>
<string name="screen_session_verification_they_match">"Яны супадаюць"</string>
<string name="screen_session_verification_waiting_to_accept_subtitle">"Для працягу працы прыміце запыт на запуск працэсу праверкі ў іншым сеансе."</string>
<string name="screen_session_verification_waiting_to_accept_title">"Чаканне прыняцця запыту"</string>
<string name="screen_signout_in_progress_dialog_content">"Выхад…"</string>
</resources>
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Generated file, do not edit -->
<string name="verification_emoji_00">Куче</string>
<string name="verification_emoji_01">Котка</string>
<string name="verification_emoji_02">Лъв</string>
<string name="verification_emoji_03">Кон</string>
<string name="verification_emoji_04">Еднорог</string>
<string name="verification_emoji_05">Прасе</string>
<string name="verification_emoji_06">Слон</string>
<string name="verification_emoji_07">Заек</string>
<string name="verification_emoji_08">Панда</string>
<string name="verification_emoji_09">Петел</string>
<string name="verification_emoji_10">Пингвин</string>
<string name="verification_emoji_11">Костенурка</string>
<string name="verification_emoji_12">Риба</string>
<string name="verification_emoji_13">Октопод</string>
<string name="verification_emoji_14">Пеперуда</string>
<string name="verification_emoji_15">Цвете</string>
<string name="verification_emoji_16">Дърво</string>
<string name="verification_emoji_17">Кактус</string>
<string name="verification_emoji_18">Гъба</string>
<string name="verification_emoji_19">Глобус</string>
<string name="verification_emoji_20">Луна</string>
<string name="verification_emoji_21">Облак</string>
<string name="verification_emoji_22">Огън</string>
<string name="verification_emoji_23">Банан</string>
<string name="verification_emoji_24">Ябълка</string>
<string name="verification_emoji_25">Ягода</string>
<string name="verification_emoji_26">Царевица</string>
<string name="verification_emoji_27">Пица</string>
<string name="verification_emoji_28">Торта</string>
<string name="verification_emoji_29">Сърце</string>
<string name="verification_emoji_30">Усмивка</string>
<string name="verification_emoji_31">Робот</string>
<string name="verification_emoji_32">Шапка</string>
<string name="verification_emoji_33">Очила</string>
<string name="verification_emoji_34">Гаечен ключ</string>
<string name="verification_emoji_35">Дядо Коледа</string>
<string name="verification_emoji_36">Палец нагоре</string>
<string name="verification_emoji_37">Чадър</string>
<string name="verification_emoji_38">Пясъчен часовник</string>
<string name="verification_emoji_39">Часовник</string>
<string name="verification_emoji_40">Подарък</string>
<string name="verification_emoji_41">Лампа</string>
<string name="verification_emoji_42">Книга</string>
<string name="verification_emoji_43">Молив</string>
<string name="verification_emoji_44">Кламер</string>
<string name="verification_emoji_45">Ножици</string>
<string name="verification_emoji_46">Катинар</string>
<string name="verification_emoji_47">Ключ</string>
<string name="verification_emoji_48">Чук</string>
<string name="verification_emoji_49">Телефон</string>
<string name="verification_emoji_50">Флаг</string>
<string name="verification_emoji_51">Влак</string>
<string name="verification_emoji_52">Колело</string>
<string name="verification_emoji_53">Самолет</string>
<string name="verification_emoji_54">Ракета</string>
<string name="verification_emoji_55">Трофей</string>
<string name="verification_emoji_56">Топка</string>
<string name="verification_emoji_57">Китара</string>
<string name="verification_emoji_58">Тромпет</string>
<string name="verification_emoji_59">Звънец</string>
<string name="verification_emoji_60">Котва</string>
<string name="verification_emoji_61">Слушалки</string>
<string name="verification_emoji_62">Папка</string>
<string name="verification_emoji_63">Кабърче</string>
</resources>
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_identity_confirmation_cannot_confirm">"Не можете да потвърдите?"</string>
<string name="screen_identity_confirmation_subtitle">"Потвърдете това устройство, за да настроите защитени съобщения."</string>
<string name="screen_identity_confirmation_title">"Потвърдете самоличността си"</string>
<string name="screen_identity_confirmation_use_another_device">"Използване на друго устройство"</string>
<string name="screen_identity_confirmation_use_recovery_key">"Използване на ключ за възстановяване"</string>
<string name="screen_identity_confirmed_title">"Устройството е потвърдено"</string>
<string name="screen_identity_use_another_device">"Използване на друго устройство"</string>
<string name="screen_session_verification_cancelled_subtitle">"Нещо не изглежда наред. Или времето за изчакване на заявката е изтекло, или заявката е отхвърлена."</string>
<string name="screen_session_verification_compare_emojis_subtitle">"Потвърдете, че емоджитата по-долу съвпадат с показаните в другото ви устройство."</string>
<string name="screen_session_verification_compare_emojis_title">"Сравнете емоджита"</string>
<string name="screen_session_verification_compare_emojis_user_subtitle">"Уверете се, че емоджитата по-долу съвпадат с показаните на другото устройство."</string>
<string name="screen_session_verification_compare_numbers_subtitle">"Уверете се, че числата по-долу съвпадат с показаните на другата ви сесия."</string>
<string name="screen_session_verification_compare_numbers_title">"Сравнете числа"</string>
<string name="screen_session_verification_complete_subtitle">"Сега можете да четете или изпращате съобщения сигурно на другото си устройство."</string>
<string name="screen_session_verification_device_verified">"Устройството е потвърдено"</string>
<string name="screen_session_verification_enter_recovery_key">"Въвеждане на ключ за възстановяване"</string>
<string name="screen_session_verification_open_existing_session_subtitle">"Докажете, че сте вие, за да получите достъп до хронологията на шифрованите си съобщения."</string>
<string name="screen_session_verification_open_existing_session_title">"Отворете съществуваща сесия"</string>
<string name="screen_session_verification_positive_button_canceled">"Повторен опит за потвърждаване"</string>
<string name="screen_session_verification_positive_button_initial">"Готов съм"</string>
<string name="screen_session_verification_positive_button_verifying_ongoing">"В очакване на съвпадение"</string>
<string name="screen_session_verification_ready_subtitle">"Сравнете уникален набор от емоджита."</string>
<string name="screen_session_verification_request_accepted_subtitle">"Сравнете уникалните емоджита, като се уверите, че се появяват в същия ред."</string>
<string name="screen_session_verification_request_details_timestamp">"Влезли"</string>
<string name="screen_session_verification_request_failure_title">"Неуспешно потвърждаване"</string>
<string name="screen_session_verification_request_footer">"Продължете само ако вие сте инициирали това потвърждаване."</string>
<string name="screen_session_verification_request_success_subtitle">"Сега можете да четете или изпращате съобщения сигурно на другото си устройство."</string>
<string name="screen_session_verification_request_success_title">"Устройството е потвърдено"</string>
<string name="screen_session_verification_request_title">"Поискано е потвърждение"</string>
<string name="screen_session_verification_they_dont_match">"Те не съвпадат"</string>
<string name="screen_session_verification_they_match">"Те съвпадат"</string>
<string name="screen_session_verification_use_another_device_subtitle">"Уверете се, че приложението е отворено на другото устройство, преди да започнете потвърждението оттук."</string>
<string name="screen_session_verification_use_another_device_title">"Отворете приложението на друго потвърдено устройство"</string>
<string name="screen_session_verification_user_initiator_title">"Потвърждаване на този потребител?"</string>
<string name="screen_session_verification_waiting_other_user_title">"Чака се другият потребител"</string>
<string name="screen_session_verification_waiting_subtitle">"След като бъдете приети, ще можете да продължите потвърждението."</string>
<string name="screen_session_verification_waiting_to_accept_subtitle">"Приемете заявката, за да започнете процеса на потвърждаване в другата си сесия, за да продължите."</string>
<string name="screen_session_verification_waiting_to_accept_title">"В очакване на приемане на заявка"</string>
<string name="screen_signout_in_progress_dialog_content">"Излизане…"</string>
</resources>
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Generated file, do not edit -->
<string name="verification_emoji_00">Gos</string>
<string name="verification_emoji_01">Gat</string>
<string name="verification_emoji_02">Lleó</string>
<string name="verification_emoji_03">Cavall</string>
<string name="verification_emoji_04">Unicorn</string>
<string name="verification_emoji_05">Porc</string>
<string name="verification_emoji_06">Elefant</string>
<string name="verification_emoji_07">Conill</string>
<string name="verification_emoji_08">Panda</string>
<string name="verification_emoji_09">Gall</string>
<string name="verification_emoji_10">Pingüí</string>
<string name="verification_emoji_11">Tortuga</string>
<string name="verification_emoji_12">Peix</string>
<string name="verification_emoji_13">Pop</string>
<string name="verification_emoji_14">Papallona</string>
<string name="verification_emoji_15">Flor</string>
<string name="verification_emoji_16">Arbre</string>
<string name="verification_emoji_17">Cactus</string>
<string name="verification_emoji_18">Bolet</string>
<string name="verification_emoji_19">Globus terraqüi</string>
<string name="verification_emoji_20">Lluna</string>
<string name="verification_emoji_21">Núvol</string>
<string name="verification_emoji_22">Foc</string>
<string name="verification_emoji_23">Plàtan</string>
<string name="verification_emoji_24">Poma</string>
<string name="verification_emoji_25">Maduixa</string>
<string name="verification_emoji_26">Blat de moro</string>
<string name="verification_emoji_27">Pizza</string>
<string name="verification_emoji_28">Pastís</string>
<string name="verification_emoji_29">Cor</string>
<string name="verification_emoji_30">Somrient</string>
<string name="verification_emoji_31">Robot</string>
<string name="verification_emoji_32">Barret</string>
<string name="verification_emoji_33">Ulleres</string>
<string name="verification_emoji_34">Clau anglesa</string>
<string name="verification_emoji_35">Pare Noél</string>
<string name="verification_emoji_36">Polzes amunt</string>
<string name="verification_emoji_37">Paraigües</string>
<string name="verification_emoji_38">Rellotge de sorra</string>
<string name="verification_emoji_39">Rellotge</string>
<string name="verification_emoji_40">Regal</string>
<string name="verification_emoji_41">Bombeta</string>
<string name="verification_emoji_42">Llibre</string>
<string name="verification_emoji_43">Llapis</string>
<string name="verification_emoji_44">Clip</string>
<string name="verification_emoji_45">Tisores</string>
<string name="verification_emoji_46">Cadenat</string>
<string name="verification_emoji_47">Clau</string>
<string name="verification_emoji_48">Martell</string>
<string name="verification_emoji_49">Telèfon</string>
<string name="verification_emoji_50">Bandera</string>
<string name="verification_emoji_51">Tren</string>
<string name="verification_emoji_52">Bicicleta</string>
<string name="verification_emoji_53">Avió</string>
<string name="verification_emoji_54">Coet</string>
<string name="verification_emoji_55">Trofeu</string>
<string name="verification_emoji_56">Pilota</string>
<string name="verification_emoji_57">Guitarra</string>
<string name="verification_emoji_58">Trompeta</string>
<string name="verification_emoji_59">Campana</string>
<string name="verification_emoji_60">Àncora</string>
<string name="verification_emoji_61">Auriculars</string>
<string name="verification_emoji_62">Carpeta</string>
<string name="verification_emoji_63">Xinxeta</string>
</resources>
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Generated file, do not edit -->
<string name="verification_emoji_00">Pes</string>
<string name="verification_emoji_01">Kočka</string>
<string name="verification_emoji_02">Lev</string>
<string name="verification_emoji_03">Kůň</string>
<string name="verification_emoji_04">Jednorožec</string>
<string name="verification_emoji_05">Prase</string>
<string name="verification_emoji_06">Slon</string>
<string name="verification_emoji_07">Králík</string>
<string name="verification_emoji_08">Panda</string>
<string name="verification_emoji_09">Kohout</string>
<string name="verification_emoji_10">Tučňák</string>
<string name="verification_emoji_11">Želva</string>
<string name="verification_emoji_12">Ryba</string>
<string name="verification_emoji_13">Chobotnice</string>
<string name="verification_emoji_14">Motýl</string>
<string name="verification_emoji_15">Květina</string>
<string name="verification_emoji_16">Strom</string>
<string name="verification_emoji_17">Kaktus</string>
<string name="verification_emoji_18">Houba</string>
<string name="verification_emoji_19">Zeměkoule</string>
<string name="verification_emoji_20">Měsíc</string>
<string name="verification_emoji_21">Mrak</string>
<string name="verification_emoji_22">Oheň</string>
<string name="verification_emoji_23">Banán</string>
<string name="verification_emoji_24">Jablko</string>
<string name="verification_emoji_25">Jahoda</string>
<string name="verification_emoji_26">Kukuřice</string>
<string name="verification_emoji_27">Pizza</string>
<string name="verification_emoji_28">Dort</string>
<string name="verification_emoji_29">Srdce</string>
<string name="verification_emoji_30">Smajlík</string>
<string name="verification_emoji_31">Robot</string>
<string name="verification_emoji_32">Klobouk</string>
<string name="verification_emoji_33">Brýle</string>
<string name="verification_emoji_34">Klíč</string>
<string name="verification_emoji_35">Mikuláš</string>
<string name="verification_emoji_36">Palec nahoru</string>
<string name="verification_emoji_37">Deštník</string>
<string name="verification_emoji_38">Přesýpací hodiny</string>
<string name="verification_emoji_39">Hodiny</string>
<string name="verification_emoji_40">Dárek</string>
<string name="verification_emoji_41">Žárovka</string>
<string name="verification_emoji_42">Kniha</string>
<string name="verification_emoji_43">Tužka</string>
<string name="verification_emoji_44">Sponka</string>
<string name="verification_emoji_45">Nůžky</string>
<string name="verification_emoji_46">Zámek</string>
<string name="verification_emoji_47">Klíč ke dveřím</string>
<string name="verification_emoji_48">Kladivo</string>
<string name="verification_emoji_49">Telefon</string>
<string name="verification_emoji_50">Vlajka</string>
<string name="verification_emoji_51">Vlak</string>
<string name="verification_emoji_52">Kolo</string>
<string name="verification_emoji_53">Letadlo</string>
<string name="verification_emoji_54">Raketa</string>
<string name="verification_emoji_55">Pohár</string>
<string name="verification_emoji_56">Míč</string>
<string name="verification_emoji_57">Kytara</string>
<string name="verification_emoji_58">Trumpeta</string>
<string name="verification_emoji_59">Zvonek</string>
<string name="verification_emoji_60">Kotva</string>
<string name="verification_emoji_61">Sluchátka</string>
<string name="verification_emoji_62">Složka</string>
<string name="verification_emoji_63">Špendlík</string>
</resources>
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_identity_confirmation_cannot_confirm">"Nemůžete potvrdit?"</string>
<string name="screen_identity_confirmation_create_new_recovery_key">"Vytvoření nového klíče pro obnovení"</string>
<string name="screen_identity_confirmation_subtitle">"Ověřte toto zařízení a nastavte zabezpečené zasílání zpráv."</string>
<string name="screen_identity_confirmation_title">"Potvrďte, že jste to vy"</string>
<string name="screen_identity_confirmation_use_another_device">"Použít jiné zařízení"</string>
<string name="screen_identity_confirmation_use_recovery_key">"Použít klíč pro obnovení"</string>
<string name="screen_identity_confirmed_subtitle">"Nyní můžete bezpečně číst nebo odesílat zprávy, a kdokoli, s kým chatujete, může tomuto zařízení důvěřovat."</string>
<string name="screen_identity_confirmed_title">"Zařízení ověřeno"</string>
<string name="screen_identity_use_another_device">"Použít jiné zařízení"</string>
<string name="screen_identity_waiting_on_other_device">"Čekání na jiném zařízení…"</string>
<string name="screen_session_verification_cancelled_subtitle">"Něco není v pořádku. Buď vypršel časový limit požadavku, nebo byl požadavek zamítnut."</string>
<string name="screen_session_verification_compare_emojis_subtitle">"Zkontrolujte, zda se níže uvedené emotikony shodují s emotikony zobrazenými na vašem druhém zařízení."</string>
<string name="screen_session_verification_compare_emojis_title">"Porovnání emotikonů"</string>
<string name="screen_session_verification_compare_emojis_user_subtitle">"Zkontrolujte, zda se níže uvedené emotikony shodují s emotikony zobrazenými v zařízení druhého uživatele."</string>
<string name="screen_session_verification_compare_numbers_subtitle">"Potvrďte, že níže uvedená čísla odpovídají číslům zobrazeným na vaší druhé relaci."</string>
<string name="screen_session_verification_compare_numbers_title">"Porovnejte čísla"</string>
<string name="screen_session_verification_complete_subtitle">"Nyní můžete bezpečně číst nebo odesílat zprávy na svém druhém zařízení."</string>
<string name="screen_session_verification_complete_user_subtitle">"Nyní můžete důvěřovat identitě tohoto uživatele při odesílání nebo přijímání zpráv."</string>
<string name="screen_session_verification_device_verified">"Zařízení ověřeno"</string>
<string name="screen_session_verification_enter_recovery_key">"Zadejte klíč pro obnovení"</string>
<string name="screen_session_verification_failed_subtitle">"Buď vypršel časový limit požadavku, požadavek byl zamítnut, nebo došlo k nesouladu ověření."</string>
<string name="screen_session_verification_open_existing_session_subtitle">"Pro přístup k historii zašifrovaných zpráv prokažte, že jste to vy."</string>
<string name="screen_session_verification_open_existing_session_title">"Otevřete existující relaci"</string>
<string name="screen_session_verification_positive_button_canceled">"Opakovat ověření"</string>
<string name="screen_session_verification_positive_button_initial">"Jsem připraven"</string>
<string name="screen_session_verification_positive_button_verifying_ongoing">"Čekání na shodu"</string>
<string name="screen_session_verification_ready_subtitle">"Porovnejte jedinečnou sadu emotikonů."</string>
<string name="screen_session_verification_request_accepted_subtitle">"Porovnejte jedinečné emotikony a ujistěte se, že jsou zobrazeny ve stejném pořadí."</string>
<string name="screen_session_verification_request_details_timestamp">"Přihlášen"</string>
<string name="screen_session_verification_request_failure_subtitle">"Buď vypršel časový limit požadavku, požadavek byl zamítnut, nebo došlo k nesouladu ověření."</string>
<string name="screen_session_verification_request_failure_title">"Ověření se nezdařilo"</string>
<string name="screen_session_verification_request_footer">"Pokračujte, pouze pokud jste toto ověření zahájili."</string>
<string name="screen_session_verification_request_subtitle">"Ověřte druhé zařízení, aby byla vaše historie zpráv zabezpečená."</string>
<string name="screen_session_verification_request_success_subtitle">"Nyní můžete bezpečně číst nebo odesílat zprávy na svém druhém zařízení."</string>
<string name="screen_session_verification_request_success_title">"Zařízení ověřeno"</string>
<string name="screen_session_verification_request_title">"Požadováno ověření"</string>
<string name="screen_session_verification_they_dont_match">"Neshodují se"</string>
<string name="screen_session_verification_they_match">"Shodují se"</string>
<string name="screen_session_verification_use_another_device_subtitle">"Před zahájením ověřování se ujistěte, že máte aplikaci otevřenou na druhém zařízení."</string>
<string name="screen_session_verification_use_another_device_title">"Otevřete aplikaci na jiném ověřeném zařízení"</string>
<string name="screen_session_verification_user_initiator_subtitle">"Pro větší bezpečnost ověřte tohoto uživatele porovnáním sady emotikonů na svých zařízeních. Proveďte to pomocí důvěryhodného způsobu komunikace."</string>
<string name="screen_session_verification_user_initiator_title">"Ověřte tohoto uživatele?"</string>
<string name="screen_session_verification_user_responder_subtitle">"Pro větší bezpečnost chce jiný uživatel ověřit vaši identitu. Zobrazí se vám sada emotikonů k porovnání."</string>
<string name="screen_session_verification_waiting_another_device_subtitle">"Na druhém zařízení byste měli vidět vyskakovací okno. Začněte s ověrením tam."</string>
<string name="screen_session_verification_waiting_another_device_title">"Spusťte ověření na druhém zařízení"</string>
<string name="screen_session_verification_waiting_other_device_title">"Spusťte ověření na druhém zařízení"</string>
<string name="screen_session_verification_waiting_other_user_title">"Čekání na druhého uživatele"</string>
<string name="screen_session_verification_waiting_subtitle">"Po přijetí budete moci pokračovat v ověřování."</string>
<string name="screen_session_verification_waiting_to_accept_subtitle">"Pro pokračování přijměte požadavek na zahájení ověření v jiné relaci."</string>
<string name="screen_session_verification_waiting_to_accept_title">"Čekání na přijetí žádosti"</string>
<string name="screen_signout_in_progress_dialog_content">"Odhlašování…"</string>
</resources>
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_identity_confirmation_cannot_confirm">"Methu cadarnhau?"</string>
<string name="screen_identity_confirmation_create_new_recovery_key">"Crëwch allwedd adfer newydd"</string>
<string name="screen_identity_confirmation_subtitle">"Dilyswch y ddyfais hon er mwyn gosod negeseuon diogel."</string>
<string name="screen_identity_confirmation_title">"Cadarnhewch eich hunaniaeth"</string>
<string name="screen_identity_confirmation_use_another_device">"Defnyddiwch ddyfais arall"</string>
<string name="screen_identity_confirmation_use_recovery_key">"Defnyddiwch allwedd adfer"</string>
<string name="screen_identity_confirmed_subtitle">"Nawr gallwch chi ddarllen neu anfon negeseuon yn ddiogel, a gall unrhyw un rydych chi\'n sgwrsio â nhw ymddiried yn y ddyfais hon hefyd."</string>
<string name="screen_identity_confirmed_title">"Dyfais wedi\'i dilysu"</string>
<string name="screen_identity_use_another_device">"Defnyddiwch ddyfais arall"</string>
<string name="screen_identity_waiting_on_other_device">"Yn aros ar ddyfais arall…"</string>
<string name="screen_session_verification_cancelled_subtitle">"Mae rhywbeth i weld o\'i le. Naill ai daeth y cais i ben neu cafodd y cais ei wrthod."</string>
<string name="screen_session_verification_compare_emojis_subtitle">"Cadarnhewch fod yr emojis isod yn cyd-fynd â\'r rhai sy\'n cael eu dangos ar eich dyfais arall."</string>
<string name="screen_session_verification_compare_emojis_title">"Cymharwch emojis"</string>
<string name="screen_session_verification_compare_emojis_user_subtitle">"Cadarnhewch fod yr emojis isod yn cyd-fynd â\'r rhai sy\'n cael eu dangos ar ddyfais y defnyddiwr arall."</string>
<string name="screen_session_verification_compare_numbers_subtitle">"Cadarnhewch fod y rhifau isod yn cyfateb i\'r rhai sy\'n cael eu dangos ar eich sesiwn arall."</string>
<string name="screen_session_verification_compare_numbers_title">"Cymharwch rifau"</string>
<string name="screen_session_verification_complete_subtitle">"Nawr gallwch chi ddarllen neu anfon negeseuon yn ddiogel ar eich dyfais arall."</string>
<string name="screen_session_verification_complete_user_subtitle">"Nawr gallwch ymddiried yn hunaniaeth y defnyddiwr hwn wrth anfon neu dderbyn negeseuon."</string>
<string name="screen_session_verification_device_verified">"Dyfais wedi\'i dilysu"</string>
<string name="screen_session_verification_enter_recovery_key">"Rhowch eich allwedd adfer"</string>
<string name="screen_session_verification_failed_subtitle">"Naill ai daeth y cais i ben, gwrthodwyd y cais, neu roedd diffyg cyfatebiaeth dilysu."</string>
<string name="screen_session_verification_open_existing_session_subtitle">"Profwch mai chi sydd yno i gael mynediad at eich hanes negeseuon wedi\'u hamgryptio."</string>
<string name="screen_session_verification_open_existing_session_title">"Agor sesiwn sy\'n bodoli eisoes"</string>
<string name="screen_session_verification_positive_button_canceled">"Rhowch gynnig arall ar ddilysu"</string>
<string name="screen_session_verification_positive_button_initial">"Rwy\'n barod"</string>
<string name="screen_session_verification_positive_button_verifying_ongoing">"Aros i gyfateb…"</string>
<string name="screen_session_verification_ready_subtitle">"Cymharwch set unigryw o emojis."</string>
<string name="screen_session_verification_request_accepted_subtitle">"Cymharwch yr emoji unigryw, gan sicrhau eu bod yn ymddangos yn yr un drefn."</string>
<string name="screen_session_verification_request_details_timestamp">"Mewngofnodwyd"</string>
<string name="screen_session_verification_request_failure_subtitle">"Naill ai daeth y cais i ben, gwrthodwyd y cais, neu roedd diffyg cyfatebiaeth dilysu."</string>
<string name="screen_session_verification_request_failure_title">"Methodd y gwirio"</string>
<string name="screen_session_verification_request_footer">"Parhewch dim ond os taw chi gychwynodd y dilysiad hwn."</string>
<string name="screen_session_verification_request_subtitle">"Dilyswch y ddyfais arall i gadw hanes eich neges yn ddiogel."</string>
<string name="screen_session_verification_request_success_subtitle">"Nawr gallwch chi ddarllen neu anfon negeseuon yn ddiogel ar eich dyfais arall."</string>
<string name="screen_session_verification_request_success_title">"Dyfais wedi\'i dilysu"</string>
<string name="screen_session_verification_request_title">"Gofynnwyd am ddilysiad"</string>
<string name="screen_session_verification_they_dont_match">"Dy\'n nhw ddim yn cyfateb"</string>
<string name="screen_session_verification_they_match">"Maen nhw\'n cyfateb"</string>
<string name="screen_session_verification_use_another_device_subtitle">"Gwnewch yn siŵr fod gennych yr ap ar agor yn y ddyfais arall cyn dechrau dilysu o\'r fan hon."</string>
<string name="screen_session_verification_use_another_device_title">"Agorwch yr ap ar ddyfais arall sydd wedi\'i gwirio"</string>
<string name="screen_session_verification_user_initiator_subtitle">"Er mwyn sicrhau diogelwch ychwanegol, gwiriwch y defnyddiwr hwn trwy gymharu set o emojis ar eich dyfeisiau. Gwnewch hyn trwy ddefnyddio ffordd ddibynadwy o gyfathrebu."</string>
<string name="screen_session_verification_user_initiator_title">"Dilysu\'r defnyddiwr hwn?"</string>
<string name="screen_session_verification_user_responder_subtitle">"Er mwyn diogelwch ychwanegol, mae defnyddiwr arall eisiau gwirio pwy ydych chi. Bydd set o emojis yn cael eu dangos i chi eu cymharu."</string>
<string name="screen_session_verification_waiting_another_device_subtitle">"Dylech weld llamlen ar y ddyfais arall. Dechreuwch y dilysiad o\'r fan honno nawr."</string>
<string name="screen_session_verification_waiting_another_device_title">"Cychwyn dilysu ar y ddyfais arall"</string>
<string name="screen_session_verification_waiting_other_device_title">"Cychwyn dilysu ar y ddyfais arall"</string>
<string name="screen_session_verification_waiting_other_user_title">"Yn aros am y defnyddiwr arall"</string>
<string name="screen_session_verification_waiting_subtitle">"Unwaith y byddwch wedi\'ch derbyn, byddwch yn gallu parhau â\'r dilysu."</string>
<string name="screen_session_verification_waiting_to_accept_subtitle">"Derbyniwch y cais i gychwyn y broses ddilysu yn eich sesiwn arall i barhau."</string>
<string name="screen_session_verification_waiting_to_accept_title">"Yn aros i dderbyn cais"</string>
<string name="screen_signout_in_progress_dialog_content">"Yn allgofnodi…"</string>
</resources>

Some files were not shown because too many files have changed in this diff Show More