From f29bad167990ce15d09d35808748c1bdf4e27110 Mon Sep 17 00:00:00 2001 From: kyungmin Date: Wed, 12 Aug 2026 23:38:11 +0900 Subject: [PATCH 01/10] =?UTF-8?q?feat:=201:1=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EB=B0=8F=20Preview=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigation/AppNavigationActions.kt | 20 + .../presentation/model/InquiryUiModel.kt | 39 ++ .../navigation/SettingNavActions.kt | 10 + .../navigation/SettingNavGraph.kt | 28 +- .../presentation/navigation/SettingRoute.kt | 11 + .../presentation/screen/InquiryScreens.kt | 356 ++++++++++++++++++ .../src/main/res/values/strings.xml | 11 + 7 files changed, 474 insertions(+), 1 deletion(-) create mode 100644 feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt create mode 100644 feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt diff --git a/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt b/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt index 8e27e28a86..54e934229c 100644 --- a/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt +++ b/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt @@ -328,6 +328,26 @@ fun rememberSettingNavActions(appState: AppState): SettingNavActions = override fun onNoticeBack() { appState.navController.popBackStack() } + + override fun onNavigateToInquiry() { + appState.navController.navigate(SettingRoute.InquiryListRoute) + } + + override fun onInquiryBack() { + appState.navController.popBackStack() + } + + override fun onNavigateToInquiryDetail(inquiryId: Long) { + appState.navController.navigate(SettingRoute.InquiryDetailRoute(inquiryId)) + } + + override fun onNavigateToInquiryWrite() { + appState.navController.navigate(SettingRoute.InquiryWriteRoute) + } + + override fun onInquirySubmitted() { + appState.navController.popBackStack() + } } } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt new file mode 100644 index 0000000000..e5760d6428 --- /dev/null +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt @@ -0,0 +1,39 @@ +package com.afternote.feature.setting.presentation.model + +enum class InquiryStatus { RECEIVED, ANSWERED } + +data class InquiryUiModel( + val id: Long, + val status: InquiryStatus, + val date: String, + val title: String, + val content: String, + val answer: String?, +) + +val sampleInquiries = + listOf( + InquiryUiModel( + id = 1L, + status = InquiryStatus.ANSWERED, + date = "2025.08.09.", + title = "타임레터 발송일 변경이 안 돼요", + content = + "타임레터를 작성한 뒤 발송일을 변경하려고 하는데 날짜를 선택해도 기존 날짜로 계속 표시됩니다. " + + "앱을 종료했다가 다시 실행해도 동일하고, 수정 버튼을 눌러 저장해도 변경사항이 반영되지 않아요.\n" + + "현재 발송 예정일은 8월 20일로 설정되어 있고, 9월 15일로 변경하려고 합니다. 확인 부탁드립니다.", + answer = + "안녕하세요 애프터노트입니다.\n\n타임레터 발신인은 마이페이지에서 변경하실 수 있습니다.\n" + + "마이페이지 > 타임레터 관리에서 변경을 원하시는 타임레터를 선택한 후, 발송예정일을 변경해 주세요.\n" + + "변경된 날짜는 저장 후 정상적으로 반영됩니다.\n\n" + + "추가로 이용에 어려움이 있으실 경우 언제든지 문의해 주세요.\n\n감사합니다.", + ), + InquiryUiModel( + id = 2L, + status = InquiryStatus.RECEIVED, + date = "2025.08.09.", + title = "타임레터 발송일 변경이 안 돼요", + content = "발송 예약일은 마이페이지에서 변경이 가능한지 문의드립니다.", + answer = null, + ), + ) diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt index 44bef11258..3599c43c54 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt @@ -64,4 +64,14 @@ interface SettingNavActions { fun onNavigateToNotice() fun onNoticeBack() + + fun onNavigateToInquiry() + + fun onInquiryBack() + + fun onNavigateToInquiryDetail(inquiryId: Long) + + fun onNavigateToInquiryWrite() + + fun onInquirySubmitted() } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt index c47d60b995..15f6c85583 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt @@ -11,9 +11,13 @@ import androidx.navigation.navigation import androidx.navigation.toRoute import com.afternote.core.ui.Route import com.afternote.feature.setting.presentation.component.PinSetupStep +import com.afternote.feature.setting.presentation.model.sampleInquiries import com.afternote.feature.setting.presentation.screen.AppLockSetupScreen import com.afternote.feature.setting.presentation.screen.ConnectedAccountsScreen import com.afternote.feature.setting.presentation.screen.DeliveryConditionScreen +import com.afternote.feature.setting.presentation.screen.InquiryDetailScreen +import com.afternote.feature.setting.presentation.screen.InquiryListScreen +import com.afternote.feature.setting.presentation.screen.InquiryWriteScreen import com.afternote.feature.setting.presentation.screen.NoticeListScreen import com.afternote.feature.setting.presentation.screen.PassKeyListScreen import com.afternote.feature.setting.presentation.screen.PassKeyMakingScreen @@ -52,7 +56,7 @@ fun NavGraphBuilder.settingNavGraph( onPasskeyClick = actions::onNavigateToPasskey, onAppLockClick = actions::onNavigateToAppLock, onFaqClick = {}, - onInquiryClick = {}, + onInquiryClick = actions::onNavigateToInquiry, onNoticeClick = actions::onNavigateToNotice, onTermsClick = {}, onPrivacyClick = {}, @@ -187,5 +191,27 @@ fun NavGraphBuilder.settingNavGraph( onBackClick = actions::onNoticeBack, ) } + + composable { + InquiryListScreen( + inquiries = sampleInquiries, + onBackClick = actions::onInquiryBack, + onInquiryClick = actions::onNavigateToInquiryDetail, + onNewInquiryClick = actions::onNavigateToInquiryWrite, + ) + } + + composable { backStackEntry -> + val id = backStackEntry.toRoute().inquiryId + val inquiry = sampleInquiries.firstOrNull { it.id == id } ?: return@composable + InquiryDetailScreen(inquiry = inquiry, onBackClick = actions::onInquiryBack) + } + + composable { + InquiryWriteScreen( + onBackClick = actions::onInquiryBack, + onSubmitClick = actions::onInquirySubmitted, + ) + } } } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingRoute.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingRoute.kt index 898cb15077..26dae13e3e 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingRoute.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingRoute.kt @@ -53,4 +53,15 @@ sealed interface SettingRoute { @Serializable data object NoticeRoute : SettingRoute + + @Serializable + data object InquiryListRoute : SettingRoute + + @Serializable + data class InquiryDetailRoute( + val inquiryId: Long, + ) : SettingRoute + + @Serializable + data object InquiryWriteRoute : SettingRoute } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt new file mode 100644 index 0000000000..84ba38ba74 --- /dev/null +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt @@ -0,0 +1,356 @@ +package com.afternote.feature.setting.presentation.screen + +import android.net.Uri +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.clickable +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.imePadding +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.afternote.core.ui.button.AfternoteButton +import com.afternote.core.ui.button.AfternoteButtonType +import com.afternote.core.ui.theme.AfternoteDesign +import com.afternote.core.ui.theme.AfternoteTheme +import com.afternote.core.ui.topbar.DetailTopBar +import com.afternote.feature.setting.presentation.R +import com.afternote.feature.setting.presentation.model.InquiryStatus +import com.afternote.feature.setting.presentation.model.InquiryUiModel +import com.afternote.feature.setting.presentation.model.sampleInquiries + +@Composable +fun InquiryListScreen( + inquiries: List, + onBackClick: () -> Unit, + onInquiryClick: (Long) -> Unit, + onNewInquiryClick: () -> Unit, + modifier: Modifier = Modifier, +) { + Scaffold( + modifier = modifier, + topBar = { InquiryTopBar(onBackClick) }, + bottomBar = { + AfternoteButton( + text = stringResource(R.string.inquiry_new), + onClick = onNewInquiryClick, + modifier = Modifier.navigationBarsPadding().padding(horizontal = 20.dp, vertical = 16.dp), + ) + }, + containerColor = AfternoteDesign.colors.gray1, + ) { padding -> + LazyColumn( + modifier = Modifier.fillMaxSize().padding(padding).padding(horizontal = 20.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + item { Spacer(Modifier.height(2.dp)) } + items(inquiries, key = { it.id }) { inquiry -> + InquiryListItem(inquiry, onClick = { onInquiryClick(inquiry.id) }) + } + } + } +} + +@Composable +private fun InquiryListItem( + inquiry: InquiryUiModel, + onClick: () -> Unit, +) { + Surface( + modifier = Modifier.fillMaxWidth().clickable(onClick = onClick), + shape = RoundedCornerShape(6.dp), + color = AfternoteDesign.colors.white, + border = BorderStroke(1.dp, AfternoteDesign.colors.gray2), + ) { + Column(Modifier.padding(16.dp)) { + Row(verticalAlignment = Alignment.CenterVertically) { + Surface( + shape = RoundedCornerShape(18.dp), + color = if (inquiry.status == InquiryStatus.ANSWERED) Color(0xFFDCEDE3) else AfternoteDesign.colors.gray2, + ) { + Text( + text = + stringResource( + if (inquiry.status == + InquiryStatus.ANSWERED + ) { + R.string.inquiry_answered + } else { + R.string.inquiry_received + }, + ), + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + style = AfternoteDesign.typography.captionLargeB, + ) + } + Spacer(Modifier.weight(1f)) + Text(inquiry.date, style = AfternoteDesign.typography.footnoteCaption, color = AfternoteDesign.colors.gray7) + } + Spacer(Modifier.height(12.dp)) + Text(inquiry.title, style = AfternoteDesign.typography.bodyBase, color = AfternoteDesign.colors.gray9) + Spacer(Modifier.height(6.dp)) + Text( + text = inquiry.content.replace('\n', ' '), + maxLines = 2, + overflow = TextOverflow.Ellipsis, + style = AfternoteDesign.typography.bodySmallR, + color = AfternoteDesign.colors.gray6, + ) + } + } +} + +@Composable +fun InquiryDetailScreen( + inquiry: InquiryUiModel, + onBackClick: () -> Unit, + modifier: Modifier = Modifier, +) { + Scaffold( + modifier = modifier, + topBar = { InquiryTopBar(onBackClick) }, + containerColor = AfternoteDesign.colors.gray1, + ) { padding -> + Column(Modifier.fillMaxSize().padding(padding).verticalScroll(rememberScrollState())) { + Column(Modifier.padding(horizontal = 20.dp, vertical = 24.dp)) { + Text(inquiry.date, style = AfternoteDesign.typography.footnoteCaption, color = AfternoteDesign.colors.gray6) + Spacer(Modifier.height(10.dp)) + Text(inquiry.title, style = AfternoteDesign.typography.h2, color = AfternoteDesign.colors.gray9) + } + HorizontalDivider(color = AfternoteDesign.colors.gray2) + Column(Modifier.padding(horizontal = 20.dp, vertical = 24.dp)) { + Text(inquiry.content, style = AfternoteDesign.typography.bodySmallR, color = AfternoteDesign.colors.gray9) + inquiry.answer?.let { answer -> + HorizontalDivider(Modifier.padding(vertical = 28.dp), color = AfternoteDesign.colors.gray3) + Text( + stringResource(R.string.inquiry_answer), + style = AfternoteDesign.typography.captionLargeR, + color = AfternoteDesign.colors.gray6, + ) + Spacer(Modifier.height(10.dp)) + Surface( + shape = RoundedCornerShape(6.dp), + color = AfternoteDesign.colors.white, + border = BorderStroke(1.dp, AfternoteDesign.colors.gray2), + ) { + Text( + answer, + Modifier.padding(24.dp), + style = AfternoteDesign.typography.bodySmallR, + color = AfternoteDesign.colors.gray9, + ) + } + } + } + } + } +} + +@Composable +fun InquiryWriteScreen( + onBackClick: () -> Unit, + onSubmitClick: () -> Unit, + modifier: Modifier = Modifier, +) { + var type by rememberSaveable { mutableStateOf("\ud0c0\uc784\ub808\ud130") } + var title by rememberSaveable { mutableStateOf("") } + var content by rememberSaveable { mutableStateOf("") } + var attachments by remember { mutableStateOf>(emptyList()) } + val onAddScreenshots: () -> Unit = + if (LocalInspectionMode.current) { + ({}) + } else { + val picker = + rememberLauncherForActivityResult(ActivityResultContracts.GetMultipleContents()) { uris -> + attachments = (attachments + uris).distinct().take(MAX_INQUIRY_IMAGES) + } + ({ picker.launch("image/*") }) + } + val canSubmit = title.isNotBlank() && content.isNotBlank() + + Scaffold( + modifier = modifier.imePadding(), + topBar = { InquiryTopBar(onBackClick) }, + bottomBar = { + AfternoteButton( + text = stringResource(R.string.inquiry_submit), + onClick = onSubmitClick, + type = if (canSubmit) AfternoteButtonType.Default else AfternoteButtonType.Un, + modifier = Modifier.navigationBarsPadding().padding(horizontal = 20.dp, vertical = 16.dp), + ) + }, + containerColor = AfternoteDesign.colors.gray1, + ) { padding -> + Column( + Modifier + .fillMaxSize() + .padding(padding) + .verticalScroll(rememberScrollState()) + .padding(horizontal = 20.dp, vertical = 16.dp), + ) { + InquiryTypeDropdown(type, onSelected = { type = it }) + Spacer(Modifier.height(22.dp)) + InquiryFieldLabel(stringResource(R.string.inquiry_title)) + OutlinedTextField( + value = title, + onValueChange = { title = it }, + modifier = Modifier.fillMaxWidth(), + placeholder = { Text(stringResource(R.string.inquiry_text_field)) }, + singleLine = true, + shape = RoundedCornerShape(8.dp), + ) + Spacer(Modifier.height(18.dp)) + InquiryFieldLabel(stringResource(R.string.inquiry_content)) + OutlinedTextField( + value = content, + onValueChange = { content = it }, + modifier = Modifier.fillMaxWidth().height(180.dp), + placeholder = { Text(stringResource(R.string.inquiry_text_field)) }, + shape = RoundedCornerShape(8.dp), + ) + Spacer(Modifier.height(20.dp)) + Surface( + modifier = + Modifier + .fillMaxWidth() + .clickable( + enabled = attachments.size < MAX_INQUIRY_IMAGES, + onClick = onAddScreenshots, + ), + shape = RoundedCornerShape(8.dp), + color = AfternoteDesign.colors.white, + border = BorderStroke(1.dp, AfternoteDesign.colors.gray2), + ) { + Row(Modifier.padding(horizontal = 16.dp, vertical = 18.dp), verticalAlignment = Alignment.CenterVertically) { + Icon( + painter = painterResource(com.afternote.core.ui.R.drawable.core_ui_ic_image), + contentDescription = null, + modifier = Modifier.size(24.dp), + tint = AfternoteDesign.colors.gray7, + ) + Spacer(Modifier.size(12.dp)) + Text( + stringResource(R.string.inquiry_add_screenshot, attachments.size, MAX_INQUIRY_IMAGES), + style = AfternoteDesign.typography.bodySmallR, + ) + } + } + } + } +} + +@Composable +private fun InquiryTypeDropdown( + selected: String, + onSelected: (String) -> Unit, +) { + var expanded by remember { mutableStateOf(false) } + InquiryFieldLabel(stringResource(R.string.inquiry_type)) + Box { + Row( + Modifier.fillMaxWidth().clickable { expanded = true }.padding(vertical = 10.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Text(selected, Modifier.weight(1f), style = AfternoteDesign.typography.bodySmallR) + Text("\u2304", style = AfternoteDesign.typography.bodyLargeR) + } + DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) { + listOf( + "\ud0c0\uc784\ub808\ud130", + "\ub9c8\uc74c \uae30\ub85d", + "\uc560\ud504\ud130\ub178\ud2b8", + "\uae30\ud0c0", + ).forEach { item -> + DropdownMenuItem(text = { Text(item) }, onClick = { + onSelected(item) + expanded = false + }) + } + } + } + HorizontalDivider(color = AfternoteDesign.colors.gray2) +} + +@Composable +private fun InquiryFieldLabel(text: String) { + Text(text, style = AfternoteDesign.typography.bodySmallR, color = AfternoteDesign.colors.gray7) + Spacer(Modifier.height(8.dp)) +} + +@Composable +private fun InquiryTopBar(onBackClick: () -> Unit) { + DetailTopBar(stringResource(R.string.inquiry_title_bar), onBackClick = onBackClick) +} + +@Preview(name = "Inquiry list", showBackground = true) +@Composable +private fun InquiryListScreenPreview() { + AfternoteTheme { + InquiryListScreen( + inquiries = sampleInquiries, + onBackClick = {}, + onInquiryClick = {}, + onNewInquiryClick = {}, + ) + } +} + +@Preview(name = "Inquiry detail - answered", showBackground = true) +@Composable +private fun InquiryDetailScreenPreview() { + AfternoteTheme { + InquiryDetailScreen( + inquiry = sampleInquiries.first(), + onBackClick = {}, + ) + } +} + +@Preview(name = "Inquiry write", showBackground = true) +@Composable +private fun InquiryWriteScreenPreview() { + AfternoteTheme { + InquiryWriteScreen( + onBackClick = {}, + onSubmitClick = {}, + ) + } +} + +private const val MAX_INQUIRY_IMAGES = 3 diff --git a/feature/setting/presentation/src/main/res/values/strings.xml b/feature/setting/presentation/src/main/res/values/strings.xml index 94824b058f..7250a45964 100644 --- a/feature/setting/presentation/src/main/res/values/strings.xml +++ b/feature/setting/presentation/src/main/res/values/strings.xml @@ -23,6 +23,17 @@ FAQ 고객센터 + 1:1 문의 + 새 문의 접수하기 + 접수 중 + 답변 완료 + 답변 + 문의 유형 + 제목 + 내용 + Text Field + 스크린샷 추가하기 (%1$d/%2$d, 최대 3장) + 문의 접수하기 공지사항 등록된 공지사항이 없어요. 이용약관 From 8802f687e33af9a269b0f7a5ace4a9933c168c87 Mon Sep 17 00:00:00 2001 From: kyungmin Date: Sun, 23 Aug 2026 01:53:21 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat(setting):=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/screen/InquiryScreens.kt | 18 ++++++++++++++---- .../src/main/res/values/strings.xml | 5 +++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt index 84ba38ba74..678038325e 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt @@ -120,7 +120,7 @@ private fun InquiryListItem( ) } Spacer(Modifier.weight(1f)) - Text(inquiry.date, style = AfternoteDesign.typography.footnoteCaption, color = AfternoteDesign.colors.gray7) + Text(inquiry.date, style = AfternoteDesign.typography.footnoteCaption, color = AfternoteDesign.colors.gray9) } Spacer(Modifier.height(12.dp)) Text(inquiry.title, style = AfternoteDesign.typography.bodyBase, color = AfternoteDesign.colors.gray9) @@ -149,7 +149,7 @@ fun InquiryDetailScreen( ) { padding -> Column(Modifier.fillMaxSize().padding(padding).verticalScroll(rememberScrollState())) { Column(Modifier.padding(horizontal = 20.dp, vertical = 24.dp)) { - Text(inquiry.date, style = AfternoteDesign.typography.footnoteCaption, color = AfternoteDesign.colors.gray6) + Text(inquiry.date, style = AfternoteDesign.typography.footnoteCaption, color = AfternoteDesign.colors.gray8) Spacer(Modifier.height(10.dp)) Text(inquiry.title, style = AfternoteDesign.typography.h2, color = AfternoteDesign.colors.gray9) } @@ -231,7 +231,12 @@ fun InquiryWriteScreen( value = title, onValueChange = { title = it }, modifier = Modifier.fillMaxWidth(), - placeholder = { Text(stringResource(R.string.inquiry_text_field)) }, + placeholder = { + Text( + text = stringResource(R.string.inquiry_title_text_field), + color = AfternoteDesign.colors.gray4, + ) + }, singleLine = true, shape = RoundedCornerShape(8.dp), ) @@ -241,7 +246,12 @@ fun InquiryWriteScreen( value = content, onValueChange = { content = it }, modifier = Modifier.fillMaxWidth().height(180.dp), - placeholder = { Text(stringResource(R.string.inquiry_text_field)) }, + placeholder = { + Text( + text = stringResource(R.string.inquiry_content_text_field), + color = AfternoteDesign.colors.gray4, + ) + }, shape = RoundedCornerShape(8.dp), ) Spacer(Modifier.height(20.dp)) diff --git a/feature/setting/presentation/src/main/res/values/strings.xml b/feature/setting/presentation/src/main/res/values/strings.xml index 7250a45964..77267abf55 100644 --- a/feature/setting/presentation/src/main/res/values/strings.xml +++ b/feature/setting/presentation/src/main/res/values/strings.xml @@ -31,8 +31,9 @@ 문의 유형 제목 내용 - Text Field - 스크린샷 추가하기 (%1$d/%2$d, 최대 3장) + 제목을 입력해 주세요. + 내용을 입력해 주세요. + 스크린샷 추가하기 (최대 3장) 문의 접수하기 공지사항 등록된 공지사항이 없어요. From ea3f9d3e8ee0dbbacc45866a6070acb51da6db57 Mon Sep 17 00:00:00 2001 From: kyungmin Date: Sun, 6 Sep 2026 12:18:12 +0900 Subject: [PATCH 03/10] =?UTF-8?q?fix(setting):=201:1=20=EB=AC=B8=EC=9D=98?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=EC=9D=B4=20=EC=A7=80=EC=96=B4=EB=82=B8=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20=EB=B3=B4=EC=97=AC?= =?UTF-8?q?=EC=A3=BC=EA=B1=B0=EB=82=98=20=EC=A0=91=EC=88=98=20=EC=84=B1?= =?UTF-8?q?=EA=B3=B5=EC=9D=84=20=EA=B0=80=EC=9E=A5=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EA=B2=8C=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - InquiryListRoute/InquiryDetailRoute 가 프로덕션에서 sampleInquiries 를 실제 사용자 이력처럼 보여주던 문제를 고친다. sampleInquiries 는 InquiryScreens.kt 의 @Preview 전용 데이터로만 남기고 프로덕션 라우트에는 빈 상태를 그린다 (NoticeListScreen 이 이미 쓰고 있는 패턴과 동일). - InquiryDetailScreen 은 inquiry 를 nullable 로 받아, 조회 API 가 아직 없어 실제 항목을 찾을 수 없는 경우 "찾을 수 없음" 상태를 보여준다. - InquiryWriteScreen 의 접수 버튼은 (아직 없는) 접수 API 를 호출한 것처럼 뒤로 가지 않는다. 대신 아직 지원하지 않는 기능임을 스낵바로 알리고 화면에 남아 작성 중이던 내용을 보존한다 — #1629 에서 확립한 "미구현 기능은 성공으로 포장하지 않는다" 원칙과 동일하다. - 이제 아무것도 하지 않는 SettingNavActions.onInquirySubmitted() / AppNavigationActions 구현을 제거했다. 접수 API 가 연결되면 다시 추가한다. Afternote-BE#246 (문의 접수·조회 엔드포인트 부재) 가 열려 있는 동안에는 merge-order-guard 가 계속 이 PR 을 막을 것이다 — 이건 백엔드 이슈가 닫혀야 풀리는 별도 사안이라 이번 수정 범위에 포함하지 않았다. Co-Authored-By: Claude Sonnet 5 --- .../navigation/AppNavigationActions.kt | 4 - .../presentation/model/InquiryUiModel.kt | 27 ----- .../navigation/SettingNavActions.kt | 2 - .../navigation/SettingNavGraph.kt | 12 +-- .../presentation/screen/InquiryScreens.kt | 101 +++++++++++++++--- .../src/main/res/values/strings.xml | 3 + 6 files changed, 97 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt b/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt index 816c622292..f76a648607 100644 --- a/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt +++ b/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt @@ -372,10 +372,6 @@ fun rememberSettingNavActions(appState: AppState): SettingNavActions = override fun onNavigateToInquiryWrite() { appState.navController.navigate(SettingRoute.InquiryWriteRoute) } - - override fun onInquirySubmitted() { - appState.navController.popBackStack() - } } } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt index e5760d6428..98bfed89da 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt @@ -10,30 +10,3 @@ data class InquiryUiModel( val content: String, val answer: String?, ) - -val sampleInquiries = - listOf( - InquiryUiModel( - id = 1L, - status = InquiryStatus.ANSWERED, - date = "2025.08.09.", - title = "타임레터 발송일 변경이 안 돼요", - content = - "타임레터를 작성한 뒤 발송일을 변경하려고 하는데 날짜를 선택해도 기존 날짜로 계속 표시됩니다. " + - "앱을 종료했다가 다시 실행해도 동일하고, 수정 버튼을 눌러 저장해도 변경사항이 반영되지 않아요.\n" + - "현재 발송 예정일은 8월 20일로 설정되어 있고, 9월 15일로 변경하려고 합니다. 확인 부탁드립니다.", - answer = - "안녕하세요 애프터노트입니다.\n\n타임레터 발신인은 마이페이지에서 변경하실 수 있습니다.\n" + - "마이페이지 > 타임레터 관리에서 변경을 원하시는 타임레터를 선택한 후, 발송예정일을 변경해 주세요.\n" + - "변경된 날짜는 저장 후 정상적으로 반영됩니다.\n\n" + - "추가로 이용에 어려움이 있으실 경우 언제든지 문의해 주세요.\n\n감사합니다.", - ), - InquiryUiModel( - id = 2L, - status = InquiryStatus.RECEIVED, - date = "2025.08.09.", - title = "타임레터 발송일 변경이 안 돼요", - content = "발송 예약일은 마이페이지에서 변경이 가능한지 문의드립니다.", - answer = null, - ), - ) diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt index 3599c43c54..c6bdeb019d 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt @@ -72,6 +72,4 @@ interface SettingNavActions { fun onNavigateToInquiryDetail(inquiryId: Long) fun onNavigateToInquiryWrite() - - fun onInquirySubmitted() } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt index 15f6c85583..3934782bbb 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt @@ -11,7 +11,6 @@ import androidx.navigation.navigation import androidx.navigation.toRoute import com.afternote.core.ui.Route import com.afternote.feature.setting.presentation.component.PinSetupStep -import com.afternote.feature.setting.presentation.model.sampleInquiries import com.afternote.feature.setting.presentation.screen.AppLockSetupScreen import com.afternote.feature.setting.presentation.screen.ConnectedAccountsScreen import com.afternote.feature.setting.presentation.screen.DeliveryConditionScreen @@ -194,23 +193,22 @@ fun NavGraphBuilder.settingNavGraph( composable { InquiryListScreen( - inquiries = sampleInquiries, + inquiries = emptyList(), onBackClick = actions::onInquiryBack, onInquiryClick = actions::onNavigateToInquiryDetail, onNewInquiryClick = actions::onNavigateToInquiryWrite, ) } - composable { backStackEntry -> - val id = backStackEntry.toRoute().inquiryId - val inquiry = sampleInquiries.firstOrNull { it.id == id } ?: return@composable - InquiryDetailScreen(inquiry = inquiry, onBackClick = actions::onInquiryBack) + composable { + // 문의 조회 API 가 아직 없다 (Afternote-BE#246). 실제 데이터 소스가 연결되기 전까지는 + // 지어낸 문의를 보여주는 대신 "찾을 수 없음" 상태를 그린다. + InquiryDetailScreen(inquiry = null, onBackClick = actions::onInquiryBack) } composable { InquiryWriteScreen( onBackClick = actions::onInquiryBack, - onSubmitClick = actions::onInquirySubmitted, ) } } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt index 678038325e..f50c780ea0 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt @@ -28,12 +28,15 @@ import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -53,7 +56,7 @@ import com.afternote.core.ui.topbar.DetailTopBar import com.afternote.feature.setting.presentation.R import com.afternote.feature.setting.presentation.model.InquiryStatus import com.afternote.feature.setting.presentation.model.InquiryUiModel -import com.afternote.feature.setting.presentation.model.sampleInquiries +import kotlinx.coroutines.launch @Composable fun InquiryListScreen( @@ -75,18 +78,38 @@ fun InquiryListScreen( }, containerColor = AfternoteDesign.colors.gray1, ) { padding -> - LazyColumn( - modifier = Modifier.fillMaxSize().padding(padding).padding(horizontal = 20.dp), - verticalArrangement = Arrangement.spacedBy(10.dp), - ) { - item { Spacer(Modifier.height(2.dp)) } - items(inquiries, key = { it.id }) { inquiry -> - InquiryListItem(inquiry, onClick = { onInquiryClick(inquiry.id) }) + if (inquiries.isEmpty()) { + InquiryEmptyState(modifier = Modifier.fillMaxSize().padding(padding)) + } else { + LazyColumn( + modifier = Modifier.fillMaxSize().padding(padding).padding(horizontal = 20.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + item { Spacer(Modifier.height(2.dp)) } + items(inquiries, key = { it.id }) { inquiry -> + InquiryListItem(inquiry, onClick = { onInquiryClick(inquiry.id) }) + } } } } } +@Composable +private fun InquiryEmptyState( + modifier: Modifier = Modifier, + message: String = stringResource(R.string.inquiry_list_empty), +) { + Box( + modifier = modifier.padding(horizontal = 20.dp).padding(top = 24.dp), + ) { + Text( + text = message, + style = AfternoteDesign.typography.bodyLargeR, + color = AfternoteDesign.colors.gray8, + ) + } +} + @Composable private fun InquiryListItem( inquiry: InquiryUiModel, @@ -138,7 +161,7 @@ private fun InquiryListItem( @Composable fun InquiryDetailScreen( - inquiry: InquiryUiModel, + inquiry: InquiryUiModel?, onBackClick: () -> Unit, modifier: Modifier = Modifier, ) { @@ -147,6 +170,13 @@ fun InquiryDetailScreen( topBar = { InquiryTopBar(onBackClick) }, containerColor = AfternoteDesign.colors.gray1, ) { padding -> + if (inquiry == null) { + InquiryEmptyState( + modifier = Modifier.fillMaxSize().padding(padding), + message = stringResource(R.string.inquiry_detail_not_found), + ) + return@Scaffold + } Column(Modifier.fillMaxSize().padding(padding).verticalScroll(rememberScrollState())) { Column(Modifier.padding(horizontal = 20.dp, vertical = 24.dp)) { Text(inquiry.date, style = AfternoteDesign.typography.footnoteCaption, color = AfternoteDesign.colors.gray8) @@ -185,7 +215,6 @@ fun InquiryDetailScreen( @Composable fun InquiryWriteScreen( onBackClick: () -> Unit, - onSubmitClick: () -> Unit, modifier: Modifier = Modifier, ) { var type by rememberSaveable { mutableStateOf("\ud0c0\uc784\ub808\ud130") } @@ -203,6 +232,9 @@ fun InquiryWriteScreen( ({ picker.launch("image/*") }) } val canSubmit = title.isNotBlank() && content.isNotBlank() + val snackbarHostState = remember { SnackbarHostState() } + val coroutineScope = rememberCoroutineScope() + val submitNotSupportedMessage = stringResource(R.string.inquiry_submit_not_supported) Scaffold( modifier = modifier.imePadding(), @@ -210,11 +242,16 @@ fun InquiryWriteScreen( bottomBar = { AfternoteButton( text = stringResource(R.string.inquiry_submit), - onClick = onSubmitClick, + onClick = { + // \uc811\uc218 API \uac00 \uc544\uc9c1 \uc5c6\ub2e4 (Afternote-BE#246). \uc811\uc218\ub41c \uac83\ucc98\ub7fc \ub4a4\ub85c \uac00\uc9c0 \uc54a\uace0 + // \uc544\uc9c1 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uae30\ub2a5\uc784\uc744 \uadf8\ub300\ub85c \uc54c\ub9b0\ub2e4 \u2014 \uc131\uacf5\ud55c \ucc99 \ub2eb\uc9c0 \uc54a\ub294\ub2e4 (#1629 \uc640 \ub3d9\uc77c\ud55c \uc6d0\uce59). + coroutineScope.launch { snackbarHostState.showSnackbar(submitNotSupportedMessage) } + }, type = if (canSubmit) AfternoteButtonType.Default else AfternoteButtonType.Un, modifier = Modifier.navigationBarsPadding().padding(horizontal = 20.dp, vertical = 16.dp), ) }, + snackbarHost = { SnackbarHost(snackbarHostState) }, containerColor = AfternoteDesign.colors.gray1, ) { padding -> Column( @@ -341,6 +378,19 @@ private fun InquiryListScreenPreview() { } } +@Preview(name = "Inquiry list - empty", showBackground = true) +@Composable +private fun InquiryListScreenEmptyPreview() { + AfternoteTheme { + InquiryListScreen( + inquiries = emptyList(), + onBackClick = {}, + onInquiryClick = {}, + onNewInquiryClick = {}, + ) + } +} + @Preview(name = "Inquiry detail - answered", showBackground = true) @Composable private fun InquiryDetailScreenPreview() { @@ -352,13 +402,40 @@ private fun InquiryDetailScreenPreview() { } } +// 프리뷰 전용 표본 데이터 — 프로덕션 라우트(SettingNavGraph)에서는 사용하지 않는다. +private val sampleInquiries = + listOf( + InquiryUiModel( + id = 1L, + status = InquiryStatus.ANSWERED, + date = "2025.08.09.", + title = "타임레터 발송일 변경이 안 돼요", + content = + "타임레터를 작성한 뒤 발송일을 변경하려고 하는데 날짜를 선택해도 기존 날짜로 계속 표시됩니다. " + + "앱을 종료했다가 다시 실행해도 동일하고, 수정 버튼을 눌러 저장해도 변경사항이 반영되지 않아요.\n" + + "현재 발송 예정일은 8월 20일로 설정되어 있고, 9월 15일로 변경하려고 합니다. 확인 부탁드립니다.", + answer = + "안녕하세요 애프터노트입니다.\n\n타임레터 발신인은 마이페이지에서 변경하실 수 있습니다.\n" + + "마이페이지 > 타임레터 관리에서 변경을 원하시는 타임레터를 선택한 후, 발송예정일을 변경해 주세요.\n" + + "변경된 날짜는 저장 후 정상적으로 반영됩니다.\n\n" + + "추가로 이용에 어려움이 있으실 경우 언제든지 문의해 주세요.\n\n감사합니다.", + ), + InquiryUiModel( + id = 2L, + status = InquiryStatus.RECEIVED, + date = "2025.08.09.", + title = "타임레터 발송일 변경이 안 돼요", + content = "발송 예약일은 마이페이지에서 변경이 가능한지 문의드립니다.", + answer = null, + ), + ) + @Preview(name = "Inquiry write", showBackground = true) @Composable private fun InquiryWriteScreenPreview() { AfternoteTheme { InquiryWriteScreen( onBackClick = {}, - onSubmitClick = {}, ) } } diff --git a/feature/setting/presentation/src/main/res/values/strings.xml b/feature/setting/presentation/src/main/res/values/strings.xml index 0d596999da..f1c231ea88 100644 --- a/feature/setting/presentation/src/main/res/values/strings.xml +++ b/feature/setting/presentation/src/main/res/values/strings.xml @@ -34,6 +34,9 @@ 내용을 입력해 주세요. 스크린샷 추가하기 (최대 3장) 문의 접수하기 + 등록된 문의가 없어요. + 문의 내역을 찾을 수 없어요. + 문의 접수 기능은 아직 준비 중이에요. 조금만 기다려 주세요. 공지사항 등록된 공지사항이 없어요. 이용약관 From 58c69546f4f553ba9a9d9b4c281da386688fe5d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=BC=ED=98=81?= Date: Sun, 6 Sep 2026 22:53:21 +0900 Subject: [PATCH 04/10] =?UTF-8?q?fix(setting):=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=EC=B2=A8=EB=B6=80=20=EC=83=81=ED=83=9C=EC=99=80=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=20=EB=A6=AC=EB=B7=B0=20=EC=A7=80=EC=A0=81=EC=9D=84=20?= =?UTF-8?q?=EB=B3=B4=EC=99=84=ED=95=9C=EB=8B=A4=20(#784)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/setting/presentation/build.gradle.kts | 1 + .../presentation/model/InquiryUiModel.kt | 4 +- .../navigation/SettingNavGraph.kt | 5 +- .../presentation/screen/InquiryScreens.kt | 129 +++++++++++++----- .../src/main/res/values/strings.xml | 40 ++++-- .../screen/InquiryWriteScreenTest.kt | 112 +++++++++++++++ 6 files changed, 237 insertions(+), 54 deletions(-) create mode 100644 feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/screen/InquiryWriteScreenTest.kt diff --git a/feature/setting/presentation/build.gradle.kts b/feature/setting/presentation/build.gradle.kts index b0e7153824..8e3027518f 100644 --- a/feature/setting/presentation/build.gradle.kts +++ b/feature/setting/presentation/build.gradle.kts @@ -32,6 +32,7 @@ dependencies { implementation(projects.core.ui) implementation(libs.androidx.hilt.navigation.compose) implementation(libs.androidx.compose.runtime) + implementation(libs.coil.compose) implementation(libs.kakao.sdk.auth) implementation(libs.kakao.sdk.user) implementation(libs.androidx.biometric) diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt index 98bfed89da..038e9c9efe 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/model/InquiryUiModel.kt @@ -1,8 +1,8 @@ package com.afternote.feature.setting.presentation.model -enum class InquiryStatus { RECEIVED, ANSWERED } +internal enum class InquiryStatus { RECEIVED, ANSWERED } -data class InquiryUiModel( +internal data class InquiryUiModel( val id: Long, val status: InquiryStatus, val date: String, diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt index 3934782bbb..f05eab9358 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt @@ -201,8 +201,9 @@ fun NavGraphBuilder.settingNavGraph( } composable { - // 문의 조회 API 가 아직 없다 (Afternote-BE#246). 실제 데이터 소스가 연결되기 전까지는 - // 지어낸 문의를 보여주는 대신 "찾을 수 없음" 상태를 그린다. + // TODO(Afternote-BE#246): 조회 계약이 생기면 + // it.toRoute().inquiryId 로 해당 문의를 조회한다. + // 현재는 실제 데이터 소스가 없어 "찾을 수 없음" 상태를 그린다. InquiryDetailScreen(inquiry = null, onBackClick = actions::onInquiryBack) } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt index f50c780ea0..7ededcbcb7 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt @@ -1,5 +1,6 @@ package com.afternote.feature.setting.presentation.screen +import android.content.Intent import android.net.Uri import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts @@ -10,6 +11,7 @@ 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.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -26,6 +28,7 @@ import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost @@ -41,15 +44,21 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import coil3.compose.AsyncImage import com.afternote.core.ui.button.AfternoteButton import com.afternote.core.ui.button.AfternoteButtonType +import com.afternote.core.ui.icon.CloseIcon import com.afternote.core.ui.theme.AfternoteDesign import com.afternote.core.ui.theme.AfternoteTheme import com.afternote.core.ui.topbar.DetailTopBar @@ -59,7 +68,7 @@ import com.afternote.feature.setting.presentation.model.InquiryUiModel import kotlinx.coroutines.launch @Composable -fun InquiryListScreen( +internal fun InquiryListScreen( inquiries: List, onBackClick: () -> Unit, onInquiryClick: (Long) -> Unit, @@ -71,7 +80,7 @@ fun InquiryListScreen( topBar = { InquiryTopBar(onBackClick) }, bottomBar = { AfternoteButton( - text = stringResource(R.string.inquiry_new), + text = stringResource(R.string.setting_inquiry_new), onClick = onNewInquiryClick, modifier = Modifier.navigationBarsPadding().padding(horizontal = 20.dp, vertical = 16.dp), ) @@ -97,7 +106,7 @@ fun InquiryListScreen( @Composable private fun InquiryEmptyState( modifier: Modifier = Modifier, - message: String = stringResource(R.string.inquiry_list_empty), + message: String = stringResource(R.string.setting_inquiry_list_empty), ) { Box( modifier = modifier.padding(horizontal = 20.dp).padding(top = 24.dp), @@ -133,9 +142,9 @@ private fun InquiryListItem( if (inquiry.status == InquiryStatus.ANSWERED ) { - R.string.inquiry_answered + R.string.setting_inquiry_answered } else { - R.string.inquiry_received + R.string.setting_inquiry_received }, ), modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), @@ -160,7 +169,7 @@ private fun InquiryListItem( } @Composable -fun InquiryDetailScreen( +internal fun InquiryDetailScreen( inquiry: InquiryUiModel?, onBackClick: () -> Unit, modifier: Modifier = Modifier, @@ -173,7 +182,7 @@ fun InquiryDetailScreen( if (inquiry == null) { InquiryEmptyState( modifier = Modifier.fillMaxSize().padding(padding), - message = stringResource(R.string.inquiry_detail_not_found), + message = stringResource(R.string.setting_inquiry_detail_not_found), ) return@Scaffold } @@ -189,7 +198,7 @@ fun InquiryDetailScreen( inquiry.answer?.let { answer -> HorizontalDivider(Modifier.padding(vertical = 28.dp), color = AfternoteDesign.colors.gray3) Text( - stringResource(R.string.inquiry_answer), + stringResource(R.string.setting_inquiry_answer), style = AfternoteDesign.typography.captionLargeR, color = AfternoteDesign.colors.gray6, ) @@ -213,38 +222,62 @@ fun InquiryDetailScreen( } @Composable -fun InquiryWriteScreen( +internal fun InquiryWriteScreen( onBackClick: () -> Unit, modifier: Modifier = Modifier, ) { - var type by rememberSaveable { mutableStateOf("\ud0c0\uc784\ub808\ud130") } + val inquiryTypes = stringArrayResource(R.array.setting_inquiry_types).toList() + var type by rememberSaveable { mutableStateOf(inquiryTypes.first()) } var title by rememberSaveable { mutableStateOf("") } var content by rememberSaveable { mutableStateOf("") } - var attachments by remember { mutableStateOf>(emptyList()) } + var attachments by rememberSaveable { mutableStateOf(arrayListOf()) } + val context = LocalContext.current + val snackbarHostState = remember { SnackbarHostState() } + val coroutineScope = rememberCoroutineScope() + val submitNotSupportedMessage = stringResource(R.string.setting_inquiry_submit_not_supported) + val attachmentLimitMessage = stringResource(R.string.setting_inquiry_attachment_limit, MAX_INQUIRY_IMAGES) + val attachmentUnavailableMessage = stringResource(R.string.setting_inquiry_attachment_unavailable) val onAddScreenshots: () -> Unit = if (LocalInspectionMode.current) { ({}) } else { val picker = - rememberLauncherForActivityResult(ActivityResultContracts.GetMultipleContents()) { uris -> - attachments = (attachments + uris).distinct().take(MAX_INQUIRY_IMAGES) + rememberLauncherForActivityResult(ActivityResultContracts.OpenMultipleDocuments()) { uris -> + val selected = (attachments + uris.map(Uri::toString)).distinct() + val candidates = selected.take(MAX_INQUIRY_IMAGES) + val readableUris = + candidates.filter { value -> + val uri = Uri.parse(value) + try { + context.contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION) + true + } catch (_: SecurityException) { + false + } + } + attachments = ArrayList(readableUris) + val message = + when { + readableUris.size < candidates.size -> attachmentUnavailableMessage + selected.size > MAX_INQUIRY_IMAGES -> attachmentLimitMessage + else -> null + } + if (message != null) { + coroutineScope.launch { snackbarHostState.showSnackbar(message) } + } } - ({ picker.launch("image/*") }) + ({ picker.launch(arrayOf("image/*")) }) } val canSubmit = title.isNotBlank() && content.isNotBlank() - val snackbarHostState = remember { SnackbarHostState() } - val coroutineScope = rememberCoroutineScope() - val submitNotSupportedMessage = stringResource(R.string.inquiry_submit_not_supported) Scaffold( modifier = modifier.imePadding(), topBar = { InquiryTopBar(onBackClick) }, bottomBar = { AfternoteButton( - text = stringResource(R.string.inquiry_submit), + text = stringResource(R.string.setting_inquiry_submit), onClick = { - // \uc811\uc218 API \uac00 \uc544\uc9c1 \uc5c6\ub2e4 (Afternote-BE#246). \uc811\uc218\ub41c \uac83\ucc98\ub7fc \ub4a4\ub85c \uac00\uc9c0 \uc54a\uace0 - // \uc544\uc9c1 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uae30\ub2a5\uc784\uc744 \uadf8\ub300\ub85c \uc54c\ub9b0\ub2e4 \u2014 \uc131\uacf5\ud55c \ucc99 \ub2eb\uc9c0 \uc54a\ub294\ub2e4 (#1629 \uc640 \ub3d9\uc77c\ud55c \uc6d0\uce59). + // Afternote-BE#246: 접수 계약이 생길 때까지 작성 내용을 남기고 미지원을 알린다. coroutineScope.launch { snackbarHostState.showSnackbar(submitNotSupportedMessage) } }, type = if (canSubmit) AfternoteButtonType.Default else AfternoteButtonType.Un, @@ -261,16 +294,16 @@ fun InquiryWriteScreen( .verticalScroll(rememberScrollState()) .padding(horizontal = 20.dp, vertical = 16.dp), ) { - InquiryTypeDropdown(type, onSelected = { type = it }) + InquiryTypeDropdown(type, options = inquiryTypes, onSelected = { type = it }) Spacer(Modifier.height(22.dp)) - InquiryFieldLabel(stringResource(R.string.inquiry_title)) + InquiryFieldLabel(stringResource(R.string.setting_inquiry_title)) OutlinedTextField( value = title, onValueChange = { title = it }, modifier = Modifier.fillMaxWidth(), placeholder = { Text( - text = stringResource(R.string.inquiry_title_text_field), + text = stringResource(R.string.setting_inquiry_title_text_field), color = AfternoteDesign.colors.gray4, ) }, @@ -278,14 +311,14 @@ fun InquiryWriteScreen( shape = RoundedCornerShape(8.dp), ) Spacer(Modifier.height(18.dp)) - InquiryFieldLabel(stringResource(R.string.inquiry_content)) + InquiryFieldLabel(stringResource(R.string.setting_inquiry_content)) OutlinedTextField( value = content, onValueChange = { content = it }, modifier = Modifier.fillMaxWidth().height(180.dp), placeholder = { Text( - text = stringResource(R.string.inquiry_content_text_field), + text = stringResource(R.string.setting_inquiry_content_text_field), color = AfternoteDesign.colors.gray4, ) }, @@ -313,11 +346,36 @@ fun InquiryWriteScreen( ) Spacer(Modifier.size(12.dp)) Text( - stringResource(R.string.inquiry_add_screenshot, attachments.size, MAX_INQUIRY_IMAGES), + stringResource(R.string.setting_inquiry_add_screenshot, attachments.size, MAX_INQUIRY_IMAGES), style = AfternoteDesign.typography.bodySmallR, ) } } + if (attachments.isNotEmpty()) { + Spacer(Modifier.height(12.dp)) + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + attachments.forEachIndexed { index, uri -> + Box(Modifier.weight(1f).aspectRatio(1f)) { + AsyncImage( + model = uri, + contentDescription = stringResource(R.string.setting_inquiry_attachment, index + 1), + modifier = Modifier.fillMaxSize().clip(RoundedCornerShape(8.dp)), + contentScale = ContentScale.Crop, + ) + IconButton( + onClick = { attachments = ArrayList(attachments.filterNot { it == uri }) }, + modifier = Modifier.align(Alignment.TopEnd), + ) { + CloseIcon( + contentDescription = stringResource(R.string.setting_inquiry_remove_attachment, index + 1), + modifier = Modifier.size(16.dp), + ) + } + } + } + repeat(MAX_INQUIRY_IMAGES - attachments.size) { Spacer(Modifier.weight(1f)) } + } + } } } } @@ -325,25 +383,26 @@ fun InquiryWriteScreen( @Composable private fun InquiryTypeDropdown( selected: String, + options: List, onSelected: (String) -> Unit, ) { var expanded by remember { mutableStateOf(false) } - InquiryFieldLabel(stringResource(R.string.inquiry_type)) + InquiryFieldLabel(stringResource(R.string.setting_inquiry_type)) Box { Row( Modifier.fillMaxWidth().clickable { expanded = true }.padding(vertical = 10.dp), verticalAlignment = Alignment.CenterVertically, ) { Text(selected, Modifier.weight(1f), style = AfternoteDesign.typography.bodySmallR) - Text("\u2304", style = AfternoteDesign.typography.bodyLargeR) + Icon( + painter = painterResource(com.afternote.core.ui.R.drawable.core_ui_arrowdown), + contentDescription = null, + modifier = Modifier.size(16.dp), + tint = AfternoteDesign.colors.gray7, + ) } DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) { - listOf( - "\ud0c0\uc784\ub808\ud130", - "\ub9c8\uc74c \uae30\ub85d", - "\uc560\ud504\ud130\ub178\ud2b8", - "\uae30\ud0c0", - ).forEach { item -> + options.forEach { item -> DropdownMenuItem(text = { Text(item) }, onClick = { onSelected(item) expanded = false @@ -362,7 +421,7 @@ private fun InquiryFieldLabel(text: String) { @Composable private fun InquiryTopBar(onBackClick: () -> Unit) { - DetailTopBar(stringResource(R.string.inquiry_title_bar), onBackClick = onBackClick) + DetailTopBar(stringResource(R.string.setting_inquiry_title_bar), onBackClick = onBackClick) } @Preview(name = "Inquiry list", showBackground = true) diff --git a/feature/setting/presentation/src/main/res/values/strings.xml b/feature/setting/presentation/src/main/res/values/strings.xml index f1c231ea88..ef94066329 100644 --- a/feature/setting/presentation/src/main/res/values/strings.xml +++ b/feature/setting/presentation/src/main/res/values/strings.xml @@ -22,21 +22,31 @@ FAQ 고객센터 - 1:1 문의 - 새 문의 접수하기 - 접수 중 - 답변 완료 - 답변 - 문의 유형 - 제목 - 내용 - 제목을 입력해 주세요. - 내용을 입력해 주세요. - 스크린샷 추가하기 (최대 3장) - 문의 접수하기 - 등록된 문의가 없어요. - 문의 내역을 찾을 수 없어요. - 문의 접수 기능은 아직 준비 중이에요. 조금만 기다려 주세요. + 1:1 문의 + 새 문의 접수하기 + 접수 중 + 답변 완료 + 답변 + 문의 유형 + 제목 + 내용 + 제목을 입력해 주세요. + 내용을 입력해 주세요. + 스크린샷 추가하기 (%1$d/%2$d장) + 문의 접수하기 + 등록된 문의가 없어요. + 문의 내역을 찾을 수 없어요. + 문의 접수 기능은 아직 준비 중이에요. 조금만 기다려 주세요. + 스크린샷은 최대 %1$d장까지 첨부할 수 있어요. + 선택한 사진을 계속 불러올 수 없어요. 다른 사진을 선택해 주세요. + 첨부한 스크린샷 %1$d + 스크린샷 %1$d 삭제 + + 타임레터 + 마음 기록 + 애프터노트 + 기타 + 공지사항 등록된 공지사항이 없어요. 이용약관 diff --git a/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/screen/InquiryWriteScreenTest.kt b/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/screen/InquiryWriteScreenTest.kt new file mode 100644 index 0000000000..a669859711 --- /dev/null +++ b/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/screen/InquiryWriteScreenTest.kt @@ -0,0 +1,112 @@ +package com.afternote.feature.setting.presentation.screen + +import android.net.Uri +import androidx.activity.compose.LocalActivityResultRegistryOwner +import androidx.activity.result.ActivityResultRegistry +import androidx.activity.result.ActivityResultRegistryOwner +import androidx.activity.result.contract.ActivityResultContract +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.assertIsNotEnabled +import androidx.compose.ui.test.junit4.StateRestorationTester +import androidx.compose.ui.test.junit4.v2.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performScrollTo +import androidx.compose.ui.test.performTextInput +import androidx.core.app.ActivityOptionsCompat +import com.afternote.core.ui.theme.AfternoteTheme +import org.junit.Assert.assertEquals +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(sdk = [35]) +class InquiryWriteScreenTest { + @get:Rule + val composeRule = createComposeRule() + + @Test + fun selectingTooManyAttachments_showsLimitAndAllowsRemoval() { + val registry = ScreenshotPickerRegistry((1..5).map { Uri.parse("content://inquiry/image/$it") }) + showForm(registry) + + composeRule.onNodeWithText("스크린샷 추가하기 (0/3장)").performScrollTo().performClick() + + composeRule.onNodeWithText("스크린샷 추가하기 (3/3장)").assertIsNotEnabled() + composeRule.onNodeWithText("스크린샷은 최대 3장까지 첨부할 수 있어요.").assertIsDisplayed() + composeRule.mainClock.advanceTimeBy(6_000) + composeRule.onNodeWithContentDescription("스크린샷 1 삭제").performScrollTo().performClick() + composeRule.onNodeWithText("스크린샷 추가하기 (2/3장)").assertIsEnabled() + } + + @Test + fun restoredForm_keepsAttachmentsAndText() { + val registry = ScreenshotPickerRegistry(listOf(Uri.parse("content://inquiry/image/1"))) + val restoration = StateRestorationTester(composeRule) + restoration.setContent { + CompositionLocalProvider(LocalActivityResultRegistryOwner provides registry) { + AfternoteTheme { InquiryWriteScreen(onBackClick = {}) } + } + } + composeRule.onNodeWithText("제목을 입력해 주세요.").performTextInput("문의 제목") + composeRule.onNodeWithText("내용을 입력해 주세요.").performScrollTo().performTextInput("문의 내용") + composeRule.onNodeWithText("스크린샷 추가하기 (0/3장)").performScrollTo().performClick() + + restoration.emulateSavedInstanceStateRestore() + + composeRule.onNodeWithText("문의 제목").performScrollTo().assertIsDisplayed() + composeRule.onNodeWithText("문의 내용").performScrollTo().assertIsDisplayed() + composeRule.onNodeWithText("스크린샷 추가하기 (1/3장)").performScrollTo().assertIsDisplayed() + composeRule.onNodeWithContentDescription("스크린샷 1 삭제").performScrollTo().assertIsDisplayed() + } + + @Test + fun unsupportedSubmission_keepsWrittenFormAndDoesNotNavigateBack() { + var backCalls = 0 + composeRule.setContent { + CompositionLocalProvider(LocalActivityResultRegistryOwner provides ScreenshotPickerRegistry(emptyList())) { + AfternoteTheme { InquiryWriteScreen(onBackClick = { backCalls++ }) } + } + } + composeRule.onNodeWithText("문의 접수하기").assertIsNotEnabled() + composeRule.onNodeWithText("제목을 입력해 주세요.").performTextInput("문의 제목") + composeRule.onNodeWithText("내용을 입력해 주세요.").performScrollTo().performTextInput("문의 내용") + composeRule.onNodeWithText("문의 접수하기").performClick() + + composeRule.onNodeWithText("문의 접수 기능은 아직 준비 중이에요. 조금만 기다려 주세요.").assertIsDisplayed() + composeRule.onNodeWithText("문의 제목").performScrollTo().assertIsDisplayed() + assertEquals(0, backCalls) + } + + private fun showForm(registry: ScreenshotPickerRegistry) { + composeRule.setContent { + CompositionLocalProvider(LocalActivityResultRegistryOwner provides registry) { + AfternoteTheme { InquiryWriteScreen(onBackClick = {}) } + } + } + } +} + +private class ScreenshotPickerRegistry( + private val selection: List, +) : ActivityResultRegistry(), + ActivityResultRegistryOwner { + override val activityResultRegistry: ActivityResultRegistry = this + + override fun onLaunch( + requestCode: Int, + contract: ActivityResultContract, + input: I, + options: ActivityOptionsCompat?, + ) { + dispatchResult(requestCode, selection) + } +} From 4d85f4323b8206f627a98e99cba3dc46db166322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=BC=ED=98=81?= Date: Sun, 6 Sep 2026 23:07:40 +0900 Subject: [PATCH 05/10] =?UTF-8?q?fix(ci):=20GMD=20D8=20=EB=B3=91=ED=95=A9?= =?UTF-8?q?=EC=9D=98=20=ED=9E=99=EA=B3=BC=20worker=20=EC=98=88=EC=82=B0?= =?UTF-8?q?=EC=9D=84=20=EC=A0=9C=ED=95=9C=ED=95=9C=EB=8B=A4=20(#784)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-managed-device.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/android-managed-device.yml b/.github/workflows/android-managed-device.yml index fae86f3a82..06dbc23eb1 100644 --- a/.github/workflows/android-managed-device.yml +++ b/.github/workflows/android-managed-device.yml @@ -626,8 +626,12 @@ jobs: return 124 fi set +e + # Cold D8 dex merging exceeded the default 2 GiB heap (#785). + # Keep the budget local to GMD and leave room for Kotlin and the emulator. timeout --signal=TERM --kill-after=30s "${remaining}s" \ ./gradlew "$DEVICE_TASK" "${test_arguments[@]}" \ + '-Dorg.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8' \ + --max-workers=2 \ -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect \ --console=plain \ --stacktrace >> "$gradle_log" 2>&1 From 275e6c5b4b61ee87cdf7548c2ec0aed09c3ab2d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=BC=ED=98=81?= Date: Tue, 8 Sep 2026 03:10:18 +0900 Subject: [PATCH 06/10] fix(setting): address inquiry form review feedback --- .../com/afternote/core/ui/theme/Color.kt | 8 +++++ .../presentation/screen/InquiryScreens.kt | 34 ++++++++++--------- .../screen/InquiryScreensScreenshotTest.kt | 29 ++++++++++++++++ 3 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 feature/setting/presentation/src/screenshotTest/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTest.kt diff --git a/core/ui/src/main/kotlin/com/afternote/core/ui/theme/Color.kt b/core/ui/src/main/kotlin/com/afternote/core/ui/theme/Color.kt index 603d1ff7c7..2a0ca1421a 100644 --- a/core/ui/src/main/kotlin/com/afternote/core/ui/theme/Color.kt +++ b/core/ui/src/main/kotlin/com/afternote/core/ui/theme/Color.kt @@ -81,6 +81,7 @@ internal fun lightColors() = accent10 = Accent10, error = Error, requiredMark = RequiredMark, + successContainer = Color(0xFFDCEDE3), isLightMode = true, ) @@ -111,6 +112,7 @@ internal fun darkColors() = accent10 = Accent10, error = Error, requiredMark = RequiredMark, + successContainer = Color(0xFF284536), isLightMode = false, ) @@ -145,6 +147,7 @@ class AfternoteColors( accent10: Color, error: Color, requiredMark: Color, + successContainer: Color, isLightMode: Boolean, ) { var white by mutableStateOf(white) @@ -197,6 +200,8 @@ class AfternoteColors( private set var requiredMark by mutableStateOf(requiredMark) private set + var successContainer by mutableStateOf(successContainer) + private set var isLightMode by mutableStateOf(isLightMode) private set @@ -226,6 +231,7 @@ class AfternoteColors( accent10: Color = this.accent10, error: Color = this.error, requiredMark: Color = this.requiredMark, + successContainer: Color = this.successContainer, isLightMode: Boolean = this.isLightMode, ) = AfternoteColors( white = white, @@ -253,6 +259,7 @@ class AfternoteColors( accent10 = accent10, error = error, requiredMark = requiredMark, + successContainer = successContainer, isLightMode = isLightMode, ) @@ -282,6 +289,7 @@ class AfternoteColors( this.accent10 = other.accent10 this.error = other.error this.requiredMark = other.requiredMark + this.successContainer = other.successContainer this.isLightMode = other.isLightMode } } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt index 7ededcbcb7..0750ab5cdd 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt @@ -23,6 +23,7 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem @@ -45,7 +46,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode @@ -56,6 +56,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage +import com.afternote.core.ui.AfternoteTextField import com.afternote.core.ui.button.AfternoteButton import com.afternote.core.ui.button.AfternoteButtonType import com.afternote.core.ui.icon.CloseIcon @@ -134,7 +135,14 @@ private fun InquiryListItem( Row(verticalAlignment = Alignment.CenterVertically) { Surface( shape = RoundedCornerShape(18.dp), - color = if (inquiry.status == InquiryStatus.ANSWERED) Color(0xFFDCEDE3) else AfternoteDesign.colors.gray2, + color = + if (inquiry.status == + InquiryStatus.ANSWERED + ) { + AfternoteDesign.colors.successContainer + } else { + AfternoteDesign.colors.gray2 + }, ) { Text( text = @@ -228,7 +236,7 @@ internal fun InquiryWriteScreen( ) { val inquiryTypes = stringArrayResource(R.array.setting_inquiry_types).toList() var type by rememberSaveable { mutableStateOf(inquiryTypes.first()) } - var title by rememberSaveable { mutableStateOf("") } + val title = rememberTextFieldState() var content by rememberSaveable { mutableStateOf("") } var attachments by rememberSaveable { mutableStateOf(arrayListOf()) } val context = LocalContext.current @@ -268,7 +276,7 @@ internal fun InquiryWriteScreen( } ({ picker.launch(arrayOf("image/*")) }) } - val canSubmit = title.isNotBlank() && content.isNotBlank() + val canSubmit = title.text.isNotBlank() && content.isNotBlank() Scaffold( modifier = modifier.imePadding(), @@ -278,7 +286,9 @@ internal fun InquiryWriteScreen( text = stringResource(R.string.setting_inquiry_submit), onClick = { // Afternote-BE#246: 접수 계약이 생길 때까지 작성 내용을 남기고 미지원을 알린다. - coroutineScope.launch { snackbarHostState.showSnackbar(submitNotSupportedMessage) } + if (canSubmit) { + coroutineScope.launch { snackbarHostState.showSnackbar(submitNotSupportedMessage) } + } }, type = if (canSubmit) AfternoteButtonType.Default else AfternoteButtonType.Un, modifier = Modifier.navigationBarsPadding().padding(horizontal = 20.dp, vertical = 16.dp), @@ -297,18 +307,10 @@ internal fun InquiryWriteScreen( InquiryTypeDropdown(type, options = inquiryTypes, onSelected = { type = it }) Spacer(Modifier.height(22.dp)) InquiryFieldLabel(stringResource(R.string.setting_inquiry_title)) - OutlinedTextField( - value = title, - onValueChange = { title = it }, + AfternoteTextField( + state = title, modifier = Modifier.fillMaxWidth(), - placeholder = { - Text( - text = stringResource(R.string.setting_inquiry_title_text_field), - color = AfternoteDesign.colors.gray4, - ) - }, - singleLine = true, - shape = RoundedCornerShape(8.dp), + placeholder = stringResource(R.string.setting_inquiry_title_text_field), ) Spacer(Modifier.height(18.dp)) InquiryFieldLabel(stringResource(R.string.setting_inquiry_content)) diff --git a/feature/setting/presentation/src/screenshotTest/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTest.kt b/feature/setting/presentation/src/screenshotTest/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTest.kt new file mode 100644 index 0000000000..ea2d63f1f1 --- /dev/null +++ b/feature/setting/presentation/src/screenshotTest/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTest.kt @@ -0,0 +1,29 @@ +package com.afternote.feature.setting.presentation.screen + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import com.afternote.core.ui.theme.AfternoteTheme +import com.afternote.feature.setting.presentation.model.InquiryStatus +import com.afternote.feature.setting.presentation.model.InquiryUiModel +import com.android.tools.screenshot.PreviewTest + +@PreviewTest +@Preview(showBackground = true) +@Composable +internal fun inquiryWriteScreenshot() { + AfternoteTheme { InquiryWriteScreen(onBackClick = {}) } +} + +@PreviewTest +@Preview(showBackground = true) +@Composable +internal fun inquiryAnsweredListScreenshot() { + AfternoteTheme { + InquiryListScreen( + inquiries = listOf(InquiryUiModel(1L, InquiryStatus.ANSWERED, "2026.09.08", "문의 제목", "문의 내용", "답변 내용")), + onBackClick = {}, + onInquiryClick = {}, + onNewInquiryClick = {}, + ) + } +} From dc1277543fbcdc10563a936f893ffb53624224d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Sep 2026 18:23:39 +0000 Subject: [PATCH 07/10] test: update screenshot baselines in CI --- ...inquiryAnsweredListScreenshot_748aa731_0.png | Bin 0 -> 31873 bytes .../inquiryWriteScreenshot_748aa731_0.png | Bin 0 -> 48487 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTestKt/inquiryAnsweredListScreenshot_748aa731_0.png create mode 100644 feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTestKt/inquiryWriteScreenshot_748aa731_0.png diff --git a/feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTestKt/inquiryAnsweredListScreenshot_748aa731_0.png b/feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTestKt/inquiryAnsweredListScreenshot_748aa731_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6b95021137d9d9bd37f7a01a290c099c0288563e GIT binary patch literal 31873 zcmeIbcUY5I*DuV71EaK=hfx#)*ildrrB^FO6aj* zHkaBgzga{?M9R|Ql%0skMm-UcO;>*s15f9lsdiGCgdX0BqA+TZ4OOl4*Tq(DRy3!nB=!*z=H+6B={eU@cW&xh)8@VIr;aNLf=R@0A?omg)9TU&Ocn3vh*^=-eh__1)uH&>5`F)Z^Ptj~y(TO!_|d2HYIOnp|rl>>ejKVXu)5QWY8 z<=RNPZUCA|H)g&v>ajSN73D`OQ2@g5G*k?0`$Q9E=05Q9fU?A~mFk&_{zZ(TD}V0R zyN6*$tJDwiH;^;cHoU-!-l*De>$@5)4l6~)Fee=sQs7$y)X1fBZ~L&3H0fd^>(VLn zaFT!3Xw!7>Ws(O9h3ak9sLvb>9Utr^%wdkvzC2m-yv&!^UZbqruP;osau_l@v<;(2 zPNqOrNz=TWR6Kn6OM13?&}EYbU!!a{H85~` zRNLDYw>`r~)APQg@9(5gleEGz1KIIvE0ztb%HsA|ye8m>DM{FFt*)wsT%VxiIniS) z2jazvFy05QtPa@^$L|_S5umrV74B|-5*dz^9@kqL~yz`@w;p z;)NY3NiP=YywW`Re{>!(A0w`|VxwLiafbFK#%L9gfV0mNx7^uMa_>7Iksn@biVH!q zOhiKPwYSX8!B)PH~>)x6QpZ)h#^*FDCRab00+B5C-!*{wX1E0lld2<*%%rJd0 zoO6T5Z|*DiQ6tK)amlp^nwZG$?sl*mMw1eb8^Q}D=f6B#{f+#>TB(2+o7{HK9|gf6wChHn5N)>uoZ3J2#O^lEks^OeU8*%$15@ zhL84IrCyxPh`zpJtV-PXoySC)q(mG$Hc{Upb{P@xh4lMX!W&F2Yvz4eUt$K({fdC* zD%pr2+Lu4qD3x3_CMHsJ|FF`j2(0V@XP+D{uVDM^i5$A$DNz(AiKv9E3yQwJCXMpY zT4oM^ZuZNM6aOWfda8D8vLI#7meKY>nzU8@$|Zdh`qY%d(#)Y)MRrlk!gs!>VubDf zbxu%&n~|--TsMGBKrwP*wODpLa7cHCdf}09T1M@Op<}oQ?}DE z={L39*biG!B3Ji=_kl_bt)0h$&f3-=yY2g6OTDavvk1h{sl?a9^ zI-sm;OE!Q1qT>Ls+KBmu+G`v>oPqgzCMu(2d%i%AGbiAp`ON1+iDxOS$@&kHoHNq9 z#YIluq(mJ4ysYbOGS62m>n`M|t#~=qW>as5er?pW#jPebRII70ZNI|-tsQ6NWwvU# zWTJf22G!zI27(rgQmE$7oxwpN37b3P+P}7H$!lNWK~?+2MMQ6oM?B)!?stCR2Jx2i zxI&V2s}ky4M@t}3G~;^mV%YFJyx*F%-PPo(>7!k$Wkl-z4mRCRQG-{6*mjhbL|}Jo zK8bOAUG6rrI&C6IRbzseQB_?aEq~-P;=cXbJlWqRKOJ1w+pl$jhtFiZ#WS(etkUAP|Z>&wq z?CSTW1lVvRK0myN#)@IT^Md9HFo+@}1qQzoXiqZ{SxWuhI`9pcts?SMyecVAcH8$O zINi|GzhcT(%*!fvXlacD`&N?r)?rJ2h39sT-bDtf<#Q8MGkm6Ar79(tZa?D^hhf zL})eqs)91Y3ft6QGEgbbQqB*iF<8Ns6D={jQ9by|7sBx_q6*JcHr&rq6US=%^h7M* z6}Avupcd+p^@CYPH3}iL#*S6-wA2I85Q$OMA^roaCvGt!Lv*2@oVQmn#nVg#aOlfi z7xgR!N_$f6a_7aGpplz(jW^lTuK#X##n5K9MVonNY zaa|01OA-eCxo68!#Ks#VkDxyb(*OU__1%EMrsd1SceQ)(hoXAP+G?ez3)9>e9S${* zy}p!QUlHxXoMh6uDo7bi3GJ=N{Zsi9S~` zpCtTJssb^^g|O)j`}FTesDyCg)-qZAs4;Rj!4UObU+X__ApFm#FkODb51Ry$b8 zBoiot7nNm{;U}*83BOyXpj{{dedqbM!Z)zc8)Gp!m=BHtmOFEof@|4XI3eT8CV|!Y zE9yBEJ2~rn{eF{7DuHOTKx+Kuysk9NWbYmSM0ECEFpszZu#y@-;O90Ff`0p{BM;{T zo?24Vpbq5qdi(~?>udh*pMY)n=P1>TqEfHjAHXe^0r zP4%5^Ih`VVVnT;L9^Gmv*bS}L7jSf!lqiwgke4ERe8S;@gNB-53&i1FW1!_}WxXpG zlU=?&&jEdrzW}+}&uB~-dh)eKVd=T<5Ubk8Q~9H1CsO;?JdF^b-$gvL+MSR%|z3 zeG2ID`3*4E*Txcm>fM%mN=vV#GKSOzTN0p&K?1o;8WvFOctyW?DzsC;xWud_D!oER z(lc8$n@`#hkORtmt(+jkh1_^cXh*t+ptUIIkqJfWxRKC8*Fk>&w17J&a0>6(lIDOd z&|iIo--1P<`GqNNiJ}B<3R_c|^^vGrN#b&*-&3PUt;8L$+wb*0a3K|QyWdVv$YNWi z*)8xg8Gs@5W+O5C47nfYJd!l@bdg+EzS>HGSF{pG8F7pjHbk?Bl!qM>Q2JNDkq94W zSK7DYP9xsr@Me|qwmv@3aI2CEyD`CKC*v_{rI2f);8)+xDGgSyK8y@pP)OnEDtV4< zb7UhS1}{JX-ny@YI2D1sA46@MZXo7+&J9NOx6B0|Hs_6SdevITwkqW;Fo7T}Rb()z z*q*qR0f$Jgbt>OQNN`t(dQvd@Zp~Jeu&kF9aqN=!Lt~SA_-G)O`);LlJIN^9m@ra4 zU6AJKP8kk!tDs^9SMbvPhoFF=kY^g$vuk;_RVK^J;KrAeVwV&dssf1>|G(tS|*kjQYHFC4* zW;RD^Wxz4w;ckMU{s)byD9-Jbtyn8UY*W8Nz)^&x29F0MX0pqn$T0=1&8rtVw3vMy zHSMO{I@Xo}Z}1sP+-p_JTNx$<;cfsbkg_Ab-eWj39CZQn zoobVW6kM-uCw>fnIAXSXoB`k5Wu2`YJ^$`K&#owX@S>}$ zE5GHBkWV`OzDb1ZyNsLI%TtTv%S)X$p845PlYfX~9ndy#=TLhdb9cN^DSG(vQBMz3 zR{^1pjHOc2vPe6v&|B< zo`*z1`a}|zG0c*ddhJ4kWrJw?Ybv>^m)_GcicLOgFXH}+)z>TV4xig z%9p~hfYlC}{-X5KaIUTl&8WNj?zi`Tz=b-^pF+;nhx6}04Dz~aQJD`{O!lEoy|C6B z{heE}l$xsL`?j!ypG_|D+F?<;LLI<DJlK`!B(X4Nd&l@)+yl&L7o$@RFCx zJkEXS_)FT9JI}2;+OC%q-T6jpDfB`<4jsjx%84u_o(FPnF!j2O;mUa@gZ_-TQ68&| z)-zSFzmwPN80kXavK_E+`OZD{yu40Gzq*fHs`d}1-6+1W3~AJo1e0H0Ft;T&L|&rp zzM8~1ZAKzYC%&JFt4z^uh{|hfT=3wpoJ!nt;5t2ePuA)_jDRydMKE!1Nq)hP6U6Bb zr7Ks?HE>b`$vo}6knwp7THhYya+*v|Y$`JJRdg2Dby!!ethV{CqG0xrY zX<0l&JwL-qA1Xd_UJYLSiNEYB&^FyyU;pCoIaYYMLvz$NMC96RwIsfnvgR^}3`@(@ z4NM8>ztFgTQ%;|*w3H!YPnvao>Ac=BZwMo2vQLLMw0ZYOLxD{Q^EpK#z9T|#M3mS_ z9+m|r#2-@3&A0mQ90Hne;5|MKIa!d;pqele;*-Bmo^zVLOhU~Dvjkb{$&XDYwNR&g z*%m!Z1*&qc(Sgh+g@9jYDQ5v=U`_d}T#B^`>)YMkg?aJ!i=?FKzrAeh0?P^r(Es|! zZicJPhtC@5g$LXd#RVbHdTM8D)Hu_grWwNxQ^mE|)xI6F3BXF(FG~E%r==uSTiYw? znNgqOqeDN5V?7>*jaZOBmOzI}P-}?!lQ|seVsw7{?7|5MEKS^cDNr3!M?%o5k-s9{kPG z1?4`Jv4Btu6#{+trPgkjEr>R4N^*eeQi~eC%jS7(&8kPyXoJ6>#cGpoLxNx~0K@5L z<=@VQ@6MI*GZAnXFV|pC&73kt@jQHJE6EN1GZZDD;>pJRj-w=_3){9phn~reM!@mq z~{QbepZYV)s&^rNPcMxztzN>R>%)U|%LmY&XOl><rN-K}T`465)pS?_75W|k;5>$Y(VtXdQXB97C z6K-BG|b+SbGd}63$bl$%g{}eX`ZX3xFBgn z$?y(RlOxYKPa^h(s}*iG(PV?Jv&Np3Y?5O5K*G$M57Nu=mFLKju1Cw+bz~90mm0oJRX*S`sdwy0}i-w2%_XPr58?OJD>YTG(Ppn4Fyyn;6mlI8K(NDluPdtCnqPqpMCeT-ad_Nni>6oUR!%x1<`ZFKyFWFO6IpnCU;C=D~ zqMVI9L&1LuAn+zh_~}+xeh_oIj5H>Q+#|Q$j~1EtY`60HhLi^T;5zptr)w{&7V8+$ai?_-bSF|prIfq?F z4_m2M=SFuvEoanu;~p`9tyeJm(VO0<>yIFEeO!{wfAio@ zTr{JZyDB=w8vpz( zik_D?sWRP$Uh=9%+uTkWQcW_suRR$4vXYXlFtd1u_+oC#LL6(2$+*9!;GTE4s;UIr zF10jv_{WhxG-7EGj4i@ ze@#L3;>!kqcF3bXisH0^Vu8nS3;B{E+U8{F2PxfeD^_w+ik4vWmR_YV`9P+~hmLMC zaiK>HoA6NMZw(6^c4z|0;@A%P=Egu)DCO5#WOH{K9J~FGm>jlV!kR#5eR-hKkdCP_ zGbpJC2YRcn%w={&M+hOr_+E_qx5(vg_;{tDmB6*)Z;oklWYs_?Fq+^NZyeSL*UGh# z?FEMT6N3^BO3R$rOR{;@i{Uu{Y#Tn0FD}yV8xI`_B+>}{g!t$^PH%78Lgt6D%S@6Z zWUFzb-zKe{%tFuShWdRMCB32A<%(q@dpt;FJ$|dn0FH( zd%jyxBzP99^n@VwoIo(;^bhk>vw&-`++SQX`RY9nn9%e?D&=ss+y{|8>Svyq@R#5O zwmq+6Fs#35KCpo9cGJdqxrbfKB7$ ziX!I=%+)IM=ge71EeG;8J3c#WKhGF=tCMfl8&jQn7}UDxXCkA8|iJ zv)?+iT4Q6haEfOyFKVf>NVne=r`;g6d;4@BEQe*B*TC+^J79}?1Br^_^%Z|zGQ|Tw zVLygu!CEcVN|p=}ShotL*sZO9>N^iCse=0@Q7@W2Z16AwpzgNiVN^E5RT0<+oA8P! zPfoJNaU`q}<0CgcWJ801&lwMh+csSzKf|t}%fh`~buE=!qdsX8ZxDDh0cF}guLQpp z^zPiLO&-3W>U?2OJ!7y{<_6J=X>Y^j+OVBO_OSaXzLlJKL zGYO(HMu#z{n}Lm)feFaB&U#`RyC3pgk05;e>I#C6$lZydDwEzdYBF`iFTDp4Mos;a z!y_%d+`y}hZ_Ts}mDkoNm#im3DKnpJvwxtb67tJ7J^li$&lquDix4pXqYF5w$R8ne z!E5A?sAnCFMoq^e;LubtQ-?1q5iZ98#3VpH=ECJ-44MgIct6rb>^G`aPmNh zuj2K=be(CetDj53rgZ#YW)2+3TLlb*r-@w+YsiD$;&13Dn;+g;S~(6LuYm!9 zBlD`#5pXtV2jtk-L*&sz|f2!}I;j(2e^z(0yJr~jA7U66?dfRios zaaU;eUm)0o(O43=_+q;J2LQ$N=ixX@iyB}AFJFjOks}s|oXegEF~kS`d!MAx2%Dj4 z_5n2W>4Ye8?2uDwwVIs0wa7E4Jlx7su(07Y)DSgd0hA-5ish?}kvGs?)6&-+v zOb1f&Qb7!Rk*#%)l1eJf{P{#>#7t47iS}vmwR}DVK(#g|Ob)-P2(tTW@cK;uRI4ci z8ntOZSlgf$B3B59Y5qPzCY6K7xeE|uS4zPS;9j55wKOFO-_?cQ1@v(!n!{)AKcQ8q z`}&aJrV!(bg@%}FOmM6WJjrA`Evl)+eWnjZjF0Q^xMx7)C+W}&i;W3qly@42)1J3% z+7t3>X|cwub&L^T3XK>D@kON!tl-cbm-HUO!Yn7W02bDYae?5qbG~46qppp-Oeyx9 zU)ds|s*-ZJgG|bs5~A!`5UA%Oujic?KM>6;icCp5yDfk|j<^$l3qrCC)WOW_!OV36 zdNU8rtOS;x%>+2vm}xAuE(3_2>J1QGQOLz6-)qCAEzK$qQ}y zyeQ=TZ-nF(u~L%kw^_5R zElo}7*$t(U0W|mGe<-u}s zu}i@TXcIE2c^{q(;eqeLHm`%`|6Okpp3A@>&CASQsq_3aUB5C!)6gGP#Bdju$HPA# z7f%VuezWh~lZzM^0DZ}9uB>PF`P`YCYSSIQQiXaGwLpR{T*!Y4w^;M7wb2hch_^N> ze3nppR)O?v*Sp&@xoMuuS}X&W%K^i&bhlCxhQHV=Z8-gCrnFU^bvUqTyXOrEe&`t< zc5Uc?v|X<+zuQy@dk;Pa5(45SJldYvo80)5N5pW=TU8pZ($w3q#>_7*o0gA}Cjy)I zrX?$1|J(LKL-ZDjEr5}V^w8s7_KNmwS zbme*Trt$VdOW7%_R4+PmgIQ#b(}1XdE0^Dag-ORkjN- z6350V=z2gNHE#+6DQPDs&#m2dO(qIA_*EQpqaI4qcLog{dLP!<&J1H@*yu_iu!&P; z3UsqY%~|#b!Usd)tVdD*>(Ktuc^}{nj1)%O$%<$e z>(Pn-ocXi3ZyT!?YrGSs2#)vEJH_8XGU0ng3RU!z3aMAXr zGEq-k#tLlZ4Iq@wqI>oOjUc1?G8H*%Y2&f*gD7$%wz~3<7>2AlG9Y zhe3~4eKQc_tyEpglv*#TSPJSu%^Y0~SwOu}S!@!NQz%)Q7U=3v9 zh+#VvUI7>uxEvKhxEOFbAlr!sX>q&e9L5=?;cm2m^NPH%gy{TNBv-L>XDn%s{g+0dK_<+^f@SrFt)c z7}y87v$b;#EWCifLeStwv3|=b|7UjqN1mAgPPJNQqji=+d9=kJP1i>(@GW0}G)fHP zE|+=GD*bv(_ZohCbaHcLiunDm+^uVO$&lC;Wd_^_zP_A<;!U|~MB9V`Z_Iagpqh4aN)f#}dWV`s;4kA@e*fhB4sk4m z-c#@BJ z7Lr;e2tZhhp#mUYE%UXy|Yt<22;Yq!C)aLW*0*t?40`UnC9l%GFyPxh*mLps1ox6}dVZ+ZrqVr7m)@6u5DR z2(Iji{*YhDUH`G{oN@>?Y1y=R>9Gkaim&aYs7DUfZPy>qWV_}1cmXG8H|@jSgU%sK zKp-@@eg9KqfNzv%L#{s`U&lDZdSRR}0ml9>5Kd7F4hH90X6muJjH5W7P8+ zQn10qm>fWDi0$tJBNy5{F>KG88kUFbL@{gxh_`MPY74KbH70T&xp`?~O!^XI+{wFiFX(HaHt}O=QNN}AS1p*#?jKT5P+f{I33hbAw2>>iC z?c&$XJ3xm2t$7#c3B~Vud`eFk3~D{p+YNWkaz?!Su@``Ksfyt4uJ^HL_G9Phg}-_s zp6CxC7$dn0#4;dgY0A)5cw&4tGUqn`-)3La-^Jt188s??VE}!0i5EqcO+; zS;h+h9G@J}-mXV|$ezIy_))B}<4Az}mNqA;z#AxSRnw)dr63eLMcGc+@j)T$yy}pI z1vIcc!shB%JTAOA+iVS>kLf>UZ9chXAv(|Lx&!6}SE4rubr8NlZ2{HCQ5~ix7>xcd zTk45JRdDB_&a?mvLDo{-jgdhjE84m+rwRw07E<8jq}m0?Q;154pRR zGmr+Ul!Or#!>_Q$USt@C`;YFa=>_M>AGi>*WlGZgGb7fwBwFl&u5-Zh;6yQdJ;wv= zw_5@@=VBP6S%sp!8%5|O6@eM=iE|e!|8Cg@=-S)+c2g2>PyH4*VAQeH{zYEVsh8iG z^)$`=QOw=jj=== z$#r25@xQ5<7APY-PRpgp6j08I67lHeLUsu~vfPeJK`nKdx9UQ!sGXDWfZxVyEV=gK z?(`}(9sE?$MbVz4oAh;l>#Gi{d>?5mPmnVdS+koMgSm<*8e>7j< zE|TQ1Hn+`>=E42DW{-Z^PX=VD88V};(1FrbSm?i)s_yK#+K_jxAk5YdqNseKP+gdr zAdI;4AC}!zY_hL3M1Jtkkz4AQ`yn z^zN;uoLtyeUuYBhcS^|vd=~sotuVAiW;86QUk=$Mk zu2A#&EQnFaH^E5&G=4im<@4VXKZe(_z)1&vy{F>mOTtgG#_By))5W{E=o zDY$8BV-&c6SSrwjt|$d%!np!RU?-S{BRw9&b>p2{g*=Gi0o%C08cRTa54T7QQh=t} z%zG-?A7=>y{xmRb{Lt6Bl59-$YguC%i*DwI!Ufssg4^wnjUAWEgGaV)T8qG|&k&C6 zsr`#65g49nZJGK<34%*9Fc1OKCNLs9IlefTkt)=mkRml5qUYnXg%*Q0N3(HKrScdJ7{( zOa&~`BIhBkF%U3Fhu3yx!wUiA2o&PP)Ksf$o-Ln; zHDkXV)Y=9~1o_gM5g!fUdmu7fOp<0|vz zm9Gz8sX8nuvk2`3A(tqd;;OIre-UKn#pBQ6mdLAmASrCFB^H{SQ0+i5Zw8jdahvGf zKV)6em4d-tBHejkmY9hSXXH*48TXLT%rZtB#6w*@fL)j0H~vxpBGKfBvlG>Q`_9mj zw#e5@1!~X>TB$<04sn3=O+2zlv465qU0&m&Bj-;c4EtSG85Dx{Ab04psm@~^KS$Q1 z7d1fgH^(OxUlaOPZbH}qXpuw4%u~=Ypz3_3e1XHJDhu?G^Y6qLAH05HbAJ2Fr71cy zYr1gh$1`@^10wm55Gao zQry6v^aU;;%Up;$k|WklDnQ=F zT`{$BsSa|dtpy*KfNLGL@&HgZEtq0x^gYWL=>t_^*_rK+TgN*FpMuck?m{?4Fap`e z{9p*d-BXZ%X1u9<@f*m-Ygvm_b{nh-T{f)(&=CVy2)$xyY;U0JAHDO~_aJBJ{AVj? zRu(|&8pJs_Rp#%ZXI4im4N8GnW()b@7m55bVZ-`MR90YRgYjN^Urf#d?{xVc2z3L| z&#$=BvHmFJ8FIO(Il0O%vhY6ienFZlL3?l3?le+HttDIr=2hSbBG!2_M^QZie}_lc zRIi17lVWR^`xLZ6-1i<@<*VFxZs7irW{QNSn^^Naq`iMtgOjx6l|x&k`FDc2a`I|P zi8lScs!N+t$4;h__5BSfhj0Ss`>F&eFg+I@lq~o9M)xawmU5V5m86nzru*}Pzl5k~ zw0m_{`>~>RvqZxePoHj$@&JJz%DzS7R3R^T*hOA9F&p6Iz&P}ofF4fe1`md` zJDJGL{%EX^=*m_5SbVu`pWtQYQc!lx(EAPGovi&?A6^9ahFE8``_=L;*xl{y1SupU zBA*r4ld0De#X%aF$p6=J=WhvciiZ2345)2ggykSfqk}ua-^kyfrF@ZvDg-oUkAQzg zm>VHRf1@I-9bo(pYB9YDDjjguMp#u~y$PVjI>i7H))@v6VO?I<)y2BDTt6&CZmpk{ zKpU=`3V;afmJ)O@t{aMg2kqTTCm#LlxMtJIg%cZ> zn@$;>QrG+G`JSFrr)`ht{JGyk_QKCQ%g-;|y5)KN+n)VbH;!w}vE2hG^1+pZd9|@~ z=_HHnjN4gz>n33_Vk6-d${#91`Cr&5tW2B@%C(7z z{3$EMlGYoo6Jp0YN34s+x{f%ut}NG2jrHU6*1AcsZW64U1S0Du!MaJXZW63JlItF| z$ht}JUjUaRNyFknWdg)tC`AhVPRr~YkPvtcB)oqBzgz zSFD@&h!R0{z@v2_@k2?+_se1Sj{xVnbxIqQw=&wu<9)2B6}I(+x}kAG7NRo3$-@R-*?{q&q9N$}-`^G6pz1yh|TX~@pdk*bv; z0Rxb@Y91VHQzHcfIo_QUH=qW| z-LD7QN%a#th&pCDUNOr8be>)c(f}Tgjk|FHoLF+#LWwiAr@GlaNZz22u^BQAvM&Ym?iUpY1c9^Sg=H9n#A69m~E)&ygU3Sql_ zFa8TVy=AEf5;S8MNv4?I?Vg#M24W&Fp0Ca4uoqN7DmHH!kKy^SNQA|#xr2hpBB*Ly z&PuVF6xpY|0lW}zA~;{QM7EMc&xTT*bq&T45p6y$W%I)eP1yplsJskifVtY;MRH%7Od<#+w_} zz_3~oAkFlX7*E#5C~zrzuegF9s8oSJSclP`QUQf#CxUyTb_f>YF?I8iq1b*m=|7=d zr#qznel~9oV;Y5T{GlZqAZZouge9S?Y#P$oej2UB@SzRMcN$vG76~JH?QxrjN0%yc5SDQRRTRzcKCCV z)~S_W^(Iq)XDtI7V?sXNl~TA1mD(Mx(zyx)dG;s{^A3psk_yd<$>rNVy0Xb>*yru! zR|rI(SAN`3upZ1}EkSMoB+pb14=Eine4(_L6C)FSm3et)T)8bKXYdO6 z-6R2fVq1*pt;jW1bW6RPFS=ML#!k80;{t|89VYNW(G)E9vR%nF6Mokg*y3=Tqd2y2 zU|E;IYJ2b5^9on{tD-|`UkulIE{fv&6f^NGb}QD^F;wA9RxE4f;gGC^{J?sle^qr_8H{qDfEI{=w=O!(c;(>I&A1|K*>@qujKx2jjKl+Gb zBFiy|4b3x~`KzNLpczy-)iYY|x-iq93cpi=swenM6{s0bj&p&uXJ_3OmdaDR+W-n& zNQ1J8>X+MAHZ_L)&68aw$Mbs5*lg*gAdCnuH%Ig``})->#!Yom1m!b zS&$y6pfsO>Yrg(wkB{n}2W7dv-g=rBp`5P;(Nf^jpcL>GPHM-i;aaBZBOS!+w=TR% zcs$yp(4?|HN_YS&!vBMUvt6AhCz-Kf-GnY>P&!J2$OIDF@{r|ZRJroexI$Z@Fy<&@w%NCTHL%CS}M=^E9 zU#dZ|fxAA%)gH{;ROWK`%fhRwr2~i$QXfEBbkl*be!m>I)Gilg@zP1v6xIsfe&puL zj|GM9lXD$PaOrQHjZZP(w|O>t#>drZ+qW@FImM+GG3_|_u7p5LET+98{#Id181xNt zEi4XMQ;-WMM2VncBy-CLGhSxj?i|HBHJ$DY7yCk?a-%*@V*O34Tu|mZ>gPvV+B(6lc_or zq%3cTY9`aDNC_AXRK6dcE0SFfuLl*G%;pYhXd#k8?b92h^`RLpeE%&4{l`+7^p|lb zreHldWlRO2rkvz-l!`D5CgYjG8?jq{f>E`V_4=GHIz$=R6qtW&$2<8~ zyR*ufb@+XVt|FsFn+FB$xb;~Jl zQfywg&&W&jdp+S76UOTn+cO63Y)zOY@of!Bn}4K1C+$2q6ZH2XU@!aB+|bSuqj!J~ za?3ksHr11x=X46H3g0_(eCAdDz(JH5a%g3Xo;M+`kC5YBevj^HviP`T0l6C?au~m6 zCH-8aw23`(TSi^dznpd5xuZkL36xDLM@(}KevP3*=l*IYRMbiWUwL~rMhweF0wy=M z+KA=Vu6}(WXX1nL;ctFK&R$8`U_SWO&SvAQxWNA9Z%H=NbD)ft`CPBuKh}Ix`|Ti9 zW9p=n@o^d`y|1iTnX6Ow`grBtrkbcxK4;Dqjc*K$*g%wU7B_r^cOTgg^1o>}Nogq# zgYQd0GV7g{ig8q4V<7m+gt)KHMNoONijJE|E*}`Be{;g0g`*|>JPs&{o;CPeN5haK z0nKAu^MF`I?!&Zw4Wbz3tpz8KBI2SRVFLbd5w3Fkqq!zFY0-S}|^CNA#9}RgZnU z)|H6b&wBjIjo9*k_I34N?Vz0fC@AjX8urF!?+>?b{P(cs|L=Ppz}W)1*+vGDz@zzx zvjt3&1OMqRQ zUxbY8oV8bjK>dt|*1JIavzOaiX1D_n{6&d?`C_5^#vw;QA6M^V^~ch$k+O|*Sk-ca zV%Y0tw&3+uOufH)P3~0V0+3Q^aApil7dXTd8-WMd_-ohMf%ax&;3V%i44d8t$`t4sbb$9i=RAq= z+3G(|bvd^WkqnuodVu%MRTRN@QFdhkZH+Tm2Ffgd#4@@r*ho>X1h>uKhu2+Sk^tX} zGx+u?>n{+ z27~R_P`_pfgZ+Vo!T!9tmks>I^;md640a!;aqY6PpY8k@_SJ1~?CId0@-xrQNId&w zSMa6VCPZUk(`RgKUT-;C_0C|FhPJhiJ-N0NF}#1@ZwdK(Bkmt$z4nK}x62MNR`K8d zJbUxK$>ZN1?eRaBaa52EoqWsje#)(>uI0VW!&`3xQ~M_Ruyq?g6M-9njMdVBXXmh8 zRL{DN@sy>F;BNZ6MJLq_i{HS)9#;(JhJbI_V}8~>(3kRmzy22`!TXaNvt|vZn|6(B zGN?qE#VW5*jYtz)G;3&;*@PS!$WqeMvlu#dij5DKlR)J$4Xf4R<*O< z=pH;`r?|R8cBiYp@>>$BFY}(C2pnAE4O#8ku}w#BPDd@-`1sS-DRF~q&tt(_Zse0- z_YvmhHgF2Fs{ATPKKnWxhx%f8?g(u7sKzr4R5zWWGY&+9wY zJdImR+Y+`Di!#dYgccwW5yQ0LTy!;=hws_8)pmT`(=i2k}21<^} zsHSqCg<7)S#LizMG&Y*m&g=xYnN3ZOPe;P9k()Z@#|$^ycDAN)AraR;K5^S~Nw&nQ zx)ixx5n{)m;3KQ)|0NIyr+tCBYwU&_Aq*lSscRv*|s}5GeZwq{Gw{8!+Q$1?A`Bi8Wvw>{UE`@D^ia?ZhYC zVbu^1SNwN7mG!S9Ya$R+=r$p8hCjs~M0wAe_D6r?!n=*#5*FOp@@>ptqc>YS zss+&!j8KGvsE0Cr*h1#`A6W@gooT3zq=6L+chtt(LTku2g+92(UOnLx=(>@)yMssQ z_Rdu~c}?0h&99ad*2z72d2@cJBR@`jv2o`w9HGrbu*Frqk7C?9$wgH$VaMRIlfQ*h z+Jq*|iK^+?0fkD}x*A$rZY8$4z;4sfmH2C1HZM=Shp?a?{kO~-LH}<(1MWZjR5>YU zI2oO!p|=<#SA5|^B*8%2qX{$1t5>ujBkzlZL207J!mX&Z~kB})*wb-(eeWqdu8}blQnnz(=u9nO zM62%TyY9UD+Pc5e^$1fi36jtt(rq?^^W*h(erv-{RhtMwEwyxtMr zvT(D{HSlNk&QvvOBiyFWr@zVs2>lEq%|;FTb7E*)HEg5tDZH5@Cn=+|#T6kDC>w zt5Q-@$c@1>js3Ry-*MGTM%F&V^r&#bpqD21F49^Kx6;dgPLo+e7`&CP%^~Y_ca&?q zikil*pl)__?1!~Ug#S1m?wS4vYOqvd`#b0M+cnGmMT5EGOm26ZWyd9_JlS^0nw?5> zD_vlLReXGL(fp<7W^Y0MV1`pK+>3M?HEmM~4yg6=o}kxN6UWCl)RrVni~Wj!X&U)e zR<*LgFFR9ZJEoXr9Y;6V*>?}maNa1_pB{P;Dm*`2k?-yFY{H*NL~Zyk=Y`PtTg@6h z9Oup@t(cFAL5yQ$htAn~EGFRnt*6rUx0?sqO$1}?Uv!m=v#L=a^4f|?|6I&%-C3W* zq6mL3{S2e?Osq3hx%E_Nw_PWO{~2Mkscz@xT3lqWg`HAel`?FlLVvPJjAs^}W{U3M zh0X-pY=6-p_mba6Nby!!R?atwS*1BMf*C2~+PPr;&Av%9?)D{{@mlMXV~*w&6~e>E z8Sdg^(rWt-!1%_#@WO9(&dRkCcN%>Mwhasv>FMrY)_%Kh+h!ri6ix^1`c)zEfnxvC zs)e&{{y26K|yV~`M z6!`QR1=x(c^<%PGLthsjBM!p!GAjnQ6)yQgzCU~Ra+qU+oG zlzey50?T_Zi}@cn4@P5g_4{x?eZD+V8|=Dsh{@6Wa0=#I^Rr|D_oZNB!(%s27#QQ9 zVLZ73C(+h+%s0Z-)vH-yisDG{kEw#WT2kRuZJZw53+<`|%Zv}rj{nEesP&$UYTW!_ zcVwqKZNd<8VeZATz*e$%Z4(T}ld{_r@`+yqXXd|O|0TiyEnIN(q_tDAR@e3tE1CI``*ks$o7fy3fRvPPpJe{S$!2&kk>8H?v-ZP5rh2kL6}I~-kR9K zx~BCa*>Pg$3a9y^!}Ew7Cwbr{g43mSi-oR-fvJYUV&X#`)SG$W#41;mvR%#Aog^Dm zqNw-I7TxzEAv;dRk|-KeL5fhyHO6~3KLVaBoA*kOT6LUf6D#i*LA$-cLcs1*v%oT5 zu@c67C&tRL+=A2#V=W!A9(dc_4`BA$NfAWdNo)`wVk7(FKvKg>?g*v61r<2?%&bZ} zR^jV|!woiF&IPp$^2=KHZq*w6i*}EskcA>G25JH(f$x&|J|}HpSBvaQ zlrsbazk~|&aFqnxl;_>3?aag}ExujD*xSUd(7r^=G?=IRj5rH)tEPzs`7Di(jmYoI zUZFt&BP{bLH~i|cD$>iYm~}F5qd6G1sI<1Q-mc@Ox)3Kt5@}j$Jxueq0b&9+Oe2MH z`oK>wzJBUvbcFS~g#0m*6QG3Rf^8L zw*I>JLFB{uyJI4vW2LjbS~3fMU1it>REeDWK(U3<{7`vzWyq-O)PR+{l*)2Sx0efl zbR`HeV6eUWa9pbrNV4?F{sl_nD?rnr?Pa|ClIKT}q%VS;6lr9ZvAVkvf9{ow-9~!K zCd7u(({Aqk723Unq60!2)n!qGCkKYbs+X#dJ0}SA4+|PR${{AW0U=uRVV>HQ5jy6j zT@x3|!nit)_%e@})7ySC;0P-i`S02OB9yGiBk%7`dw4l7e!sLZRNz-S8@%Nh_#pYC zf!hvMFQj(O4|2X?XKnKGfUDs2+}o6JX}e2lso2%XvhtqEoMEB|v6)l#-E?u>Pcft> zMn0b905X&EZVy+|03-`O@7#JrDY;3ug|6|IRW25RflQtjVI}+?(R)&gy$eZ+Ay*OI zBnC=th-dy-tf!9;{GH-_>mUnb#V_}#B=SnJd$||2mptm(ErmmpBSvZ-CYNxb9<+2M zT#k-4kK=-Bd3xbMu=*d+xr3E!a_qG{wg*v&#G#;u8Lqk z0er|HUO4*;;>m1`zn1sFr?yyrtE4&z!5@7dai!=#{^XhRNh{ayYiR%@5FN0mi+B+tvqI4g!7z!?qx{h z-1*K~QsxWPR^>lJm2`s#p8fJbj2`mqgAq!6jx#F(xvLzbLxo?El0zW=fVJr~JxP8P z>TnQKpzc5K*`<)b=4Vp-*-0`l)lJq66FoLp*4VJR+Unm@E21Xof4h7lc%xFI$aKj=%u&O9;!=mU?wrL<#9KitIyPH=a zj$Eu;YFLA<&t%7yD%&12195*r{s7xJ#W2I{FgxyT(B!-2t|DxwCs&11){rKixe^2P zDQ>uGwK;%F8dghi4%khKkW9noqztbrqbJVN*TSO0Q3q9}H7a_+@oq5ylKjA+QFV*8 zMc(<(^n!oH3v3W1AII{`4`cv6eBTj_$5Tf_&c4i!k_o0omozbsm{}W)qMP@(ZqX+u z8g7dWKW?`_@ z>rGD}%}=~@rGrCV2!BdP0vWvCEL0W86&;ayy~{d1aIt2=;W~?uJgjPM(C9JG ze(+(c6IN)qS~`+`n1>4m`z>I84OpIc1TH`B=di&COyG{XEV5yHwX8bMyI13MzaZF2 zrUf_rD9W;lEBddttgK0l{eIl)98hIxI@NMWa&M9sb7gnVu;Vb%4*A{H2f>67W+id@ zDeK;Bq{Dibl&G*0Aqaii17C=AjtK$#!4~p;ySXT{DGRO4{G9+zk-*^)T zL9F-M)bT;s0Y!igSbO)IlxUguIzY1pF?siR;D5jV=aT?;0>WI^+vFR1ew4Uli`J0r z6g5?b0j(!4_{}8BZo`tvhwo9^*RycNIs5zpPo zC~CBPH!0;VzRf7xsWnL~wyCQEe&NK=F5i)94C${u1A;57xYbd0bBPo*N%}(2AW33XK~bms9LGd62vq* z3U|GlApO;^`QY+%^xuD0QXYbs8nGTi;h!)M#My3dcJI7PPDv>c$iMgax8M$LjkvLP zdgIR4$o8#-P)hAwX_0bwCZvf*XoYM)89*MB1^3|u+f2{^;;zje^=sxI*AH6s#7nr< zQuFL7ZLuXO0$PcZ;wr$m^t~9;czNUaueJ1DY3gZyyALOfLuS=)scg&}U0nTQROzZ| zW{35rF$NnO>bIn-M-7R2=Rd&gAQSxlO>$}|rEX%&Z2=&Mz#0SPMabNu5roQI6Q3Lh!tdzg@mkV6AIj$Xfntt6-+aAiV}Zq`S0I46e+XH<-?xo=Oo-;48I z{+nIq4gKdsyY+`;rj5Gk+?IH|lT-x% z-~EDSjqvx}1BdS<^$RZL){S7Tyg;+QIWl?1IYj_-}MSa+|BJ1(C>DIm}(Q#Q4X2^H>=P>wS$W0HW1kYgph0tgv( zgm$HpG?S}H+OAODs93`<0WZAd=rJlnODjoQ%65k_SY6$?(yN6cCU{679~sz`U4xF{ zyv63Z?GaR2$=1(I`_WZE-?FvoKK0$xoNQ0xbq8E95?8-k;x5&7ak+yGIei!0M$N%* z*;W%X8xy!^2clJGn=DgR9oQW>&U6pgHi1Wk3czjwYQ#%MMVfaV@5ucYfiSCSe0sI1 zrw?!nnjqlI?H)woM-f+l{KXlRIX%Lkdy5?hY00(q<875}gtKfll#b&NN#ExLe0!oc zGI_0Fa3o@^rHZ=Esk(`Ft#dvHwr^kDWN_r6MsdND15-x$jnQex=QRe$Zr@kcU?o@& zl4kBahDdeuY3u7hoHY<1v~jZ?vAr%@aBX%d#<4^{c&_Bj16lsLAMrozHh$XZ{^`7AunC??dgaQpbsL)0C+QCmNF99V{%YfBK%YAusHJ3 zd2v?4ab}p}KV#-0CeJWJbIcUvXWZK=3#C*NcwRF(z5Gsl;#!CV@R{%DQB6Fov8(-+ zs?}3B0Agl8R_omwbwnZxbg3Np1leaxmgS)kJa*05RrX#J*Y!&^J8xHxk-Bq95#Cqq zFMmn04JcThU^hWCvE1oov8QD7e>rVnHzC6fES*^T*xky!wRCOGcii6zwShSTr({A~&1-TI3HQjB zXC=VKfnMVQ@w4t+at#l>IW;F#*bxo)`h2;h-T0FOb916|rho>H^8H{IZiFo5st`jT z^>}l*JGg57lUakIwcpo=t#X6beYM89iZ2gB8k2V} zbrp()%gHlPUQGz0R73RUNZFPp4aE4bkc)3AQIKc+mV#5VMBU6G@a2+{^}>Q6wylY_ zZ|;a~5<@;pFls^^V47x+OcLKy=oFdftGy5K4>!C_IS-=CO+(N%hvc__U@B*j=tP_X zG7!h~QIjF%6I(&zOZo{XL4<*Q_zUQdeYinEkP8Lzh&TxDQmaB8E->d2eF*U!>_f)? zsb97rBmrFeC)ni72>~_vznB}%(^kZ}g#tfcR#q0YT;il6YyUiE0TBq+cO7C~*loT4 ze*G^=f*t}3=S6)kkOL7M8> zui-*&?n=6KJ`07)yx?@T`B~M3m=cg26f2GF0)Uj|iL+@$_r`i34yIUXtFWrIetIT> zA|%I!Isn9{Oj+gS=?uRtN;=alpUq_@T;3yK9K`6uOY169b8xD7$OF2{WSjW19#%Eg zBGZz4ysY7Z0e2T@OqF*3BhXI-VBbfsH;Lz`8wOqk5I>OUA3EMm7+NcDb#y4Z^xMoe zKYfT5-+xP+4W+ak)^p)ytseEz`u8A}K*_OeEL7VSomw9vsF=EpzpJUzffkz1R2XMl zSqT6TAWHuUMQwwEGECh7rg3e8AiFnOp#aLO+I9iBR^{(6pmaX4p3Wd{sYDI>B>XWs zDGm@u4l)2iQ9|ws-ipu~N3`!WVStlT8T~*HfHtjb3q-4sQW9voe^JM#soZnA%e25i zO1kvjk53~$xtNkB#9k&PJ37A{fty)luB+7;B>tIp!L`tpe|MEX^9o7k<@VRr$}t@X z!ke8Ph3Rx7qDn_D>FrEbv|@(S3n{Cr;x%tD$EA1x!9uo-47?NfBp8PG83?_6xmf_1 zpysN&dt?nD-i2HTpWhB9g}ej7Qi*CK$n+9Jf`LcO10wCkpdG4 z^yF$u$fbA7_gY&!I<#Hu(BNczUHIp`uYG*Mq|e8}p->9IVHU(B$>$OPWL#cl)BjXN zYlOJdr@Cb{*9{!umRh0y<)cYX8UA@|)?mYDU4cGox$>g_$5#-$yNw}4#!Azcf~J*P zR|oATw%vd280fHDeR(>qA5Y`0;USx}k{!H?irBBlHXeAcEy|7Ko;83lOxh3a{`qnf z;>_+Zz~cW10Z7^ZIumX<_Sd$=k&It_XoOz*wUc}j->wQ34GR^%3bMa%fAEu*Wh*-;%m>N5S`^f3jF*{YB&hWVIGGZh+glMT=S|(5zflg zJtwcR@Cd~Kcd5n?fV)v3Ua36D#r#-wwES!MGKqus#c8;Z{8oU(EBVa7#O@_`uPu(H z1wXpB`w=~dc(ib#;rYNY+{g?K70Xa!<91A4BA6fb(#RA6s<}Lmhz_AyM_!IqO`9_O z`i>TXU(m?+*9fVPy~H2!u@KCW0z&frUqEbeLBg&4u>0#@L&P6)7~@;krD)>{#E^x) znvwD&BH|~RpWZJm$<>w~+U=?ESQ+Hn{BR%QI-z6#?mnCY?B}fn*a<^O0U3E63IMlj z`Du@$c1P8|T8Q#!*=@=OO=(951tNbn8QDu(h{+f4@b7w-^o0@RH&yE{B*5?PMvlQD9>&D3dY{L=%k zezhzV=>8Fb@ciXF^gGT1WJ-6!YS!}TU1s>_-Iw-QV^S+miYv%F;5)%Yl*=bv*rp+hvn+8{`;~>A0CJP z`oA36eK?MPbym#&-=wMSIY0$@^i+P{hSF&et}6rJLOgf%cmN7RiIwM(p9u2A0R749 zJAw73y=UR%20BJ87#LZeI^QK-PT`}|&&+I{u?IA%8~i)<9+RIgsD?Op=jo)4luZJ; z?G1;>ds~o6D~HV*kZ`jM`-ujjvG>Ibva)@_k}ag*$52Qqun`L)udzgxN&Vp(PbWyP zbGIi-6$u3D(?>n^Kuz7q%ID?8^$smWWruqeyPVDJRO>?U)*s{EiF^?TIgw_-MYdtAdp%f6J6$-d>Lx!u| zdv0LGxh-)&{{=4&hST8+ZJ+s}CxTf{Y*L4_E^6RW<}{0Ar@}IfjywVD}2fKJIX8LfoSzHb{pBkAcYW+AYN0pJq{> z(Rdc>9d$@>YSfyZoM2TmxCqEv8S;iRYtY@3H;WYEaq~-yyL~&Q6GWFO2dSt-tXC`? zIpP7x(NK9oZPgs{`IwV^N%%?-MZO2Ij-!hV#70yeAS;W9IM~R2K&jkK$s{Ec=}pH0 z($7_Kn2e2Eik_vTsXb~!I{14t*Df0>JC@;3I8W7)BD%L;wcfZ#?aeLu8#<31@m(U& zLxtJa$IeNys!1NVRL=Jz$+`44O}uUBQdgXb{mnsfrd0G3&Ky=*tH%*c2RhhoSJhxXy1N*9Nn+2xBH^A#m{ z&&j{@5L&{HcUraM-kvY9;_?GN<>~I@fIv^30IY0??yyC-xQkGPXb7}UNKrkoFe~~c z+FDId4!8x>3pRfP(dI02DwE}XaO7pP)wi^O15cB`B050!C^#dX9p{#0a~*-ewR8{9 zV$8~HpS$(SErUAIjYn_aNlFXzpEn2{^=Ow8An*}fc!9=x(uxBHd>^jKXsg7HTd4kA z3GfjP8I2YZ=FP-7p00NWt|m8IGY+xGn9^hacBq18fwSZ41L;*f{n~aFnDOD$(yS@% z<|RmR=U)^<*c zFJru~JknUj#{D(rVo@CGP&EorgNh6zOLB+F=*hR*ZmeqQdbMoY)ysl_^-Bd+2QrSH zS~fuEpk`tMoHZ1cM7D-cL!`4}l8z%0vZivV>`g+TwPue*pCLMjC5P`pYr;m2`YvFTDq=u1KQi*?%pKJU)in-En>#}%fKOVQLAh(i@6`RlGaTY z<&lUQOF#>sZ}w+wqNW)#p|H zA$wjv4@p}dZ$Lw z4SL=`9ktA)sBxTsw=zA4vs;|X@$53M!4be4DJ{RYhW~uhti9 z@_yjJq-a`4UFfpd+kah~qOd2HX~}MXWm>N65c|%Dv+uX4`FLG<>WA|@@cxz&c==-| zju!h9y?iT4EFbu8wsFLYMcO-F<4~l?MQE8$$x>bIDeyfXL2<=+xm{yjZAT@EZ?!5F zlFH#O=kyd%bLh5kY@(?DsAK`(5Mk2k311BT%naF+A3uFd#$D4$$}sCvWcOvce!M_^ zOc4nk2^s4T^Gw~)qYB7kO;8=7Bu3n^AN$J-W++!0>hQTGvov7y))HUumz*-K&9&MI zl7wyDtO^1-Mx1^cDtZKtNzw246nRvJR!O*jaV^ebuff~a`9xcbm{5noQk#IFy;To{_J3 zH+CYx6j1E+*kU3VOFths;id{(H4S@kNuyfs7+cC}Imp?$99>B-)ZjH;5Y>#cRh8$d zB}EL%C^x#<>#Kgaq@u!((cNljyxN#mtZg0qY?1%r4LNoTbWT$ITb*LCef3|;C}U+& zoJz`?fQfCXZCmdV4s%r5hw~C`K9!8>)zW3-YAlaaD(855x&6WVc##U>)Dbv>@59q*>tqUX#_gX!n|T^E6y?hzQG>FM+8w!HW}YEU;j;T4{Wz3-*)c4Ex|*WJ9_^M= z7Aia@-{PdQ#nGAQhDwTI`13##@_@OxndfeU9pTASDnJb_yTcfqf%0{^^)j`y#+K!d)Q^yhSCB$=zz)SE+L*TT8*$KL#CvKUpz+HoM%CRXC=? zLQAJ9_bx2TX4}p}7Wdq)dFxTCu;ElC&dF&u^?W&Z%W{`c)VYh&o>IsxWXb~4xv*Ln z_nV)ba}#0$h1L$}mAjI4{-v$p)9rM1Sv;%SZIFqvX^*E*bIu#{x2h|T#5%Lp-~ ztyYI5)l|QwR=R)ixaK2UYE?)IralpqVW6KQ8_LF29hR}M33+fHVB^3#1&}LWZc~({ zts-*f4(G7Mp4)eTnzTNyWj9^O_xVO7&zwe!JHr8Xl-;IH`@R^F?0Gnevt_!#tjE;x zbEvSilvs5%mLXCPKeI3H9Kb-I2J4wc-}eh?SB<0B4W^y|s?_-K9g|Tuc@LNtX*a+rgx>{}`o)_8(JkCif@#5ExF+_j(TZAp1HlEm4 z9(=X9L`CaPCY_*l??+ zb-+1ws$u;#krl1cfXdpfD|T7usH|$E_7_xG`dw?c(shF2t(#h#NlE9?PfSa=gT>H%0J- z+w-HqL;*1B>(g=33;P;u=K@=bb7xUW2Nr?f$EQ|^x|x7lh!HMV(OjJa(a&%($|R>c zHWsgn`BVQWYdEBY{|1)#g|iIOUO%a{h>J1Cb(~ECalCNxuy1(;sGOTw;~)QdmI!ls z@dH%Pd8PNgIRd8!o^#vk5*L_hbGrB`2HXUwbi4~i$56c;;R3=h4lmNL?b*bIFS>Vv zi*baFHq!PSUAWN_nn6>%{vW%^t06^{sn%~R8}n+VOVK!g{*WI>00R-~uxQZ{>M+W9 z_UG7BL5EQ`g?zqC`5T>i#G8JW!2g=OVcmN{y--!}%BIVi_TT?=AJRzswHuPP=G)B| z*|@d_1k?{V_Sgc~oqz|ISp-?twvd$bGYYLzm-?_qnCcfmYv)yx)SbLnEq$}i$kQ4L za8Rrxw-4f*ClBKQGxk}d6C%aeX~f=HxuxveqpXA=5gSSGq0nq+6z~o*@BAI)^qJU_ z7un>)kw-C%oEg#V z?NU~PSjs?XwsyeWjDaku)uH;PMIOCJ!ydMy0D#d70v;(CXj!dMOc|l6H6ehZ=*cF{ zJpXwH+4ek-2TqgCXH-5kf8$d%e3{8JN0>ZA=>~QlA@)%UR6K*6_dDl%O;5&ktIv0c zoP&BT|LO&{8z+XGk^w~!jtQX-PqRq?HTj2+!E{g5fbIoFgnoU%*8xttv;nl7$X%a_ z+1?8dji*q1hL=@sNes!OiimcAA_31hrL~rJ?uQS{{}a>6V>`DCrIcUaM=?z{G}jul?uvBfEci+X&j4j8G7{s;yL20!TM=i zw6+$wi1UODvhU9Rpg0f;7~_9n4_2J`G$^Xlt>9>As|77M4-~YVVDikrjWGBHeY|e` zU)l5mKyVWOz#(VE2_F%Tx`ZB`&mTe^<_1a@+=;FB^1B{h}*V+a5^Ec#Kv=|Z18h5ks` zzg8fe;64hj81&Ljc3W>39&(_}K0BcE1&Cnn=NXXOeA-YAu@?9kJ>ff?M4>=sS?e|8 z0I4#TF^Xh0-hJ{~9)eiy?!GxG{sMqhViWI4KIOZQopUYd8o&DkH1x0%N^R;!+{qBY zLATg_FsG+Ldg7qNH?PsrQy_(LrLrKZ0J;0*$-c+4z58|W^;`hD&T*ds)x_xy)4$qc zHDj=ScI)|+$vo$vCayyELLkJ$0ZeUv@?`H&OR{`h!z2>f)@BMTvz+Gsy{W7?nWTciqdYc3(g>~jOyev9uY$7 zZbMQ6J{~$T&ULZgeKd3*NE&c~LX%-yTR13N7E|2qa4M~Zuc~(Hws_k+D$?&5NIDp# zg1id$Ai0~|d~i^z{>LYY)}pe8)PLcjJm(P?ViEUZOdL8!P#4p1f%zYedEqBY4GN{- z19TRq5Q$hgKgw2xFOWfAIe(LO>*csJs62#;TEyIf@Q!1Bd6ZG-9Fls=9$}T^h{@9f zlllRm{ne1Y%Q1&9d_`yEYMHrH*zkY9{(}TN(e+BS#5eDjSa!lYKBj!s7Nu#leZ1`= zOBKQ=B!9DCU@KqRtA94rE%U{&$mJ!M zdinjc&nJ)j5gLCK^jdWT)YfFIFmMi=(M?b9zWlwRai8t;YhF>ihf6>}+g6aX>#* zdp)bS{Y|ehE_fxo-w6~P&w^s8GUJU|-95b{t5htvox7 z-`Sj2$}h~>*k1tv&e;ctb!Wy1r&VZ?vqR+$u~0ce=6O&-kY|C0D)_Oj*WfRnEXqc` z5%UKnp2wh#UvdUJ*RCKj3)zVBrO8j-gw(b$LVl#b+I&E}7;qpXoO$5#qv)&d6K^NH zHeTAt;ug0am^TWKfyy(OCO|msQ(4uDs|{pCp$f}5Z0aYVii<#grq+}DhBZirsq!3*Eh=g;F$UL$UpEjRf$H{b3_mpg6KH;3 zIOa{ObN=%Iu`{BWh04JTi=Z+GrkTs6zM2`l{0R?Fwjuz1A!5*>@&FM~K7%L6jaoZO}UtTyi}z3rd0#!OgX`5mYR8RuI&W zj5jdZ@2(-5V>e;u11iV<{j1y>h2BlBF^LE~F%j!I);15o@HUhhXvHyze7jS{d2}ZgF17&s-HCuqukWt@2mbVC8-mtL=qP6w|1jZIS zC5xwy+KtiyQf+DD)pMOGBVz!e>jyR8{B$T=%x#T^N^*;!bn9#?s zw`X^Zl2m2&J&3ZI)E7#T#x*{+miDqmrcbfrQxx~%0hf{EVK4j+ei+dnO zd%hz`q=>~2H3n}S*1K39u-qxn9|tM;Tmx{TouR@5BQKK9w+yN@;O}McuL{Ry1J=Wn?pVtNw+!LuC z$AZeV-UVpU$9^r^qpVMHHmgD3+4@h>F{o1f*U%22#=IWeJlL>S*`|{H_S;h}#^Q9- z9wC=`r~>DowL({_%hK29om8#H{HLEkFUpbh`Z&10B=he374JbCU+>aX!$xfSn#blk zt<4oYxGSzU=y$6FRLLL5WlS0;3xlh3>`OLqFpW*| z9xNS;^{)cb-T3-W-@q)RU*5zi!$+4A2BmbDXFB@2OB(8@^6t$gy2dJ0U%So=-&k8L zDy{!f+s4fLj@(`~8T54=^;(qDC}$-o`;HH;UwVL?pKb_jv~nGPlRHx5V75B-mwZw6 zL~tD@5R7Vm01@Bja!hu1D%MI-cJAS{?P#)7bG`4_#9OR5B=Ld@mNwg+MaP6fmE7v< z0vvYuW4EAmyWqkE{f0NO)Azy@(cLD%+k1YdyluNiqL4JyxDz}3u0nb?kdi$=R3E74 zUqA6#&>(W^tDNa$Sr5|r-gLe zt@h8}J&|9;ZGg7M49it|P>Sy@WxO^^1Y&vIE^uvrK|-Ol!CuD!55HrF{=(U#FsY|k zWIMjC=>Vze4aU+Ei*jf)b0Mb+q^FN2itX&rTTurRC5Xzs*Dv zqQ^Sxe5v0>Rd0sI8;uFWooOZ&EcH%sc(I{3KhE@#^j}Ph+yE%Yc<`Un1U{L zX|dupvs`Z9sM(?7!Xq2MHqfr2)GUfD=+3AJW|>W6MGgj0bNl zw5dpTq230qElo@Wmc+podcm>2M?*x#acs?~sm|{I4OlrB7uA53yQ`nCa<0yg)m4{w z8@5myfeYFXf={-9pOZ;SVV^Yjheazlf_sv_w(+CU`1NCR_%LvbCA+*^6F8XFjEsp4 z<-lVb9hN~i=2&mkDsS0Fb$i!xW)mw>W=k7r0GY%ttPV1OAM6S^{^r|Jr#k@5umvvh z_(4z)znNLCEbu82_$qdW^1x{ZS5A$fw+Zz6PDDe=;Aw>e#{~05*d}$-E-;-_!Ql0; zZJvBn$pWvomWas`BIH zOOdrF>L(61TXD#+D>wQ{*`uR`4KqTvfBuzwWt8BN-f*bd3-13^W&12GNKNYZ-oHY? zB~G^b6%2t3|73TO*Mg>c2Qi6xh?YUUji|oAdl$kaP0?TQ6yUe7YqwH37%D=dQGM%2 z&ry4fU@!?0x`jm(;KY9i@w^hqJnui$HaYlLw&Y5Yg%Y2>tZe@Vn=;{dn#2G+?;4y- zf2Y-7yzzWDNKhGZ%vK9|`yCZ!!)V+{)NsNy`M;ZuL^3_QKdO*4U(dd`Wb<}^<{q0tH12;gZe-4ni-7L zw3GK^e^4S(@rlGd%eKf+<{oQrD*b_Mfz2bvkvnw6b>~ zR9JaSVjxkSo|5Yicv99l#CD8u)T^@K7P-7{5V`NEmn!VOe_xx0KY$(;dJ;p0x5>7R z3+H*qVoo#!Phc!HYP;=wHzN8Jdauuu&P`g0C8zJZ3yXELC$c|gzE)l|(yN%U~V5cY*j}sj+r%Y;vVDB$FQ;IJh zU?rsA1sU$?sX=%CaF_fI?K3UmVuYEAx8zz zf7>75pxUgNUmZg2(W*hfB>V2!JuBF22n&DtD5DFnA-1Dd-6&GV+$8} zelP63$G!iUu~$wyPfjdnj!j!pti`Tqj(#|-(@-Yx==3CE&~m3XsrDe{%4|1w^n^5o zxh|pfs(m}b!D$C*eima@3n=`UGZGM`8L;n0{k&C|_sOXeQbcyrIh}EL|9j{5rRTqxHY1{pK z7W|g_=t$i^HQnVURte8dn+zJeF+gfn3MYIO?(J23!>-889GnaQ_57(>v|iw5UG z9^LfXDIL1-aZV1$uq!zI6aFRcL1g!p+Ik6rU`X%1uA$DI0|&d3%iht33R?gEwX167 zOU!yhgs^1qMsnWD^zh4vBzsmujvB}o7|?yn52)2*3ufuysDT@t6@c zs7qa9HfeA9jT>7sZDC%~55x|z+1MhEbo&-e-mu{aZjQnkwA$Utetgt;MB8d>CjJ&{ z>y_E1kFOr;Yn?%o_lB;+y=1P#%P<_DX_Yw}1D$~&MMGd@y|Gyp4#}F=8kCJ(`gn`| zvoyF}OMMy5)m=z>Dbv7@8qFalol!1yRS4Dv_1yogC@Yp#jo#3EeNB|>DnW8jDIbzN z7js>n^3!L}*k!U;A~IFDD>tr5$$@Yc{P)oxZb_>m`quH5*f%egw6K^l52?3hynVoApZ z2mfN(!w@_zHA42*oLJIVW!%;Ob--`#t5?gIY+6&t=`UFYVed8X{=?*;a;aAC$-m~Erw2g&Wi5mV|Dc3Nuexd(aq;w_|%MI-r=P>0^uo6VU<&w0+d zH9fIibwq?MhK%pSiOt%-5_%)uVJ~v4cmsr(G=+Hk|dYIY3I zxtFBmmA$w(Xp2v&m&3lqJ&rsn4uaIPGXIExqY2t;u=QoMR^5OQYJ?RW`iWKHBi!(< z-X>LB{N<1oPJ`eUyAN|4;p@?UweB`utZEz#pdv2`gxp!O)j1s%3Q&9c!eO;VufdX; z)Ntr-vR}v?du1N^WsZT~LKI$VH7m0;a8`F-RNq3x1B+(| zsn1YtSX&sZz2Fy@*_(na)Cj1KBBdrGB~IYpspE-;9G3Ux9(_l~sA?AS!TKtX)ZVc8 zf)NBIC%K|FGnEosBW>a!82A)hX~z?QqdrsXeW56Y?433bNk0p&aZ9n!l4Z}$zl?o& z4RIL%;$hUI^(8G(r9_whG7;uCPDLG^om^-itoUDYi)B?rqU>oWJkK&J93FT+G z4VP|Pq9q+cuBf=lFeGN(Hd0tIk5=oe=dTf+YX0{8n6EK)dEwZk(};a^%)pZSXsB>b z{!B}OY9i*Ni1B9_1rG9uy z;e|1yvp32|S=EBtD2Ocmh`y`jLeXX(eVyni19lwaN>Oyl)m{_3;tJb{j;l>vd`>|FH?Vqp3hd5RHoTt`%YWDbjPz2Rm|QPiN)VOM9m0Ku_Vd^q^n(5M zW57)O!_NTuLBw9a(P#I~?9&x?mZ^ZKPsb6Ywu8r--GXk|&)`>#L!CjP$lJX9V_td_ z>SaHk9IMj(kOLB+Wh>NvB_6{@ouG``9c7@Q6uy)(xbPntYZgb~u7-9nIhCSSBP5U2 z2d@EEwZSW>#%qy$cWxyd$8c)}1(W?-rfV9+JZv_7my}?idHx{~$ka(0qtB*@Y0W-t zv2S)V1LSXgb;7$hR2auW9T$zt^x8PSdfjqvLe{yd{7`gEl?Jw{6Z!g#ZJF4<+8wFj z3%S(=R;Az=qC0f&^@ei6Zi>9Ym>=xGW>0Y%dwke^fkGS(I#@)SAn0ZV60Ylr1&i$qL3d z4>X(q8P5Y>%|?)a6j0YL+rM2H7qyLE4ABc;o|Ht6R8?uGj~F%D)PHy>V}DHK3PaJS z1k@l;@Jz7Nen!(}c}|oh@vX|)hJrBfZv3xl{{&`%qxRaQWKNut7By3OmU^nWC6#}5 z0}gJMP99S8`w|B`y85#}?yUd%*Kl6thsW857<2kEWxa#S0v&xzxrV^}$<9`5MCYz} z!;Nhp_=C%e(ECbU2Y$IQ2)8D#5Sy6G(!m;WS7+x?`yu`d`AsLzZzi=3tpYOb=a)g^ z^o(W%#Ws3OyJzaRkTic@uU2pEjM2|nw;5`D^caWgc1Q-Q=0s4fWvhs zBe5R0(`CN}WN zo&0z{hqdD^t6D^NK<(PqGrCR|GoEP;i~Df+mv$whf)42t8!g?h)>Y!{3v8njEYa7F zRu9>~1$Xv7?{XGLCs0$Y`g7HBmv0v|e#^hwocYz!7_*|j)!-&)=TV1h1Mg zu3-FL5*BRB0@F5vkP+dl6`-yolRAC@H>zH(cShGH?CuK~@N>M3YhKhG3kcrGgaYU7eX8%9!y?Hp) z?f*C2)uOr*mp0p=qP<9xu}-B-Qlw3?Or=O-Y-1Z^E^U&GLL|miNGKB7*GrkoGL~V4 znGrG!Gh>?>X3Wfe4*kC0@9%hy=eX~G?)$i(P)g6+x8IDfQi z#$AvZ8l0Y24iLGZ$}*-zC~7-Ze#w=~zJzBRA<8dMwYCVy{bRkQ1^J|se#bchLeC}q zn?J#J7t|uH?~}S z8L4sY<%_}iSm;Sj>(iDx4CU&XOd$>+O~842e;dWAR@VW90=l=FQGBuy6>d{O+?`7{ z>nxm;fZkpO;{3zqF}ZBS-tskLm9s<1`05k&SCq_yAuI)n>4UhL46{nnQBp9Z;gbwp ziP84l>Zx3}&#g0p#D1TQ#H$y)4`wV>cP|*i3BNm5Hz+Wo>qrDV)BJ}P7>zwr;s#Dt zLjO~^y7EjY@zWWf18dr$vDY?8$L^oFH$igTvpcD&VIa>g;f=V!qvi4jF6FY+3RTUY zri8b>x((JGK(%6wZ?|NwiNWp3{l2cQu@Lv*gpPr+)t|T@NnlOU9pT4G`ZC$iSAlp2l{A>p|yFWrY;Cw_8L;Ptd)a@lH80UQiw}4Y+XO^($$NN3g31jfL#o@h&wK>m@Qb^~2(PFcP>*t^ zKe&r~moC|PeDTCjdIY+7wz+uNyLkG&c+S6MG4Qb%30jPKEd~J>U4q5l(6pPUQ62`h++HsX_<(_o`}X#v?W*wyM%X=vy=P! zFSST8;ZdZuvtQHN=mqo%dmg;PE@%A4czy%uBua9e#vHqD;f^5gGfD`u*U-(eWdWaJ zDBQyU022zLr?o5f?q0yCM?>ccz9*8{mBHl!Y_ECL+qSL=K{G9M?wL*=DC_Zr74VV~ zfdd-Zx6gn^TX@e~648L}?I4BL?1M5hvr@B|mO48rk1Lzf7HffnoV{?4A(62^3{0m>Zu9AdjZy{EJd-5vM7%e`0O)JPZgP z^WFhrT=0{8OCmN<5e{mB7QS_x`tdzSUR+G~wR0i#UPpLC41Lqf z##5ruNG1X6e&Lg}3&Ow*d2$z;{Bv3d-;sQ`Iz+s!qg4~GD*Uxwct>+?_`L?#X^KCs zlltp~6vy*%J>2VaV-FtdvI&<2rRu;zCeoJN*S_^xZhYF{mDAFDd?#koY^J3^tN;LE zv@vwszX3!_mLVZ;wV^@}0NIkF+5$M;?OjrIW%p)l%hJh751}hHs#zG~CS%QSvbS9U zhXzbvV#MZi4a|B2rtlqNOmN=LH2`sH#^dxLsG)V9(X+hnJ$X4eHRH}MSm2k95GRre z*Ac~2Ry=67Du3oXh96ekUEyx^$&Z-JY+8mq5`=S=6@*(BoKhznXgpH(inT+o8xkZ%igz%9MWT3#w4)|h6cQ~LTczmk{@&`JhFz3X;C*8xxr^PLG=xGxa3X>)X4 zn6>e*#`={~0B?eMW4dl~{bQ8^rhu3_)|fkD;vkiG0<@?9YoKsYu>YHoi=Z_BulV)< zFBJ8J^th`7P-;1W^p1B%0LO#^ab_l2_CI$TtPMOO}j5DK7Fe^CQ>X|JoP(g@>P}tS>-fHsO9i z@rizMs9J@HpJaN=OyKXU>&_zL((ZAg00b$W!ht7nzl&v=rSk*eBaI9gT0M6(olHA3 zt}Gqv<9tMb1M45w%~dWQZxM`+u2d`$bSq2dn^TiWQNR{6Vt8E?Wiz#G4h z%%wyDgYLgYnw$=Pp2nVot=dd!KMxioDa;K$(2xC1&l8{GZ*9#OhFk|+RvXWiAyce= z6XKj0$s&yWrRQe^p9epV|EvS(L_h{@^DjD`*Xs&=1FdmZ#5aEa(q&Fg&4`R1Fq`SS zJB|7M;a$7A_bmW`a^VC1^ulq#^Y(_5^Sk1I;kB(t=W{HjbrSD{UOrL#yW(vi%XQ7a*meYIeK-G|s)yYG*_STONtFJK z#N0`{zmQ7`no?xzUHEUtp2d&-&zdpbp*G)zh+_h&r?-IC-hqmhh&lk<-+nvEW5!03 zPHN^tS2Y5Tf_?E;wLas0wM;3ees1Z|i_Q|j^VdLB2Nbt$o~j9 zdH0ZbO3K$%t+miq_JDEo@>|vl;w$rrY<-VT|L=E-9xBdK(H@iWm z1K`x@kjgjgT3rS|=KqOB=K!2rGevV@y6lmTj!&h1UFCsDgk=i~ggfj&hGLEs*N3}A zE)Z7R3Ft0QTZ6(z{N#juj!pHk-$e+Q7NKbcQJPlaak0U}6g23Lsb?e7L0OPYV1*LN? zlcovE90NnzQyU6Y-oon@AU;MXRM%zZNHIMW&5ymM;xZ(^kvW_RQiCpH2e1N!ML_F) z#A(j!uVh3qVg{~ZY2cP*hY0?}4-RGE1KXM!QUOr>0zpi6Gwys>Wk&6NbnKO_L>w{@ zy=+7q?~f275m<9BuLqf#3{1?UC~5OKd#A&X9P?>;;J*fE1oD&_vy4=vZ2y2#g0WY1 zK{5RsV&+;|aH}-=l27@8HxA55R&0EGmvpwh^Nvf#ng`Fq=DZRFvk-k`CHErNs(PjY zPc%e#7>*2W{04}gyM^5vC6e-yp^MkaoGGxBVHe0p-gL{a z)&~&o=!~qw&5ZUXBdhF1GenrRL6gaZNxLQh34Pm#9mR@_D-qdgn{WCJfgJFwAJ9TS zk|B&*am7L{G~or{Gr{s5B(Em)_g!c4JKq>^ZnO~z0n)N<({+^4uyZ6lai)|Yf_J>S z8`0*ZGAmv~&#RhbxLuU6>EZyce3(Fz9ri0x63qR!UR+W(+FYI)aIj4yZ0;V7Qq{#L zzKKrG&ckr~nFA8h`i?xH&S)>v!16hE5)M*=?f8ZbIEez;1^%g=YZzO1%NI$$2T8 zRv^LtB=nBvpXmaf4j=#8Lf;9Bw)@;Q*jgW`;Aj%#&H%{_>&xNMXQGgAK&L?Ok}7t{ z^i1n(5MM3@>J(Q&1U)0nY`{<_9{dCUHj*g{=IFA^MpOO$5Ipt|2TcC};dba+l!Q;h zrVH51B$|~Ymm=E_iiad~#YTL^<6n*j^L{Xl@~i|9nOT-(+!(+0`m4Qw#${SRMu-uY zl2XY%27k%}b9@%q+*gMHZuPTyW%{MDRX9yJ?mX!2K)QH@l{Pm6*u>hCtxc(#P-YCF z2UIyJTXI&duDkF6Na^aUy*pxlI%Q`glW)4$N^SFiPCc~;fo@{@Pu)=t98Y3MKY898 zcWytqz5b5ogYNqu$t1=#`(k!0O$2|se{5$2H2N0<%T`n&VYe8B3hSq}Et&zfXlFSA zy42-NRY)sEC8qRwweTFwsd9X-Pm*`}R_%mf)VQr2A{2(wt3-H)lCa*xw22S}=CbE+ zyYkp?IXvZoFUZ|8;Au!%hfX2Qxbfc0iB>wEW5SG(7leF(ej&za*l679-|Gfe{NX?( zY*?pc%{H}AnOQL(`-FD8)iGe?SG3Un5nY6*TWP$0nz0Gu^XS+MpFbbiUr!+-Zq@3J z6}|)=6tN9A{ixlrj4zpPC#9E9ulwZ}GFVR_@Sfdbb)!0d*1@xzl8gQStin#@U@LLQ z9%}A?pr)(4*DW z3T(n|?2dZt95%bLQaDGco^==*vTox{efbl2B2 z20G9E$Ca-G)R$G2IC^?ZLW%(KT~QDUIbLGoGi2=>~Tv=)2LJNEtrUj-{ z>5ifI;{vj<+PO2G7l7sZ{JPxd(aFGS*vv4nzMD?RuLrPJN?6Mja}xw6;)_YlGJT32 zr)tWp%nAYW{B(q=5)9p5K$^Q0cs-w@DKgW@n9sSX(vJrS>Le*^NGt{{Qsf~($*Ktj zVm9qvfzJWWTY8{w2k2qA`Z^`Cc|6}h4pY>*^?lGK~}Yh zzscm8)_lbul4Gt!YTf|r&B=L-@96zFWI3@l4ZbqBbYikW2Q-|}iwkC`K@pZ;UQh|S z!Uii4LddK>6QSfxRIWVm~?pfZW6y=2oe_{r>VAXE91Y>Cu4qq>-1GOB4%agNMmwba&Jq6X z=DXVALgt=49&3Fj6}TMn8x|ILCGINRrFdY3eS+scgEO2ILc7y5?XGsKs) zV@HIyAx8dC>ifiLVd#@1E8v6oU~_3Svnk#b@S3i7{+^PyF?|oK|Ew=l;fneR@@6wv zK7p*_=4~$R!g>CRa{GgT?{yTi@xV!6Ghi&g2y~i#XrU>tEh7Hah<|hfnb=ozW0^Lm z4EQ$ywER-zeoV?=@Ewn1{m1Pi?+h68X_Q?zm?TXc56~{!m5q|uCGKULT?{>>SayrJ zcg+La0}aF&O_egf+OOIVr@-Qx0KM^EoQmuzGNoqd5G3t7(>yiq*{`-<6b+a7G_$ST zv^??nz>f6f#CW7r*bPpV%hg`Xv(@SBoq2Ep#_a3S6>v;+ylvDru#7mqURXxb)N2)_ z^o^=QxhWt!l@XYKr5{xR#%V}#^y{r*uOJDIpcUG~!$b(ND@U<^id6n#icW!vkI{A7 z3yfG-dOrsXsEopvU>>#6rFJ4;!keJ6uKhJ@2TWci7CZ9_-bPggWA_(;IQ!&QvwQGg zOxr2DI(I%tHJdUjXakrj)xgRe zj1W^M1J`<#Dez3&Aaw}9YAtmL6pkM)hA0Irhil<--zKge0mwdV^+dfY-0U;Vxekio zR#^>lUEFSdYc;)-CZ6$x0X@3tlFLWCaI&e6(l9@vDyfzc1zwr>VyVo$?ObnE66%v_h3I5}t%K6}=tog+n zpY&5A-IbAFwCoV&Z-5{sT-<=;_qy6?g51<_KR$S&E!cci=Qyv z%($h^h+dG16iZ8gnqeaTK&E&`p8IQ4gBF4GWgXnYpQC5iP`8f25->DzjWd!T|_k6qlqWewU8W3W@<+J&yYK9PB%sZMih14JS>Y%eGp7!)cGR_J6Q(=uwNMW}=ODN*_T?3m zkD#3z^B=sKqN8dP=o)0oNsObJfNpk3#V6ogC9G}~k6L>#;7V6>I?2xT!h6#=cjG!` z>z+@K!qe(|c>VD`ruwfuTk}Zv9Y_4ude@CsjMTe`%q1^Qjx1SXy4CX7k@NN0KJP>& zYbiD_GI`fN7NmZ+?HE2o{(UwzSh`^nvvC*sT-p#%UJ(22fUY`REG{#$`H>uMGb_nR98ZW3P-`= zQ){#|2@IPb*+I-T^>Zml#Hbk`@)^98>ERtZ5hd{$&=3zc9FqJo7bt0_(|Nmga^<;x z&0$kRE~5u$1zF;)9X8WF*mpWsPJ6Cj7T)N4Tb^E6Tx~K*Oq`ZiHZD(->&z|pnzYFk zE+beDsX>`9N91Yf)~@&P9a(or>l7VJz&?b)L3|m`>_uJuYC!N~CnS1wd|JZvaBpQE zo+XA&6Acg~wZPCa?AJ@i%24LtMGrE>K0Uz=rN|!M?Yv-Gm{UvOQ|4xD&<_>d&@5DY zl51!qa!N46N+iP?2RiMl1s(ZBQize21G*{7DC+h_6fyqiL}Ha>nFvX`fXc4|$I8@T8;WyBjqS=e?U#8qwg_Y$pIWi<2{(?-!{o;F1blMK zj5it{iO3Y!xW(ENNJXp%kt&~Z=UO5R#3Y0l>@W{A>Ofa<`g{7HIu3Pa1Uskal81b{ z?DH$5ow+f!<3_acG6X*Or3tB~C9H~x@ghd6_%YpApbjI<}Gfx+!P#1=->STo*<+RwaQ>i#LvM43zs zDW)^HftQ4nBv^ItX#a`WLWJJ@G!F=oAzJ77xO7u5F@yQ2o*!XjN>X{bWKB3z84~v( z`Ygq^i+xb&-a)<4omni)l#Q`p$!WL=)q5G1?PPQHMW+|%^?`3D%iyBI@=DjE!SttT zE-^_L)xHwAFDN+YT$xl}pKI|-vt3-9(IkG>O3<&UfZFjHAnueSVeJ!rSG9)WGn>6f z9Hv=FJE}~v_I9I++z=Ierzlt28w`e>F8({XlkbeT)HNxRn^VkEgNE?~X{{38C05c_ zltVZ5{9QNd`!~(BtXBn?7nUMr!9-s3cqx#4zd0T31v`{c-{+oo!hyQWwPYWEod4OY znk4M8)e%g_YGt_gt%^7CPWc7~k;X%PuW2N5=2Lz2tAN2_Y^8KzpKk;d?{foIyfFG8D}}WIVrxZ9KK?zf3>57aWx1n=_g1WB|Q$8hiYuGokp5zauqr5 zU}{b%v#rmqgiS%9Hrd){-Gpr)dX^FHG2g`o1O+weR0gnhy`F}@YVKB6cUbn1$)}Zc zB&Gq$t*&h8AzXCI%n+Gihx7t@@=4u=c_ciUP^&vS;?6Bh#fL%6#1l5RtH$1CzAX$) zOk(usM4i`c{zOR$%Z7{8#wl3Su%=92$d(K?jx4`r>bwRiC)dREIg2NpW0#v5^Clar z3Z80N3iX%4Uk-*3oWj@YvKpgRws-ruytTlI^Y5w{GGAzjB&psq@C%Zid3uMK?&}-I zlH95cRZb0wMg(3S^6H~13I#9py~%%AiLUb!Ng>qX%wMP?D^W0$SAb#$Ihhn_zq4QI zA-b>Trgpef$?wZXJ8hBB9}Ed$Wtrw#bT)RaJa;`e*x~w>w|X}o5S!6k>O;yX;|GvI zqP&GxIFCQx;(Wf4yuw-0vy;Mj{mI5~m%iNT95GH!-NDUapYPg-0SBLR{Zj=rHTCjr z&i%4CjpK)y*Ir?`2a7^>+dA>D*}LU~YFAY1owFYt(6K!0D}y`yZ5bRt(IU5&JNl8- zr&J#;cHdEl1xgUCJi`g8azyZ4AJ~J@O8{>cF%0%o7Kh3fWeo->2AiDQCtTwDRy)K# zlbTqz{RG`hJ~SJy5$r#PN^$Qot$bA<{`0)(h$+?W=_X|*UXL;aC3?tvvH6BSKiZJ} zqOEu=k5p#rFANiXk))cPqUalS6G>&Ra0hg23-8^7DwVni#EzEyY=OtBCL{C>`;IRc zSE5W4j%Pm&02yI&7O`4t@e6*=1?gyLj5e}zxhU1|O-S4a$3cFS^xaugZ-I-~gLY={ z{HK3b z*jpv?4DTt}z~nr*(COS8^wfCG1=K}2#ml8M<_vJS3+=296!Fkc<}U83=9-4kM~$ za9{_5900M8w5N5-5VxwbHQ&Z#cqAIeM$+R}cthi`T*vW^5fov9AH7q;>s|{%1x6T^ zcwnp9WvvMGb=oF1rHjFe&wxj8L6ObUId5-sF6rR%rk>qZW}`I~7>O&lyTG}6cBbsa zh)Ku(Hs_at-FQEy?2Dg1#-;2pTRW(Z4~q3U`(ixErNi<%>UcGBm>0tqOX;|89e5ed z$A^^RwJcX|o1a%M7u>wbCANVkBMAQfGkXts$#UI%$u&NJgs1hZZpt?>u=E_%X5=I{ z=_7xfUc0o;oet<~Fp?g>;z!HA8g(JDOs8T`D)N)telkiq;Idi;#U=;AJ14n5R+F3i z{$ui*t=dNW$>;7c1Bi7EGS-l^n5D5lf?T-|62!(E=Ms{;D+-1qLxwH^GU=p1&@`W@Dfz1A3qrr2Sk zBc%@4kWim=WxVe$0wQ##Wx*;1B!Qi2L7D4mp;3S!Fhk2S@^_a37p6YCY}HLkNCbir zeEE9-=GPvCvMTgeuaX7MC~g2q)Ugo9_GDw#=d5$B&U`9<_AYbBSm6c8;m+`LLbrEO zs_fzfU{yTt_rN?#$Cee4{(RoCby;0YCBL`)7baP?62-PSmS* zOU1)9%bXd(7-=qR)b~_Q<v1Zvdy)_?6^mp@+ot`NF_>+$?*ti?3oxK3MKBY z+)^)?U4hJ7@uv3~?CkS*Z((FTx>PJGLa6i^fq{h^noJlO-o~L%e$=nmJ}V^S^>oEx z{Uj{7$q5)4;yXQq06i~R)4B0Fmt}BcU#V`WsP5Bira$Ya1`G9fX*+MU#+GvBCP_<4 zDta`cQI@&SqwnpqS)<|il&L5QGx3mm$Z&(mJb+xW%p75Qzdr&y3@-|uLvstG+-=sp z;Ijxus9XM?_d*;+>D6rCLh6q{jop7B2p80LR!<_U_zx%!#eVpUFxk0p8HrqZGjuvURJtXV}JwNH2h+;I(I!?)b>#Zmu(h6!S=_ABo#SBYD(KL5ZVPJfuh1n5rq8L zxs_zp`^WbCCV8W|yX?Y->r`z_x#uMgg<|~Mw+xscnR#P(P@10cVn8kS-i!C z>-J(_h~mpvWt&b3L&TFhL&776vBk-GFcDY0C06S_YJM#ser)c09x!B)HR`svyzFmx zV=r=^lu=C(!HSZF^l12lF1zH49j8Ur(#X?^YDYTeHuV={f+#^qb`wL!T8Z_} zuH~5rn%ccHpPi-TBxUkmmkK9#d4cK}&0C$c<~}8hhxpXmRzhiOb=8H(suwB=sQUW- zUXFm!O32gRErWX;o)&hCiio;a!o4YqFVikDoa3N&JP2;ydr0iAXh|EkT5dp)7dp{cMt^D$ZY@dODdiFU0pXIyZbX!JvOxuwnybu~2kjsCRk zxbN9R(IfH0sLlZ;AKdXjfHrdjOz%W&x+pbV^UP#Teh+ZGwxWRJmFMyy+b1oXUqG{P z3LJQ}Cs#@27HIp;111YWMc~Sek78RWh*KZJE}J=KUOkifl|s0hcfk7;GLJ59*}W21 zR)a*t)7*=F)dbxLjOWnxDL)?9d2H- z9l{^gR8fdbL{Xj^G{L=d*C6U|U$8T!2a$fRfxEd(>%dq?Bf0BY;tA9c5g$m?7i6)L z8f$bbE5n55IS^>JkS**T8YS@Ex1vr*0}0vg*82t#iSH$ILv)kC>B4ux?2l*7>&8Ep zmv(tyFo&BSA2PRd)DK~vG~M_v^}$*5Q%>tMX%u{Khie;MSHg~Vi_!jW#M0i4detKi z_zbo#2Xc(`Zj{{Q*oZ&du$UJcVzsup%}?ktuniSNAfr`94RRMvz0QNhbDx{{AUH91 zQGT-)qF5m`bx?-|i9E13hNc8LDsbkKci7ppX>}EfTY5eJYfNy#i2=hdEzex2_aFf?#j?N#S|oV_!Jlg2{jGkR+|`_ zh3SnOshPH8MLaKaw_D^McT|xDp4t|c*PN4TrpLKScFs$)*kKtfx8UIsU%PpaMd%qk zNU42Aovv-r)^IvF4T6Ma8NCV_+Ci6KwYkRU_YQEIlEXFA^mM(?102lPdU;7p%ww9h zX@<+Q4vEHGSB!XO*s~)~e`ecxnv4(Cbm5Dz#+|S!8*IS9T%gnb5Tox~ z=_KyKWQ4E-p;3vm6E}_W$Q!^R0BPY6U{Dq(@*S#wq6gJ-_dwM)8x_26R=@Pi9zvfR zDz;GU-#6v>czW~n*SeU;W;`T%6shCC<-BEV=YoUoLeql+-P8%7zcH=zaWbWLi)AeE z-VJ`w_aLSEa8`34G;D6BD@j!}z`xe}_JJO>n@?1Rfcs(#VGBzZpyNs1=XS&d;6akB z5yg!?NHC}|KoPxbQrrvJHAQvcW-UwflldN-01Qf=rGTg1g=kSt0k#CNhYVPt+D{vJ z23Jcp^7!&`()(FQ7Obe0it^Xqhi3#dMSPuVrxf zl+ygf>Q14K^flcuFwx)F)!23j5jImL0%nduGfXm0-kUzILO z4A*QalZBYum`r@G2fU8OJ|h{4^Cnf5;*4h116`ydsR|P(3Nd=|147W2Xu-*p7Q!71 zHk*ZB%Oa%zV_Du*qwuw6zW>^SK*Pz%N&gyK4>sioyiZ7fJqS$XlW=qCujvz@{Ic_X zs1*(7@%6s>YPo|=_vYX48vs>MhR(lQ1&p=DS4$g2Ixdn4h37J@xrB4`?JIX4b=w58 zgQDw)g;dIQ`t}8hXBh@CA0StERucS7+I}O4FA(eNe0qxfOYV=>tw4ENN-i3;)`?&P^S!A^8w9$5UOfu!$WqC*jCf7C?jA#L=biTA6 z7u4j7iT|K(_iE_mC4bU@GI6_6IbA>FF55jeMKRAyN)x5`x$nz%q4AnuOI6e@i1nh0 z$ufIkcpBLq%GyyZE|4y#pkYQYsx9Lat4GD;_}XwK=t-FG2Fl?4P=0SE(l?N6E3uVp ztg&UT?=f@AAYZs{dgHis_{U#XYcC2^*oPWJKdF!QeJO)GB8k)iv3&#o`6^$_cIgt= ztJKL)3J3b`_8pdk{F17A`yPU4MdhVHeXjXO<3Qtjfv6*Fxcb3-QH;_$^4-Hy}!;##@r9xU3!MgMSdL0nuA z7Z=3E1#xk|yyy`vdPIvJ(f`aNx+|g6@Q2{GpZ-u1OR)c}IO6D2xADuyGq#S|=Z_sP z;A}lsICBtbn#Bwjrle}EZ;K2r%agZz_G{YzfqV8pes+X*(8fTw4RqKANOtNG9sJJzK%kDno5)&eIIaea7dm58R~e$AX$rz(EhFPAK4PA zzGTgl&tpOW;%as@xt_Kf0z&MR>sPP7@@pLkNZsiO9*bkKSd~3eNy)x``0 zDSFSKJ`dM032I4-iMX{PT$A_Xt&aa*TZMz*Hl;_;ecaw(en?>&20xV1fU@b;^wJXB z5@z)(aCQH3-KkDL@5Xv=g~`FYa*%x5+seJ$#63<@^*dRo#wxCf$+W4V48Wf2pJ4Zb zKVI3(G&W2~Of>eJdLnzsySF?rujEN`axy+@Ex2l4l%H?gSU<4@7ZRras8$B|<;$0m z6^~C}WJbw?%PxNfdL5kdY5dNeGud!g7E)ebe*D!(j#OIE<$}(I$fVNLw1_KD!qYGl zug`ZVN-0R{(=m$h#zrp0bUApy!^5L}O>tEft@H!9wtu^>s)64mlX=Sxr+x>7Tgy&$ zC`#qZ>eDORw(zpvF^0D&UGKYz+wv4ZI@2QU?ixspy6Fq&!ZV2T;DS;z z9*-YMsrc}rB`G7~ig&o?Dyfw_bBpv{`r&z7_xSIcr%&cB;kIziE%R}TlS|=8=dZ;t z$K6{l4PfkC4Ou;J63(oHu3IXMyZ7%m5(Yq+Xbj@Ffs*UA zr#bM~_h-$znZL?8ReQ`DA~eFf4BsFzSi+LWaq|^8tRc>+$uB8^&dv

`2r>q&ijv z`AhlF11-xnm&=oe+_UkS`9% z%8psT#z~Mpg`(~8Uh?GGe|;dTW&&slolXs5W;F|YfUu*%EKn6R;;fY%?|aB6Ge*#x zu^{C$Y6_^!BRQqBt4?!JdP6?M^saWV_f%l8>0X`ke zkuA-ab-8-=>c`Sj!%{S#O^bcT8}->i1jErMbwCDJ_j&U9Dp?lkLqS2iVQyY{C>Xqx zKzA^(DjBF3`QuFYWhy`c5FirQ8erqG| z-V&cQD7G^Gbu003Rb?eL(kQwsS&O$ji|(g_TL&H5h%N4B%(05;k0`4ff#G&E z2Y2@y3%L}8F$bR^rx&y5PP655T-UK8L&WXf4)l$h-b-3m&QF8C%|M%9x_tQsIw*RZ zD$B*C^n{Qb_b0^1;J6y3KTEr56eEM5jT*U?bp7?%g?J8hcKQO3A7(YM@Nr%>`;LAd))~+ z*Id$YB{(=Z$aiV5jFjX;s z%}>kWI`wU>lXPj5cFu@gWa z{3cRo2Qb5>EW7H$-G%tk?;nMvwn%(*7?ca64CxAME4$1 zO`$1&f<7@AFDUsd*`|o(0IM$qSOl9%=-95!6X}We1XOBxXy=|y!2{;4l~ajzeV<#}6$-V-Ll4eNQ6(b;55fi4LMjz%cV z*XrvV=cVg@zBJo@rv@YgUxe62#F;IH&xunus&7>~Hl3CD^mCXpY;N4#2N%3@GHBgN zWAWcEkj=7oOxK@N1i_YjgFx{dwhVdk?6kR$MAR6&MmyaBf!+Rq;Xv^XuZkS(t* zZa+{Ve!usxSmUP9;&y|{iw}f@RvHkfkxuiUUWRnxUn7^zJ zGW|@v`X17gxTKq5)?-g?4954`UoLDA-K_v#(FSd8PqyD-9%!G-=Dhl)pQ6#6GVM(o2s{G+n;+-qJ*xMnXf zIYG$1=M2Xta`I)8~lU+KADMi3CU9S8weAP-v1-1F@%E^LtPy5oxt0q1_QR>v(a4*L$kIhnjy3HGM zL8L?tt~>16xjilaV3z&Xb$P_em%Py}hgNtt+amaPm%{g2Mv9D?Q}>b8q9VV!FtFGP zHvgV$UE>9&=R0jm->#&l$>5a2Mqlxv{jG185`Xr4Jra}~f4v$LiQfpl7HM@a)9B5; zDF(?V45-~Tqrq(bw-s9jq1H^4;EbQ}m7)It-5Ghz<k9qaV-Gxf$&sHae18&G&z;$uBHCSm_O%aQqr6 zTb;|g0w2BqxLQcp%A{yWoUAjG}0tJCp+|+1*NzU_mhoZxxFS@z_|x9#U$Dk zCON9~!-xGpXf(E?zx1Bi=NK0muc4pMqa(`r7A`H}nkGTxFLz#K4}z;#zA}vsj{e>s z$V0BWxn=tK40J*Q{iNUBpgT}+euz11;GDx4+@f;4Zxx?I*YP5`@7=eL#oDTR-)bD( zwmItgRhNY5q(iPfA+%^^sO!%VGxhA&<+yRM)466N^_!JmOAC?9=-;Axp>Gv%&AW3P zk4jG%%-c;I(^BsfulR?j?Ms!EmzI_mTkP^;D42qaU$?q;J-^}dCOTuc?m(v>=lNr! p`7?^T&GY{(9##CegBy{&&X*-$9#To^py`%a9=AT0d-Tek{{cNhGlc*E literal 0 HcmV?d00001 From 5c09b645d56dabe9a30b5c9f03c8399617aea397 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Sep 2026 04:50:08 +0000 Subject: [PATCH 08/10] test: update screenshot baselines in CI --- ...quiryAnsweredListScreenshot_748aa731_0.png | Bin 31873 -> 31895 bytes .../inquiryWriteScreenshot_748aa731_0.png | Bin 48487 -> 48648 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTestKt/inquiryAnsweredListScreenshot_748aa731_0.png b/feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/InquiryScreensScreenshotTestKt/inquiryAnsweredListScreenshot_748aa731_0.png index 6b95021137d9d9bd37f7a01a290c099c0288563e..e4077b58dafee3151b2e9bba1b460615e8b9b8a6 100644 GIT binary patch literal 31895 zcmeIbXIN8N-!II_42+`Uj57inz>bQ73eriOQJM&dAV}8?Vhb$0YtrgK;}V}Xwu znSyg}Pqe1R_2}>3yi-Hx-Mgd2u(v-1oHpL#;puJ@{-gOxhc{cKUTr_Q9b0so2Q}-CqlEQ%R(cJyKg?T5zUQ8 zP`bbpBzE%yXtK~hP9v$%$19CM=wn;~EK}mz*NrgnaWYbBGx*qPASn$#w&cV~f{!0b zt>1xow!24h}^b*s$*oIBg+XfyFC2Au`KBcNf#NaxyIGYCmz=I_{&^Za*Mll?Z4w;tqeQ!M z*Ax^>)lEGs56#1g0%&#FMK(&v7jYA`4A*Y#O8>DmlHvW=Ez4=M+ExY+{01xYnNc?Y zrL2y(7(?^tW{ch6O~I9o8g229L&?a5b;cJ%4Cr*9>p%tqVCs68pxk5G;CwG2F;xqxPZOdkK&BEEsvCLgsEgN#}hd| zhg-gKUstxYv=FBh69DZ!^rBwr2|zEpvmYCZtX5=qiI&^rtM-|XmB1uVavYyu`VGx= zh8Ow004p-i=E?8b2&)|pkD@@zV2{qnHP;U6r{P!-?&M z9v$gNieVb}Z^b5beOZb_@-7V6wqO>g)Stq%@29ESdtw&Hn>TO_$CpzM5z?R|j*`Oe z@8q#2(lFGb!HIIXt*+9w`Cc8REJ3_YRg^lZn9|?9K)q+8R4RzD;KlCXY1v|rWIiQ) zEU{G9*}U9{IS`Azqu!7g+!;78;JRGrs}$RnJ%bIr1Ki)G5tz^uIANSz)^6P*D>3Rd z{>o_32+^=tM4=52=_#)q;AsoPne|SefNF`SWs5Pd@2#c z*h}|GO;WrQ4sY`eW42nOIjQ9+mgoXjA+d_2SNJumAPe&w?Y{9U9Uy-(2$8&2ab+s< zc`TPntdj6=rg^1Jv^~pCs&JsiAq^74sCCiN3+r;daJu!uomWP5CJJ6n=`Q@mu*Y6? zUp;DL>Vq8;2^Sg(@qmnH?eV;@@PX`zB%X_bF?pWwF~L$v$G@3X^GcY+>#tQMBp5eH zotc=@^e0!%piYN|eV z`UUY=BE)3|l7uY@J0vuVx3u=f>mVBU*9jf%L#rDXuxqXCS9Jf#yZ2_50#fV1 zvPy3sRXQD+pzjoIKG4SK@yFE1)I=_PA_m2qooYk#S6s$d2+9$E(CUt_9!*cHhPK3& zn?Fwc_7|b9s`O&TZho=syu&hF`1(6sXHL}QAh9BG+u@6MQS()9C4#CqchtL!{>3;e zcf9;1-mCr87XM>X#nzGV;kh)7nrXM;lwh{v0iNiJVtw%ahrMmA;Aw8BU&Q*(Ei0qF7NKTf zg4d?ZI1VG-5Z(bEEZ=x*yR73e>!gYuQrL%6IeeG!_i@tp^N9P+oFSD)#u$Gw0(lUV zGcFJDuOT8ZRTP)E-%znS_OL`k+v!B<())lvEhJ5na}t9%E*y6g%*=h_lo`3h8XdiO zWROYgP~|9Yf_A!mN*XJPSV&64=oCHRrF5tgBwJ1QdmCIa`ipQe-SyD<6~^?^)B$C= z2asGHSd=6r?+ftc$Ib$Iap~EyV2Pu4tGnC@4trxEnC){HxIvl!r6mn>juPaBe&PoAEEy8YtNaOOm&e9U;PbqKV|@emNK2IZ zOhq0I7*ic|Lj{svP5BVQo(ys2RnBN{hS41r%Z20BJdxij?`%(4K8saNfJr2jWKX=r zi)Mn-MDR1Nkt^4U708}$AgQj)$az4L)u}$%gLc1?$$7k08msA;M_}R91zuW<8A%=y zD}u7w2A^`0S`+mqSLXzM#>8Fp^;Y~e=7y$s-@MQ2qs|zlNM5t64ly`@``SMeLTXM! z5}rVO4zc!Ec_s9+9N@=9j)o3-KpnGk>k=5o2B-hW8?Rt_T?u((eL}oHTIy!pgcZbr zN>bQek^7}3y1c>5emtRLX)w(k|zUZzR3@QUf|wDxqTKq9`6w0^f!%Ud>On* zWc>z-O?sCNS?w9W=XVN0^{nyn=-=N zB9A6pMkYvM4}BBD#sN(g?jOB^&*IP)G`Pf4`u{Te;q%Xl`v&34!{x{Q`%;snC7ux_ z38x|Hu9}paB4z@h#PYp@XBR7y>{nhMJg6)qVXL6?Z1wF-WXLCUiKNfV-Ny)aSV;+R z`NB69ZWMqQhOdHQxMtR_S^ED!^J0L!hwSGaTE6f4 z%iVCLE{$3-Q`r%~$9go8AM!C&EwlS-Z@nKkwsv6Yb8AJ^;-o4lbV@FrR9n!|GyPN4latsirdhm(+hVvzjuqq762L`P88J?6b*x z&64we{Ez9ivn4s?D&6QmsHTWnrfdTqPkFS<4BR;VkgV&kH*f?eViQ@q4QQ&V&xNR$ zXJj(K9DB`1FX~Ml!T0-$y=)3a+8QrK}-M|U_EQ5V7w^$m> z^toH(H*B}^z#LjZUs`?$wJqcmWa>wSXw!${a$`pmmySVWlcS45)kaj+FF;opigf66 zLE`64za{Gi%?Wg}RWnGqMk9NmKbq0annuu&ylL|b4J-$ki*BIrNL^2rws-`ud^_&# zz3vAcQ$3@PRHdxF^+6L`zaxJ8Ce-8OkgQs>s9gMQv$LLdS++{VOk+_f zt+gjIu4ics4?SitE0{h~7oIaxDz|-(7?;aFWiB3Y-cH9}4QCP|DS1=;f5W?Rdv<>N z_uGxI?-X>zmk)VTe|*;}-rDoWBu!3AZ5F@pZ3Ufm#{*5F2iSJD{&Y9)l=zkYkiuTu z2opc{SB=2$-Klq>Ns8|O_n6w)|I*B4NkB)N@7zhZ8t;iAU+#?$gHAK{o&hB;=|`Lw z?by7B+Vo@esT}kQowHL2&!gN~;#Z6}Q&N`ryTMKz3>RS{JIZ3F6Y!7|kP6niu#eB}=J>peJz zS0%s)C^;Y|cTjj4#0h^->hjl{i1TjWAIJ|kIt<)FUWO8fK{SKa;G*Uz*odr8^O2=+s#JCaFpNZ%SiirtFp9)9%t(3kyE7JYOW7>1RvH|rm6oPJhZxw5jt9KWvR`|<8*45N9FgBJ;B z_b78s!$03M@zfp(JXPb~p3Hol=E!X*Qq&K3CmAfB4S%&>#U01%E36z1A3nl=qXNID z7}9xcFj0H#KG4}Uu^HAMh`6isBlUy(GMtkw9%>#O4j~y&uwt#Pu{x&Ao6(+h4>Z&k^kZ}cL;`MzAWs8aN3-?IzFl>lkW zOyi&6%>`hbT895V!S@=f@pB3vi<-JH-}~hwGN}uo1m|03o_e!`jyTmE=94p8Z0oIZ zQJhijnECoCV#M4#i1@ebkQf#>y}a@%qwOQxsR@2X7S;p7)`A1IN6Y8D@h*p|~1*$j6kITcw#^ zXY)v6^C_tL>noW-2e0fClX1Ceh~5(e&Ng^qBSq*hYyoa%dpANP;Q3{^p`*BEd-`W5 z&X7h-DHEZ?t}%0IqoKVPgEQs$oTS574Wa?PFuh25!@Z`-#;KMhAWTx@ko*|TWui)G zwy%K{w(@n7&J(orL~D;_*GAY)G<%VYGBFHqe_ypAIzEQ<0oLV){e$i4OT z(kMnGWTi~iQqYZo!%Otu#U$m>_rGy9juZ3ac8%ubgqzp_1P>Alg%B;&wI)q z3N`YPy(jPbo0C4t&yvz^U_<$8jkC!JzWd=5{5sdzg}1x`*fc-YbwesVKyQA!xLl1g z5(E(!0B?Oq&+9&zasNpQ``GmfS?92(Mj&k9>qWE%r=B>MNH({HFFnS$C$WA`>(9rl z0M^g`Xgc6;Dk?x^!wORWCnDV#yVQC6@v}`o)s98`a0_<%(1N<|AKN4Ph!=F=HDNAu zlbHeCN#+AfUzQ+hQqbYm`aa9*469s_*BKK2oVKtXKxm>eo{$iHuSZ6$F)uJiL()Wp z;i_@}siX-n1{epwRKK(=>-|C1hqUoyT@dnh&s(hC^ix4yNVjfbZ13Nj*kLv)DpuWy zu}*Wt8^wSUevos%ij`u0kXs&r7(3b~@ ztrh;4PSM=UQdrE^doAb*r`CenTg{9C{JTkYw^Yi?(Dc5+&Z(ROun_8RqWhT9$4WQj zkfCJCR-i}!&R@J2`YBVekc270#16fKzn)ye{YZG0?qwsKb^$7Q+*gFXoT#szFqhQoC9v+K4?mfzME6J~&m?j%eD6 z*#D{ZUY?hqVEC4b?Tz@CvEvZGf-{1(};m|Am;6`FQ>f7;=AESlD-5rfE6P?&eK0ny*=*z+ZQj3B zcF3mCvTK{Vt8*RYiZ_iEN<3KjSy_J~L1R0%Bz^2qjh0TH%oA*ZosxZYR7a1AayG_b z)2RX17(eu`0o#UiGeEN574{;8HfTPaKdUk66F-}#dwD+|<98*mYfq`4Hum=U}eq_LEvi5&AAF(s!q$v49T^TdSSb7s%W zvc~y`I6*& zvMY$K3;n#bw3K>Ft%txWan{IQw$fw1o6V%a_4or@u_QHaQqdr7z$MKP&Zi3&Pb=$e z&qpBV7O|82c9u4s&bODwE^$r+tN47TmLJh=`mQCq*XenBv7suJH&d=ovHem#;9873 zEgP}W<+ukmI&?SiO^nF-!3w7qFPsyM{zk6)iF{qlEsB*(Ak}6FjTu@C^(;kaNj?WChVrDCH(OPCIkU<7srftXr zyo~G797)1Cb?c~cR>mgSZ>vJY`i#2IaxG9xg3lbF_7s;sb9PXcjnOd;I<&xiFJuDy zFSMo`hk#fK5-#T7@%E>*G{>5v@m6SN3isF^m!+x-JJDJCtH*RCebj~QL@k)Po=2Xj zXSDDu4cQ-aSJ*XXdW;(u-mvJ*GL?u9lS1?Q-#HIlA|-^|O^7MD1T6>PPsaouj4ij=MG-8!FGt`CzSo%ZfB2|E!VG(g@e; zyK&>5H;a^7<`(pB*Udg65Fn3JCJooF@Zf^^2)yd(gjN3I zJt$JIhAX-1tezpTi>0vhTf(RppZ^iWo@ID>0sBw2k=3GKRW#t5h7X(V;*9uHulxx) zkVbT}xq6pXa<9{i%^bCT)jnofDE1&NbHj(RPoa1rTa{va<%JvPS#cRL$y{abHLGn$ zK;O;lOE?o7{gtzll9JrIV94;1R*JlYc5Y}fYLK|{ESwU6nsLgH+3cd4G;>?E>>VOq z%~sEu?s1};FhpO~DyPx6h!?b7+z?ll<~{bu*Yna9EGV@OU7KNY7L6sxf7Vn*l>w}= z5+5ll;|i_xgndN6c58~z5(E!0qFY42pQ3Kv-fMRIJtR5=d$pT~+kn<}ZK*#u_uv7CkPLc(Bn_QQ8RDoK=H{lXO3S~)@AVi7<_p`nl{15nDkcfdE9Uh)=6i6oVmPilE}XED3dya|O~G8;MM z6dAR;od`7-C*<=sUKkEoM}lP%YCZ%U0A!@Hwz7L#SXUcY&YnthJ(Mzb`^0EOUB*DF z4?76xb52-^q)8$E?Aukd0yxHimkvaGP_Jl95bqDAF=BfjSxe&D$;F=}c&zG5>se+t7m7_OfCB#v^#QhAUry zv376)2Ssk>b2pDGcUF}!h6uCyqUS!W7#dlbuRdkMoja~YBXHRN+&{bR>&WZ<^eQaW1LS=cC%cM8P9n$v=63Al@%dH2 z2-Ix^*5XX9OGwv=>-=h7Sg*OIH_6UaZn4BARkK-0KT(ct`ITs_NEL z6-93UUaEKyVKdFAh|uV`p0-`Pgj1o-iJJa-5eF4!OD_@@!F~g)NqEmyX%WajkC}mT zQh@nuW1ayJXWksEfm8H<>>jOvlB`anpZus-3hkt@_G7O1U9^O^M@BW2OGe<^o3*}a ztL*;1BAXeNn%sM1UAZH`8n;KpDRsWM+Ixspd4(_l_}*)VM3z6R_rQwu^VO0C5Bc_U z1Cv)KNvXV{ffhU68c&iT2gV%QHX*D-3uoM>NU(#-Zs|9YU(Qpmu5z_+Y{aAB<8nq5 zt;ZH4@L(sivKM|%3-|V*%D2zSj@pPuCXNVUL^u3azoCYDfxSuc-m8TJ*vGqAMAdS4 zif}$+5lLRZ>;+$ZAjtpel#6|?i<@@y#F@F7{d7MED}#kMvr`CBR80_)<#seN+|)D? z2+A`9znH1xxUb||?xL1oD|h4anXGb*A;#|Q!xKKln*%!-gtRjOX)*k{+9}d6T;PqQ zB62@d<7KxN-%#A9Mm=5KkU&VrB9>FdpE>y(b=s?<6!1*VtK3?>-u6i}2Fe2zxzTgN)&p zCxBb>_CvATflns~9e;gJv9Vy~pf66bdlK!(j1O z{{SoO17gHmIJrW+wfl6{<&FYoc@1mkUfb~CIfuGFbg48UprUg#tkWBBoeY2bzz zApjTY>yk7%)O>w5Ijlof@HaDecXGP z@?1}ZTAcuTxQwJpX{cd5q72m-e15&Y6R$b68G@{e#M7IDZd$HQWxQxfp;=3WbDc=mM9vf{r;nZK-5X@XZu}|2N ze}@90kJBSyFIc=*Yt`()f{e1mb50JryRO?Eals!K36J|iJA4ehojdhu4T^vj{F&6D zUDCd-x#~r5<%T_Gcx^gIMW~cdQGrOQLVTlqy`O%K7k~>ts}%c4^O!ynO{2Ak02Ek% zCyo7dDZ~mPT8g=gRwgq5O_}0Vh7HUi*n0!+zX!Yx_I$6|e>=SYHau_yLGXv6VBkY5t?ssF)FP}o=+6XUz z%j$s;(ybORKPoR*7yBN-obi-%3AG-t``oEPI*cKn*?KH+wuL`G_?!-DjqMf3!SdAFp~zOQW0guP-S3hQXBZ%qL~Yq&0e4Xb zgHBZKE{e9iSgUxQjY5NW^4p;yiFj#;9 zRF=U+AD8r$ASTbuPsUuIq$Hqqxtb>2I0@SNb`9WQU&t`d@?`+nVX#Y^lGT-C zsE^6~0P-3=tPEMU;qCh}e!-e!btmsL3rjS|Bnh{FRXvoXYQ}ha-1*=4-&zVA`pOYL zJ~nv6d*RdDJuQDBkD4f>LTf-OAhWPo6Cex#Tdy+Pbjm2#C46unU&z3?wU{@z@j<%Y z-%E>-X6+M-X-G4mj@+SZsYlNvqNJ(-|GR$^2ZNEDVPYVo!X;*|dQb(vaEm9(E>k^z z^ys-3r~g92QMm`3-D&^GCxPRRtDPS~Fk$iXr>v0fcF*pt2P_UJgQ4X+aUw8PJvsX8 zOX(?P%u;T z|1TqeOiA3K?MYc~)80TyG31PBI90lvaor&w#uDR&jA%9O~95XqTC*4gv| zkT^!lI{ppxf>-U+Ak(emX5S0|*@3GzI8^OZ1wd1M#DY~)vDSMaiS;pFX*l7m*B}r8 z>DjT&c5c;SHU%S^T_7lv7?kPOd&ajRPPxu_3*qC23vag4PD#&|){YU`AVFS$rqB8H z8kySsJLO4X`x}5d9q(T?Wpmtq3HqZMTAR-MP;%o69LS1OAs$ z{`dDk9{9rUO>AXa%Cf z(5foKHM&SZhg`j@&a2ME_KwyHV6@CW^eHQf#a1c{znE|*6pQQtmR*@NBveK%^)S2k z^v}mZMp{v<`h3%3w=Wd#JCNFffpG4mIR=AdSLXZxpFjig5&0#)9>C$q_E6eI9vjMT z0Luot44_g^A%Qi%H~NL7iQZ2j(%P%4GX6RWidy0dpv(puV+PD{A8+e%*ia-`98~bi zvIbnv&qfD`muvu>GvNQ^{G9}XDI~2c27^{)^JD2poYE0{cA)}#0erqbI_i4`U!A8P zEF=l1WDRW*S}0jEr{n<DOZjG z5-d%&XaGzB;Y$cD!!kQ>K?9^Rxt`Dz-ag`kKq~7%Dcjk>#DlDfUX5Rky#We$z5H08 z&U-L4UKV~4Jbld5ob>lq!C13^*|ExlMWtd*n1G^2($efV5DH%+HS@jv`{p(J4v;~j zal@GL1czRb>A!uk!`80U@xpRT{^g=@>+|B(my1{51`h;=`BoOP5ZFvDQSbZ#oXiuJ z;a7OfuBcJXz`U|1Ch-+V%LOFqH>tRo>~YD>bLM5AWt1h48PRHn{Z&V_qk!#0i~zyk zg5V!X9T|g!}5nDf?-7b(c^W0AM~q$r|vJG>NWx3!(q7IJFM+BVOX;*bOMC z?}(&{exhbzq!agUzm8c2(u)+ZLMH(VoO#7=_eqj&Df02~D z4z^p*_?h7N{m{qcm(zK1$i1L~r6WUKUHSYMdLgb%*+-nJrP%|SZ6Nu#)3fuwwa#S> z;A3FcI#v8(G_J6o?y!X(gSZF~DG%}8FEqsTb)_uyPxN$A;Wo>m@@DpsFNnAdPJbv~ ztUVg5>3w^RE!w8*M&piW0&tL=seUQlK|)k1d!NS zA$&R8w|=Qx9%KTvfjoIN5oy(xIUe{Ih)Z6{rwAssSzE`IMau+Qrv5V!+0_ad%fhEl zf~<;nlpKIq;<_MHN+_5@kkk{R+Z4RqBgUe<(7sh-#kDsK%J10-%f0|?nTpkyB;&+e z_@yMgtu+YvKVDEspMe0TW%53ACe9?ow!|HaTd8}qb!0zuZ`XmKVIUN}%rn$V5#8<}>4S?r zBiXh|d*rT5aQnVNjDUdo%uyi4O#rXBy{zuj?b-Q8Mz<0OkImjv$$6R}53E81APukc zv2P!EqcH20Q}iun!l~QW)VyKo&@2?R+?` zJp%(72=iRQl%H{Q@u;RebYkSlRYu}%gdsutk%k(%%4WMLs}P5dM#uI3AhXRqpqXWd zUg)*R)S?jzMcHWCUV%-g>S5d0x_?!9Y$pgJ-jly&dL`2VH)wX4eA_$E5~{(a#zX6MZTtg*6T9 zZS7fRriNbbwL3$(Gc6_~$XK-8K%K$ce->#^RN{+FLFFCgIvZ*a*1} zLVcO7k0bNFLJdHc5SOI`h}2m@BN@c3G@!Uhr9+h`Enq=>Mq9I?c~?_T*V0S@S^RHK zj(t?^GtiH@B2L;o3uz&<>7tqdiYvm(wbtK-X3($$qzhM|g*=|D|8R{T4Oa{a5;MaK z;&kG|kV$4#sP-3P9H>a##8Mua?8@vw*h6XE4gMOd{gTKmwwa)HI?F zwh(1!o?C{}57Qv(26fLAY+p7J;({?fH9XXZ>X^PNK^N9G(S3xGEd8zh!rG18ZGlatlCucb?#Unr5W$XhXH2 z3W^ZyEmA!*)s!fzM3^zO9N}*BS}q7sh7z#DDMhX1)1Wx5InV!K_C!I*D3cqYp0L9V z6w;VQ?>7Mn=1?}g=y~rekFSs&x7X-k_UnR>!BET0ZoiJHMv&m1seZ_@A7Bm1=;w*$ zzpayyxaObQjf%NCVjAsDeLDE!YRY3!rF*R`r8}%wH-KwUCkGPfty9W&HU>?!2}*;> zy-`vz>t#S9edv?W&6(XEy}EvSwR7wUGX*m%S#cqB#L>0t=(Wo4|2wOOmPNB4kF5vP z-TG*yGy_S!y#71(_tN11&sD^={)R818j{)d(A!^G+{<_^idMC_hhWWD>p0m$Buq2)3yYL;_Q$~hS-Snkdvw0!vV~n4K#HaP*5Sjt# z1t=l$w~E*jTKHZZOUV(p5`ME)9EXTp2L&azSW&^>wLxneA#rVuBGy=A=bDUI6P9aQ z_Kh)LH-UZWJW|>7Jr;Cr zZ62-*nxN(Z2M-`O3TaGk!RN5V@De!BB1tBRCnmRjvV%jLJQAN(U$(!i*ZQN zig1+2nvqsf0MoWT>USmI0~m0r;bZ2DrPzCFtny0r?lK;1Yw zWv8j2gJxIZHd*clSD*VI*BA&1m3g=kX73XAf%-j2PM4Tz@F}bJJZe(=s9ju`Bx||z zKX1*+fo{8_su5x+zNzB*^P@U(;8JTtd#5w0=g1W`amn3iy9&mMhE+V~^$SvV4c+N>GxOnYe(bSi1 zKSFrj(c>)G=sGcGXIzkz>$DTX?ONacpPV%CmE*;WUs^yRj%5=A#n=IpmazM_w4>gI z+2M`@<=~K5W(2fgLfI;*nfimed{eDQK+N!Pfry=iUdoN1@S%CA#|$n_JtdLO2v#_F z9C{4&3y>xZkf8!AI*AFYlp+ITPjvG6-|w_v-IqrW_Rc|XL+|rjrQt_)TuZ{K2jXX% z`invHiI-F5>B#l44CmnXPOIjoYKShUepys{ryTY99(}5GDU0pj!kwghDPDzYGvhhi zz>X7a{+Smi_^eX+dIVIdYw5VY07Z!;sPI2Df`W?Rfc_hyBHjSL0RdWVkX5vSn{*p^n{5|={l2J2vzX2B`7wvYLbguceix) z?B16Ym$yXgbv92KG8ACypd=hT8leEg9I86?HCWPQy*|`+YYBCy6yn%XBRLn%$NwaSk5BYHK%{x zZooODEA)O0L4WKRc)M*n;fygu6zZ0|2eKP9NAn4O+g3l7GmM(H!A*mH7nrlyjOXXd zYMvr;FV3}E|7n8<^-X0j7si^Tn9$kuk`B&*{vyZ-P!GA;wKhF{hYr@b{!C$sr1a*E z*k2cU@bBK)uTu9FyZX7uZUND~nNoy1>FWr^uB>NfFAmIrg6EkWR*BapR~yirK{v(8 zju^c>ep60y$zCHc^<(hz*Kzt3<6{N#>%%bvDdqrvh1H8;%r<~>{zgz3y4e+PH>s!t zHD;!B@t`ag%pMhslK}OTV*Yqvq8>Xg(|fsWqlmTeB)@e5)M#ROL$yt`Bk>bepn+%u z-KWE|gthQN{KI6!OI2R@MbOXTtSGkP0uDzzKzW^;1lJQLFzW^@waxHnmh0Fhy8*JXiIZ!K|iJs3fjFBSPs|Lmb5tWVhua9=WeED*;F99ZLqFe3;O7t2c6F=19(W;0ufO32*CL7i&tfZ<_vT^?sxUct@!k~ ziHigG)|m{x2w}5Rd6A_f-S5kTi;YpSC)N=_56=a9FC@7dISUEx z@IA7iD|RQP&*G0)y||Snm1Z`xLmlVaHdy}iDdJ4dq0r6_1F%Azu&vTWPh`SJt$Sa# zD$`D;5FhbD57wCD@6ukf!1k+yl%k=&xDi&hV_GdN=1j#1W9v2chgC8A&{iuw%LNBiiB$PPPf5bP{xgyU$LRp; zgO>~8cEj}{Q%jU^P!hipOHvI4RqOTq59R0+!V;+OP|S=IMXx77;IL96P~1oEW4Lvn zgg0_dU~M8?VWXIMVb9bEW#@;CprXMP*1d@726xeb_Oc7JXLD0`(Y zmp~(W2g>^Q=k9y5)RSKlJo5(pNJjxdz2VD~`2Y-mcqwwdq!;*+t`s=3UXlw$lFH@6 zzi!B)zs9Gi+D;D`r2V|-%$EaJI}ai{vLnWHBfCme%bS9u)83z-0lXAe3+h8(#@vbe z0Soos=q1&I9_&&CuOl4(_m5Dk+UDB+F8{iZ16D>4NXC87ZjjL;m5$ zCE8oAFgzTR44Chp9HRo^G~>!?Xuq(l%7-!5d}qbLV7zT-MUPvVWDkDAwgDAuP-~OO(C9ie-n)5 zI4?p}Aqn8u(GJ=N9cI6yICKc%-(7M0CfRiN884lpsG}F|v|n?uv)(!fiv}48@+PR01eFm+Crl=aX)4sf#XHIfI65v{q zb0w8ruc%lb(VLXx%N&B`o4BTt@Lr0m4SP!z-P}zt(!zShLdXOC3^jGoC2_g4sy5w0 zc;fytmXEi}C(ioT1?z8OuX}b*P8oEvZGf7k_KKQE{yfSbiUO+Q-G^#NkAOQohB~p} zA?nRV?=&Y9;*s5~m>AXdFe8!t$KZX&3SZ?Ky^#m^wZ;N!eCWGnSTrc(w*0CcU$qQG z0wR*MaL(U?J^*#YdAZ;^D3gmfDx4)*D8>xt70+_v!7Dl0^?!nn`L1UHMW?e zJ@}=fgqep8roAe#$Sjb=C}?`!oZlvCVvQdAS%&!QFIC0PUFXY~7iViy9aJ~Lj0Po< zM*`#=d}y3JH`>9&tObYKk>HM{>V5s4N={d)2QqJW!@2pVQ)y@l(521aNZQ6z+gU)g zZ#gbp95meO-#Ax8$C2~{OWw4g_yrhJhuaGC<-)}H#dRigi2<<_pS`hAe;x%GBANM1 zYJM5@K+-9f;tOSG>7p?vzqh<_!&Yrd>|%1ciy8HRy?^IQODam6m~)6VlfL`kBww!Y z?jc6vSI{@h@{Y7B9l_5sw?R)2S*+YT0vY>@4%RLz*$huSqQqLD9kPB**}{TU zN3xY#6j0s>As_q(0AmwYT{|$<;^GYI0ukw(w3L(oZ)dj94SHy+%$-;Oy9CsrYrS8- zn@1A%XG7iv+1SM&Vf!vF6_1piQ&#Wa9hkbSe)cj)JkJOQi}@cSR^t0(qpHStFoIsRBjv~ox3d0|Q{G40eH;mTo^z*ON`Ug8-( z3owaSrL2i?hz3m5FW&^~lMl5y0ziSdjf>OjzHbpf?cNvV4LD3ueq)= z^iEf9`4rS;1sGnOFc}${_=#%f_xGT!OA$p?2UzP`uQRDXQ8@C-CTDlZSL#c%ABP$v z7@t8~RQ}Mwe*1vbVkfA$A8Kw>yiLck&d9@V{Z^ndP!XWpUAR~#@NCPz9GK#PHq45% zjmLa+<8lw+iyOn|92YL^r~+ns^gja7ceti>xFKwYO2QFuZPBqjy^b*L$=PMTQ#etvxiTW~r z6x6Xxt3Y^w<9ScYamj&@pbq0-b#6m;&TzGlJ!jSn5%U!)ww7oodOiV75$D|5rBmbm ziE4qJz~FCe05(JAa0Su?G8gj* zHkaBgzga{?M9R|Ql%0skMm-UcO;>*s15f9lsdiGCgdX0BqA+TZ4OOl4*Tq(DRy3!nB=!*z=H+6B={eU@cW&xh)8@VIr;aNLf=R@0A?omg)9TU&Ocn3vh*^=-eh__1)uH&>5`F)Z^Ptj~y(TO!_|d2HYIOnp|rl>>ejKVXu)5QWY8 z<=RNPZUCA|H)g&v>ajSN73D`OQ2@g5G*k?0`$Q9E=05Q9fU?A~mFk&_{zZ(TD}V0R zyN6*$tJDwiH;^;cHoU-!-l*De>$@5)4l6~)Fee=sQs7$y)X1fBZ~L&3H0fd^>(VLn zaFT!3Xw!7>Ws(O9h3ak9sLvb>9Utr^%wdkvzC2m-yv&!^UZbqruP;osau_l@v<;(2 zPNqOrNz=TWR6Kn6OM13?&}EYbU!!a{H85~` zRNLDYw>`r~)APQg@9(5gleEGz1KIIvE0ztb%HsA|ye8m>DM{FFt*)wsT%VxiIniS) z2jazvFy05QtPa@^$L|_S5umrV74B|-5*dz^9@kqL~yz`@w;p z;)NY3NiP=YywW`Re{>!(A0w`|VxwLiafbFK#%L9gfV0mNx7^uMa_>7Iksn@biVH!q zOhiKPwYSX8!B)PH~>)x6QpZ)h#^*FDCRab00+B5C-!*{wX1E0lld2<*%%rJd0 zoO6T5Z|*DiQ6tK)amlp^nwZG$?sl*mMw1eb8^Q}D=f6B#{f+#>TB(2+o7{HK9|gf6wChHn5N)>uoZ3J2#O^lEks^OeU8*%$15@ zhL84IrCyxPh`zpJtV-PXoySC)q(mG$Hc{Upb{P@xh4lMX!W&F2Yvz4eUt$K({fdC* zD%pr2+Lu4qD3x3_CMHsJ|FF`j2(0V@XP+D{uVDM^i5$A$DNz(AiKv9E3yQwJCXMpY zT4oM^ZuZNM6aOWfda8D8vLI#7meKY>nzU8@$|Zdh`qY%d(#)Y)MRrlk!gs!>VubDf zbxu%&n~|--TsMGBKrwP*wODpLa7cHCdf}09T1M@Op<}oQ?}DE z={L39*biG!B3Ji=_kl_bt)0h$&f3-=yY2g6OTDavvk1h{sl?a9^ zI-sm;OE!Q1qT>Ls+KBmu+G`v>oPqgzCMu(2d%i%AGbiAp`ON1+iDxOS$@&kHoHNq9 z#YIluq(mJ4ysYbOGS62m>n`M|t#~=qW>as5er?pW#jPebRII70ZNI|-tsQ6NWwvU# zWTJf22G!zI27(rgQmE$7oxwpN37b3P+P}7H$!lNWK~?+2MMQ6oM?B)!?stCR2Jx2i zxI&V2s}ky4M@t}3G~;^mV%YFJyx*F%-PPo(>7!k$Wkl-z4mRCRQG-{6*mjhbL|}Jo zK8bOAUG6rrI&C6IRbzseQB_?aEq~-P;=cXbJlWqRKOJ1w+pl$jhtFiZ#WS(etkUAP|Z>&wq z?CSTW1lVvRK0myN#)@IT^Md9HFo+@}1qQzoXiqZ{SxWuhI`9pcts?SMyecVAcH8$O zINi|GzhcT(%*!fvXlacD`&N?r)?rJ2h39sT-bDtf<#Q8MGkm6Ar79(tZa?D^hhf zL})eqs)91Y3ft6QGEgbbQqB*iF<8Ns6D={jQ9by|7sBx_q6*JcHr&rq6US=%^h7M* z6}Avupcd+p^@CYPH3}iL#*S6-wA2I85Q$OMA^roaCvGt!Lv*2@oVQmn#nVg#aOlfi z7xgR!N_$f6a_7aGpplz(jW^lTuK#X##n5K9MVonNY zaa|01OA-eCxo68!#Ks#VkDxyb(*OU__1%EMrsd1SceQ)(hoXAP+G?ez3)9>e9S${* zy}p!QUlHxXoMh6uDo7bi3GJ=N{Zsi9S~` zpCtTJssb^^g|O)j`}FTesDyCg)-qZAs4;Rj!4UObU+X__ApFm#FkODb51Ry$b8 zBoiot7nNm{;U}*83BOyXpj{{dedqbM!Z)zc8)Gp!m=BHtmOFEof@|4XI3eT8CV|!Y zE9yBEJ2~rn{eF{7DuHOTKx+Kuysk9NWbYmSM0ECEFpszZu#y@-;O90Ff`0p{BM;{T zo?24Vpbq5qdi(~?>udh*pMY)n=P1>TqEfHjAHXe^0r zP4%5^Ih`VVVnT;L9^Gmv*bS}L7jSf!lqiwgke4ERe8S;@gNB-53&i1FW1!_}WxXpG zlU=?&&jEdrzW}+}&uB~-dh)eKVd=T<5Ubk8Q~9H1CsO;?JdF^b-$gvL+MSR%|z3 zeG2ID`3*4E*Txcm>fM%mN=vV#GKSOzTN0p&K?1o;8WvFOctyW?DzsC;xWud_D!oER z(lc8$n@`#hkORtmt(+jkh1_^cXh*t+ptUIIkqJfWxRKC8*Fk>&w17J&a0>6(lIDOd z&|iIo--1P<`GqNNiJ}B<3R_c|^^vGrN#b&*-&3PUt;8L$+wb*0a3K|QyWdVv$YNWi z*)8xg8Gs@5W+O5C47nfYJd!l@bdg+EzS>HGSF{pG8F7pjHbk?Bl!qM>Q2JNDkq94W zSK7DYP9xsr@Me|qwmv@3aI2CEyD`CKC*v_{rI2f);8)+xDGgSyK8y@pP)OnEDtV4< zb7UhS1}{JX-ny@YI2D1sA46@MZXo7+&J9NOx6B0|Hs_6SdevITwkqW;Fo7T}Rb()z z*q*qR0f$Jgbt>OQNN`t(dQvd@Zp~Jeu&kF9aqN=!Lt~SA_-G)O`);LlJIN^9m@ra4 zU6AJKP8kk!tDs^9SMbvPhoFF=kY^g$vuk;_RVK^J;KrAeVwV&dssf1>|G(tS|*kjQYHFC4* zW;RD^Wxz4w;ckMU{s)byD9-Jbtyn8UY*W8Nz)^&x29F0MX0pqn$T0=1&8rtVw3vMy zHSMO{I@Xo}Z}1sP+-p_JTNx$<;cfsbkg_Ab-eWj39CZQn zoobVW6kM-uCw>fnIAXSXoB`k5Wu2`YJ^$`K&#owX@S>}$ zE5GHBkWV`OzDb1ZyNsLI%TtTv%S)X$p845PlYfX~9ndy#=TLhdb9cN^DSG(vQBMz3 zR{^1pjHOc2vPe6v&|B< zo`*z1`a}|zG0c*ddhJ4kWrJw?Ybv>^m)_GcicLOgFXH}+)z>TV4xig z%9p~hfYlC}{-X5KaIUTl&8WNj?zi`Tz=b-^pF+;nhx6}04Dz~aQJD`{O!lEoy|C6B z{heE}l$xsL`?j!ypG_|D+F?<;LLI<DJlK`!B(X4Nd&l@)+yl&L7o$@RFCx zJkEXS_)FT9JI}2;+OC%q-T6jpDfB`<4jsjx%84u_o(FPnF!j2O;mUa@gZ_-TQ68&| z)-zSFzmwPN80kXavK_E+`OZD{yu40Gzq*fHs`d}1-6+1W3~AJo1e0H0Ft;T&L|&rp zzM8~1ZAKzYC%&JFt4z^uh{|hfT=3wpoJ!nt;5t2ePuA)_jDRydMKE!1Nq)hP6U6Bb zr7Ks?HE>b`$vo}6knwp7THhYya+*v|Y$`JJRdg2Dby!!ethV{CqG0xrY zX<0l&JwL-qA1Xd_UJYLSiNEYB&^FyyU;pCoIaYYMLvz$NMC96RwIsfnvgR^}3`@(@ z4NM8>ztFgTQ%;|*w3H!YPnvao>Ac=BZwMo2vQLLMw0ZYOLxD{Q^EpK#z9T|#M3mS_ z9+m|r#2-@3&A0mQ90Hne;5|MKIa!d;pqele;*-Bmo^zVLOhU~Dvjkb{$&XDYwNR&g z*%m!Z1*&qc(Sgh+g@9jYDQ5v=U`_d}T#B^`>)YMkg?aJ!i=?FKzrAeh0?P^r(Es|! zZicJPhtC@5g$LXd#RVbHdTM8D)Hu_grWwNxQ^mE|)xI6F3BXF(FG~E%r==uSTiYw? znNgqOqeDN5V?7>*jaZOBmOzI}P-}?!lQ|seVsw7{?7|5MEKS^cDNr3!M?%o5k-s9{kPG z1?4`Jv4Btu6#{+trPgkjEr>R4N^*eeQi~eC%jS7(&8kPyXoJ6>#cGpoLxNx~0K@5L z<=@VQ@6MI*GZAnXFV|pC&73kt@jQHJE6EN1GZZDD;>pJRj-w=_3){9phn~reM!@mq z~{QbepZYV)s&^rNPcMxztzN>R>%)U|%LmY&XOl><rN-K}T`465)pS?_75W|k;5>$Y(VtXdQXB97C z6K-BG|b+SbGd}63$bl$%g{}eX`ZX3xFBgn z$?y(RlOxYKPa^h(s}*iG(PV?Jv&Np3Y?5O5K*G$M57Nu=mFLKju1Cw+bz~90mm0oJRX*S`sdwy0}i-w2%_XPr58?OJD>YTG(Ppn4Fyyn;6mlI8K(NDluPdtCnqPqpMCeT-ad_Nni>6oUR!%x1<`ZFKyFWFO6IpnCU;C=D~ zqMVI9L&1LuAn+zh_~}+xeh_oIj5H>Q+#|Q$j~1EtY`60HhLi^T;5zptr)w{&7V8+$ai?_-bSF|prIfq?F z4_m2M=SFuvEoanu;~p`9tyeJm(VO0<>yIFEeO!{wfAio@ zTr{JZyDB=w8vpz( zik_D?sWRP$Uh=9%+uTkWQcW_suRR$4vXYXlFtd1u_+oC#LL6(2$+*9!;GTE4s;UIr zF10jv_{WhxG-7EGj4i@ ze@#L3;>!kqcF3bXisH0^Vu8nS3;B{E+U8{F2PxfeD^_w+ik4vWmR_YV`9P+~hmLMC zaiK>HoA6NMZw(6^c4z|0;@A%P=Egu)DCO5#WOH{K9J~FGm>jlV!kR#5eR-hKkdCP_ zGbpJC2YRcn%w={&M+hOr_+E_qx5(vg_;{tDmB6*)Z;oklWYs_?Fq+^NZyeSL*UGh# z?FEMT6N3^BO3R$rOR{;@i{Uu{Y#Tn0FD}yV8xI`_B+>}{g!t$^PH%78Lgt6D%S@6Z zWUFzb-zKe{%tFuShWdRMCB32A<%(q@dpt;FJ$|dn0FH( zd%jyxBzP99^n@VwoIo(;^bhk>vw&-`++SQX`RY9nn9%e?D&=ss+y{|8>Svyq@R#5O zwmq+6Fs#35KCpo9cGJdqxrbfKB7$ ziX!I=%+)IM=ge71EeG;8J3c#WKhGF=tCMfl8&jQn7}UDxXCkA8|iJ zv)?+iT4Q6haEfOyFKVf>NVne=r`;g6d;4@BEQe*B*TC+^J79}?1Br^_^%Z|zGQ|Tw zVLygu!CEcVN|p=}ShotL*sZO9>N^iCse=0@Q7@W2Z16AwpzgNiVN^E5RT0<+oA8P! zPfoJNaU`q}<0CgcWJ801&lwMh+csSzKf|t}%fh`~buE=!qdsX8ZxDDh0cF}guLQpp z^zPiLO&-3W>U?2OJ!7y{<_6J=X>Y^j+OVBO_OSaXzLlJKL zGYO(HMu#z{n}Lm)feFaB&U#`RyC3pgk05;e>I#C6$lZydDwEzdYBF`iFTDp4Mos;a z!y_%d+`y}hZ_Ts}mDkoNm#im3DKnpJvwxtb67tJ7J^li$&lquDix4pXqYF5w$R8ne z!E5A?sAnCFMoq^e;LubtQ-?1q5iZ98#3VpH=ECJ-44MgIct6rb>^G`aPmNh zuj2K=be(CetDj53rgZ#YW)2+3TLlb*r-@w+YsiD$;&13Dn;+g;S~(6LuYm!9 zBlD`#5pXtV2jtk-L*&sz|f2!}I;j(2e^z(0yJr~jA7U66?dfRios zaaU;eUm)0o(O43=_+q;J2LQ$N=ixX@iyB}AFJFjOks}s|oXegEF~kS`d!MAx2%Dj4 z_5n2W>4Ye8?2uDwwVIs0wa7E4Jlx7su(07Y)DSgd0hA-5ish?}kvGs?)6&-+v zOb1f&Qb7!Rk*#%)l1eJf{P{#>#7t47iS}vmwR}DVK(#g|Ob)-P2(tTW@cK;uRI4ci z8ntOZSlgf$B3B59Y5qPzCY6K7xeE|uS4zPS;9j55wKOFO-_?cQ1@v(!n!{)AKcQ8q z`}&aJrV!(bg@%}FOmM6WJjrA`Evl)+eWnjZjF0Q^xMx7)C+W}&i;W3qly@42)1J3% z+7t3>X|cwub&L^T3XK>D@kON!tl-cbm-HUO!Yn7W02bDYae?5qbG~46qppp-Oeyx9 zU)ds|s*-ZJgG|bs5~A!`5UA%Oujic?KM>6;icCp5yDfk|j<^$l3qrCC)WOW_!OV36 zdNU8rtOS;x%>+2vm}xAuE(3_2>J1QGQOLz6-)qCAEzK$qQ}y zyeQ=TZ-nF(u~L%kw^_5R zElo}7*$t(U0W|mGe<-u}s zu}i@TXcIE2c^{q(;eqeLHm`%`|6Okpp3A@>&CASQsq_3aUB5C!)6gGP#Bdju$HPA# z7f%VuezWh~lZzM^0DZ}9uB>PF`P`YCYSSIQQiXaGwLpR{T*!Y4w^;M7wb2hch_^N> ze3nppR)O?v*Sp&@xoMuuS}X&W%K^i&bhlCxhQHV=Z8-gCrnFU^bvUqTyXOrEe&`t< zc5Uc?v|X<+zuQy@dk;Pa5(45SJldYvo80)5N5pW=TU8pZ($w3q#>_7*o0gA}Cjy)I zrX?$1|J(LKL-ZDjEr5}V^w8s7_KNmwS zbme*Trt$VdOW7%_R4+PmgIQ#b(}1XdE0^Dag-ORkjN- z6350V=z2gNHE#+6DQPDs&#m2dO(qIA_*EQpqaI4qcLog{dLP!<&J1H@*yu_iu!&P; z3UsqY%~|#b!Usd)tVdD*>(Ktuc^}{nj1)%O$%<$e z>(Pn-ocXi3ZyT!?YrGSs2#)vEJH_8XGU0ng3RU!z3aMAXr zGEq-k#tLlZ4Iq@wqI>oOjUc1?G8H*%Y2&f*gD7$%wz~3<7>2AlG9Y zhe3~4eKQc_tyEpglv*#TSPJSu%^Y0~SwOu}S!@!NQz%)Q7U=3v9 zh+#VvUI7>uxEvKhxEOFbAlr!sX>q&e9L5=?;cm2m^NPH%gy{TNBv-L>XDn%s{g+0dK_<+^f@SrFt)c z7}y87v$b;#EWCifLeStwv3|=b|7UjqN1mAgPPJNQqji=+d9=kJP1i>(@GW0}G)fHP zE|+=GD*bv(_ZohCbaHcLiunDm+^uVO$&lC;Wd_^_zP_A<;!U|~MB9V`Z_Iagpqh4aN)f#}dWV`s;4kA@e*fhB4sk4m z-c#@BJ z7Lr;e2tZhhp#mUYE%UXy|Yt<22;Yq!C)aLW*0*t?40`UnC9l%GFyPxh*mLps1ox6}dVZ+ZrqVr7m)@6u5DR z2(Iji{*YhDUH`G{oN@>?Y1y=R>9Gkaim&aYs7DUfZPy>qWV_}1cmXG8H|@jSgU%sK zKp-@@eg9KqfNzv%L#{s`U&lDZdSRR}0ml9>5Kd7F4hH90X6muJjH5W7P8+ zQn10qm>fWDi0$tJBNy5{F>KG88kUFbL@{gxh_`MPY74KbH70T&xp`?~O!^XI+{wFiFX(HaHt}O=QNN}AS1p*#?jKT5P+f{I33hbAw2>>iC z?c&$XJ3xm2t$7#c3B~Vud`eFk3~D{p+YNWkaz?!Su@``Ksfyt4uJ^HL_G9Phg}-_s zp6CxC7$dn0#4;dgY0A)5cw&4tGUqn`-)3La-^Jt188s??VE}!0i5EqcO+; zS;h+h9G@J}-mXV|$ezIy_))B}<4Az}mNqA;z#AxSRnw)dr63eLMcGc+@j)T$yy}pI z1vIcc!shB%JTAOA+iVS>kLf>UZ9chXAv(|Lx&!6}SE4rubr8NlZ2{HCQ5~ix7>xcd zTk45JRdDB_&a?mvLDo{-jgdhjE84m+rwRw07E<8jq}m0?Q;154pRR zGmr+Ul!Or#!>_Q$USt@C`;YFa=>_M>AGi>*WlGZgGb7fwBwFl&u5-Zh;6yQdJ;wv= zw_5@@=VBP6S%sp!8%5|O6@eM=iE|e!|8Cg@=-S)+c2g2>PyH4*VAQeH{zYEVsh8iG z^)$`=QOw=jj=== z$#r25@xQ5<7APY-PRpgp6j08I67lHeLUsu~vfPeJK`nKdx9UQ!sGXDWfZxVyEV=gK z?(`}(9sE?$MbVz4oAh;l>#Gi{d>?5mPmnVdS+koMgSm<*8e>7j< zE|TQ1Hn+`>=E42DW{-Z^PX=VD88V};(1FrbSm?i)s_yK#+K_jxAk5YdqNseKP+gdr zAdI;4AC}!zY_hL3M1Jtkkz4AQ`yn z^zN;uoLtyeUuYBhcS^|vd=~sotuVAiW;86QUk=$Mk zu2A#&EQnFaH^E5&G=4im<@4VXKZe(_z)1&vy{F>mOTtgG#_By))5W{E=o zDY$8BV-&c6SSrwjt|$d%!np!RU?-S{BRw9&b>p2{g*=Gi0o%C08cRTa54T7QQh=t} z%zG-?A7=>y{xmRb{Lt6Bl59-$YguC%i*DwI!Ufssg4^wnjUAWEgGaV)T8qG|&k&C6 zsr`#65g49nZJGK<34%*9Fc1OKCNLs9IlefTkt)=mkRml5qUYnXg%*Q0N3(HKrScdJ7{( zOa&~`BIhBkF%U3Fhu3yx!wUiA2o&PP)Ksf$o-Ln; zHDkXV)Y=9~1o_gM5g!fUdmu7fOp<0|vz zm9Gz8sX8nuvk2`3A(tqd;;OIre-UKn#pBQ6mdLAmASrCFB^H{SQ0+i5Zw8jdahvGf zKV)6em4d-tBHejkmY9hSXXH*48TXLT%rZtB#6w*@fL)j0H~vxpBGKfBvlG>Q`_9mj zw#e5@1!~X>TB$<04sn3=O+2zlv465qU0&m&Bj-;c4EtSG85Dx{Ab04psm@~^KS$Q1 z7d1fgH^(OxUlaOPZbH}qXpuw4%u~=Ypz3_3e1XHJDhu?G^Y6qLAH05HbAJ2Fr71cy zYr1gh$1`@^10wm55Gao zQry6v^aU;;%Up;$k|WklDnQ=F zT`{$BsSa|dtpy*KfNLGL@&HgZEtq0x^gYWL=>t_^*_rK+TgN*FpMuck?m{?4Fap`e z{9p*d-BXZ%X1u9<@f*m-Ygvm_b{nh-T{f)(&=CVy2)$xyY;U0JAHDO~_aJBJ{AVj? zRu(|&8pJs_Rp#%ZXI4im4N8GnW()b@7m55bVZ-`MR90YRgYjN^Urf#d?{xVc2z3L| z&#$=BvHmFJ8FIO(Il0O%vhY6ienFZlL3?l3?le+HttDIr=2hSbBG!2_M^QZie}_lc zRIi17lVWR^`xLZ6-1i<@<*VFxZs7irW{QNSn^^Naq`iMtgOjx6l|x&k`FDc2a`I|P zi8lScs!N+t$4;h__5BSfhj0Ss`>F&eFg+I@lq~o9M)xawmU5V5m86nzru*}Pzl5k~ zw0m_{`>~>RvqZxePoHj$@&JJz%DzS7R3R^T*hOA9F&p6Iz&P}ofF4fe1`md` zJDJGL{%EX^=*m_5SbVu`pWtQYQc!lx(EAPGovi&?A6^9ahFE8``_=L;*xl{y1SupU zBA*r4ld0De#X%aF$p6=J=WhvciiZ2345)2ggykSfqk}ua-^kyfrF@ZvDg-oUkAQzg zm>VHRf1@I-9bo(pYB9YDDjjguMp#u~y$PVjI>i7H))@v6VO?I<)y2BDTt6&CZmpk{ zKpU=`3V;afmJ)O@t{aMg2kqTTCm#LlxMtJIg%cZ> zn@$;>QrG+G`JSFrr)`ht{JGyk_QKCQ%g-;|y5)KN+n)VbH;!w}vE2hG^1+pZd9|@~ z=_HHnjN4gz>n33_Vk6-d${#91`Cr&5tW2B@%C(7z z{3$EMlGYoo6Jp0YN34s+x{f%ut}NG2jrHU6*1AcsZW64U1S0Du!MaJXZW63JlItF| z$ht}JUjUaRNyFknWdg)tC`AhVPRr~YkPvtcB)oqBzgz zSFD@&h!R0{z@v2_@k2?+_se1Sj{xVnbxIqQw=&wu<9)2B6}I(+x}kAG7NRo3$-@R-*?{q&q9N$}-`^G6pz1yh|TX~@pdk*bv; z0Rxb@Y91VHQzHcfIo_QUH=qW| z-LD7QN%a#th&pCDUNOr8be>)c(f}Tgjk|FHoLF+#LWwiAr@GlaNZz22u^BQAvM&Ym?iUpY1c9^Sg=H9n#A69m~E)&ygU3Sql_ zFa8TVy=AEf5;S8MNv4?I?Vg#M24W&Fp0Ca4uoqN7DmHH!kKy^SNQA|#xr2hpBB*Ly z&PuVF6xpY|0lW}zA~;{QM7EMc&xTT*bq&T45p6y$W%I)eP1yplsJskifVtY;MRH%7Od<#+w_} zz_3~oAkFlX7*E#5C~zrzuegF9s8oSJSclP`QUQf#CxUyTb_f>YF?I8iq1b*m=|7=d zr#qznel~9oV;Y5T{GlZqAZZouge9S?Y#P$oej2UB@SzRMcN$vG76~JH?QxrjN0%yc5SDQRRTRzcKCCV z)~S_W^(Iq)XDtI7V?sXNl~TA1mD(Mx(zyx)dG;s{^A3psk_yd<$>rNVy0Xb>*yru! zR|rI(SAN`3upZ1}EkSMoB+pb14=Eine4(_L6C)FSm3et)T)8bKXYdO6 z-6R2fVq1*pt;jW1bW6RPFS=ML#!k80;{t|89VYNW(G)E9vR%nF6Mokg*y3=Tqd2y2 zU|E;IYJ2b5^9on{tD-|`UkulIE{fv&6f^NGb}QD^F;wA9RxE4f;gGC^{J?sle^qr_8H{qDfEI{=w=O!(c;(>I&A1|K*>@qujKx2jjKl+Gb zBFiy|4b3x~`KzNLpczy-)iYY|x-iq93cpi=swenM6{s0bj&p&uXJ_3OmdaDR+W-n& zNQ1J8>X+MAHZ_L)&68aw$Mbs5*lg*gAdCnuH%Ig``})->#!Yom1m!b zS&$y6pfsO>Yrg(wkB{n}2W7dv-g=rBp`5P;(Nf^jpcL>GPHM-i;aaBZBOS!+w=TR% zcs$yp(4?|HN_YS&!vBMUvt6AhCz-Kf-GnY>P&!J2$OIDF@{r|ZRJroexI$Z@Fy<&@w%NCTHL%CS}M=^E9 zU#dZ|fxAA%)gH{;ROWK`%fhRwr2~i$QXfEBbkl*be!m>I)Gilg@zP1v6xIsfe&puL zj|GM9lXD$PaOrQHjZZP(w|O>t#>drZ+qW@FImM+GG3_|_u7p5LET+98{#Id181xNt zEi4XMQ;-WMM2VncBy-CLGhSxj?i|HBHJ$DY7yCk?a-%*@V*O34Tu|mZ>gPvV+B(6lc_or zq%3cTY9`aDNC_AXRK6dcE0SFfuLl*G%;pYhXd#k8?b92h^`RLpeE%&4{l`+7^p|lb zreHldWlRO2rkvz-l!`D5CgYjG8?jq{f>E`V_4=GHIz$=R6qtW&$2<8~ zyR*ufb@+XVt|FsFn+FB$xb;~Jl zQfywg&&W&jdp+S76UOTn+cO63Y)zOY@of!Bn}4K1C+$2q6ZH2XU@!aB+|bSuqj!J~ za?3ksHr11x=X46H3g0_(eCAdDz(JH5a%g3Xo;M+`kC5YBevj^HviP`T0l6C?au~m6 zCH-8aw23`(TSi^dznpd5xuZkL36xDLM@(}KevP3*=l*IYRMbiWUwL~rMhweF0wy=M z+KA=Vu6}(WXX1nL;ctFK&R$8`U_SWO&SvAQxWNA9Z%H=NbD)ft`CPBuKh}Ix`|Ti9 zW9p=n@o^d`y|1iTnX6Ow`grBtrkbcxK4;Dqjc*K$*g%wU7B_r^cOTgg^1o>}Nogq# zgYQd0GV7g{ig8q4V<7m+gt)KHMNoONijJE|E*}`Be{;g0g`*|>JPs&{o;CPeN5haK z0nKAu^MF`I?!&Zw4Wbz3tpz8KBI2SRVFLbd5w3Fkqq!zFY0-S}|^CNA#9}RgZnU z)|H6b&wBjIjo9*k_I34N?Vz0fC@AjX8urF!?+>?b{P(cs|L=Ppz}W)1*+vGDz@zzx zvjt3&1OMqRQ zUxbY8oV8bjK>dt|*1JIavzOaiX1D_n{6&d?`C_5^#vw;QA6M^V^~ch$k+O|*Sk-ca zV%Y0tw&3+uOufH)P3~0V0+3Q^aApil7dXTd8-WMd_-ohMf%ax&;3V%i44d8t$`t4sbb$9i=RAq= z+3G(|bvd^WkqnuodVu%MRTRN@QFdhkZH+Tm2Ffgd#4@@r*ho>X1h>uKhu2+Sk^tX} zGQY*IIk6x#oQ4GoO{1 z8+sat51l>)gTW48*SvZY2KyBWgZ+N{H)ik`*V9pbFjyGu`qfKDe%AA&{%`K~1)uZV z&i*Y*fa6Hit_M=RD{IEdfB1fs;{~@OL6?W$s^Eu6cbqRAiqA17X?_WNbTs_(Z_=s3 zC(jq%J@xp~g(6egUk(Z$5?&83u@x!2c&kuUxbSuG365$?%B+rCR{ExgKdqtFb7dud zwnTI2y8x;kG-`e zMObs6YL-8uQop>F_}wscecEce!If0iDhIphe&`77Htu63*>9#fB{p=kF}FFCwEJG~ z4D}rUZjbFaVN(mes4&f?uePmYkG&&;gxwATkG$@pukpl61?^~CMf4K3;s~WK)$+Qn z3RA`?Wk!2>^8p6Gk%EsDmN7pa*GwC+m>+AX^TW z&2dW-A-l94TtEAn(Di(*sBx*~ts&;HserE!xy&P`y>3`k$+t$ly{Ph{0`aZO_f0`rL1&t=^NFAJuH8yjxNxrm?3ni$`~ z@qedZI;(~8Qi45qT$`0`PN9tw&OeS1WpR5q*Y1?`PFWkUkqVg}-*y{7 z@AzR8xY(6{+_opZozAkj8AQja8v2i717>Ght3>uE0+Cm@R9kn`ts^n>BTpGc1skRHlmC3FFX`P;MVh$I4d^bN% z6gR%oNw_gon&Lgzf0CcBw)?_)`~$nvtG8BKV6rKOs7GH*ulbsUkewLp{9D_t>#z&@ z@02(CpJ;G(sxU04%M{xpNN#lv%kH{x_qk^!$*zVg-WbYr@J1AVMq;U55Tm$UjMV-iwR%IeaJBZ3(F8=gn@!-W3aU1+A|3$a{;-FAF+JmcuW4KI>GuRj>rw{QxE#O1TVzuU1iSeE^E^p6>HIC@CCRyS?m zJh*Re<+=s&Z5)^y(4QbWi2;LZ4I=_eL(K; z>&+{66y#?Z59R6XPa0ce`(c>6fusMAVQ1VehXa=W&9{;l)Nf5IV8kSlQ{Atbh-#sP zz`wdE2}&>DewLQ3TaB_JnxQu2#Yjo}`wMfReFS#f$UB9_qRK^NvEI`Fz3nZ}7R;4! zX;zhp*70aWPbQoAF6@r4tGxkD*d9(=M(Zhm{njdH|I-SY9o%5jnCrsq%xMoiGr)^K z!;TDB?uODo1dEc`C@&7~l+GcivA&n=)6ef)Racb9!7#M$Wq;|9XEP{gx!|2D)j1xI z*5>4ms(8NHg|5bw+HK7d#{Ty=U3~#YDJS$&nfq*%=SaHG(wJ4yw+{@j26dAynwS{r z^S2!a|LZL{;`Lb&D&B8!z<+lJqq0y)Vo}JTjB!?bNf6WtD@!5Oe&BUPNo&WiwW#uM zn-1(m1>0S+uS?or6k&wt!7#;dH~7AxFoC2w9Kky1$M~-Gz}zb2q9z(y_zPVu*8gUe z;@IuXSF_kOoA`7NTj-L0bHC5s#55jQuVB>jA5oqezna(t>rPIGqq<}AIn=ED9H|p= zQk)jmZeqs8ez`SEV+`}S=sZ$YwSL0rPnWUr5PDuLYWX(4gW4)qTDV10bh0h$S*>rw zn4<35V-1>IFg1Pd0VCFsY2yo|khTu$^a#zNQQuLkAr_d!d7H^bm-Yb#xtHX@cb<;p zX{REZYI*+6x4F-*{j#f0><4El+03&u$dmr2^VN`dBjsn zC_~=fjSwaNj#g+5C2Yk`R1R1d%`34%tG_pZtr)eUEmXJ9*t=`Gfyf$nE=v9x&-bcxwc>HJ1znue-*iVOr^Ni~4nU zqpOu&*OklqM?BWaC?VDXwt^27g>O-dl&7?Tm9iyxQZcev78i!2%kWKEXuX z<&aTO-HOsW0&~E1ER)|&KjYxvq7eqX>lOQB3RmFM+9y~srbTu`+HH!vC1h9_RRpQU z-0`jE#-{`CZ+kyuvDqD#7v1H1NaPDHe!Cz%t4u^o01x9gTad5RUt(c0B$SLll4y#$ z>U3;+ZNn~si*;$k2|b!nDkb@DgQXdArK0&eQ`!v9(B&9?AAF>+>@Y)gFLYrZq`_hB z#+j3s6v?i2)RuHn66RHhCwzcP%>3egqMI ze#$>-V(sre4gcvo*}&Vr5n_R<^jh&XSs8`+4NXd*owN)WUv=k%Qxa&Ke$>s*;4)dt zRMQDP$qu!p@Qy&vQat_n#5!s5-sk!ltW@{38vrfPo;=8w^@%zP)<>uMr@Mexl7E}L zcKyRM2@6ruw}0H)9kR}mlp@%T^S@6v{*j2nP&nYa`TMgUdBIO8>gmBSo97RfZ$G|{ z)L_y`{^?K~->1R*zrn~{i3WUZ=YOAmO@94zUkcENI*mJ!i4?{-;q_Z~Sdabj)`&|& zU*RX=w|+V?HnGsEw;La$Xaz|;t~2Yfi?_^C?NLf@Hl_***I(`T-2z$5@>jLOEiy;9 z>wz%QfAyXE&@@pX^Aoi%;z+3r3(QCaS@?7Q#7oS|^EUpT-qogt29YD0(L_EQe>m*B zZleLPV91^Tt__?2&)0vZ;D0?UNc~NIJjkw#FFZ<;h~)j&yE7+BQV&-a$%%{Q%1NzYnU^x zp$fVAEin!kyx`pY7YpB@D61rXV`73z;Cx_VLpMu^e#8!70Sfq_qb zPPdrU3gC0Z2K%5%uGN(eDaDrW-c|yX?HuQr<)2rx(xGILf`g;pAFyIH6(<4QQMn9v zjpFq&o%C<<9`m2Rg~9FjcnEVW-Vo(7_~zvXeSk1lIqp4RWm3P~D%K2eZXC$dDq|x8 z7vJUI3|HRWT1lo<_F18VXm#TY0gEf0Y6QQ9$^i&FO=?XgU#lU zxx0`|#FHkLU6uOnL7LT0acRd`ImN%bFxYp0uqV3?&x#{oeH6ypiSs>olX+x{stC%6 z;t#2Lt9t`V>TjF_I9*)=S>-l59DrY62QT4mpWd6OuR62_*M25m;Bo>qFrg0r#B~j zvQ698=Nf%O*mhlmVd|KHR-dGXOjI`P(B~{tTHwAT=n`+`iS8^zJ%!xL4vnA�SAq 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 literal 48487 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

`2r>q&ijv z`AhlF11-xnm&=oe+_UkS`9% z%8psT#z~Mpg`(~8Uh?GGe|;dTW&&slolXs5W;F|YfUu*%EKn6R;;fY%?|aB6Ge*#x zu^{C$Y6_^!BRQqBt4?!JdP6?M^saWV_f%l8>0X`ke zkuA-ab-8-=>c`Sj!%{S#O^bcT8}->i1jErMbwCDJ_j&U9Dp?lkLqS2iVQyY{C>Xqx zKzA^(DjBF3`QuFYWhy`c5FirQ8erqG| z-V&cQD7G^Gbu003Rb?eL(kQwsS&O$ji|(g_TL&H5h%N4B%(05;k0`4ff#G&E z2Y2@y3%L}8F$bR^rx&y5PP655T-UK8L&WXf4)l$h-b-3m&QF8C%|M%9x_tQsIw*RZ zD$B*C^n{Qb_b0^1;J6y3KTEr56eEM5jT*U?bp7?%g?J8hcKQO3A7(YM@Nr%>`;LAd))~+ z*Id$YB{(=Z$aiV5jFjX;s z%}>kWI`wU>lXPj5cFu@gWa z{3cRo2Qb5>EW7H$-G%tk?;nMvwn%(*7?ca64CxAME4$1 zO`$1&f<7@AFDUsd*`|o(0IM$qSOl9%=-95!6X}We1XOBxXy=|y!2{;4l~ajzeV<#}6$-V-Ll4eNQ6(b;55fi4LMjz%cV z*XrvV=cVg@zBJo@rv@YgUxe62#F;IH&xunus&7>~Hl3CD^mCXpY;N4#2N%3@GHBgN zWAWcEkj=7oOxK@N1i_YjgFx{dwhVdk?6kR$MAR6&MmyaBf!+Rq;Xv^XuZkS(t* zZa+{Ve!usxSmUP9;&y|{iw}f@RvHkfkxuiUUWRnxUn7^zJ zGW|@v`X17gxTKq5)?-g?4954`UoLDA-K_v#(FSd8PqyD-9%!G-=Dhl)pQ6#6GVM(o2s{G+n;+-qJ*xMnXf zIYG$1=M2Xta`I)8~lU+KADMi3CU9S8weAP-v1-1F@%E^LtPy5oxt0q1_QR>v(a4*L$kIhnjy3HGM zL8L?tt~>16xjilaV3z&Xb$P_em%Py}hgNtt+amaPm%{g2Mv9D?Q}>b8q9VV!FtFGP zHvgV$UE>9&=R0jm->#&l$>5a2Mqlxv{jG185`Xr4Jra}~f4v$LiQfpl7HM@a)9B5; zDF(?V45-~Tqrq(bw-s9jq1H^4;EbQ}m7)It-5Ghz<k9qaV-Gxf$&sHae18&G&z;$uBHCSm_O%aQqr6 zTb;|g0w2BqxLQcp%A{yWoUAjG}0tJCp+|+1*NzU_mhoZxxFS@z_|x9#U$Dk zCON9~!-xGpXf(E?zx1Bi=NK0muc4pMqa(`r7A`H}nkGTxFLz#K4}z;#zA}vsj{e>s z$V0BWxn=tK40J*Q{iNUBpgT}+euz11;GDx4+@f;4Zxx?I*YP5`@7=eL#oDTR-)bD( zwmItgRhNY5q(iPfA+%^^sO!%VGxhA&<+yRM)466N^_!JmOAC?9=-;Axp>Gv%&AW3P zk4jG%%-c;I(^BsfulR?j?Ms!EmzI_mTkP^;D42qaU$?q;J-^}dCOTuc?m(v>=lNr! p`7?^T&GY{(9##CegBy{&&X*-$9#To^py`%a9=AT0d-Tek{{cNhGlc*E From c2894f8ae220e562b217bb4cdb987d1262dfff07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=BC=ED=98=81?= Date: Fri, 11 Sep 2026 16:37:53 +0900 Subject: [PATCH 09/10] =?UTF-8?q?fix(setting):=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=EC=B2=A8=EB=B6=80=20=EC=84=A0=ED=83=9D=EA=B8=B0=EB=A5=BC=20?= =?UTF-8?q?=EC=82=AC=EC=A7=84=20=EC=84=A0=ED=83=9D=EA=B8=B0=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=94=EA=BE=B8=EA=B3=A0=20persistable=20=EA=B6=8C=ED=95=9C?= =?UTF-8?q?=EC=9D=84=20=EA=B1=B7=EC=96=B4=EB=82=B8=EB=8B=A4=20(#784)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenMultipleDocuments 는 고른 URI 마다 takePersistableUriPermission 을 받는데 삭제·이탈에서 돌려주지 않아 앱당 상한(기본 128)까지 쌓이고, 상한을 넘으면 SecurityException 을 삼켜 사유와 다른 안내를 띄웠다. 저장소의 다른 첨부 화면과 같은 PickMultipleVisualMedia 로 바꾼다. 사진 선택기는 프로세스 수명 동안 읽기를 보장하므로 persistable 권한과 그 실패 안내 문자열을 지운다. --- .../presentation/screen/InquiryScreens.kt | 36 ++++++------------- .../src/main/res/values/strings.xml | 1 - 2 files changed, 10 insertions(+), 27 deletions(-) diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt index 0750ab5cdd..6a6cc04d02 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt @@ -1,8 +1,8 @@ package com.afternote.feature.setting.presentation.screen -import android.content.Intent import android.net.Uri import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.clickable @@ -47,7 +47,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringArrayResource @@ -239,42 +238,27 @@ internal fun InquiryWriteScreen( val title = rememberTextFieldState() var content by rememberSaveable { mutableStateOf("") } var attachments by rememberSaveable { mutableStateOf(arrayListOf()) } - val context = LocalContext.current val snackbarHostState = remember { SnackbarHostState() } val coroutineScope = rememberCoroutineScope() val submitNotSupportedMessage = stringResource(R.string.setting_inquiry_submit_not_supported) val attachmentLimitMessage = stringResource(R.string.setting_inquiry_attachment_limit, MAX_INQUIRY_IMAGES) - val attachmentUnavailableMessage = stringResource(R.string.setting_inquiry_attachment_unavailable) val onAddScreenshots: () -> Unit = if (LocalInspectionMode.current) { ({}) } else { + // 사진 선택기는 고른 URI 의 읽기를 프로세스 수명 동안 보장하므로 persistable 권한을 + // 받지 않는다. 다른 첨부 화면(서류 업로드·프로필·에디터)과 같은 선택기다. val picker = - rememberLauncherForActivityResult(ActivityResultContracts.OpenMultipleDocuments()) { uris -> + rememberLauncherForActivityResult( + ActivityResultContracts.PickMultipleVisualMedia(MAX_INQUIRY_IMAGES), + ) { uris -> val selected = (attachments + uris.map(Uri::toString)).distinct() - val candidates = selected.take(MAX_INQUIRY_IMAGES) - val readableUris = - candidates.filter { value -> - val uri = Uri.parse(value) - try { - context.contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION) - true - } catch (_: SecurityException) { - false - } - } - attachments = ArrayList(readableUris) - val message = - when { - readableUris.size < candidates.size -> attachmentUnavailableMessage - selected.size > MAX_INQUIRY_IMAGES -> attachmentLimitMessage - else -> null - } - if (message != null) { - coroutineScope.launch { snackbarHostState.showSnackbar(message) } + attachments = ArrayList(selected.take(MAX_INQUIRY_IMAGES)) + if (selected.size > MAX_INQUIRY_IMAGES) { + coroutineScope.launch { snackbarHostState.showSnackbar(attachmentLimitMessage) } } } - ({ picker.launch(arrayOf("image/*")) }) + ({ picker.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)) }) } val canSubmit = title.text.isNotBlank() && content.isNotBlank() diff --git a/feature/setting/presentation/src/main/res/values/strings.xml b/feature/setting/presentation/src/main/res/values/strings.xml index f6bf447472..c98b7d0d8b 100644 --- a/feature/setting/presentation/src/main/res/values/strings.xml +++ b/feature/setting/presentation/src/main/res/values/strings.xml @@ -38,7 +38,6 @@ 문의 내역을 찾을 수 없어요. 문의 접수 기능은 아직 준비 중이에요. 조금만 기다려 주세요. 스크린샷은 최대 %1$d장까지 첨부할 수 있어요. - 선택한 사진을 계속 불러올 수 없어요. 다른 사진을 선택해 주세요. 첨부한 스크린샷 %1$d 스크린샷 %1$d 삭제 From 828e1fdb47a96714191120cf5a75c5e69783fe74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=BC=ED=98=81?= Date: Sat, 12 Sep 2026 06:25:24 +0900 Subject: [PATCH 10/10] =?UTF-8?q?fix(setting):=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=EC=B2=A8=EB=B6=80=EB=A5=BC=20=ED=94=84=EB=A1=9C=EC=84=B8?= =?UTF-8?q?=EC=8A=A4=20=EC=82=AC=EB=A7=9D=20=EB=B3=B5=EC=9B=90=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=A0=9C=EC=99=B8=ED=95=9C=EB=8B=A4=20(#784)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사진 선택기 URI 의 읽기 권한은 프로세스 수명까지라 복원된 URI 는 AsyncImage 가 못 읽는다. 첨부를 remember 로 바꾸고 이유를 선언 옆에 남기며, 복원 테스트는 텍스트만 유지되고 첨부는 비워지는 계약으로 고친다. --- .../setting/presentation/screen/InquiryScreens.kt | 10 +++++++--- .../presentation/screen/InquiryWriteScreenTest.kt | 7 ++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt index 6a6cc04d02..c2c2c3ee7d 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/InquiryScreens.kt @@ -237,7 +237,11 @@ internal fun InquiryWriteScreen( var type by rememberSaveable { mutableStateOf(inquiryTypes.first()) } val title = rememberTextFieldState() var content by rememberSaveable { mutableStateOf("") } - var attachments by rememberSaveable { mutableStateOf(arrayListOf()) } + // 첨부는 일부러 remember 다. 사진 선택기가 준 URI 의 읽기 권한은 프로세스 수명까지라 + // 프로세스 사망 뒤 복원한 URI 는 AsyncImage 가 조용히 못 읽는다. 저장소의 다른 선택기 + // 4곳도 고른 URI 를 rememberSaveable 로 들지 않으며, 접수 API 가 아직 없어 초안 첨부를 + // 잃는 비용도 낮다. 구성 변경(회전)에서는 remember 도 유지된다. + var attachments by remember { mutableStateOf(listOf()) } val snackbarHostState = remember { SnackbarHostState() } val coroutineScope = rememberCoroutineScope() val submitNotSupportedMessage = stringResource(R.string.setting_inquiry_submit_not_supported) @@ -253,7 +257,7 @@ internal fun InquiryWriteScreen( ActivityResultContracts.PickMultipleVisualMedia(MAX_INQUIRY_IMAGES), ) { uris -> val selected = (attachments + uris.map(Uri::toString)).distinct() - attachments = ArrayList(selected.take(MAX_INQUIRY_IMAGES)) + attachments = selected.take(MAX_INQUIRY_IMAGES) if (selected.size > MAX_INQUIRY_IMAGES) { coroutineScope.launch { snackbarHostState.showSnackbar(attachmentLimitMessage) } } @@ -349,7 +353,7 @@ internal fun InquiryWriteScreen( contentScale = ContentScale.Crop, ) IconButton( - onClick = { attachments = ArrayList(attachments.filterNot { it == uri }) }, + onClick = { attachments = attachments.filterNot { it == uri } }, modifier = Modifier.align(Alignment.TopEnd), ) { CloseIcon( diff --git a/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/screen/InquiryWriteScreenTest.kt b/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/screen/InquiryWriteScreenTest.kt index a669859711..f3368793f4 100644 --- a/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/screen/InquiryWriteScreenTest.kt +++ b/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/screen/InquiryWriteScreenTest.kt @@ -48,7 +48,7 @@ class InquiryWriteScreenTest { } @Test - fun restoredForm_keepsAttachmentsAndText() { + fun restoredForm_keepsTextAndDropsAttachments() { val registry = ScreenshotPickerRegistry(listOf(Uri.parse("content://inquiry/image/1"))) val restoration = StateRestorationTester(composeRule) restoration.setContent { @@ -64,8 +64,9 @@ class InquiryWriteScreenTest { composeRule.onNodeWithText("문의 제목").performScrollTo().assertIsDisplayed() composeRule.onNodeWithText("문의 내용").performScrollTo().assertIsDisplayed() - composeRule.onNodeWithText("스크린샷 추가하기 (1/3장)").performScrollTo().assertIsDisplayed() - composeRule.onNodeWithContentDescription("스크린샷 1 삭제").performScrollTo().assertIsDisplayed() + // 사진 선택기 URI 의 읽기 권한은 프로세스 수명까지라 첨부는 복원하지 않는다(remember 계약). + composeRule.onNodeWithText("스크린샷 추가하기 (0/3장)").performScrollTo().assertIsDisplayed() + composeRule.onNodeWithContentDescription("스크린샷 1 삭제").assertDoesNotExist() } @Test