From 72203dd18a1b9ae2d9787abe764c45e18818b4aa Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Mon, 29 Sep 2025 14:03:30 -0600 Subject: [PATCH] Android 1.7.1 - Added a clear sync indicator --- android/app/build.gradle.kts | 4 +- .../openclimb/data/sync/SyncService.kt | 169 +--------- .../openclimb/ui/components/SyncIndicator.kt | 49 +++ .../openclimb/ui/screens/AnalyticsScreen.kt | 13 +- .../openclimb/ui/screens/GymsScreen.kt | 114 +++---- .../openclimb/ui/screens/ProblemsScreen.kt | 7 +- .../openclimb/ui/screens/SessionsScreen.kt | 244 +++++++------- .../openclimb/ui/screens/SettingsScreen.kt | 299 +++++++++--------- .../UserInterfaceState.xcuserstate | Bin 126418 -> 127240 bytes sync/.env.example | 19 +- sync/docker-compose.yml | 11 +- 11 files changed, 388 insertions(+), 541 deletions(-) create mode 100644 android/app/src/main/java/com/atridad/openclimb/ui/components/SyncIndicator.kt diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index a169fc6..2033726 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -16,8 +16,8 @@ android { applicationId = "com.atridad.openclimb" minSdk = 31 targetSdk = 36 - versionCode = 28 - versionName = "1.7.0" + versionCode = 29 + versionName = "1.7.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/android/app/src/main/java/com/atridad/openclimb/data/sync/SyncService.kt b/android/app/src/main/java/com/atridad/openclimb/data/sync/SyncService.kt index 9d193e6..45a033b 100644 --- a/android/app/src/main/java/com/atridad/openclimb/data/sync/SyncService.kt +++ b/android/app/src/main/java/com/atridad/openclimb/data/sync/SyncService.kt @@ -17,7 +17,6 @@ import com.atridad.openclimb.utils.ImageUtils import java.io.IOException import java.time.Instant import java.util.concurrent.TimeUnit -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -27,12 +26,12 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody +import androidx.core.content.edit class SyncService(private val context: Context, private val repository: ClimbRepository) { @@ -91,13 +90,13 @@ class SyncService(private val context: Context, private val repository: ClimbRep var serverURL: String get() = sharedPreferences.getString(Keys.SERVER_URL, "") ?: "" set(value) { - sharedPreferences.edit().putString(Keys.SERVER_URL, value).apply() + sharedPreferences.edit { putString(Keys.SERVER_URL, value) } } var authToken: String get() = sharedPreferences.getString(Keys.AUTH_TOKEN, "") ?: "" set(value) { - sharedPreferences.edit().putString(Keys.AUTH_TOKEN, value).apply() + sharedPreferences.edit { putString(Keys.AUTH_TOKEN, value) } } val isConfigured: Boolean @@ -116,7 +115,7 @@ class SyncService(private val context: Context, private val repository: ClimbRep // Register auto-sync callback with repository repository.setAutoSyncCallback { - kotlinx.coroutines.CoroutineScope(kotlinx.coroutines.Dispatchers.IO).launch { + kotlinx.coroutines.CoroutineScope(Dispatchers.IO).launch { triggerAutoSync() } } @@ -491,21 +490,6 @@ class SyncService(private val context: Context, private val repository: ClimbRep return imagePathMapping } - private suspend fun syncImagesToServer() { - val allProblems = repository.getAllProblems().first() - val backup = - ClimbDataBackup( - exportedAt = DateFormatUtils.nowISO8601(), - version = "2.0", - formatVersion = "2.0", - gyms = emptyList(), - problems = allProblems.map { BackupProblem.fromProblem(it) }, - sessions = emptyList(), - attempts = emptyList() - ) - syncImagesForBackup(backup) - } - private suspend fun syncImagesForBackup(backup: ClimbDataBackup) { Log.d(TAG, "Starting image sync for backup with ${backup.problems.size} problems") @@ -626,7 +610,7 @@ class SyncService(private val context: Context, private val repository: ClimbRep val updatedProblem = if (imagePathMapping.isNotEmpty()) { val newImagePaths = - backupProblem.imagePaths?.mapNotNull { oldPath -> + backupProblem.imagePaths?.map { oldPath -> // Extract filename and check mapping val filename = oldPath.substringAfterLast('/') // Use mapped full path or fallback to consistent naming @@ -696,11 +680,6 @@ class SyncService(private val context: Context, private val repository: ClimbRep } } - /** Converts milliseconds to ISO8601 timestamp */ - private fun millisToISO8601(millis: Long): String { - return DateFormatUtils.millisToISO8601(millis) - } - /** * Fixes existing image paths in the database to include the proper directory structure. This * corrects paths like "problem_abc_0.jpg" to "problem_images/problem_abc_0.jpg" @@ -833,141 +812,6 @@ class SyncService(private val context: Context, private val repository: ClimbRep } } - // DEPRECATED: Complex merge logic replaced with simple timestamp-based sync - // These methods are no longer used but kept for reference - @Deprecated("Use simple timestamp-based sync instead") - private fun performIntelligentMerge( - local: ClimbDataBackup, - server: ClimbDataBackup - ): ClimbDataBackup { - Log.d(TAG, "Merging data - preserving all entities to prevent data loss") - - val mergedGyms = mergeGyms(local.gyms, server.gyms) - val mergedProblems = mergeProblems(local.problems, server.problems) - val mergedSessions = mergeSessions(local.sessions, server.sessions) - val mergedAttempts = mergeAttempts(local.attempts, server.attempts) - - Log.d( - TAG, - "Merge results: gyms=${mergedGyms.size}, problems=${mergedProblems.size}, " + - "sessions=${mergedSessions.size}, attempts=${mergedAttempts.size}" - ) - - return ClimbDataBackup( - exportedAt = DateFormatUtils.nowISO8601(), - version = "2.0", - formatVersion = "2.0", - gyms = mergedGyms, - problems = mergedProblems, - sessions = mergedSessions, - attempts = mergedAttempts - ) - } - - private fun mergeGyms(local: List, server: List): List { - val merged = mutableMapOf() - - // Add all local gyms - local.forEach { gym -> merged[gym.id] = gym } - - // Add server gyms, preferring newer updates - server.forEach { serverGym -> - val localGym = merged[serverGym.id] - if (localGym == null || isNewerThan(serverGym.updatedAt, localGym.updatedAt)) { - merged[serverGym.id] = serverGym - } - } - - return merged.values.toList() - } - - private fun mergeProblems( - local: List, - server: List - ): List { - val merged = mutableMapOf() - - // Add all local problems - local.forEach { problem -> merged[problem.id] = problem } - - // Add server problems, preferring newer updates - server.forEach { serverProblem -> - val localProblem = merged[serverProblem.id] - if (localProblem == null || isNewerThan(serverProblem.updatedAt, localProblem.updatedAt) - ) { - // Merge image paths to preserve all images - val allImagePaths = mutableSetOf() - localProblem?.imagePaths?.let { allImagePaths.addAll(it) } - serverProblem.imagePaths?.let { allImagePaths.addAll(it) } - - merged[serverProblem.id] = - serverProblem.withUpdatedImagePaths(allImagePaths.toList()) - } - } - - return merged.values.toList() - } - - private fun mergeSessions( - local: List, - server: List - ): List { - val merged = mutableMapOf() - - // Add all local sessions - local.forEach { session -> merged[session.id] = session } - - // Add server sessions, preferring newer updates - server.forEach { serverSession -> - val localSession = merged[serverSession.id] - if (localSession == null || isNewerThan(serverSession.updatedAt, localSession.updatedAt) - ) { - merged[serverSession.id] = serverSession - } - } - - return merged.values.toList() - } - - private fun mergeAttempts( - local: List, - server: List - ): List { - val merged = mutableMapOf() - - // Add all local attempts - local.forEach { attempt -> merged[attempt.id] = attempt } - - // Add server attempts, preferring newer updates - server.forEach { serverAttempt -> - val localAttempt = merged[serverAttempt.id] - if (localAttempt == null || isNewerThan(serverAttempt.createdAt, localAttempt.createdAt) - ) { - merged[serverAttempt.id] = serverAttempt - } - } - - return merged.values.toList() - } - - private fun isNewerThan(dateString1: String, dateString2: String): Boolean { - return try { - // Try parsing as instant first - val date1 = Instant.parse(dateString1) - val date2 = Instant.parse(dateString2) - date1.isAfter(date2) - } catch (e: Exception) { - // Fallback to string comparison - dateString1 > dateString2 - } - } - - fun disconnect() { - _isConnected.value = false - sharedPreferences.edit().putBoolean(Keys.IS_CONNECTED, false).apply() - _syncError.value = null - } - fun clearConfiguration() { serverURL = "" authToken = "" @@ -980,14 +824,11 @@ class SyncService(private val context: Context, private val repository: ClimbRep } } -// Removed SyncTrigger enum - now using simple auto sync on any data change - sealed class SyncException(message: String) : Exception(message) { object NotConfigured : SyncException("Sync is not configured. Please set server URL and auth token.") object NotConnected : SyncException("Not connected to server. Please test connection first.") object Unauthorized : SyncException("Unauthorized. Please check your auth token.") - object InvalidURL : SyncException("Invalid server URL.") data class ServerError(val code: Int) : SyncException("Server error: HTTP $code") data class InvalidResponse(val details: String) : SyncException("Invalid server response: $details") diff --git a/android/app/src/main/java/com/atridad/openclimb/ui/components/SyncIndicator.kt b/android/app/src/main/java/com/atridad/openclimb/ui/components/SyncIndicator.kt new file mode 100644 index 0000000..3403f15 --- /dev/null +++ b/android/app/src/main/java/com/atridad/openclimb/ui/components/SyncIndicator.kt @@ -0,0 +1,49 @@ +package com.atridad.openclimb.ui.components + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import kotlinx.coroutines.flow.StateFlow + +@Composable +fun SyncIndicator(isSyncing: StateFlow, modifier: Modifier = Modifier) { + val syncing by isSyncing.collectAsState() + + AnimatedVisibility( + visible = syncing, + enter = scaleIn() + fadeIn(), + exit = scaleOut() + fadeOut(), + modifier = modifier + ) { + Box( + modifier = + Modifier.size(28.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.primaryContainer, CircleShape) + .padding(6.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator( + modifier = Modifier.size(16.dp), + strokeWidth = 2.dp, + color = MaterialTheme.colorScheme.primary + ) + } + } +} diff --git a/android/app/src/main/java/com/atridad/openclimb/ui/screens/AnalyticsScreen.kt b/android/app/src/main/java/com/atridad/openclimb/ui/screens/AnalyticsScreen.kt index 33acbed..bd092fa 100644 --- a/android/app/src/main/java/com/atridad/openclimb/ui/screens/AnalyticsScreen.kt +++ b/android/app/src/main/java/com/atridad/openclimb/ui/screens/AnalyticsScreen.kt @@ -15,6 +15,7 @@ import com.atridad.openclimb.data.model.ClimbType import com.atridad.openclimb.data.model.DifficultySystem import com.atridad.openclimb.ui.components.BarChart import com.atridad.openclimb.ui.components.BarChartDataPoint +import com.atridad.openclimb.ui.components.SyncIndicator import com.atridad.openclimb.ui.viewmodel.ClimbViewModel import java.time.LocalDateTime import java.time.format.DateTimeFormatter @@ -45,8 +46,10 @@ fun AnalyticsScreen(viewModel: ClimbViewModel) { Text( text = "Analytics", style = MaterialTheme.typography.headlineMedium, - fontWeight = FontWeight.Bold + fontWeight = FontWeight.Bold, + modifier = Modifier.weight(1f) ) + SyncIndicator(isSyncing = viewModel.syncService.isSyncing) } } @@ -197,7 +200,7 @@ fun GradeDistributionChartCard(gradeDistributionData: List Unit -) { +fun GymsScreen(viewModel: ClimbViewModel, onNavigateToGymDetail: (String) -> Unit) { val gyms by viewModel.gyms.collectAsState() - - Column( - modifier = Modifier - .fillMaxSize() - .padding(16.dp) - ) { + + Column(modifier = Modifier.fillMaxSize().padding(16.dp)) { Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(12.dp) + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) ) { Icon( - painter = painterResource(id = R.drawable.ic_mountains), - contentDescription = "OpenClimb Logo", - modifier = Modifier.size(32.dp), - tint = MaterialTheme.colorScheme.primary + painter = painterResource(id = R.drawable.ic_mountains), + contentDescription = "OpenClimb Logo", + modifier = Modifier.size(32.dp), + tint = MaterialTheme.colorScheme.primary ) Text( - text = "Climbing Gyms", - style = MaterialTheme.typography.headlineMedium, - fontWeight = FontWeight.Bold + text = "Climbing Gyms", + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.weight(1f) ) + SyncIndicator(isSyncing = viewModel.syncService.isSyncing) } - + Spacer(modifier = Modifier.height(16.dp)) - + if (gyms.isEmpty()) { EmptyStateMessage( - title = "No Gyms Added", - message = "Add your favorite climbing gyms to start tracking your progress!", - onActionClick = { }, - actionText = "" + title = "No Gyms Added", + message = "Add your favorite climbing gyms to start tracking your progress!", + onActionClick = {}, + actionText = "" ) } else { LazyColumn { items(gyms) { gym -> - GymCard( - gym = gym, - onClick = { onNavigateToGymDetail(gym.id) } - ) + GymCard(gym = gym, onClick = { onNavigateToGymDetail(gym.id) }) Spacer(modifier = Modifier.height(8.dp)) } } @@ -70,65 +63,54 @@ fun GymsScreen( @OptIn(ExperimentalMaterial3Api::class) @Composable -fun GymCard( - gym: Gym, - onClick: () -> Unit -) { - Card( - onClick = onClick, - modifier = Modifier.fillMaxWidth() - ) { - Column( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp) - ) { +fun GymCard(gym: Gym, onClick: () -> Unit) { + Card(onClick = onClick, modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) { Text( - text = gym.name, - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold + text = gym.name, + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold ) - + gym.location?.let { location -> Spacer(modifier = Modifier.height(4.dp)) Text( - text = location, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant + text = location, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant ) } - + Spacer(modifier = Modifier.height(8.dp)) - + Row { gym.supportedClimbTypes.forEach { climbType -> AssistChip( - onClick = { }, - label = { - Text(climbType.getDisplayName()) - }, - modifier = Modifier.padding(end = 4.dp) + onClick = {}, + label = { Text(climbType.getDisplayName()) }, + modifier = Modifier.padding(end = 4.dp) ) } } - + if (gym.difficultySystems.isNotEmpty()) { Spacer(modifier = Modifier.height(4.dp)) Text( - text = "Systems: ${gym.difficultySystems.joinToString(", ") { it.getDisplayName() }}", - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant + text = + "Systems: ${gym.difficultySystems.joinToString(", ") { it.getDisplayName() }}", + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant ) } - + gym.notes?.let { notes -> if (notes.isNotBlank()) { Spacer(modifier = Modifier.height(8.dp)) Text( - text = notes, - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant, - maxLines = 2 + text = notes, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + maxLines = 2 ) } } diff --git a/android/app/src/main/java/com/atridad/openclimb/ui/screens/ProblemsScreen.kt b/android/app/src/main/java/com/atridad/openclimb/ui/screens/ProblemsScreen.kt index d7de626..7277579 100644 --- a/android/app/src/main/java/com/atridad/openclimb/ui/screens/ProblemsScreen.kt +++ b/android/app/src/main/java/com/atridad/openclimb/ui/screens/ProblemsScreen.kt @@ -17,6 +17,7 @@ import com.atridad.openclimb.data.model.Gym import com.atridad.openclimb.data.model.Problem import com.atridad.openclimb.ui.components.FullscreenImageViewer import com.atridad.openclimb.ui.components.ImageDisplay +import com.atridad.openclimb.ui.components.SyncIndicator import com.atridad.openclimb.ui.viewmodel.ClimbViewModel @OptIn(ExperimentalMaterial3Api::class) @@ -58,10 +59,12 @@ fun ProblemsScreen(viewModel: ClimbViewModel, onNavigateToProblemDetail: (String tint = MaterialTheme.colorScheme.primary ) Text( - text = "Problems & Routes", + text = "Climbing Problems", style = MaterialTheme.typography.headlineMedium, - fontWeight = FontWeight.Bold + fontWeight = FontWeight.Bold, + modifier = Modifier.weight(1f) ) + SyncIndicator(isSyncing = viewModel.syncService.isSyncing) } Spacer(modifier = Modifier.height(16.dp)) diff --git a/android/app/src/main/java/com/atridad/openclimb/ui/screens/SessionsScreen.kt b/android/app/src/main/java/com/atridad/openclimb/ui/screens/SessionsScreen.kt index 22a439e..4248b27 100644 --- a/android/app/src/main/java/com/atridad/openclimb/ui/screens/SessionsScreen.kt +++ b/android/app/src/main/java/com/atridad/openclimb/ui/screens/SessionsScreen.kt @@ -20,160 +20,145 @@ import com.atridad.openclimb.R import com.atridad.openclimb.data.model.ClimbSession import com.atridad.openclimb.data.model.SessionStatus import com.atridad.openclimb.ui.components.ActiveSessionBanner +import com.atridad.openclimb.ui.components.SyncIndicator import com.atridad.openclimb.ui.viewmodel.ClimbViewModel import java.time.LocalDateTime import java.time.format.DateTimeFormatter @OptIn(ExperimentalMaterial3Api::class) @Composable -fun SessionsScreen( - viewModel: ClimbViewModel, - onNavigateToSessionDetail: (String) -> Unit -) { +fun SessionsScreen(viewModel: ClimbViewModel, onNavigateToSessionDetail: (String) -> Unit) { val context = LocalContext.current val sessions by viewModel.sessions.collectAsState() val gyms by viewModel.gyms.collectAsState() val activeSession by viewModel.activeSession.collectAsState() val uiState by viewModel.uiState.collectAsState() - + // Filter out active sessions from regular session list val completedSessions = sessions.filter { it.status == SessionStatus.COMPLETED } - val activeSessionGym = activeSession?.let { session -> - gyms.find { it.id == session.gymId } - } - - Column( - modifier = Modifier - .fillMaxSize() - .padding(16.dp) - ) { + val activeSessionGym = activeSession?.let { session -> gyms.find { it.id == session.gymId } } + + Column(modifier = Modifier.fillMaxSize().padding(16.dp)) { Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(12.dp) + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) ) { Icon( - painter = painterResource(id = R.drawable.ic_mountains), - contentDescription = "OpenClimb Logo", - modifier = Modifier.size(32.dp), - tint = MaterialTheme.colorScheme.primary + painter = painterResource(id = R.drawable.ic_mountains), + contentDescription = "OpenClimb Logo", + modifier = Modifier.size(32.dp), + tint = MaterialTheme.colorScheme.primary ) Text( - text = "Climbing Sessions", - style = MaterialTheme.typography.headlineMedium, - fontWeight = FontWeight.Bold + text = "Climbing Sessions", + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.weight(1f) ) + SyncIndicator(isSyncing = viewModel.syncService.isSyncing) } - + Spacer(modifier = Modifier.height(16.dp)) - + // Active session banner ActiveSessionBanner( - activeSession = activeSession, - gym = activeSessionGym, - onSessionClick = { - activeSession?.let { onNavigateToSessionDetail(it.id) } - }, - onEndSession = { - activeSession?.let { - viewModel.endSession(context, it.id) - } - } + activeSession = activeSession, + gym = activeSessionGym, + onSessionClick = { activeSession?.let { onNavigateToSessionDetail(it.id) } }, + onEndSession = { activeSession?.let { viewModel.endSession(context, it.id) } } ) - + if (activeSession != null) { Spacer(modifier = Modifier.height(16.dp)) } - + if (completedSessions.isEmpty() && activeSession == null) { EmptyStateMessage( - title = if (gyms.isEmpty()) "No Gyms Available" else "No Sessions Yet", - message = if (gyms.isEmpty()) "Add a gym first to start tracking your climbing sessions!" else "Start your first climbing session!", - onActionClick = { }, - actionText = "" + title = if (gyms.isEmpty()) "No Gyms Available" else "No Sessions Yet", + message = + if (gyms.isEmpty()) + "Add a gym first to start tracking your climbing sessions!" + else "Start your first climbing session!", + onActionClick = {}, + actionText = "" ) } else { LazyColumn { items(completedSessions) { session -> SessionCard( - session = session, - gymName = gyms.find { it.id == session.gymId }?.name ?: "Unknown Gym", - onClick = { onNavigateToSessionDetail(session.id) } + session = session, + gymName = gyms.find { it.id == session.gymId }?.name ?: "Unknown Gym", + onClick = { onNavigateToSessionDetail(session.id) } ) Spacer(modifier = Modifier.height(8.dp)) } } } } - + // Show UI state messages and errors uiState.message?.let { message -> LaunchedEffect(message) { kotlinx.coroutines.delay(5000) viewModel.clearMessage() } - + Card( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.primaryContainer - ), - shape = RoundedCornerShape(12.dp) + modifier = Modifier.fillMaxWidth().padding(16.dp), + colors = + CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.primaryContainer + ), + shape = RoundedCornerShape(12.dp) ) { Row( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - verticalAlignment = Alignment.CenterVertically + modifier = Modifier.fillMaxWidth().padding(16.dp), + verticalAlignment = Alignment.CenterVertically ) { Icon( - Icons.Default.CheckCircle, - contentDescription = null, - tint = MaterialTheme.colorScheme.primary + Icons.Default.CheckCircle, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary ) Spacer(modifier = Modifier.width(8.dp)) Text( - text = message, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onPrimaryContainer + text = message, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onPrimaryContainer ) } } } - + uiState.error?.let { error -> LaunchedEffect(error) { kotlinx.coroutines.delay(5000) viewModel.clearError() } - + Card( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.errorContainer - ), - shape = RoundedCornerShape(12.dp) + modifier = Modifier.fillMaxWidth().padding(16.dp), + colors = + CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.errorContainer + ), + shape = RoundedCornerShape(12.dp) ) { Row( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - verticalAlignment = Alignment.CenterVertically + modifier = Modifier.fillMaxWidth().padding(16.dp), + verticalAlignment = Alignment.CenterVertically ) { Icon( - Icons.Default.Warning, - contentDescription = null, - tint = MaterialTheme.colorScheme.error + Icons.Default.Warning, + contentDescription = null, + tint = MaterialTheme.colorScheme.error ) Spacer(modifier = Modifier.width(8.dp)) Text( - text = error, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onErrorContainer + text = error, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onErrorContainer ) } } @@ -182,53 +167,42 @@ fun SessionsScreen( @OptIn(ExperimentalMaterial3Api::class) @Composable -fun SessionCard( - session: ClimbSession, - gymName: String, - onClick: () -> Unit -) { - Card( - onClick = onClick, - modifier = Modifier.fillMaxWidth() - ) { - Column( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp) - ) { +fun SessionCard(session: ClimbSession, gymName: String, onClick: () -> Unit) { + Card(onClick = onClick, modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) { Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween ) { Text( - text = gymName, - style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Bold + text = gymName, + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold ) Text( - text = formatDate(session.date), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant + text = formatDate(session.date), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant ) } - + Spacer(modifier = Modifier.height(4.dp)) - + session.duration?.let { duration -> Text( - text = "Duration: $duration minutes", - style = MaterialTheme.typography.bodyMedium + text = "Duration: $duration minutes", + style = MaterialTheme.typography.bodyMedium ) } - + session.notes?.let { notes -> if (notes.isNotBlank()) { Spacer(modifier = Modifier.height(4.dp)) Text( - text = notes, - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant, - maxLines = 2 + text = notes, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + maxLines = 2 ) } } @@ -238,38 +212,36 @@ fun SessionCard( @Composable fun EmptyStateMessage( - title: String, - message: String, - onActionClick: () -> Unit, - actionText: String + title: String, + message: String, + onActionClick: () -> Unit, + actionText: String ) { Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center ) { Text( - text = title, - style = MaterialTheme.typography.headlineSmall, - fontWeight = FontWeight.Bold, - textAlign = TextAlign.Center + text = title, + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center ) - + Spacer(modifier = Modifier.height(8.dp)) - + Text( - text = message, - style = MaterialTheme.typography.bodyLarge, - color = MaterialTheme.colorScheme.onSurfaceVariant, - textAlign = TextAlign.Center + text = message, + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant, + textAlign = TextAlign.Center ) - + if (actionText.isNotEmpty()) { Spacer(modifier = Modifier.height(16.dp)) - - Button(onClick = onActionClick) { - Text(actionText) - } + + Button(onClick = onActionClick) { Text(actionText) } } } } diff --git a/android/app/src/main/java/com/atridad/openclimb/ui/screens/SettingsScreen.kt b/android/app/src/main/java/com/atridad/openclimb/ui/screens/SettingsScreen.kt index d5ea537..ec31063 100644 --- a/android/app/src/main/java/com/atridad/openclimb/ui/screens/SettingsScreen.kt +++ b/android/app/src/main/java/com/atridad/openclimb/ui/screens/SettingsScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.atridad.openclimb.R +import com.atridad.openclimb.ui.components.SyncIndicator import com.atridad.openclimb.ui.viewmodel.ClimbViewModel import java.io.File import java.time.Instant @@ -122,153 +123,10 @@ fun SettingsScreen(viewModel: ClimbViewModel) { Text( text = "Settings", style = MaterialTheme.typography.headlineMedium, - fontWeight = FontWeight.Bold + fontWeight = FontWeight.Bold, + modifier = Modifier.weight(1f) ) - } - } - - // Data Management Section - item { - Card(modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(16.dp)) { - Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) { - Text( - text = "Data Management", - style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Bold - ) - - Spacer(modifier = Modifier.height(12.dp)) - - // Export Data - Card( - shape = RoundedCornerShape(12.dp), - colors = - CardDefaults.cardColors( - containerColor = - MaterialTheme.colorScheme.surfaceVariant.copy( - alpha = 0.3f - ) - ) - ) { - ListItem( - headlineContent = { Text("Export Data with Images") }, - supportingContent = { - Text( - "Export all your climbing data and images to ZIP file (recommended)" - ) - }, - leadingContent = { - Icon(Icons.Default.Share, contentDescription = null) - }, - trailingContent = { - TextButton( - onClick = { - val defaultFileName = - "openclimb_export_${ - java.time.LocalDateTime.now() - .toString() - .replace(":", "-") - .replace(".", "-") - }.zip" - exportZipLauncher.launch(defaultFileName) - }, - enabled = !uiState.isLoading - ) { - if (uiState.isLoading) { - CircularProgressIndicator( - modifier = Modifier.size(16.dp), - strokeWidth = 2.dp - ) - } else { - Text("Export ZIP") - } - } - } - ) - } - - Spacer(modifier = Modifier.height(8.dp)) - - Card( - shape = RoundedCornerShape(12.dp), - colors = - CardDefaults.cardColors( - containerColor = - MaterialTheme.colorScheme.surfaceVariant.copy( - alpha = 0.3f - ) - ) - ) { - ListItem( - headlineContent = { Text("Import Data") }, - supportingContent = { - Text("Import climbing data from ZIP file (recommended format)") - }, - leadingContent = { - Icon(Icons.Default.Add, contentDescription = null) - }, - trailingContent = { - TextButton( - onClick = { importLauncher.launch("application/zip") }, - enabled = !uiState.isLoading - ) { - if (uiState.isLoading) { - CircularProgressIndicator( - modifier = Modifier.size(16.dp), - strokeWidth = 2.dp - ) - } else { - Text("Import") - } - } - } - ) - } - - Spacer(modifier = Modifier.height(8.dp)) - - Card( - shape = RoundedCornerShape(12.dp), - colors = - CardDefaults.cardColors( - containerColor = - MaterialTheme.colorScheme.errorContainer.copy( - alpha = 0.3f - ) - ) - ) { - ListItem( - headlineContent = { Text("Reset All Data") }, - supportingContent = { - Text( - "Permanently delete all gyms, problems, sessions, attempts, and images" - ) - }, - leadingContent = { - Icon( - Icons.Default.Delete, - contentDescription = null, - tint = MaterialTheme.colorScheme.error - ) - }, - trailingContent = { - TextButton( - onClick = { showResetDialog = true }, - enabled = !uiState.isLoading - ) { - if (uiState.isLoading) { - CircularProgressIndicator( - modifier = Modifier.size(16.dp), - strokeWidth = 2.dp - ) - } else { - Text("Reset", color = MaterialTheme.colorScheme.error) - } - } - } - ) - } - } + SyncIndicator(isSyncing = viewModel.syncService.isSyncing) } } @@ -318,7 +176,7 @@ fun SettingsScreen(viewModel: ClimbViewModel) { "Last sync: ${ try { Instant.parse(time).toString() - } catch (e: Exception) { + } catch (_: Exception) { time } }", @@ -510,6 +368,151 @@ fun SettingsScreen(viewModel: ClimbViewModel) { } } + // Data Management Section + item { + Card(modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(16.dp)) { + Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) { + Text( + text = "Data Management", + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold + ) + + Spacer(modifier = Modifier.height(12.dp)) + + // Export Data + Card( + shape = RoundedCornerShape(12.dp), + colors = + CardDefaults.cardColors( + containerColor = + MaterialTheme.colorScheme.surfaceVariant.copy( + alpha = 0.3f + ) + ) + ) { + ListItem( + headlineContent = { Text("Export Data with Images") }, + supportingContent = { + Text( + "Export all your climbing data and images to ZIP file (recommended)" + ) + }, + leadingContent = { + Icon(Icons.Default.Share, contentDescription = null) + }, + trailingContent = { + TextButton( + onClick = { + val defaultFileName = + "openclimb_export_${ + java.time.LocalDateTime.now() + .toString() + .replace(":", "-") + .replace(".", "-") + }.zip" + exportZipLauncher.launch(defaultFileName) + }, + enabled = !uiState.isLoading + ) { + if (uiState.isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(16.dp), + strokeWidth = 2.dp + ) + } else { + Text("Export ZIP") + } + } + } + ) + } + + Spacer(modifier = Modifier.height(8.dp)) + + Card( + shape = RoundedCornerShape(12.dp), + colors = + CardDefaults.cardColors( + containerColor = + MaterialTheme.colorScheme.surfaceVariant.copy( + alpha = 0.3f + ) + ) + ) { + ListItem( + headlineContent = { Text("Import Data") }, + supportingContent = { + Text("Import climbing data from ZIP file (recommended format)") + }, + leadingContent = { + Icon(Icons.Default.Add, contentDescription = null) + }, + trailingContent = { + TextButton( + onClick = { importLauncher.launch("application/zip") }, + enabled = !uiState.isLoading + ) { + if (uiState.isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(16.dp), + strokeWidth = 2.dp + ) + } else { + Text("Import") + } + } + } + ) + } + + Spacer(modifier = Modifier.height(8.dp)) + + Card( + shape = RoundedCornerShape(12.dp), + colors = + CardDefaults.cardColors( + containerColor = + MaterialTheme.colorScheme.errorContainer.copy( + alpha = 0.3f + ) + ) + ) { + ListItem( + headlineContent = { Text("Reset All Data") }, + supportingContent = { + Text( + "Permanently delete all gyms, problems, sessions, attempts, and images" + ) + }, + leadingContent = { + Icon( + Icons.Default.Delete, + contentDescription = null, + tint = MaterialTheme.colorScheme.error + ) + }, + trailingContent = { + TextButton( + onClick = { showResetDialog = true }, + enabled = !uiState.isLoading + ) { + if (uiState.isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(16.dp), + strokeWidth = 2.dp + ) + } else { + Text("Reset", color = MaterialTheme.colorScheme.error) + } + } + } + ) + } + } + } + } + // App Information Section item { Card(modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(16.dp)) { @@ -754,7 +757,7 @@ fun SettingsScreen(viewModel: ClimbViewModel) { syncService.authToken = authToken.trim() viewModel.testSyncConnection() showSyncConfigDialog = false - } catch (e: Exception) { + } catch (_: Exception) { // Error will be shown via syncError state } } diff --git a/ios/OpenClimb.xcodeproj/project.xcworkspace/xcuserdata/atridad.xcuserdatad/UserInterfaceState.xcuserstate b/ios/OpenClimb.xcodeproj/project.xcworkspace/xcuserdata/atridad.xcuserdatad/UserInterfaceState.xcuserstate index 26db1e9efd6bf617801be9dfc2c5e8dc4aba4b43..328c1d7b194822b0f051169addfe240a68c54945 100644 GIT binary patch literal 127240 zcmeFad3+Pq`UgDc%$dndmL|>CHeHg+CP>;OP16KH$yTWBwCqbMZGb{)OVa{nog*r! zh`1|)LP11SRNQgj5y1s;-xU>66cu;W_nA!71&}NE-uM3AKVJAWkeM^*Im@$tpXW@c z*4I?W8(psb3}P_DGKAq6o>4LCv0dlJ8sgP;wd1;0G*r&0hHqtE8|&)FcCDK_GgjFc zH!|p=_2mZr(9%J%=2%s*wb5&gz=)$t8!H-P61po@(6;7(X+d8NrNXN|`cd6f>F`!;EFdG2@vACeAc6P0U4(1W&QRXq`8RmKB1?FAmJ?4Gp z1Li~KBj#h~6XsLq0P`91Ir9Z`kol7NfjP?j$o$0o%>2Rpi4ejl1(}frSy2|sMh=vV zdZ1qDEL4EJs1Tit`lBEUp)eYRMxaq>9GZkCqp7G8)uDPc2Q{ELnuq42C1@!+A1y;y zp{vm~=vs6gx*pwt)}YPkR?7k`L9$6w%Y@e%wT{v98~f8ak^%yO*A zs#zmzV$H0DwX$ifoprFe>=|qqwg=mbb+K;N$M$D~Y={lB5jM&WV~4XN*pcjHww#^9 zR=cuV$}duVuHgx3hP!ce2~qyV$$gd)V#l1MH*h zW9)P6^Xv=k$LuHUr|bdtGxl@#3-%!UC3}ediv61Xh5eQNjqpT81R@eOF_2VZB@U8H z&LCY#SCU8aNti@PloXQzWFRRa=aE5VFd0tDNEL~ZX=FN?L8{42(ny-fTr!U=Bo~sE zGC!5C zSigR7hn~nN=2* zRh6bnS7oSdsvK1}l~a|c%2ySs{HlN|tcs|js$$i7s-ddUsxhjuswt`pRa`YswM2E1 zYPo8KYPISL)s?EXs`aW(sykG7s_s$UuX<3mL-n}o3Dt9|7gf7dpQt`n9Z-Fy`dsye z>Y(aN)gjeas;^Z?R6nc!5*PsqqM#Pcf<>?jX+ox87aYQwLQnBs@k8+=@qqZ5_@#JA z{6_p%{6Rb_{v!S={vrOU#%flrQVVLWTBlA`8`V~InmSXRrFN)u)!o$H)xFebsq@t? zwO3uJ4ygO6&rzSN4yz;Tf$9?V5cN>?NOh@tjC!nkqI#0LLOoSIO+8&bOI@R`SI<#5 zspqN}s28f2swMRW>I>But1nTnQeUpVN`1BZdi4$Jb?TecE$WTxTh&|Ccc|}F-=p5H zen9=8`VsY`>L=Atsh?9nuimA8N&SlYRrP-L>*}}F@2Edef2jUceL#Is{iXV_`WyB4 z>L1iUtA9}+Q~#ks8m!?pDvd^?)fhCX8jHrNv1u|jc8x>RRntw=Q`1Y6r^(k8XuKM~ zCZOr3IY$%Hgf#;+12uy+Lo_2aBQ>KnV>A;q6E#yb6`Gi4nr5bEmZnZquW8gYX__?) zG)pu~HOn*?XjW)0)?B7prMXgbmF7Cl^_sPsb(#&D7R_eOt(x04cWCa`+@rZ)^MGcD z<`K;knkO~SYM#@)sM)1?S@Vi!pJu=2EzR4S_cb4AKGA%t`9gD0^R?!%<~z;znx8a3 zYkt=p(=uA5<+Qw3t<`AtT7%ZCwP-W6Hf@g9uI-}jsy$QNQ|r{`X+7EkZIRZm?W^sl z4QfN$V(kF!Anjo7aP0`~DD7zNcqTQ_Bs=Zx%m-cS$ecJoA4{LX5AJ;yi zeMbANcBl45?H=vR+P&I++BdatY2VYnul-p2iS~2t7uv71Uu%zOztjGx{Ym?q_IK@H zIz~ryoKDoKbtyW%&ZINz(sdcSY+a7-3|$vp58au%-a4nwt@G%7x+2}#y1u&px}Ywq zE7qN-8>Abi8?GzUjna+Njn_@qmFp^XRk|6vYTayIt*${A*Ui(-*Dca5)=}O0x{Gwn zb(iW^>Q?Kn&|RauR<}lXqwZ$idfg`7ExOxuTXoxXcj@lc-KTp<_pt6U-Q&8ab~x9JyV=1?v%omKuW)qU`jNlBxOj-h?G$&<5DK2RHVdG zs#9jC%t>iVX--+3LQ^hGxin>E%IcJ>Q?5^0o3cJ-bIPqLx2N2da&OARDUYQ*mGWH5 ziz$0j_NBa?@=nSJDW9Z#o^mMVo0RWUeoFZ*Err&`i1(X`epj%`b+hf>#x$^ zpkJropua_boBmGyJ^K6gkLVxOKdFCKzf-?k|Ehk!{w@7``j7Mn^au4{>yPM<>VMJy zX}|{Fpf(r`W<$Cm%W#IFyP=mM&)_xq4Sfy$4H3gY!(hX3Lz!W$VWMG*p~^7BP-Cb! zG#cg`78xYN1%?%dRfa1K*BaIsZZfnOHXF7Ywi&h?9x&`MJZ^Z}@VsG{;bp^K!yAV8 z3?CT|7!De~HXJb=HT+^Ymdd1(R3TNHYDhJwrl)45I#Ro)o|)P^)s^Z^^{4ht?VlP+ z9hf>eb$Du7>e$qYsZ&y?rOr&PO>Ib>o4P1fO1&U;Me54bD^sscU6cAw>IbPGrhb}w zAoXDCm#K$Sze)W*^@r4-Q-4W4mimVg8L^Q!s*D<=)@U%M8ZAbv(Pqpv+KmolS7SG0 zPh&4*o-yB8VDuXO#(=S(@f>5w7&Z%ojxkO!PBcz2Rv2T(X~reS zrAEm}jprMe880wiXuQa{+_=KH(s-5eM&nxJI^(UzEyml7TaDX{+l@Pnj~E{{K5Kl= z_@VJ5xw9mBP^t$N{(>taQOrM*+FdZ~~X*y*3-t>c6W7eCk<}`D<*@)W4f6-)56vH$51PL; zA2J^`|7iZn{ImIY^IsO$qOoW#T`k=#-7P&VXIgq%dRfl0^tL!Hc@~c)VCiEy+Y+`! zEK$oa%W%sG%Sg*;%XrIFOQogC60=OR)LQB+%Pp5$uC!cbx!SVUvd(goWsBtw%iWfT zEDu|DSRS!FV|mu{p5=YZ2bK>lA6Y)Od}8_3a=`ML<#Wp+%XgMvEx%cQw{lkAsQ*042Vjao~r!>wbj%OIp{o-f7OX0ciu%2B(##m8FeJo0K*=tvqdd z+Kja7w0PRQw1sJl(pIKjmbNPG^0d`ySEOB;wkGYyw6$sL(l(}TO1mZP&a`c5&!_E5 zdo68m+B<3QroESTAnmiX&(n^i9ZmZs?bo#5(s4SQo|$e>@1EWx{mgV%x;x#I-Z#B} zdL(^t`jGUY>BG{8r;kk^mp&)GDSc7;;`Aly7o{&xUy;5#{fhJ})7Pf2Pv4Y&OZuJZ z+tQy;-F=h$m;QeG7wKQ6f1Cbu`Y-9fW}pn5Vav$L=$6qvqen)5hAYFJ zadyVJ8R3jU8G|#1WQ@ufol%?7kkOn$GtSRgmT_6e6&crLtjoA5e#rPenQfwNlC8-$*EY{K-_~qfU|VQgWLs=o zVq0okX1m08sqHG;)wXMFH`~_RHrQHhn{8Wd+imyS?z7!*d(8H@?G4+Twzq6=+upIg zYkSZ3zU>3shqjMw2W(&2ey|<2{b>8c_NVQyOfgfPsmau48Zyn9S((|HMVV)3hBD8~ z9F#dYvn+E|=IG2RnN^uHGUsPDXD-NGn7Jr(apscDrJ2h!S7ctCc}3=xnO9|Aoq0{> zy3Ct0AIRL1`Bdi9nY%Jy%G{m#M&>)2A7p->`9&2{nS#M^&oAqhdfvnH6KF|6l>)UKqwkF${ZOYEf&dSct z?v~v>yGOP=yD&SD-6uPg9nLPv9+EvYdvx}g?6KLCv&*yVvg@ya$0gW=G>OEHRryZ`*R-1 zc`)aZoF{T#$l00mV$QCdy*c}GKFc|r^G(jTIlt!oVMlh+uC{CJCcD|5WzV+f+g*0I z-D5AXd+mjGpS_PgXb;&3+Dq)E_A>h@`)K=k`(*nx`*iyZd%b;*eVP4Y`z7|P?bqAa z+Bey6v2V6-wcl>P%YMK8Is5bW7wkLjFWPt6U$Vbqf8G9u{Z0Fa_K)lz+dr{?VLxd9 z(tg)+i{=cLB|fqV~!^syB&KRFFRgw>~*~Ec+2sw<4eaO$5)Q8 z9fuv?IKFcnb^Pr3&GARBDc789$+hOD<)-Im8013@y!@6>E-Ai)?WU`oSCWo;z4knj5L*gV}Qb~d&N@__XX}2(4nQlyX_&gJuz`v4C zN|E&NX@Dm3zXjz6i%h4wwyJJkNxT>)S6bN+i`7nUyIR~(F*{anaKeRw74ad}(;EO6 zs~TNV(-eyrH`L7@S~@ZoZ>(#mm|7D{U}lku#)@)7_qGnoDyD`i8pc$_M_0$Iq0yM? z#u=s6wbN^2aHrgGj@&RgPq-4Ut8HwktEq`Kl>5BVaB;EU>+}}|yiTtx>~RKy?m}m% z&>eCY_=CQJu)Ew~hYo_3jR5ccO*e*&_OaB})l98uC`pc`+>qXWFEP%xTSB=Z+vO-M zbh!O4;AU5m7nmCUllbQL1RP>=GXhM6>AjWd!<^0ZW%@DaFy}J;nIIEl!cwYaluVLY zvPf1bO-h$CB->Wlh+<{{Gmt4^&SM6_<_uwm!e(Sj*GSh&Yo&D*^^$ZH^`vDtME%>x=L>SrVyPJ$7%cavP3 z3CuKkZ6-34n8{2zGli*OrZSaG6%&)Pq--fivP%vrS2{!LB6XFzZDpo2Gni^-CNqnv zVP-S6OdV4%b(g$Sp>&QkL>etsNOPn`(iQT;^cq`PR~5^Xm#40&p)%IWIHOAP+Gdy+ zo>5UdJr;-cDUH>@I>f5l?v)$PXzO55bz_Hz%7CBqhCts9wEzweXsBzdSDpqa8M->F z?Xi;D##l{F_4HURP@hrJu@4xPe5KsbrLFbQy2k3tSUf>1@!t+Z$!u%Yc__sonB@k? z-`s8E_i{tl-!w_=PPw6=?e;0g9ImSZu?)uJ0H;^9>zc*P`AqLk%o1iPBQaF!A)P7p zlzMGqmN6GF7c$GFvm~dK2cNJd=Hlv_##lo_4TPHIB?Mp{7JqO>ys>Sz^5t@abyV%N zlQvFQ`iNDHD(T!$lBF(VRx#G~>!sd%nJbtpnX8zq$1D1_78KQ3<-f7`#G$2;YS0RG zwG|D`Ezs(ku|rFTC2)U5=sS(4v<@T(8YXF6&#Ymr8<-oU{0+>Fl1o%^Z94==hM#kzJVsTK~74j$~kK`U^*giFxtU#D09IpZ`V*p#x7_0== zh{vixdB(<7H^ycs<~}Lj%C#kMB|bS`DJ#a|b#ajLy4r%^3z5sd`zd4n`t>cMwneS! z!nFSB@}xugUyClKOMmK5eCg7EBw zr9+w;y6MP0-*+220 z)8xwJ)OIqj$&S#A%r537W;e5kd6{{Ic~v@B>MsSQkQA08QdBD5!t7=Cfn|A}c>~PQ zTg=8%0@nJ5@KOjSWqejZF=p z00V99{<%udOAz{7%cTsXBpwIX>~A?)X(ZdYazkO;82;9TD$Qj}1M(EEs|WX@+~96| z?i6EhHG#=7{|gIsY76-9*sp(Tdr!-cI344kP;M|L+R3J*q_)1Pu`D(p z_P49sTNn(uf_|sF*zI?E{o$Z97z!3S!+uvdQV=LEhz5%GF~5L1_?7vM`JFj70iu}t zy6W1-xfL~XL?e5T)fF{TsZ?e_qZhh*J6wwuRr(iVAoNMZ0WHj5%r(PXr;Au5oXlT9 zB2ps_(n@2bang8cvQ&_KK#x+B#ugc+u~P40sW@`Hq5Su=`GQ#1P*>L|p)DG1T4rw7 z9=(((?sZ*?-jHfEnJw1VfNf%3eGHaQXGfGWWk+jh*g4J zQT&vIWiB`5#A;=OQWa`yY^;N4WH+eY`otxbfq_VnNc>*NWY{{yit8nIZ&r4W{bW82 ztZ%TPp`y7Z$I<4z!1HHxSub($P`B=r+bmh4-NtS?4!D12>;1F9Yso1Gld22{EF}0N zay>-CLMA4&$(fh$_?NB94H@m-l*xeARE6Ug0x7F(xHYS2RTqTs9x}+e&`&i zUx=bM(gOjd{OZlGsM9=bg2JjwAmnLjLHfiENarBTKtmdTuy48%H zdBv-%pZgb9vnlDzT~?o%=D%k((HW>~o5XdK%G(?Q)DxyQWmqcu?l|$YSpOqGH8Hn6 zn^Y;OroDow)|J&)G|m_Yu}y6LK+rWU8tu4Y^|9J;P4#R*1RfgFRMS{pUlVgw*3F(> zQCk&v)Hl>sHC4tOJ@QAzK{w`CG&WRMRaE5Gi^cjtcE#Lo2O384>eWSROJs(5NeD=4-o%4 ztLtaf)yC@L?VXg)sAz~)ra65l;DtAp>}y59+j>IyYTeE~TrgBqjB z5KPZz>X`*l+f#)4LRC*0)bvb1Q&2UUiDpAhPczia3Co9=WDN+7K*Cmy4ZytCQVByyx|p%aJ@F!l@Ij+y9dMa zqkt5Xrb*K`qO)O){iGREwNx+Ly)4;aMJwXXWpyRB5Y<5RGeRa3hU?&G7!wprWg9fD zx-wxACnPS(cuyTf=Q4N|s%Wg7A^Tpk%}YGJA4Nb(6f=4>01ZSX=)7@>hst6Nv&YLp zVpVA+@XGka#RMg3ro>3KQr$jyWH1_nhN59;cv&O#Hx?!|TQ&#MY-twkFEkj5N>SN3 z*){?b)=rmdh9?Xn8jZ#zYROt-3vl(|?nbygHW7O&-<780(S+m1o*1`0z!o%74nsOk ztnKD;*V`tn^jeOlfGY2}B8dk(Enf?&kh}jEt;(jsawfO23RQzWM={X4)6op6L5fR_ zQqv}2uUV)D&6MU!^Q8Ik3ETO(1Moq%xp()m#$~_a^@El`U7Y8>mLk92c9=%*ocv3 zqsEMzFmZDE)XHfyX3m;jH|Jy;b0gHOw5!aCgF)FPAkgZ@=D$@!(erD5JmgF$p-mc% z$vjF9-s59}RaG)<2U^LR23jf6%4a~(E+ef)V@p71ZC*oDTqXr=v)bBfp=A!Vv`=nR zv}0t6OsGP*cShPqNLI+*>)>0r9xa;gASP{X6@6+T(4eQR6%+KcpygS;TQnL23)l17 zuAAYy%L9{lkCM^IxB8QO#U zC9U_Zuhzr;L7o=P;PD9rUA7f+gQ0EoSZFX@rq{MOrE+&}Xk?X1j+Vcj3*W{jANleS zTpkZASOi!5%55g~ZhgL|Jf|sX^2Sz-j>H-(s%xN4V(3*mXcHUVHlOLq_1aSk&s4)Y z*rBOG?yg2LPqnR+NcFu87we&gJoTQs4RQF|r~@Jcnq0(pC;- zfIHX&ft3PRFbvv#FqE;529q}nj9mj-h$JXly%1djg{#-2wWtMcf@0O}P^7v83R2%e zAEHmt7w8BSr2dKt7I6wr#a3*`UGbUNjeYoB9Ki$dNIV8gPGh(l*Fu@;JiG`~d?CIB zUxly7H{$h)Lep(fX!;O-0zZpi#CxE~^lkhJl$9QW!qTJoC;U50prBOCrb0n!I-3o} zqh7WM%12As!R)BxO!4B*rkI_aRJ<3UOPSuAVKx_`QT!fGX{BZHOTqgT!f*Ue6P{jJeU8r(`aH)Rd7lLCQE!kGta zn-&QTXhS$<;|})}ur|>h*1z`1{mewil*Ai8Kp{eGcq;}$O0svz@FXEYGB3OnBrd4)HEl1 z2@fBY=yke0ycyv8!83`KP^@F(Ugx9%#CHkOd*$RGx*grQ0o@^8B3;_9h!s10H@XMV z=cF4DYut$LM%$TdMhz`3jWv!76jpeB?ttH=baOv?V7;_TdGI0h@bM8HdI;@cu1N-h zuow&F7~JV!+}p9RAmHik2zWh<7bjQsG4!PDygiPdkgk-jYC%td^LF*WLKset97MfE z{^C$U$XOV0LGCS7=yL|#g)RURB9UNW$m?}`U0wRu_fIfylKzWmw@iN*dP%xYy1oVN zK`%=;NH@y6*rO>PYZ%@j?+y6RZE2|lycC@etS0-*B@tl5+)gdS;1W)UTvNw3%F69S z``1frl$G0o-e{2*O1bk^VolprPI7ebp)Vj8h2BRWfFAe=eGIzbQ*;1*hCY{Wl5UpP zOBK+bZ2I-61_r5krxdBFNSC zlxOHja!Y#_tQ6t`z+)iH0oNEZa=k*aX>|>dshVA1(NG<)t4)ZP9MZH3k@Bc~b@Gsk z`PH+l7l5-WA4C}6eg|-^`iAP+5cVVqCC)ZfbELM<<&) z7<+5?t$|nK&Txgu;ELwDCXj4XLJX%>K$AoVN3-<}Y0W;Ig|lI1IcODjjBlqnDlr!6Zs5gxPG*Od)$4-0LVyJWX;087F-Yrz zRyVZZZgMbi$~MU{^Z*O#knWZ4lkRErcUteEI}-OUk?*x#l7|e+5k|NVdtnZRU|oyQ zzzJ2Yl?XcbrBYmmN8!x2jc@lt%3b%bvi6bB@Z{-1rj3P z;nlUZv8qm26%&* zkIBi9hFA^YPIF@b5WOkA@xM?}_u~h^RRsOmg6~hLr23|*HPw|$h~pm+)@*_hqI#2(e!J3_cG^KTE&BzrVtF$TZ}( zQ&UEh7Y7N4ni6n#AfHt+9k@5^q-};&*Md7!59Jdl-cHm%B%nU~i8rDDlG?dSRhjHK zp3tHu;k&dkD75KvLK~&1BB4U^>ZVPL$H3P)v8Rr$qnCbSPu01s^dE{##t}>Dtx>h7*a^G*&44cHGS* zf$#B8jCCXa0pi;qrLU#K(l;CN&-fSotMsk(o%Fp-sQU?vTYntoQc$I^cKN4hSXS2@ zsgBDJw&TkXlAZ8Gyt*m|rF?nw9Hb;=>Gvx%bT8{nNZ* zpIU_&{k4}(|B&;UOvSc&}*{G683(G>>!1D0C>cr<=ekro-^5XF;@BIFrdpC|) zAsy+`ziNHQpoi74DX{Vo?CYeX(vJ}Ium%Wvev*1mkQpW6Y{lY}liE^odQ+PYcj@0d z(G6qh*}BAl6lBUhWw18sH|h5dJ&l?Md~>T`xd zg+Zv7EC@J*#XgU-AQTC?Jsy8yQNW{2zbo5KsW4Txyn~HvVY|ypN3K3S;a-9h*)tPy zS8~i}u}-G<1{SIn(FQh;A}pKERPbBcqKo#Jnf0ItTG#^COA$+v*yc?DG;%iZ7VBpN zY#)lCP?n>J-^li5y0hm{q>}U$2~zJ#&}+NRohW~6uj4ep*92@=F&z>KO;xdRZ8PZ7 zf5k7IcC45^?_}f#0l6U*sbz8+nVu|IvU>WA zWNj{6%7SaOi7jJCv7^~B6s1rE9U3S~-NcS#$Kx~Ei4++rN|WxR$RQPsmHSY_Fd6D- zTer3-YrH~Bjta*mD9MeJ>tD&vkf~L%F?Jd|ogx!OW{NBnSvN6VA%NYJ(Abv)N9yIB z$s7%Vr<|#Vm5a@jeX#h*ig}5s3zU|v^WE0svqZK8)JUhBiO1_2AQlAGSX~ct4bNLU zHA(a?`zgt>#@QyBR~jiw-@wkLDC1PTvOwmQh3q1VY!qd;^U6|o*~vEV0@%EZD9V&K zFH7p(wy0hDFM6`m=3mNQezNCR!}C{Clp{ZHmwLA^beI0Cj&@QV4^ed11`r-aY!bXI!=J6Oh0Oj+QAj-5(c|n>0DiGguuoFt zq$saN-tWX7!wy^8Iv5;>^_QI6uBw#P*gw>DAz)Yd=wQ?q{*U>8WP5616eTRLQ zeGl})LH0w6&Xz8xXtewRdTK01ppYH`w_*!L&&r~Ca>(a2KrB$9N(>`sYfBrOYdYgt z{}Md~VlWwHv$%u?$x)N|`QsrY9gQec^m{M)ix*5bp0$>4%n|Me8@sdK~BSi#cZ74;< zC>l=D2#Q8hR7z19MWg69M=lqsbUDmW(6g$pnhVQv{#j)lH&kGDYQ^$s{tFl*3O21J1w{ifSpE zm-xIF3+rl^LZI*RJskR}-3wb+pu&ny{cH@2o16OOY2 z#u)fkyouaMCd+MS!yZfbD1{XUwhfHxh=nH*eRN01O9^h*$fIZvc^vJ51W;{keq)E&HV$%z-u{0D=4~{qDv^cl%kclli!q> zhx|$Y;ut7Y=*qDS1VxuAp$|n@P_&Msn?UJ+ncb%N*{4JRPlVLs5WlvehbIB;P5>bP zmms1X8YyfBY45opjdB1VY?=>;G~05wtr6WxhMp+zPu$M?U*L_L5%e}^q5v)`fFoxG z9^}%vboqxOa9CF>p8z@<4Ee1*!r8eq0J7p7TrNeRN3Uw(x^Q6fuBPZZ89_M(uJ{jd z$t01UT<-+J#+@Y{rRW*}#<)CLDzBA#ACId!-b+4Iz!iaS$9cIz4uYZUDS`*qY~=i0 z0RKwSjTEi@KL;(j{*0aro(MXQzweU+{&fQ%SZ9CezChbKwLzNCDtbojX*rXRQxFRDArSfHFZDQKA4?c|PO#7Q-ON05##U zc$afOyKwBN3&)O5GQt$DQfAQ#4&0qvDcaJ)RdF$jZlh?c)O$3X`kWqXoLE&Y!&tL{ zMs4FLC~c~!DXW33PqL31t`_P@Ik4|{Y~a96xKrxg>5*|2O^r}800(@NPc(A#WS-67 z=1RX&bk`|(wrpx$6&#Z7>JR&(p`rpPw(%5soZdhr;0#5>Meu@v;v!FB#9ibnawpJR zZYd`zp<^d2mT(hWI4Z-pa$I@hO&QT_&91g4L_2v|+y&f)?Ph5QMfZ0$OWdWhN?6HV z#;xK&AAs3?kfMhudiZ~8mblH_76>mn*vdyYaIlMyog%#C?u77?+s55R(c=_7)#k=? z+qnl$68UitGTpg{DU?s?DS8r6z_w-V(!Y92$Iy{`oO}9Y9XtbK^c+P`%L4Sw$uZ=K zPbNA#6^6{c#J$V(zRRHJc5{2Um$_HCSGm`?z1%)-KleKK2KOfS7WX#y4n@yX^a4dY zDSDBjT@<}U(Qbq9^gLXKIgvR z4ssvLrulV>4pQMhic1qlS$Gg;Av{Ed9aMOS3SUx@$hQ)JSUQyZLAqYyv1Hy6a+b2( zx0VDc_Yx*7UR>88-<+ttr=hfRModm-XDeR;&y!!r3dM2l=zgMhuPf9Vc98r;O+zEJ zg!7XL7*2lO0Z2|asHv)qCC+aEonTE($A0-UpfK(*_8Y8kt%q3fLxW3fa2wY9uT>~m=ZwUe5iDimjJpkEA!|)+H!+yFdS}> zYrSgVxI|TZg_JV=5G0tZl11B)k_RjuhL{Yq+J=~R{2IxyXJU2CAsF?n#9_U7q7fwh zs}lYrcMR>{iZAB=ZLht=@L+n4Em^>rd;MK(8s8f55|B#AW$fq})I9Izu`@{d{Tu%`|@?8~rAD0^@ z|C@7d4Nzq@p&Tw~%Sz{ga8)Ee zrL`6H5dAf_x`9e_IEL2*<=k?XDqsGuv$}SIds04t07`lBgn~)shCZjHtrX4-O&sBk zl_s)M?Ue@|55Avd;H@R*%2<-N=Jer@@Tmrv98BUJNphA*u3oRJZw@Ojx@o7{ezgB2 zBTZC$$Q5@={co(H{kbBAdg8MnX_=eqW%G1=l~JcQP*ZrSal>0>VvUf7tEj1)-s&Rr zqxf-vNAjcjG5lDHexT?_ihkb6kLM@wfTjLQF}NEV$jf!GN)?JU9Q~i_n`sKspUMq` z{!6gy>vsJun`38B->-c&eU{r`qey8ZzMn29r@=X-| zK`}!yD~qUnLa==J;F8j^@@S-_Y}m;1(&*r5xU6K@(DFgiaVKjK9XmV-<=V*xjuUzq zT~b;S8XO%7-N=0;d=-8n+TX%2;sN0TwCpcwjr_`ky4iUZ_24$;#bbcifs>c`+Ij-i zDVH+U$44j!DERZi!{?Xr7f_5S#_~}LD3{`w12D(~aQ0{N!lj8b0RR9h2PoX`0{IAq zyCC52?I;Qa+Rjk$m-AQ2E3}%wg1?etj$)o-)kd_3zlOgSKnE;PEdHYf`j_+n2Wyxd zt+!Aat)~b^>n~ai?_iK;xlW$tO%$t>v)quFWm3R4@enC(Kzj2F6$avT-_kQA1hv82Z!2Q=8k=zUZx;sjy1TSZ`Ia zDx%_4yh^1KR3gPaDegt_SrqrC*hz67#rd}~T~%86Nr4}OT!}`pOaAc4ALjs+06TON z@cRVZ{*-xv{|=~s^6bKYtDaYt3HZ7S1k>G$udD0;rpcLC`EMfiDyLu9Bv-h*3Mvy? zR6SI%K?M|hTU5PNu(E{|`{gzJui)w`m#RRPK;a;yx6gy-{_psz2cBxG%;1{?BoB)c{7X8h9dDe)iQf7yaIUQ1%4} zcAWp)r#%(}uC5vcO$VRYR6X~(tfz(!`iyQp1Fs%9?px_da{j|qBjrWQP>ld!7oU5I zMf-0@FaAl%F^p49l(}QPEX*NUm{pTxVGjR|Fee|Is+#%F#kK}SwibTs6|s%T5?d^P z43ot+VSrVQGE+BE98EGcWdBdW)Js+8%fpsbl;Qyt4{T8_Q-R-BLNQd?{I{6;V%18S z$R#ZJJLgG9TU3|HHg6Evxf7B_>f~EbR9C64I~h}7uew2I>LC;kKS722Ue!9_mYYuG zmfsHC(EZk)1FIi1_o-hyC-ke#SR0^e%ZW|5Zyqv##-SloZ$J3m2eX#{F|M7lZc%Mf z80%Jv0I+-$3J*j#cd=S-B6p!7YdWPcho%|)$PQ_n>AYfk7 zUxNGzys;%VdumNHI7nbjDrc1^-jQ=|&2eY5`vrUjF4t7A-_(c(d?~eqOi7 zRpjyd;7^gSsL<{51UfWQ&Wis=cax zs{N|hDV{*_M2aU-JelHhilxeS2g7_c@JR8p5i(G=ax`NXY@kGiCXAr*18WLcMn|hz=L1C7}%CO9Tb+31x>S0 zY`Qj(-LQin7Q9;jO4m0YKD-Dr%uhNxsS6=jfY*tENff%snyV2s7ycO5?TZr>S90Zg ziC9i=y(yd}^cI{#o{%rN1h?Q33IwlEDENdT!7l`aKEl~TU!k9Hj&QEfUkC~zAuL3M zs8B2n5C#e*!g<0VVX!bn7%B`Ch6^KvkwU3ZCX5nB3uA<_!Z=~PFhQ6oOcEvw<-!!9 zLYOL43ROZ(m?lgYW(d{7OktK#Bg__Rg*u^Lm?Ja@aiLLY66Ol?g!w|Vus~QSED{zA zON6C@Bv9deVVQ7&aG`LKuv}OnTr6B7Tq>*-E)!M>mkXxAot z8-z8&jlx=Cop6(Iv#?&+AhZY@g-yaO!e-%CVT*8^uvNHSxI?&8*e2X1+%4QAY!~ho z?i2189uOWB9ugiFb_kCMj|z_oj|)!-PYO>7PYcfo&kD~8&kHXIJB1g8UBXMkZefq` zvha%Vs_>eySJ)@)7hV_M5Z)Bt65bZx5#ANv6W$j-5Iz(>5}Z@fwQPQhXD|>nU!b zcoW5&Dc(ZyR*LVScpJrcQ@owx`zQvJ^$^87CDfM)9ANWhjd&ODM}zR-mk!g6Oj;lr>P+NLe#wt&~lttc|i+l+B^6gR*B(wku`3 zQ}#^C_M&j?3C=vRF3Nf+oN8iyl=V|M!o>EaaBzw3PuUP_Ez%N7=!Y9ZK2Z zlpRUgGRlso>{!ZWJD;)( zD4dF6mrz!s?D>?vfWpBSb_HcGq3lY^uA=N}3P)Mkt0{XeWv{2~8p^Jv>`jziPuUjA zZldgF%5I_TR?6N%*=>})o3h&}dmm*Vpm6Mg-9gz$Df>8ugADA`lzo=6&r^0MWp`0_ zH)UU@?5mXBOWFODeS@-ZQT83mzDL;)DEkp*KcVaa%6?ASgOoi)*{>=44P}o|_It`6 zrR-0X{e`l>QT7;R|D=SW1XDsN;VBU)QB$ZHhk|ippu|X_B%D|&NvBZ%O|mFdeG>;I zXMolaS&@jG$crjb5JgcfYDBH56H`RJXb@9Hqi7P%qD8cdX=1vVA=<=DF-y!Ab40u7 z5Oc*d#4ci2v76Xk>>-{h_7r=GXNkQ*j z3*t`kMRAw-lDJ#kBfc!YBEBlVChisYiTlOZ#W%z^#ka(_Dd|c{cS?Ftawa7`Dd|PY zSrqE)iIb8%O7bajQR1e=LrDQ8UP=ln@ljGliJy`HC4DG4o07hi^rPe)O3tOEKP5p* zLX<=(iBeKb$pA_QQc^<6AW8;PGK7+$lnkR}I3*(}RB)40O3El1MadXS#!@nllJOKu zx5-3GCQ&k(l5$F>P*Oq3R7xr-siGuC$uvr)Q!;~+YD#8OGK-QL3boUuj*@yx=1|f= zNh2jql+2@KK83nxvVf9>lq{lTF(peVSxSjS38mzGN|sS5cP1B7auFrVDOo|u#gtq^ z$)%L6q~tP6R#CE=k}D`wB$KNsxtfw|D7luB>nORNk{c*lL&=SltfgcfB{xxWGbQUO z*+5APB^xQ(M9D3bY^LN^O14mP8zoyQxt)?bD7ll8ZIs+a$=#IPL&|S%`I$mND*2U?-zfQ=l4F$oLCK$#{6#s2a)@$pD78bnMf^aCU*NqrgXTkyP=4=Z zjZ;BDomH*xCsCr9hDK*SWZLt6g+;}M?qCF7oGky!mf~p883;$hPG3PJ6!iL{1%ari zBZW^D3Q$Zk>{Jw{)>PEaY9pB+3j0FgXo1Ta^}w$>@p=o2oq<5a?SyzJQ0NUs1D+m4&BCrO4;;x?u1Hg%NlsbkyyI->MQRc1Ao!#lB#nI~)v0I#M~TP+5F>R073- znEL%Lr^gq874wCH&QKVT)=)Sc@&+M?;q$pVQu$t?vh?(*6crTvJ%wJFLC6Iw=8pQE zfns0S87c7iVdcDV;JLUXm7f(V^z^9sB1Od!cQoV-c)T!|kbJJX$PH5qL_CGA!lFX2 zKh%-RF@?&q)1wmfMtxCF2$m=qh`{c9k;l|ZwGqDf^r#dCd|`hu3fY%n&;{q+i(oE=(IThM>x%>; z1-{|}cSpHbD$2o_^nMKFJ7ProaJ=6K=l2AU@#Quv@c4%5x(s7 zsJQ*^NMW(t?R0@~z={bNgTl@W$FPMwa1afge&fshA8 zr6BPkuU&B<>h!on#r~)#5cNkoN~KzqY`kBTc02#3P(`hRyg1S{r;7yE^L zkpibT==Oyp#bI~I(@~G9{fg}0czRSk9v^6aV5&%Q5zHkL0xAg&1H0mJf$j7J10DCJ zpF(Bb=}`&#g1|+f9zlbF9xDbG2o!;V_7!=+>iD3B+UxH~C8SWf`ShrGTu}feJ@D>B zP|C7SE`;Bo0BZ*d*%vJ?gw&zCqeWH^P^iGK0y-TY3wgrDp2C8lvoPqASIiS}`h5{F zm__a)UomW2G31lmt6^UfxK*(3<1a({xF7gJves?FS z9HCIT<@Bh8-Nk;Nyc?mAA8OaV910>Ns5DEZ;>zD$-azMsN8ybR6>!c%LDe^ z>2pWqxkTZY!ubM0XK^$HZ>bCyK_9|PV=;xw zou@}75(4RPdxFj)s9tb-3&TFAKMWSx12cs4blwpBmXMA-CchE=O^WY2Ju1*6yw4g0 z#P5?eOb|{pgbIL)J5=Cv7ZntOAMNc(rB0y&$1DG-Ck{s53l109Nq+(Gm(K;BMbI6B zqY}PQBoGaPLhhu)8Wjrnp58p5A}CxOEry+NxqwQrI0B9<6b(c{u>}i)p&&?1$9Xg> zRPH}LDxPRGSOhi_>I^`0LD>qJ$e_#R3>QV<9jk@mKrq@#R+cDK9y~oN#l>FW)JVh` z2?l|`Tm?`HQ2;8&2a@Uu`oLWJI_a=w3YCXXk4i97==Kyq5lo;^=Hf6ga8UlumS8=7 zktn?J*5m4=T~;Vm;3bNuqbb3o10Moh??4~~`vT`oyH zc6wBTAqc`eK@fCr5cF{<48MWW2RkIk8or1-SPULP$KAhDq4LD(Q7QBlKrk5!I3a2Q z8|(rXHsFo|qXpc)LXYh6xuYGaT&GZZ>h!2YT>*bVfgg4syhzxWLa1d4dSQp6fvC>~ zfox&4lSHmns62C;R6v&$6oF^q_Y}iiLb5>0Iy34Gfy)72dbp^QcG;j%dG4RfJvj4F zvE%bO3;bS?6^|c|1N-E+T!A|o2>QW&^>*?qHY*ffIK6oQ3qjlfHp>S}1@;8O;t&Kb zPOvpWm#3hhz~k;1=c{j5sJwW3RDwZopa7r)C`1C+0(86wWW@`vOfXas3tuf8PY!d~z62V+#;9kHm$&VP!>u=D6K#KAybH+ICJpT=Fh z5R`xuAGd}0`~2~EC>j!5-_P+FUdwHz;=TYb?8X#u-y7!Pqc%&xi?E0z_0`-M3}X@1 zU*fUgoKG%#*afjh6`Zrg>GZ)X^84XOI-*!I*ke>bhQm%@Ce?THSl-MH3*1Pb2LYB6 zgg#KZ7l8r`dEu`_;9X)f!(Dgcy&m^SP@4rOeR7!#ge~F=B8G&Z1@t1kZcGEQ5%?;R zc-ZL-Mx!E&;$0rgySZVBz{84!y`BQ;_%44aYrB`(kvhGSa6aj zm$~?zA;b!?xyPJA%!LX*v}TY7_~7KxFke{2#h>$7aDFEjEDjGoR2@W!5>ZiVOHv+l z#-WSdAt-!&v^g9V?e*XASa4t`7c60@ELbcM!4UOP-QYIth|v0pwU>r_F3?Jiz zR{{UX0SY-l7q`O~_J(4j7}9Y8}NBaHo%)P!d!(;h2H!P7D^j8#d zN_-6+SSVdUl1NDedm46WU&Iy9l$XxO@mRjk4GWxZFcX4C?szI|LS*~nx0B{wW6Z4YBrz*(>=p~ph7_^}n! zh=|7QBXV5S|`*~(-2H8(7gK+p#(oEpOjy?H!fuQ03@=wv@kq!@IME7LRT+?B_& zFE=a>Z`6x;F$^zQub_*U`d|2)13_}XGZ3XW&t$GxPaezu9I?dWPDjiKDTyLBO+TCg zc|q9H2lLVwLln{N%JjcFm+)Br%nb|Nm5?hCg7)%4R1g3MCr4nGL0;gj#vw6ok-WHg zEC-I>ehJ6C!FULnFTdNJiiUtDerz?MyaQUz;R=iL6P^7j3>~Do%_D$MKI1zhZlu;= z?s@1I8SqA^W{!LPF|XU<7e(7U58$zM$PEiTVwW!j*FF${ql#D6KaOZbNh|<*!-oWKA#G3+#BEFt#NDF~ zk7!>R&12}C+dN!;I1gduzYySo?cxf;7Kd)6;e8)+M^QK8qM6b-p2t#<8y0N1E=U7h zQx`&^h*N}V{0Md!E|x-!%nR#6MENN^7I|)1Jn?|n1N*VW>+^wk9SBz7Lp^bL6R>DK z*w(zUObe-V8IMJo8y0uK?G1&on;=q!=(H~e%@U2o@yQ;T#%^R;oe>e1N*;?kH!PtL z@=|^Wywy0=3nJ|AT$hn4hBUiO5;Zn*!p1y zb{Mxm;`E2y0Vm9hOnEt%$70D1ODycf7ogx5J7Z4J1!{|CrQ?W&dAv>}cLK@Gj1U&_KnWv{54t#f-k8hjk05{~lKqQ$EXBEDiNKe~yWq9DspaZM zsx5$x0Q%n_gIgANhh3Qwx6Vs=EM0TM0-cZGA&etVNBRt}i zI_%V$)W3CV{M$?qB7_vp4R4_gh%WXWClB3@z!`=XbB1qu{Vssu+ zA27Ir*jr$lyRow%TPUK*Ivzvc+~(nq`-5(nbqM77p^u@OF%Mjk2o`pEoKfVGd?GI1 z#A9*hhQ$|!FBd>W7Xf1IEuc5euVUMb1S1ZF{GuT-7vIZcap#65gv3+CjSL$MFT@Xm z9xnn_Nb1JnSRjjx)f7b%I^!!*i12jq=7uHebjD+T`L8co~R$BD{HyLz6Nc06GOJ0vZR8p~}LGI1Y(}EEi7ln0+#X=!ROyuFc!D9*KhQ;SZ?i@Lr64dX&&WEXtsv0-` z>2diG!t!~MX33<{+mt0#WQ<5#&Bxh>YQ~)XbP`=MQ-- zvD~mkgNS?}`%!{aE$HG#F&+FzsOBh4+Gq^fXt5vp8INU1ZdhQq`kct1BLYtM`xw41 z2@5Guf^0i#dR&3H%OlcZU-MXo=7uF2abgcf{Meg{g*)N9hEaQlq^>LKLnhCK?Jbio zdw49TOW3H7;SZtCh~V)=!~G9pJT2;DkiS|EN*y(1cO z2|8kq5?J67Z2oana)@~BcOJ{A+^`@H0&^aR-r>zd?mftRhfqWZq&_e5h{(VBL@}fT zJeD!JVTpmnacudh*?_YOe+c`eA3LT4sdaDAh4K**UGh8fSW0ul0trNFn?_p0e(2)} zJeV-T-}r)QJcTFhjAT+jzY~vTd~R4g^rA*YDogx68g)Z?BeZ_p2L}V`U96o8mP`iq z^9y+_6LZ6YSR^fY@|XByG=k`*RhvG497K|75%}^(}DjFE#aKXc@-k$#E7Vhy97E>nl)_u#RV=Y|Ej^k_5!Zvt@^*kN#CU?qbQ zpl||i#E%fy7g4@9kEJ3vEK$THkU|9|;!rGzQASW<0WS|xSXa;$#>eSBnY(emlgE-c zdYbr9*chYl#m)#ViBfGukf|o~V{1mNH;w}COy2VG7-r@;kDx#345Cuo=?u`zK9Ix@ z1yL;I$EFM`A3KgCQ%mOe=do1fh6QGJ1jRZr-2Z|t4E3!pn#rYdg7ila5nUA6XU=6X zkL8Tqu=u^<7<^zv4?{F@gz>}t!k+BHmge)sa2;$w#Kkcl%bcU9NiYT#74hQbNPeXv ztiS-1EDnPhx#|cqR+-jO{xBXxZEo{GwB8#=9czg{PAku7WizxD!fvpbkVK|c9HP}4 z#bY@$H!MMS49Rqa3{d(9PXgh4C={6d$QaVnV1yTZBHcBP$I_4+7I2jdejI`%CrjDG#vrFEGT1k1^fuG<6r~z?htB$7K_7#K@k`B8bql@ zGCzmMa&C@TB8c33K$3vR4~rEjkujkAd<-QhA+Otu?J`s5>v=5a=Y|Cpj7YA)PK`!r z&Laj+3&Vzi()33hkbdZUkwnhtv5?%bxcni+?U3z48j8{-1YtxftR#kTr5oQ447-9N zi9CnLvM4t!$k8FqfdV>gyENyG`ZkoZ!k~l=gOV`Bs6^S1e8OY7FgGl;ddBO=4v*si z$gageoFEcvB{*adK#(1_n8@qSzlg_jac)=;1A&nRDS>=|E@4`FgzKYFQi)A740(+P zM4Ws%kLA+buu$JOh;tx#cPf7$LBt~JLu4oDMeG1|fzZ~OJa!e2R><%9P{JqTv1L4#D{{kv>Qdw);5wkN4N~cc?4y%*bK>N*>GAxnV&l6($`V z6qgU_NLZ|pN@NUZ3LKUBPLzp>PBZ1N=CNFx82_v z3^5-Rq-0Y64j#+0+^|qrF@W-U94e%hD6mzjR|K0c9)OjJo9kj?EO+u)ZpaM_tW(%1 zQ2H?TL4CTlK&hZ|3x*zI?O+MfDS-TYcq}*Oh9&MsZ8<^(B{=W{n&W&Vt=$QtWW))( z$?cD!?l^PB9^kRulp7XgjIfiy4T{hLG!F{tAfE{KIFOda*|3loDaA}IkMLM-$qfrF zG((t@7J;Iq0#-lH7zUv-T_}Y>{SHnaiuac%c`Pe)!{UntQQrt^cwuvc=CG8(RR|;@ zxPfs*vN3J51h=*)q0V~(30Cc zV875Z=~TiVma7lDOpw+KK(pZl0FE8R-6F61RUXT2xnV(M0ts9AUX%sE#W?qgh%P<% z>BUA9h(oK1`0I5Z%i7$q;B8?C#tTxX^fA3n66G&Qvf`|v7Xi1Z=uBSz+dP&#a>NpF zI}zML*+1glbe{wQCpOC%vR(*XAWR{)!av}#tj`ULBSgqF`b)jCudQ`8Scux%oV;D!qTBV4>kFGe5YZ!4?S|YU8~HCD%l)}wLCHqI5lTgOXl0<^57PyaN^EF8 zoMu3EJG|PAxfFEZu{@X?7M!|8-UiVY9FqViBZUKjM6^8)fdntWAdF<@y$d)V%R{+g zaUj=;Js&kyG{oZx;D{+ARoMMeQ6EL=kjv@I-17?xcr1_Ph6Qm*>?Ix_4oA`x6DSf! z-4l*wVpDMj{RoxBqarLS9?N67VS(gB`@$#=Mp7CEC(J_Bk;R7NaiTO4qM2E*TcGE$ zJdqogAhtpr$)iR%ig-{NKdQtd*L~ACG74ul0&J7C+G-9X+LU<}wzY|Y6M?M^yM{?f{(tx8g_sW9q zJeF-ozZ>I}htnNF7$gAq2)i*Yr*a{#7mLH2bp{YJ5$UjkUOa~9a+?Q2gfSW}!tpqI z4j)Hy5Tiuk9fze6z``*QoDIrcEeDU~h1{@!TT!To8y?_QQ2Q8Gc#z&;0mmFd8H4>2 z7Gd%7ShnYe#qU50m*$H7PB)kg2g$L6A!3O_CuGHNj|DPP<1U;#mQyN#G#m5dLKXByG z8N>nR%(;~ESl-MH3l8E!)gvJhN!{~8%`luTrYTU=>Ek#%Qu&$Dw}MGLmbY`m;&-4% zo_b!WJAqW<9tp4)OaR11P`C%b)h+TU3a0W{-pvgQVtnB^Xj2k#f_Xfa z&vU~Ph0ete2|~d3gSJFA3yC_z~H>VtrY38B#-6m+_1ozhrL=bt8Q9}}12K5!VssyJ15w8p(zK`=0 zxJk$|#!oO~V{V6gCJ2iKA4sh9`i$i>S7$U?Y#^&)l%UvVbvxcoIA?NTnZ}3~qVAig{6H zg%4$VLf*`nc){H~mIJwALHxsk^0P3CDCsVSqlMUvv23_q3MM*=#u22+T(SF8SUO5` z!-DcKhcgIE3868p7{rI(Cqg7OK^%lh5a<=%#8B`AkA=w%ix*oWuBd>eggQ-HAqYPV5r6m?xERlmI!NRbGw1RQ zkA=+*ivwvd-10>aeWq*}B&l#%njS#FO>BO88b}naE_i{*(kVAAL3)A-cY1)cFby1M zL1qjm4p2~ym@+L5hO}nRNtS3F`5aG-?q#r>P)+MZ5*)$UKuCn) zH6BAjZu7t%f|?50FEIRQL?2!=GXRCLEn!FN0ceQxuJhj8gq2uI7DI28c?f_)Lh<<%ci;Q2c_*1P3nNis77NCQW|hv6yqif|78^ zAu1hF{*Rp)r+p!fP{_361qY7c@cA-hl?8wDSS-0=!N!5uCxXVv6GP^m^n4~tg^>;k zz|e!M2`f2cE`@nK7TeKN-tWggg@Pl{8yh}uFMv0J`}ImthzR=|N9n}p@(NiVLve2N zKoJG3VuTDGxIhl`KsW)(925$orVfsuAD5$K+F*tGJeIDxVZmmO)DdM{c=VVH!aS+_ z>9A8m7;(rDk<#?#?uGI~B|aWes30AWZ<2K9KcApzm^*VOzTusyOn-P%=&UQ$OM0(b zh5K3g?`0L53eDmMYoSft(50}exS@Mt4{^hZg}uZLeG2=E8(f8Maf7eWFK*~p*k9am zQsE$RL%1*^Zip8S5jPAgJVo3vvT&5RVQgWkxM4!!L~+BE!c)Z!(+bPP4buxN#0@hF zXNntU7oH(*s41)!H`Et4h#Te=&KEbFRd}|z;k?50#SIq}E)q9fRCozxgo{bX$lo)< z6@^R1PhVYljksZ1;q~H%8w*#68*VAQRou{2*g{8u>yd~3{RnO^yhHr-hQf{FhPw(k ziyQ7O+;Rx33vB$K!iU6NA1!=L-0)=KR&m2Kh1@(Ei5vD8 z{vmESAeV?56%-rqkxNsbSY4WM!hSTNc;)Y6jLfkM*UL|g*md_D4 z)XC2jH#ExUiW?Tl7m6Fsk)JDWNXm)0VX^!|al<9@OT`UK73 zv>3`)$ZryNy;Z(a+|VqCM#@~eHS)FMhIR7w;)Xlro5T%w%kL34Y>_`e2ZU?ful#%B zJtBWp{PYuYeC#Q6NKeb35jQ+1e_q_MUH+1|;Z^w#al>nJD5T7nzA1l8-0-gaJ#oW_ z@{hy~pUOWIH+(7oO5E_R{5x^O5Aq+y4Zq0uiW~OH_hYRxtrLNG2NYuMqv)UzYaa!x z5NjVrXGKBVFH5(bAD#YqX(L*6tKZ;%ovHDT; zRZ#WQ#xxaPg-?t(sOTqd7^pZ&+z?WP#SJkCvI4%I7{4cuHrm#15sQc zZn#i!k+|Vf#pQ=t{woz%iMw8_xK7+~gJQY3;U>k+;)a!qRpN#g#cFZGTE*?+hV_aK z;)YF%yTlFmDDD+E+^>LE$q-@1LyCvR4UZ`v7dLEGJSA?}rg&D|@Pgt+al^}sSHulF z6}!X@Zz$fxT4ru+f?T|-5UUWyhYGO@QGBWps}RMP3b6`Ne5(+v5XBD)u?kWAqSz}Q z&_2cQ;)XvJe~B8DQe~dFflBZg8!SqzxS?3t zMci<_vb(t91m%h1h7x5Taf4Io5;u62K5;`(*-zXsP2FVZ3sJxM8w#inw8_a+p{y1+)GF)54Gqdhal?Ei z%#pTquJT;vdE%}_d4ag$Lghu`hD()~i5sp^UU`_eU#k>r5akU@u?A7zr2G&4-kMc; zv+@?@t;&_kRe6^xo0Tof)ymtHYm{r1w=3^p4k*_vHz+qM?^JG5-lg2EyjyvX@?PbA z$}P(Kl@BN%Buq!b$Oyv`<~YLSCto8>Az>7RQ4vN%7#(2@gfS7Oh)8!6#!47FVY(2e z8)3Q=rYB)eBusC@^dXFcFfPJ)2;(D6fH3{&xE@kItb9cIsPZx8H+tb9fJs&a>Nr*fC_HRbEdHOpVXFyy z8DUotb{%2=L)aHYAB|DIn+lvT2$N5qQB|G5_hI^u$H$@@`j$7=S5=l*_KhayC8}%d z67_un4Yf7p)qO|RC2AtoRdc5It*UJ}_^;Ag<@JfmzWg5}@VW8ohCU7Rt7bH21e}x~ z@%Ruh|Ht_H(vNjF^c`JaJH0wFr-A+}8{g+VK7`K4|I_*P9p6}0-OzVRRbA>Y*|@&p zaUp>I&*#SD8afA`=^0U8gP--;_&ZO&E2@VF6gFa5{3TbDOfSC_>is^fS}h`Z1Jr;cI60U#uQtOH1CnyQ+aVoZJ8Zq6Qnh93Z;_0`9?0%?Ml;#2Z- z8|a*c`5$b_T#4)<82KR}lwWa-Lue&(n$<#;m9fgI#=iJ7)YzDqQ`guwqgi>(2=7mC zC(M~MjV7kgo!K_xt~_Ey{o6;n`0b=`CicUrMO9B8H*x`Iw9BN^xYKNqIfTP8eF;B; z@-lI%0^%$|YvfIS+#)?^Ko;#BER{43HCzL5pKSrEK zG2`s14&c%DDpO24MzpO{?VBcZw7jwWFvg22#G@-|&poQK5xVU#dsLjq*Z0_U*TLy! z@-44C+hFMI6+VR@g0nsBCw^NVvhXmrnrbwU%YE!jba1-7{ggTB!|IFiJX&v=qVk_I zQN|v5RH&!$sQvB0ziI2cbp`l;_nDPpe5=ZMbiwx0$_?-iQZ`T820xO`Q_17*-(I-W z;wqQ{DX|q9%6#TkHB(hD>Ag-hOI4+stvW+ht(v2%QPryIRA&-qAYo1-%pk%HCQOJh zVZuZR6D3THF!6P&21$2GH%T|ueD)pbQv7+g1TNnYWPS^h1%w$&^6HaU(!Y)8lfkCa z+PU==i3p4&x;NLtU{6#hU>?=hlqrg`e>tmm{s?@fb540(nWBwv*W=gpRgv0xiF%m- zWeQuHuNYc0ud1O64p2i|Z>cU{SUa~dwxBUllQMh2}QSs;$RhvVTp@$9QdZCG=gHB73#w*O%7~$D12=ND3u#)uqy1 zO{&WXb8>P8-*AO=*J|lf{(o3_{(mddK{M5Lsv9J_X4Nv)^@JHlm{Xcn%T+fLW;kKS zCVQ7D?4z+1GwW;T)>Mv7G|a7TY#1(H8jL8KsBSFhNq5LE1thnsnkBjx)k@VWRTE)G z5N0G{MzyF~RIBs$5oR=D#w35F*t%yea@`^5OTiyl!@fu8IIebKw5owVnBM8D6ZK^Z zYt|DDRh5b9<@J5$S5-F7+M!yHwcC*Wz56rm6|e99Y3LVsj`-xVjlYCmOYYgB+Jvrm zWp|zTX5%Yw-Fr&si#IB({9ka9I?`gsp zW``$gW;V`JY6b`oJ)(M?K4erqmi(PC6OQnZ@WeB!9g^PbRohh0s-9CluX;iCqH4S9 zCDqHSS5&VOW)fj06J`owP9@A~gqcd1X@n^w%;|(FC(QKqs-0=MeM7Zd^``1ANbWmS zaw`PMok^Gm!ZZ?QE|uPS|NEr3=TKb!nNmTc>l5=37NNQ_Ge@}>)p=?eBwpP?-BHaD<_yAA6J}0}npJaD;%f*~`>#v9S}u{R71?4epT4f) zru&D5F2Co|M`qXWx(E`lR->yXyKCv9j#uCL(h%RZXZ?Qpnft!0YL$4kUTwl6s|_9U z33F!h=VrB8x}7lf$s4mJKG3o2pgoe*e`yk_yQsVJ(O#wW8lkO+`oxqvP@h26!F;F# zwVCRW`m8q!PdL=58d#@xs$FWg+N1WWeQLitpbo105oRG_&LYg&ggJ*W=Mv^T!kkZ- zBw+|)E?B1?z-t2aVAXDQSkg@$rFvkIpa(8W>49sg61et%pAu-pr1-zQg{#Lxvel)8 zS)7(^^#n+^dZKhG1;SjIyfXD8xkB-+K{RIYH0I|33Exadb+xTFqaZ$2^H!i z?9oTD#|ubisn4KDswh)mMwz;rGWF$cG4+%(;h}ow+n8B4T>iOyg zR1;i9n5+MNO>jQMJDDxs{_iIn-1~;gT1rnIej1Y;Pc^|JbX}a?wSL3v6SiC9?_J;j zhM$*7nl;HiinoOoxI}$9FS(ad$-RzBZZ(zM%MUBLSF4fYU8lZAeXaUB^)mJK>KoL{ z)i9IUfd2{J+o|Z59;C*oDZ;cgCXJae{~^pn%^HiwN|=WU^H{s>9Gb40 z?i5Kkx^p~&okP=u?i`P{wR6N@7e-d1akk+#YFrvOW!T3F^8{ts9U8wxt_fsw!iDUm z*I6P%bZdwD=3FuD5eYldk~(G1s&(2UfK(u~%O(Tvq#OMiwi+X(Y4VV)z* z^MrYUFfS4YOYst6US6jepCU{9kC z;*Iu`o1|tDMM9|DybihPpvbFB?oA#zEbm>axdJkyxlD7pW(i?-6Xs3Ayw##vnzv5_ zQ|s;IkA!)L4zJwA5IO?M=%Op*Q4VsObJ2jg$cWE|j?k3C!g!zy#9}(tb!hAxQPYLrGVLm6!7liqeFkh|L+?$rz z2Ra_m{D($6HIGo4{aTROZ;2GP**-81z~b^Tr1H^MdfhXj#@S)_gWd1 z`~62)#q<(t3$zC8(%M3;T&vJ3wJNPztI=w;I<1~C2#5Vem;*#6Au=hEr5p7=xvDQIkTv~{= zZV0i~qxDiCvQ9*H9RCw`?mESB0=)-l2Z2Mh1GOg+Sw4{!G;0TILqt|cWEv{W?ULxw z#^it-+Q+&o)M?K?wor-ooU|AxRlBtpK#Uht zF)k9s*iL;c*$GsPPo!d;^0Bm+P~N+g$SeZyEup-3g?1?gBC`^ijsHnw?(-FXVU)|X z%PI3+uf2iDiixaCv-U>q3L@)DWZm13`BrLMzlHp(9nCHLt3&$_&gAA})doP{n z-7r{XJz%hE?}MW!>)Dp0H{^At^bBEv9@aj_6aG<3_+FIo_ff{_nZ-E56HjY#Qed6- z8SOUhv)bph&ud@MzNp=7ep2iLX4BI{IC zY9o+Zot8>%v<<0MT$z?Xompp1NvzI7B{mL;)oH23Mh_>kx^B9@kXYUEy6(Cjx}Lfd zbSLV1>3Zu*bdc4Pi3}U&Fd{pJ$c7Wy2qGIvWTS{|G?9&2r*rTUtMha`Kz%G-fJ*FG zL1M?j$4WU^veW-7vF$Ihx;P|OhjSC9X^GVhJCele#^}aTW*Vz2C9?5EHlbNJUN?cr zCKB1yc9U4$sk$;qtnM`3RNXWpn?z)jiEK)X?sQ!_mDp2>?6iMhVrM}NtFpy#caQI% zXx4StKi)dz zw!3e5uFH-MJ&Xt0WV`Map5iZ4iq{=s;KHb1*L?_zvmJH2*$ynj%5?AO-ep;qV>^+& z6N#*zr(-ygnqa?>gN_X^MZQwd%frlKzTPe6FCR7pC0e3#dI! z3keXu&MtIo$Smz^uYx%464>NY4nGQCQ# z19!3g*#Yc8k_V%;AIa)Dnc^>f56WMQk1%xMi9Y&% zh__~%?RxK#4EKvNZTI#1{ydZE2k8gvLweMv=%bX)E*9AAaw5Bq$d(aVGv%}vp3{yx zNSWdl{ZR0V9;V18XPJx^GPr-2@jv0@br`772veJ&pNz%OPt;>OT0&%3 zH0!76u@fyNva8#VSx(niP$cElRJ#(Un!b{nYFD*kswtax3L~4XuW7@+)z|9lD6?Ec zWY_Y{(g+Tio6Q0GdsqGT+~8riuk6gc@@L;I-&1B;fUXO(yY8L*#RpSPjNZ3;)RSw^ zePsUJyvt-zd*l;$gU@{8;EQa?Ji4l;CQ+I0 zFHHMd{q>Y^*XhBWw-DK_%}heSoJiLZ*~(<^(<-Y_C|orM7;73&n^oJ;IJ~wZg?v&~ z4L?rdJ-6ytNpwy6l|8zxR<*F>jB0RB4 zkCVa2lDgDClorg#^pESG0PVI?v0NjFB{t`~iR>Oq#(Swu@`ARF3L1{zt`!9B1uAGS zGI|O`b~}+?$^V2>t`dg0Q~x?$$6fl@hzyIjzFGf^yZR64%H`|d zrz&|P(n$J`l5h?0%vw36)*_7TbN$zlGR+d?-cW!2Rx0uDz1dy6jlBEBf;K}Z|0kvXeMgu>`UyivgB;Ws)ej$`diY@J@H&Hnr@ldB&>D1- zZUzIT{`~^=A0o1+i0o-f{byRKZzuxw4HhDMAWeOP9n?1z8@f;+vImLmKm1Qn{{n@u z%7zmRy)iAriH2T8_Arq>(rhR(^dYiGiR=kV|8|Mv8r%jyNU1)geAN&z1gXM&jL05O zDNMsaiQI5fHhuPcp4M(1A9?c9p0{nCH+yv)q%?%kHJsgb&yIV0Zo6h^*+YNLS6trl z?ebRJ%@8x3OeY$rn*K>>dc#nv>9@9}>3crab?}L4`qvB89Alt=D|2GcOzn;<`HstdH z{pV5o&o?ZfKx8iv*^B&7(ElO@BMkC?x&4xvW#YFZBk?m|Z`8Ql@ zSVGq>-*7pV|5xeSEv0L>BWvxHJ)4A)U2DKmimc$jVY%T($~3!(>@}WgZUHCUn#~Em zv!1lf|0(kAiXYvUrS>I1P^M`@*XHc5V+Yp`yWrFjH@95%W3R-tlRkk-)+mf(je%GC zhLqCZeT1P4Pi!(!rGE@2zag#k4UegI=Y0sWrfA8~5jw>YpE^I@S3G==`?@ zs#BeBc+s$(0+GE#Wbg7nLG@D=VHoQq>9}?Lo?I-o` z8BigXWm6kIHhe+}_z{tP%oFenQ02>Ps{DB1`*r!VM?QS#R~7oNoOK>bz;Dp?+w87; z9-KMt_WOskTRwIjKm45J^n+5r$M6%+c|TIl`;?OJ7s`2`WpmzfYlPML-S8)U$Y}V3 ziuxBvcqsjZv4au!%N)z;E~A_mb)%Y(o*VU4)V~sF{#|SI{MS~R8_l4(v53gNPSf0I z1I=}-jKu(?KoUguP3q^jpt(m87slAr*bB2Vo?twY$i64CJVI3G>%Ep+&G%j z{I?@KBs?+EIQ<@wFEOU_ND4uFE))Co$f#waM`C&^f zjAt2XXv%oD@f;%ilgR#RHlAlZpU4gnHn06?z1Vn3TeQB^co}HTN(d|EX}uH#yfT}B zgVvtTe@=lai+9)I`gt@3TW-gqOO z=ndG_*$&v%jVrLLvmM*o)sJ586N?ySuRa$wlg*5SPjU|Y7Y|o2}I!uCVig!m=UbVm1 zou3=OETUZUJ-Y76?y4Cyt+r`=*u8ngW%D<@^uTg#u`SJA70PCbAcTtl6x9}7vl-u#pfC;-{lL?gQnwB0@S4fYk zTV78Jgzc8RH}wP3qf2v#sh6n_xWm-jR6eA#j1tAC~pUH0u z5cUMZo=DhUEv9~^{!|cp6Sjn^%cCy*{2wSf-C+t#O>uM`lHK*uiMzg9>KuCG#%^!!9`@#$eOgtuX_#pQ6~TPdaBRzLUx=V-6cs^7 zmIx}Nn-wO3Hsei`Qj%+$NF~>OgvW#@rkQa0?K)GL>2y=MX}YPxRB1|>W|(H0W)ap) zSRY~igarwLgzZPz{)8Ps5cFkFT4$P_mfRYx)l>(`t*4SZNRZqxjk&WUspO9OujICW zX4I6Vl1m6XSdiSsRB|trE~P-&5Dx0mABYp@O&5s0#B?PU-78G!5Fu=|*>siZYQn|{ zdrJF>?)9b>RCI4JEjNK-!2-`&mvvc zC|ZlWSTB1`0jCmu6BPi6OU(-WpAOJ*FQBTTa-@b~9H^ zdrkW&_vM>@qZ`h2%6?%VNz*-6Wh%pNMaa|Fpn zPUaTEE=W}*v6oQcO=UaG0dSl-NZ6V*$C(EliQ~)>a~$(BN6pw7>Ii#gvw4X5WWv@H zc5b_IoOy(KG(|F!>d6M^N%I)0CmY++llmdT`b{*S+J=K%{0u>!DwDirSeiprFjfhWsO;? zOn73Yc^x*=W2g=^uTKl)Ce?29W>EYdDvp;6;)v@88VGv>CI0e*!iaO(P38v(yF?Ji zhaimRhqX&75cUdM$esELuj_tch+ECi&{ccN{4`;)T30ojx0#;Wp8h#c~NK3yaW8lVv%40)^^)`5{zIpbJQx8RF7o9`NcMoCj<;j->O-MFP&iQH6Df-t3ui5n7DT<+;nuk#GEk@T1v%7xw zX!Y2YD@QgwIH+s4FWxAxJ4n7uis;=WMVC^(+d}zn3FW){+u}Rv*TU*tQ?!hy`E``$ z4^o;hp)|k$ur$A^Xbot73>TUdtxeN>y=r&SMoG7#O_b&j2{eB!rQDyT%AIDLc}uH^ z-ojCIFJT`Rh)!?eD0-miK?;O@gs_kDKj|r*Ulb<_^Lo5!D_x8yiV(_voUl(c7d=%3 zRgZr?-F{SmzUU=tJsollN72hg^coI!D`B7FslE%Od@Y-lg=G0hube#M(rX?2);w9U zV;`mZZghP!yX%}8b8qSQ*D1GceBqYO&y+O2dywky6unO;`YxsVGnDEdP^xchi|WI^ zR7yV-7U=V$uXw_LNeTZvCHx1J@Y@bc_&r7Yk5SnF;0bS$=pVP_NxE4&Qo_F|5dLLa zP{i)0gnzS@@D>h)w{#-x_B7!wxD#Wwr9isWQa~fAFVT3+OUZj_JZ5HkP8N+tk2zVi z79C+jPOi|riIAp>jUl}ic=DkPX1gBWA6Ij~V30{A= z>cei^MsB`u;^fsy-z|3~_bBrQ3JcWVa#D)umVuP$ZyjOm!V^(T9N(s}#0dLNlLe8d z_e7sgunbS#Xv)4@rkJpxWC1PYD`}{hQ&KUjyapeIESXtejT;*m;)@DpW%Fz6&%m{p z6}5E>bNIZ1Fpg0c>@>}m(UviUeV?!&G+RnhO~`)8*AS|ym7GZ32VPr0ghyJY@Zb)> z)Pb!TuFA(HqXNRomQ(4(rx5m|Cd+Ar{g}EL zO8&7l23nCQbU)oP6Hbh!+%nx#VX3qvEHeoE31L4a>}Q1ioUmUI_RBSvS(Ym4cIJHx zy=;s9im-oxaqX()HFOAdwe`5J)WlyHf<@qedGP55+<2Nev~glp!SnhM;JT3*+XsLXh`F#ma$1t?{-%qQ&EO_qg({e}u$2`FJNv5UTtk#RjRy+5KYgjZfnL)ZtxDZ0i@O}l6zYU< zx$D7!2`{_Yf)MRm)F|@@3lAPD>?@oo^zdg1*IKTkH{DvU1uUcbX-_I6&i+L8(r?g9 zy;H8gDsIz?9WY>+X?&2 zQSCs&(;F;zL3JE@pv|(`ayL~SdkOn1uR69sAKage;LO?L&SyDJkV~?yff3W;UmFAC@pDaIHezEMe{7N{E zaGeNu9N{_>E}w7(Yb^ULzo(SupHP}yA>oR6rO8?UUssw|*4hb*!HOx%o2-~J3IfU$ zJ#tf*)crgs1NaA4KRi;e%5b zgr~0tUkhdVgQS}kD%09s(jB^TJQO8It4TO|SB7vOp7lg4ET1N8FT!b?tR;lg<)Zwo zPOG;KyUFUa`l0+dJ>d)~)>qV zr|tfh^}Uy)%@_SP>U^{G`cSL#vqr2mdfUNhjY0Ww^df`9DZetsm>e|U$l97XJ~vgm z5T?tVBdb9xj;%CVM-mQ~6&yW>q%^3N-asl=nAQo_NmNWn!<1^WP9~ha^&{QZ)2#Tg zTH5TfmJzP_;IF1zk=p({6URE+dIptNYYmmwE`+N|OKTmK*0i3m)?4RGbgQim)<)}G z>pa4BC0sYc9Z$IKtE~&H3$15a&n8?C!VM(cDTG7Lq)g!wiACyr9DjHHeVL-0_@UMh z1N5QBR3pBag+E~)9j(ZfDIDS#QuC{Ueu0MWaBY8yhQET}dV%#qDy55H)NpWLzH7E# zWWAVhClGExTT&`4)aBM|A&=H2)+?+_tyfyFvR-YyhHxhm4)WBSaFC}ygzHN<$66|l zki{DSH$omEjZ_qAsSg*V^7uEUK5bkEgSwaq4EpxIeZTFqg6(i^r?6(Lt!t>pxs7nH zChJ#duhajYAx8?AQ|&OevV&%(ef|nuJTVCNVVO===w-@*H0>bzI4M6CkKgp^{n!Z$+ZWy-Q!joIDxi% zl4`qt(010RA;Mh$Y*TL;K5f+g3Qr*83swYInyoKVi8(1HF)vez8T2<2v&;Gpm6$6a zGZ_*Cae>erA~F09_5md3qk}uxU@9>~Gk37htY6ZBd~W@Ma3R8lo2_42zb0ISaPgz! zEJ)tpepbP{$NFZTSGtoY}W`{(_SJ zFLXVS-Svs}rUx4?8TnOHVy9#Nf1W>~mGrhe8$(H-Z|jK21~&wxx3QG;Cufsh>PVBx zmT!}%_{CO8`DNG<9ul6=+Gv*7rlW)%P6=x>+DwESLAdF3JrDKogvYG5?jWqqX0zLh zZCz|#ZQX3xFt8_%BHU=gjUn7v!j%$k+*(@?stRo<0(!%f#0sh%E-?X#>MeZnDJ*H|3~UT%ge~ z+emP+?G)Q^8_0Po;Z7sm)E3()+i1$g(+F4guPaX*F2b_4aS_%f)8}m}e`09ygX#f& z-`c$RcSw-!RCGNpTY{Lry~;W@MHZ}dPuS@A>H}P_CCtCfHk}uSaw-h;R)+tZrlK&4 zDqA%bu-R0=DpLYBhicBmku|5S-i91T4w}<;9t13TP;<_p@^war=Cm!gT|}AbLc+~# zvS9?Xa$=^-Z3x|D?ZmdLY*$lesv_L%luEQM1C_4NrqceumOkblfeFaKCOuY)Ox&9+-UI=*|ZTdW#Jwbg>)SR#JjiQ|;DFRpOj%m3Y_P zyo{}-LU%jiYI8Q#Z5y&ob=zIGyJ3&x3Pb7ZO}2XoSKn$x+qT#qfjw@!-}Zp*LEC?9 z57{0jTm#`62{)H;FskPhZowMcqqfIvkK3NGJ!#uYxP^qffN+Zlx0rCC%0<*Y@11g4 z-1vMI4aV`In$px)n-Z1L+KRc+ z8fChBuQpy^CTbg6GozLtB@B1bZ_=%NTWQtI8ibpLp4|`MGjkL?3F+OUw(W#FE4gBq z?Ug)lo(FvMs%?jDr)}5d){B`5cP`=1Ask#4Ql=Qze&0>&8rl|H^7C&u2*nDv-L|(8 z;Ih4Gdy8=A5$^nE=?2@o$;$|rOu8qg7kz>-Q@v=W2Ulx{xM{Bbi%kpA4U*c^zwuFg_Hj7%=H#j)>pQ#MVEluzO#KVZursmlel58 zZ695fUv0k;?h?XX)@=LTwx4iI2-gA`$-7e`&)XzDId8LF!pGJwEmMsCr!?vtYQVR_ z8W6(S`l6@x zgli&Pb1EAlWE6%XK5;O<*>Gw@>LYKo74og9OwiBYWqzN_P*tFYidJ9HHwXDW|rV9+2weae^W^{I;5NA&>D?#s2!vkLg+M=e*29^W>df4Vecl9 zOSjv*Pphp*$|6xYYC2U~4OAsxpJH%(Pdh%qsR3t>nA=#6Z^Dh@JC-IISKCjN-X*=8 za(0`)PszT$w{&BZy@YVflc1!b4?c-Gw+0ieX&72jThj-hszY9jejd&;G(0qdQmOLl z+L`qF2s*}ti_mp&_2a2S+-U~4yX_tk``Z2XAQZbD*4Zsh_I`xBl`gqFv7ioxSje!@ zC66}nLpsSmxXBK`XC>iQjp>t`ru1%mq?yiT3cvhxsRUGU`w%gzVfIqWBd35zM%YK% zN7+Z)$Jk*kuTJsEZG>AxIQYrfv+f|=y4&sJ?Bnedz$26FlkHRNu;SJeZUf;qrg#KS z@g~CEO}KlG#3TQ=`GS5f&z_KOT$Q|>U$a@MzyBSXge9xC&k-+KoxPq?=S;%g)nvz} zy7}x>TX=^8Ht*aRn-&9tLNg&<@IMIgoFI{v+d`I5uI-*Fp=y@ z!rj+o$KJdp*?TJTCL_z|Buer1`I?!NTZ2~o#4g6(BvB^wTGJo)%k5WSthBAk4w-*2 zT{>aETDpbrxm1|uGCL~yTI|=`Z?G>X+(U$e#qdareTDrdJLLXR!fhkm%hX1*VhCgB z)=+*%Zf$I$g2u^8D`p{J)^JJ!DK~Fh9fm`6$3t%MWX6>%;f4Hzspq=4^_;jrMIa2g z*}hiNd$qmAzS@496fF1{;T|X46Uoa~+i$nuVP9tlXFf@|rwI2n;hv#1GG%>3xAn`9 z5a-slOlej-{}b9330C1Fn&MAvw?4eXz8M^LxBZ@pBTM@(~jfL$~sp z=RW(E2_sAK5za)j{XWSu{)q?d_n>Fw&cz$@D`?NuYaU894yc^xo>bY|_-Lvzw&a(N zN^rwgVF{kFKSP(`N&8m&Q*;TQCERm_d!8=AHv6;o=j_iD?ghfVNH`cQFa3`$0aWi; zX{r6yWObRMrvv{5oGwR+!{PM!Bhiq{6$`i=&R7{=U|QQyR$f2H=h=~dY8QQKVCB3< zzR0u$!csM=G@7b7#fK>?60`7G%tU?3eEPZN+J=7k=%dh9mTnVX^~Ny`;H{jV5|;lR z`$v-Ax7pvdzh{5n{(=2N!o5PcR|&U+a61XN>o)tx_D}4e+CQ^@PPo?yhqU7xgxgKH zHz_5KdXdT$Cmij1;({YEPUb3(ruDp;ODGUPw1z@snWA6N9rFadF=vU>AMlrWd`@Rc z*c0`YxE;PgJRS%}{mw|5iVanB=2n;EL!CS^|1kwq?Eif$r|Um%W&a;}nYg9Xq^Dux zrUm7fRAcnd&-%TNR6x4%w^U=lML&h_(X=-1Pc>3GQzB;DDm{M{a}wPh_5;O|Vrg++ zafjlL#Z0lRm?hlXgnNf@?-K4k!o5$p4+sa^enhyB?~rsaK2FlD__*SN;=*Eiu>u~h zoN%8|@AebIeM&fFLP6~>sHZ!nsv%ZgHM0ta2CRz4lt0tT(~UD~>v5NrF0*-P!^En3 zcvsXlQt-bhjh-^0yuJ#zMIG`A!RvzM%=Zk{SInwvguyenJ~6rV;WC9b6GJL1LId|% zn4!)q>JyELNe6ks1u=}^GpziWO9Bo@JnV5eOJcsDqr@8z#Y)1_sG}rIh1=_Q`9cxj z_>@?mCcMMt>*JVGmEu9Cx3?=TH^p6wdq8a!cP;K#e0(uta9t6Ij<91YZV)-NU`>S@xwtzV6*qxXDabsbqx zq0XnSIzfM3I(N<-l#cK_Y-wUu~)jKrPx>OFNUG^ zBjJ7{+#g9{KP~QGJV?^JrFcN`z~Yk#_Y>g|HvOfgcyMv3xF_NE67E;bkxq?nd*Z2y zP>-&!s;#eT#J<|=$Q{Gw6=#$t>dNa=BB?mx$h~;wdL6ag9gbbnybc{1 z8GGEMZm@(YWhQqkr@V@PjqBD}TQ{j&EpMo+B+`puD#=HdVwa~DKHuq8uG6^s+S2a@^7{%MnHxaj;V=pHAAOC#gx zK;nsVs!QM;;ex!G4H;bwLYMJF$J4U7)?e+=6`nM>X;88-siC;TF>`Yy3RS3Rjt@yH zlPZeUjJFGKrl0?=tv~2KV#2Mz9k;M9aqu?^i9)tx+AUp=62VM#)W*TO=zbcS!D%JRsRBd0Mhf@|@%a$#%&u$%m3Jkl6i8+DWRA8l^>2 ztJEefmUfj6kVd3arDsXckrL@5>1C)tyGnYE^g8Ks=?dx1(p#mgq+6tKN`IE_lkS)P zDLs%U%j=ZaIjyEJck-pzTd^S0zY zl=o8Jt9hT~eVMl>@29-qIuvwJ@aiK^npPtf=|9tdbU2=H`%_kM@#NwuQ(LJ4W4OEp zO{YqhVF~HK1no1mxDvrjsLrzD(~D0ko?Z;=7z*@H!uaqFV(7Dj;#JDcl~WAj0v539QjSOQ)%Nux)=RT&vEb!Qa!s4 z=J>TqS^UNIDf1+Dg)$hy&akysp^%IN3sg$VB?~2X{A|Qer=*|6BMI31N=8dY@Y~Nk z>6TT=rFav4n-S0j&>P?c^aBh6i~&ploCcUCk*KNx^?>sM7Xz*V+z7Z8unN!&SPQrV zumNx<;5EQEfPE5)`Zz#7pb!AUt5pD8NvOun`f3Bf1n31Q0rUl6ENVBv3-AMifc}7i zfboDzz;%E}0Dnm&8arSBU?N}=U;$tu;3B|HfLj170Zo7wz-<7GSA+3t)&n*IHUXXj zJOg+Z@I2r}z)OHv06PJglV&&IZNR&LJraqw13(YJ6?@u~09ZSG=R~4C6M(hSE(2hF zwD$uZ1Uv-5xbaB~iS`M=R>0GMZGh(hF91FOd<6Ie@EPC>z*hjQr}jGl#rq@RXTV;G zMAsF7b<%-ex*EXEfF}WXj~?UGcL88s^a%idudf5t0~!JI0HCX$02To*1Yq3yO97y* z{$9X#0LFkDCnb8|)Bg$pT@87F0s!b}z!(fY0ic~>IAAgW<1t_@4CR0d0Pq`<0KD6< z25>uI9oVo8Fbi-sU^xKmV(Jb6FPLHgyw6k%I0u07nJ_*R-eI~Na0TFc0G`9W1`-qI zZn_nKv74~wI7u%tVI55eBoZ_D%-jP2TA6zT@P0GKYX+~G2LM1n^I!nxS%kS2sR3Gm z9$*BR0TzG_Pz=DFi#z}yAOL{;6yZHZcux`DQxpb70dc@=0LEH$AK(Xx#DX=m1OaCP zZUcb#EFVcERs#UfTh9R82*5g7Hv+()*3E!>0RI6z40sgqIN(XZI}(YlBLL&H0k>@g zU^1W*Fav<~wP6f4;6qwYV!HrgF0MM<=5Wp}1=+|W=pb7xK>jJ*(GEXAu+6#bn>)IbM z5P)%a#j{aN+UQmaN6NrhOkTC1muqSPwq=^xKuH~GHr`+47A?mhRO zdy1Q?=%y+TVhArWA9GZcXT^{BgwNQ3JFd8i&1~T~SGgAiVFj?uu=2iOAUrdl=fqAV2%qcT-dw^A$Q zT1o9no&EVg$Z7Of?F!ep&P}{q&70M;kd^G@#0=FRCm-^w?%nG0s%|gUCn1OGpYa9q zuD+YSe9w>k%wdjjj1#!w>iVc|jv6It&sZk#BC@C7vHgm19-2- zIW7l5O}W?9Yt6#=o@*AP6lExfoNC4*lbY()ly}W}EaV*)^B!`qxsne^;Rg44z{4P@ zl?~a{Qm0lCo}er>Xo|b4C8t{Ms#Y7?;?8T?M=iB$b*3wBtJY|q!adY_hUXa1L?$DP zS}!w$PmpD;3;gB3ovU42&D!w{!td19f9=oMK^pR}eTx5am3x?@wmIs^s7@84&|94+ znaXt3tfOX~nY_*{wqv(-e!<&yyj@2>b?ml|-PXB;tm@oBojU5&QKxPJO3;wT^kD>} z7=!)SoxrQS#v9CL3Cnm7JE{8x->@5ZR#z`|e++_p;nbo9@~+pP;XKRpynsCF{eYh9 zWuVu3cY`1z6V<7MZ$Dx%!_Z%Z{vz}hp|1#iMd&L+UlDVe&ztBg!mUKOm52{&vA6D%7g4R(-YVr*b(6 z8sxXsc_ZyVGL+I(qXu>sDfdYIM#>;k29Yv|Gc`HhWQ8J9`hIgafT$G!OdK&pexsj+B zn8=GvVH)y|dWBDrL(~QTwwqb%g1 zIBu*_O(JPbGuk4DMx&5Lqw$!t(d*1&4sWs$H`8b_tND_zaU+e~NTXB^bA)4@;tap? zUmxagWab!|#n^XD1MDTH6LuP7rkH1V4q3;TBjz>q5Hpwgs2j6}jcno@wqhSK>c^y! zj`}fb$GFRw^ISsxn16yGRvxiMDN7af5gUt}i2*|K>jKEG`5Y#JRV)$8mFU1<^xXDb$Ut zM>MfCK`wD^kV~BJC{8YMo$1R^p2fc6^cQDearPCrfQ2k#Des~0ICmK*r?{{98d=5Z zKTiK~JJ`jwAZSvWL?-efM}im~kO zma~FYs2%TCF6go8XqNH?o5|p25H$04v+8)SSzo3j$7XtN=I5KqubG~keSqI>whlQqlVdaQ zG}}TNW@%=YX8*nE)|%bL-NZ!W`7ZYHBl}6g49$PTy*2-x%iQ1=|8NgIv{1W6QL0dvI9k#g^;@*3D?R9i99r~e zIL|YaH<-hG-r^mWV6QFS$9=VsOAEQQ_?mCn$~JbO{}#Ks9t17R(vBDTm}5cEN{_9g zXolUj>PRO#{`vj-dZg{cCBRBYBk<(^%-ke#|Grs>L9++ zR@HzDyD)3QUVh+b4)6epcGG%4smP?Y{@T=}5$12>R@yX0rfvL88@Ju&Q4l0% z;xT-)iBC|K7U(TeZ;1oYTjCJ(lsFeXCCVyMUx{ufaT(rCw5!C`$SzTKiF>f4MA;?E zE>U)gGD|$eZ(QJaE^~!@{2K&LIcTe|ws|Q)VTw|LFe*`n2FSOq9k-3aZrl3hwn=oL z56?25iA-i1FY_v|Gn;w5$=iIvI^0*=FWH2g+kVRq%+=OSv^7^-bG7{m_t!2fdTN)* zQ+TVLpKWKxq%4%j4w4e^Gf8?((qmE&>_2HR!x+gJ#^U=((tpx)^qZvLB>g5WU?Gc; zf6~{SKp#nea+T}c<_`CfYx~^Dw0%kR(_WVCD^rcS)JLA}<=I}I?e)}NjrQhm{~f8= zTl@1|!M-}=!J8ePpdxjMAQJC%aC;q^&4_b6aAzF`@H}$su#tn@41$i{ z?&$4~-tH*hj@7A!8XeW>s76PBOkxVtQM=Q8d^?@qVKE=_ z32Jv*!&bK8);hVLPAU9C8i)Cn^IXKY)9Jt7?r@)nL696mW{OeE*|{)w+qnd#C`$#xX+;~_p})@h>#V=dGViRv&NA=Z58qB_ciP#$ zJCDS^JCDV;(|Hb`v6*8$^1r6{c9$rU@bg`!Vva69agy6X(ABQH7C~lRW!BZbb@hF8 zt&iXBYX4mu6HjyW+EtESyCT1?`s?bhyQ}Qa@AULLJ;!7JJtw1H&$p0OPdo4VF7LC74{^giKW8oL z$?$&;kzKFhyhln9^fp89L}uV;dT(bhKkzgE{Y*M`)!Xm)KFwLKaEzjZ+`X;Tqke9+pZfjO@27sh6Wroq z5cCfr3t3UCe?AIOnlRMruTKA(xX=EPL=#IK>h+(_YSyrkO{mjCbE*8XPgzaRPb z_uckadq9A>2Ds4yRjEO3>Y>(vrZmTl16rg10q$YIhkU~4ti`Ses4?I$M={@kQ`qf* z-?$wF12bc`fdwf-F-l_2f#opYK)W0mff)yyaiAFonsHz}y_n2WcH!-TcJ`#~p3FgR z;}tju!e877f+1!eBDW!pX+{eYXh(ZGVYVUa4;jKUOhlGLrtvawFo*e=b;v@@Fhq@^ z`H|(&a2nDG^9=3CAiO!$n?ql~yFM2(>#klhM8}e`G(D4E{j-#9S(aB zyBM|-dl>d5b~tPcJNS;he9!qH7@iHcHQe0}FG(rN;~O3B`x#z^DC9F-{=@Y;T(85s z(4Bq^WH3V+j$VgP>&s|KVvI<|rpQ&99up{)gY^VGxW6L8c>e<0eKF zK))mOJ3_xBDpHNw*yD&8;)tgW-RMal`Xk>FdL5z15%L`IJQMgk2u7+k(lBRiw!$R6~fFY1nz(MXw$T+VJT1i`2rxQkKp z95s<iirU+1IFT*x9HbILIN=k=dx@Wbiw_n^Avp6Sp`@cB5oBIv^BzjCN%v>u2=6AQ)4E3dmzjGg^>@x5tdZn`2}< z=2d3ly)pCgH)o7D$1GtPZez^mAQ(H0k@(%Q@)-LpT&E!R`W65A1l|f>-iG-j+O6N`HtO*eT?15kL)LvG-N&Y7#W=ASI%>ZKal%a zxsR3m*xTIY0gr-UTqYhPJGpqA{J7n5MJbNmj4MNV!l+C&YEp*?B8euJCdheQOIl;6 z8|oZ}+@<4>+}gInC;J`aQ7=@7Dzjhy5m z9|b8wF-lUJa#W-eRjEO3>d}CP#1KbQT97~@Npz$$-RMal`tu}17|tl3;%T1a1tu|t z>Ab>B-e3;%d5d>g!n?fBDn8^BK4&c(_=?SJWjnjr!}t8e0e;~SM>x(&&hQ%-_?^pK z4T5Kvvy#<(%xA1&Jzw%QTiC`X8g(ymKLMcOe!l+C&YEp*?B8euJCN!fZt!YbpI?;vh^r9~V7{pLUFq*ME z!}CnwMW*r+GkA?z%w+)!S;SJ_V+9}Z5ufq}>)6O9zTsPT@Ev>kfuBj?Acr~12~KgA zb6n(q{K++LaEm+K=V1^$A3_$gk&`^+qaZ~nMoCIjj*3*GDmAE0JsQxE7~*J33lc~q ziH>xp8$Ibmf1YFr!x_a>Jk4{wz$B(HomZI28_Z!oZ}ARGc$fEC#fN;t=d5J|U$L33 zY-bmH_@19Qz%Lx)2*)|e8GhpezjK+ZT<358;U516!T5m8WF-f=$x8tW^8_U*MOi8k zMqMJ1<#<_+H|O|;m~H%GmZ9c&yBq&sokv0NLMD=t;|l{B#89?irWbz1t-O#D1QW_o zotoI&1bdq>gEvuUf;tmqIKjP4xQjXy)R}0WiFP-!FX~KGXX0SwIB_rPOjKv${veoS zrb%vNk~)*rnN)|Dv8PGuOj2jkBK|;Tlhm1{&ZLJy@M3#>ejqMxDv(Os<97m^>GCCaW{~ZR~0CE!3H;&g2I{Fr^(mQD=%eQwH!QyHIC} zI#YfKf~my`N1dtaOs&CGW~0tjb*8?>MQ)P+j0+ncrnb*8B^ zZC?;fcL&oeqRw=6rdMM!Z=lX}b*3-iJl9cYx;oSE1i?$K>54ipsq<1F*0BwBUQ*|! zJwfnt0ZLPr@`N#-S9q1zn8j%>bA@Z%2!dCd(Sc5MrW>E~HQ%t6?LjajAEBr-L!B8F z@a@ic33XGD1Iy2On@mCPM8c!1HysFNtUHF))9!cIq*A)G|yr`vwq?z>daDS*6ARa zU5gmhnXS%j`4nUfE9K4%Q-%u#2~bGY+4>8LYDojE6i zV6Ho#8;v@1)tPHQbKUve6{s^;ow@ci*PYMHhC1`qnfEyEeBLP3nWxUYXK?594x!FG zb>^K2g8A-zeiZ7=S7&}43s{ai^VOOEA$Njc!DFbiK%E7->B9)rS)k5>aqQtB>MT%a z!LcBCvkDDR=S_9qjAa&!S<1V-&kY_0!CN6@CM(?-#1MutlI{G=0a8f|f`t{RO{|14T1#fqxFZ~(FU^cUt@A;AaLGVr~s#2Yr)Zu03qs}|(yt9Zu z_y={~QRkh9L9oc3FY1jti_}^4B%9ccI*Zg<XR$hq-Pz*l%tf8W>MYju z;@`Q2I*Zj=?9P_>d%C12>MT)bi91{3@9C0VsIx?!CGKo#al%n&sX9yD+0v=ZMxCYV zEOlo~FLD!gma4PVoh?hGJL)V`XIVeiu$67>;JYArw-9A1Pem#*fmeBrH<-g&u5gX( z{2c`EwV)H7=}Hei=Nr^{Po4L62EpMRdqJg=b6a&?x^;slrYAD6ir1nd{O@oz?2Bp3Y%@MV-~^tafJ~)~6}WX-R9A@d=;t z1?z&~qfF!_KLshmP@d&^USJaL{G+2BCxg>L@Uc7pIEKbFp&4(piq(9?r#uLPPjZlp zJmjMfBN)XP?B|m`9OMw`*w3d`Xh0Ov*w3f)c$ej@zs>Z}iN=j;2T&U$s$55}FZ--|ly z)mgtk2sV_WD(Y-dXG0xcW|dj*Xn%Ti#2RTov+pT`nw?5T!^x$vss^;F}h7LY;5a`KAY-^9|~Jqs})wgJ4SmN~6veb+&{t zo>x$3i#l6oahl7hvqhaPH-cbm9BoOW1MY0=hiv34zQ&z>o10>kAe1tUV+zxFi5VQ@ z0+;w7e+I#}SlXb@Hg&dj`-TiJKM36wWza0ogJHkU}ts;qs~rsc9vu`6H#ZUIyKcB!-L%OLnJD+N*KJ9WM*&PZNBo$u87ZYpV4>g-l$cOvic8S3m-XZMC6*pr3)sIy0%Jx?&4=TT>mI(sJb3#U+Lk2-tK2f^O@ zG)0}g>g;XJGCo0_z3S{;7X(UR9|H2A&JXJRP>8`ijXFQ5^TP!E;1B5>Ap-;v5e4&lyzu0#Y4h@ug5SjxLBXC;3J!Tu03 z^BCFb!4QTqg3)}-kNnI5?B_r^YEqlJ*w2BPEMyUC9dH8&+}Z)P4t#}P5A0?S`_S)! z!^r4>j1JiIfeW~)1HW^N+x)}bAV|rIOj7ij;=4;JiW^EPMhPlWnJQGn>?sYAcZ$4I z+)PRv+-FKVdeV#D^u@iW$T!8zDNpet?lENw(~x1xT;{O=Ii{E|#qLt?Jd?lkQ~ zK4vRF@FPF5pW~b$1Gk#?2bcMitK7%_(*DJ*9?Fd!91Gp{;z&Htg=ueh!d=-5ol`Y24-^ zyE|l-L)Z8VyE|l-!vP`K-Qj%X$6SZ)?r>Sk;rlymcZcgxmwMRU;ifdBId*qA8S@?P zg54b+#9)SCcZZ+DtcTs`;VDexCFU`o1-!)yRE=x@L^$<`pgxf_$8Dy!B!Mp2U%L6ydoTpInQp%H5sb%- z=@T$#`fJ!{y4y^jjeVxuXZkYSXS#i++h_V0_!iUcGu=MZeUItB#dP~jx6gFnW4doK z-9FRpGu`)??psW^&vg4t_dTZH3<41ZN9^;6@9{_$?DL5EjufOY_Iac{6$qm)W<3%` zBVvi8E$v961AXXAKL#*{rx?rAOvNsb%)rb?%zMPVN6dS~yhqG?!Lt%&^|wcn%m zd(_NFBeCD3_IuQRk0#Is`#su?9@y_u`#n005sb%vk4|6`uVKGO-@v>_mtfwb<~?fO zqn}~kqvkzo-lOI{YTl#fJ!;;g<~?e^M^ib-Y3%ptS?u@dHU8o{H-q3ce87inxuHE^>+A`GbGB!(HwN z!SU?mASbygh8-U-fju9uLRG3!gJ>ENLt_$Yi<>^)p5FAqO&{;iXvXjqr9iMR1C!WKO zPuTGZH+|w&W@5)D-1Lb>*zpN>eZrnke8Q)=>l1GJ#1^*Vu1~n>6F;*bcYVT5pE$`W z-1P}Jec}q{J>jlTxakuQF>{8QGcu7EGiR7NqabB4bB38SDo`6UXP7x7f_TiFVdjh$ zbi<X3pr!lbAWf%o#&@7Bgp5+^<#;1>Q0{Nbn?HO;LX@z&rB$C8OnCHwUHnTMd&g%7S1@w2e z5>=VWLf%0}XJvHuJlDC2U7fuX1ivQJpMm&pe%05nzhJ+=>fzU4@q52D#7w^>(1v!X z{o4=x#C}qP;9Mj8%sD@E&g|#Rer^Z;>*w6hId7jk6a?p^XhAE?cizvQ-+-Szzl+`M z3xW$Zki&%-8sq!Funv2?;Ab!R*$aDu;G&iR+nUTNmiF+bxAhAyN%zok%Qb!#LxczI>L`JF$w5(Iy=qBC9TPA|;z$3bNDM>@xX;Bp-DxjXA?GKC95%l~1taD|U9p&aP}`3+IC1 zYGLZ*y{q21+L!(eM+R5z=BhWZdh@E8uX^{YcdwfF>Zh3Zs(G)P>8jhg>L#zs`l_t2 z%KEA~ub$yI&T}&et_2jOIA*<826J8uqcYW~iN6QeB8Vi3jwI8CZuF!N`n~ofgBivM zMxpm>X1{g-MgJ;@{QmN@f6e40_92JA{^Y-(xxwH38wA(0l7rmjr2zJGUGLY6q2KFO z@vU69ze@Wzb}biys) zFx!nuc=LugZ_MLOynDl4-guYgtiZl+Y~)*hX-gG-RKc5sc<3#xa*Qq#^Ua zpTNw24`3Q@?eA^a(cfnHdp{{0b6;LU*Ruqa+|w62!emq|HqB~ zQv`Yb;~V=Ylrog3B9*8@H4+%gEbQVRyZGl$5Zoz=8SdEUo#&a#OX&ZO{_o7k&E0vI z_gRJh@96)|r^x5dH*9AYdoatL{iJdbJHM;nyQR?AU47lHN(~~2L=SgkaASA%c~{N5 zTk+mqZ`_s1-HTkq{P*(W&3oRwXWo0>z31I~ZueeI?B-rQn$m(KI?#uK3__iIqZq?D zp5Z0tv6_#uqkHnYx1KNgnk{T&C%ZXD2B&Zv_w4YVe(%}gJv+SjC)c=+J>L7T|3^V^ z-?w)^3wf}|`^6|pY06Q7FwAvdPWKxkqx*3*rxk5z%W!5RxBJU+zxO}j6YS`|8SbxR z2j7v(5sq_`GsyS;|IqLKtGK)ScZ1+TR`m9u1bTWNMjc80fW_T#Ohh6A~86KM9p&NPFk5Rab zhtD#e7nzD1dH4$Ec(@mRK0L|^PNKJm=eU3ycz8Pq9%UvcdB{gWiW5p{%Ax;9dU^Cb z?_+n5Ht{1rBa27ge)KoDgODII*~v*B{0I03g($)kgj0_;w4(#bbfpKq>Bm3@GmMeE z#0+NgIgr>BoGu`NkelzJelYTP|jhVAN%XlU*iOEdkW%QWkHS8(N9Q2#z3-HWtdEnAQ0yVC4io2<*wL)I0nLZ4aH%vKujW%EWhnPh8CC(NJiX}p=uo7v2p z&AZvWn{7UC@-~b3h)>zbSA56!{D?Z)4swVi9ODvhA$tyTV@KKLmAx=eP=ZpFr2^qJ zqA^WyquK2+yMD9VVRk#r-kwf$#vZflKf9aF?w+y_Wi0lX{YC5}`%BDVCT}pCCCDiI zN>*d0>~@-c9d0mtIyZO}gyhJI{&VO*hyHW;#&Q&+Bzn(LhRV2s90}+%ha1b$pJ#Xu zJ>*b7hx$3x&tX?N7UKKOVP`o$<}=o?m7T~o$6kIywmDLfZ;rEE2|{va;xV$53-^;V zKZPhtaokc){pE}xl7`4PXDsr~*^CynLf<*tlEg^#nsY5`=DZbzgq4s)E7oWZw|%YEefgFl0i+_KGGjVR)1ir#X|G`F4S zw)5Ow=td7@n)@q`;Jw`cz40gr$rD0OWRRx{-pu38JZ8>g<~-ibW8OUG&12p?=FMZK zJpCBOIP5LY^Gsqg(@-yuz2#YsIrDtY7R;MxC%f6lkL)LvG|ZUCjCu5z=PG}3liS?k z9{-~E$MybrDPri4nvZ|P0j>ujdGk?|L^>mjyglj7V8$?(r+F4L@VOrvh>+P#L=_(49W?V<1B@Ljf}su(JY_nTGuoSjZxlBG&?|`565c&~JgY zY({?tj-j^#dMY5}f|+@Y0u-efB`HgJ!l*<8eES9URj?O*8NeX)R&WHP8Ot-cqk^-T zi+vY-6MYucXF+`y)Mvr>S%rQJe#Ach3_=RoZy|jY(nq1v=%tYT7OIQA7K)+~jcGzt znq$}gbFxDU^}u}>(qAF{71CcJ*%f+~Px+c}+0HK1E%XCFbAXea;lEyPa+|w62to?W zt8i9wkc&JNK~{zJRyYzp6>dj=2BL?;K0`ukao2@n4URf{-GO2zeE0MH|}Eg}%tFh<=L< z#ZHTi;wkiBWC|}M$0Dy|w?!6UuSN7<#P?9-DChYf@+)!`Jr>bp5j_^sV^P@^%}p`N zAiJVrxc#EFs7rlhS+pTdX^$+6>aD0dD>{)m%wsVhvXM=E!?*0LH6K%=?75pLmy*tmb3BU>#~b@fF^GB9&uY;CC)#?kBEecK=c>q*!M1 zQ5bcK6{j?1set*5MG#L{dfYgmt66_Zsl85R41pGn~$hdF|oikYd{A6(%tZXv5;_xU#nDQ=G9F|;O$ z4kXi^p7g;C#r0fV&&8)OgV&gazKiR(xPFT-MZd-0=M(f-{73XwTu;UAs`%gB=1~w* zB80~&h+IoNK`3%9Q4YD5s7oB3>4u(4=&3}1o@5BaapxtT;%R2`268Q-zY=mS@fPo} z1i6-2j$BK~wZ!MFWdmQbjeY37#C}pq!welJ26U-b?Deq~1#oV+7AIjkl0zN&S`7SIHgh!fs0*Lj98JmpsK; ze&akhk!#6EK}cu_at$qrTtlBAl+wsGRIZ_Qk!z@2L%Si@P`QTcEmUuzdJC0ns9Zzk z8u~PH4V7!CTtnp=D%Vi`hRQWmuAy=b)pzI$R0|ouBG(gpBNufIw!fwOCgF-j1p9# z0g33XbVuY{TE32^DSeKMT;?j*xfz6%F+&;mP{uu!X-R9^(jGTk#?6-L zO<(k1M&D(g=XGRSMt^1WRpu+cW)E^KBgZo8`=>C4lu5^a%behU{K;J&1|ekwGLxO0 zoyzT=q3&T-F_z zeH*!!bqi(R<0ICwkxhJqe9LZUCo(RZiu)*g6!Vll!*96VvX_F8a%LzOPCcTDr3uYw zLp$7UxlZW6oW9GAU@}wDUpal1`-IQfjBlr$9hXzT-1q#5{g#t&xl^3QH&gBgZnoS% zJm6svQa%LvmM=hQ^i{qA4e>3Nk3+uYeF5Tz(pEqP$$oyWR2&Sjq={h?_0{DW9{3t?Xns`}i62lt0KJZU-S13Q`7nR;WUC zYN7uM`mdn>3XPF(h1PUsIQp&dEcRYuA@87%3No#reg*X_Y{ZT$$hX24WLjZA$2pBm zE1ctZ{y@GJt|8NkxzJa|@`O>DYSg3-5kzAD6=Uf{7rN1dUi4)EgOGDYeOJ_XMLAb| z9@$ouZAIBuoXLFN;%(e)McGz-m*tqL;(EU1Yus$b9k`c@d-yd73Clu$icpLam?6vz zVHJ^aSbd^!3t??(kKV)d9@d+F3`EaidJc0BVR{U+?=brg(^Hr|hizpWdI*zgn4S9P zOoW6TA%j!MH|#gABh&DL=q+4t;Uy_eIrJ7@iK^6~Hu?*9tKn_XXSjO}cdy~TC;!Zf zkZ>7?>o>eF{h7?W?7~hfWy391>VO$4%|(WlzQR3J(tjoWS8|t?Qc2@5M>&oeDw&~@ zyQp-H8{Fa^{{|tI12Uoa%JJy0vJ5MC$L=fZtMXumVds_Yys|zjFUEIJ`A@u8#T!)$ zQxvk75l034DP7P3(VjRW@A@X7V-{DSjK0VyUGE6 z!LF*ZCDYGWA3v*^FtR9<5ibC}PYn4#JtR`V%eu#T@VOEo*JW{1_zVkgyek{^9l z*H`u8l%)dURHiC2tuC+XAK|^~-l#5<>TaOAy;nDX_4|0UhBs@Nw}yFZc(;aGYq;GS zr6@y9>JWjQ)o6)1Yb4_KYIMT>YII`=&tTRXX00)o1(>sjIcqHCJyzgvSq=Tw_?8{W zvc_)q@&i9(mo-w+ca6i?XN{XdNKL)gtdE*CC$W-!*ljI;BWlT{mVMN!PA&9bE1G7s zpcSn#L#=l7q#y3Cmi^TlfqSksmZzD=Ms}jVTHo^%daHF1z17lNt^exFw$?2k@F)nW zor%ZDOulj$wj-}Pc33BkbdGU~vz$X-b>&mHB6d`_0S#${8S0v$ZVOuByQ|xSA=ph_ zxz%-Rb$wrTCo_$gnSs9R>b0(0tGgb%tE;EFKXQ`OT;>kuzKp2&Xp%=2N_YU7+#(Lha=k0obag*DqQBREsH6r}IiO5GNRj7&CBO)++gm)w2 zh^ILn8N+1Wz%52BU?EFbhFwIgU>(~?LoX5Xj>tey5x;VtOZ>qV^jQBfvSa4@ZnXa6 zaOyvpm$Wj=55Hmljd_xyxgZtx3-IKpxC*g%gB^w{76_xP7bK}e*1N7{E}R&tPw zJmjMQGL8&Iu94-bNDUfbp2!&DkZ)vjT4KJ)F7%`i{Ta+KMq<85cM`dVt?Xnsdoe?# z86ssId62W5<1hX}?~!_s3dn|=h|+JAtfOQdRh)427A5N_JwqU0MT-zfP;$v5gM*SX0p^ckhksQ>zuaYGq5 z%z}&?y5olWY$(@;Znt4E%25@$HmprOhW2#A-8M2?qlqkHHJ_vZ zM*450|3-3cB-cjYq4!4nNaZBg&}Sq2kI6=HN}`7t^<&hJQ9mYLOHmg2##W>f5j4a+v9gVoZLDl#WgFX;;kbp^B`jwJAMgog zh&4m(I^-HF*I0SR9^p80jXlFf{>PtO~K#xF@~o#~_BF zr^X|h$V}c~4)b}7w^_w%KH}3LBrY?uh%3w!s2NuVS;WaAE*u%eJ;O9!=2c$D{Bd*f zW}I2$>?m$0yRoCVAK8!Ds@NN_DHrdD~zTsPZ zXHEY5o%=zEe+yAad}d@8pNq%IPeJq_AC0}mcclk1izIKjU`NYk9?vuPoU zQXDtf)V`aBQ<X6iOmw^=BqsYY$oY}SBAG$x*Abf6QR>4xvG*=4S94c}Yy@yM>Z`)lt0n(MFm zeDv7-6ZF#D9-GUk`3}Bg53=#k*9mF<-y65MgZ(yt7=*M4Aq(5cCt!S|Bjdr43yVFcsx%_OLoFpZayPr{qL&niCT6J(OGmJRH{&J*_XJwI^(c_bX< zG?(}Tca`uLH+jILAf$CB9wR$B(Q|8kwVuarenFi+aXlIG$NxT(=wAE`{J+`fedE0uktsdHTWjNk!>&>=y(bl_d zz1wysucN=Vb9oQDZ|l8wGHfSEJtpZf zNsmc+k!_OxlEP_-{Uq5*Qbz_cglCXNlG{vDKS>rzuON>kc_b}n8SXM^4eQv*X11`6 z9i-rXlFp*PB=?hanX6pqW)RZ;F=W@iEWXe7`f6W=>eQkx_0eN{S+;LYB1y=zy*%4@ zp&PPmuebJFIm5#sq(dm??9h}JxStO8(ZTO^kbj4M48ZIi%-&%bBN&hQJD9)2G<=&K z+*t=Rci4m(JM3gP^6zkfUpPcMM}v@#^6yxOPV~at9qqKEH#@${TYQ8!J9@LDzB_ui zqjx**<$Hc&KXU9;6Z`7a1m8oamdK)$EIQd=Co^>#%+pNg73{2&`{^`?`Ka0H9X{k^ zKIL=PvYs!|ODDVRq=!yF@H2MV=^*CobUO%1&P-0+RdPNG;;xeAom>Wg3zF?K*&dVS zpWGIGCfif8tdr%NJOMc*&q9C6`b&PBMJ(lA^p>o*Wc?(|CwV*aN&bVI{MXA}?gt^A zvy+R*$xk7QP#(9`xi0mILXMsN9q1g7zBRN!pJb|pbdatXjy2`3+HT2k3R$aUB94{h= zt{XYPZ(QRq^wU)a{w?1j-9pGj7R=sFoo)qDtDE<`g;Ry<)FFaM?53ML>Sm^HZD@!7 zyRBgz8~7>+>0W|L$gaEWy34M6Jk4o^-|g;qyLVs!cHDg^BN)wCp5b}yy}R$A``fJK zzxRLPG-m4IwtASMM{z1sl^QfajUHX`W)E-m@Kz5Q^_apEwy+!T^*BfxhxwKBT*B@2 zxPlye%B^Qk@{kXi^^{r9Qj|yCp3#`OXAI`3n-{-#&-VnWE%HLux`I_k<`EJnPm)`RUGbnvS zFTp;A-qbUg24oY=B*-R=MSo!;_9^HsOk)N!X{1Doy$JRq$SLSM=sCzKm}8JhFtgw; zCtazd9|IVO+KG82qmWB7nlX%HHdUNAaR-zA9K@NElbq)=w`ijsXHM)xVjq$({Hy!B zP)vKEZmMpoZfXwcP}EJ;P1Q}+O~*5Vxj0X{h28As2IiTn<+qcHneSx!&!(f-Y!1zA zU?=WD=DkecnOSA-M0S)DoaQVSxWpCS6^e`Ww`e}wdB8K?@RrZ~;8&p-%`f(%4}%!N zNX#xyVlwW3T!@{Hb~@VWxEPs6XN${Nj#))L$Bo#lxRo93Vh{VU)6q^xXNb-aWf5N> zxhge7ovw)rY*|BkEMY@|~aj=1-wm>q#Ab=}$f8SQ~=9tW9MJ_MmnV fdDrgqm=1iWNj^-9;oyPx9v8nrC{*1!Z literal 126418 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 diff --git a/sync/.env.example b/sync/.env.example index bc6aa89..f39de10 100644 --- a/sync/.env.example +++ b/sync/.env.example @@ -1,14 +1,9 @@ -# OpenClimb Sync Server Configuration - -# Required: Secret token for authentication -# Generate a secure random token and share it between your apps and server +# Required AUTH_TOKEN=your-secure-secret-token-here +IMAGE="git.atri.dad/atridad/openclimb-sync:latest" +APP_PORT=1337 +ROOT_DIR="./data" -# Optional: Port to run the server on (default: 8080) -PORT=8080 - -# Optional: Path to store the sync data (default: ./data/climb_data.json) -DATA_FILE=./data/climb_data.json - -# Optional: Directory to store images (default: ./data/images) -IMAGES_DIR=./data/images +# Optional +DATA_FILE=/data/data.json +IMAGES_DIR=/data/images diff --git a/sync/docker-compose.yml b/sync/docker-compose.yml index ca7977d..951b61a 100644 --- a/sync/docker-compose.yml +++ b/sync/docker-compose.yml @@ -2,11 +2,12 @@ services: openclimb-sync: image: ${IMAGE} ports: - - "8080:8080" + - ${APP_PORT}:8080 environment: - - AUTH_TOKEN=${AUTH_TOKEN:-your-secret-token-here} - - DATA_FILE=/data/climb_data.json - - IMAGES_DIR=/data/images + - AUTH_TOKEN=${AUTH_TOKEN} + - DATA_FILE=${DATA_FILE} + - IMAGES_DIR=${IMAGES_DIR} volumes: - - ./data:/data + - ${ROOT_DIR}:/data restart: unless-stopped +networks: {}