From c93f9c0570d4ad2be3b9bf3f3c8bc21ddbfe67b5 Mon Sep 17 00:00:00 2001
From: GunHyung Ham <54674781+ham2174@users.noreply.github.com>
Date: Fri, 20 Sep 2024 02:34:17 +0900
Subject: [PATCH] =?UTF-8?q?[Release]=20=EB=B2=84=EC=A0=84=20=EC=97=85?=
=?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20-=201.0.0=20(#96)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [Feat] Google Services 추가 (#54)
[build] : google-services 추가
* 버전 업데이트 0.9.2-beta
* [refactor] : 자기소개 api 호출 순서 변경
* [refactor] : 자기소개 바텀 버튼 활성 상태 로직 변경
* [build] : 이미지 blur 이펙트 라이브러리 추가
* [fix] : 보틀 보관함 리스트, 핑퐁 상대방 이미지 블러 효과 처리
* [Docs] Read.me 작성 (#60)
* [docs] : 리드미 제작
* [docs] : 리드미 수정
* [Release] 0.9.2-beta (#59)
* 버전 코드 수정 - 0.9.0-beta
* [fix] : 텍스트 필드 포커스 시 화면 스크롤 영역 정상 작동
* [fix] : 신고 화면 화면이동 로직 수정
* [fix] : 보틀 보관함에 대화중 보틀만 존재시 모래사장 화면 상태의 IN_BOTTLE_BOX 갯수 수정
* [fix] : 자기소개 이미지 선택 안했을 시 생성 불가
* [fix] : 자기소개, 프로필 이미지 API 동시에 전달
* [refactor] : 자기소개 뒤로가기 버튼 클릭 효과 제거
* [feat] : 스플래쉬 화면에서 프로필 제작 상태에 따라 화면 이동 온보딩/모래사장 분기 처리
* [fix] : 카카오 로그인 취소시 로그인 화면 버튼 비활성화 오류 수정
* [build] : google-services 추가
* 버전 코드 수정 및 광고 ID 퍼미션 추가
* [Docs] 이슈, 풀리퀘 템플릿 추가 (#61)
[docs] : 이슈, 풀리퀘 템플릿 추가
* Update issue templates
* [Fix] 프로필 이미지 다운 샘플링 (#65)
* [feat] : 로딩 화면시 터치 제어
* [refactor] : BottlesTopBar Modifier 파라미터 변경
* [fix] : 이미지 다운샘플링 적용
* [feat] : 프로필 이미지 로딩 스크린 적용
* [Feat] Firebase Crashlytics 및 Analytics 셋팅 (#67)
* [build] : 파이어베이스 크래시리틱스 라이브러리 및 플러그인 추가
* [build] : 파이어베이스 관련 플러그인 빌드로직으로 관리
* [refactor] : 로그 삭제
* [feat] : 파이어베이스 애널리틱스 인스턴스 활성화
* [refactor] : 자기소개 화면 이동 오류 수정
* [Feat] 핑퐁 화면 캡처 제한 (#69)
[feat] : 핑퐁 화면 캡처 제한
* [Fix] 모래사장 상태 오류 수정 (#70)
* [fix] : 모래사장 상태 오류 수정
* [refactor] : 온보딩 버튼 클릭 영역 확장
* [Release] 버전 업데이트 - 0.9.3-beta (#71)
* 버전 코드 수정 - 0.9.0-beta
* [fix] : 텍스트 필드 포커스 시 화면 스크롤 영역 정상 작동
* [fix] : 신고 화면 화면이동 로직 수정
* [fix] : 보틀 보관함에 대화중 보틀만 존재시 모래사장 화면 상태의 IN_BOTTLE_BOX 갯수 수정
* [fix] : 자기소개 이미지 선택 안했을 시 생성 불가
* [fix] : 자기소개, 프로필 이미지 API 동시에 전달
* [refactor] : 자기소개 뒤로가기 버튼 클릭 효과 제거
* [feat] : 스플래쉬 화면에서 프로필 제작 상태에 따라 화면 이동 온보딩/모래사장 분기 처리
* [fix] : 카카오 로그인 취소시 로그인 화면 버튼 비활성화 오류 수정
* [build] : google-services 추가
* 버전 업데이트 0.9.2-beta
* [refactor] : 자기소개 api 호출 순서 변경
* [refactor] : 자기소개 바텀 버튼 활성 상태 로직 변경
* [build] : 이미지 blur 이펙트 라이브러리 추가
* [fix] : 보틀 보관함 리스트, 핑퐁 상대방 이미지 블러 효과 처리
* 버전 코드 수정 및 광고 ID 퍼미션 추가
* [Docs] Read.me 작성 (#60)
* [docs] : 리드미 제작
* [docs] : 리드미 수정
* 버전 업데이트 - 0.9.3-beta
* [feat] : 하드웨어 가속 설정
* [Feat] 핑퐁 화면 당겨서 새로고침 기능 구현 (#74)
* [feat] : 핑퐁 화면 Pull To Refresh 기능 구현
* [chore] : 주석 제거
* [feat] : 핑퐁 읽음 처리 usecase 구현
* [feat] : 핑퐁 디테일 화면 생성시 읽음 처리
* [feat] : 시스템 네비게이션 뒤로가기 시 뒤로가기 인텐트 추가
* [Feat] FCM 기능 추가 (#76)
* [build] : FCM 의존성 추가
* [feat] : fcm 토큰 로컬 저장 및 가져오기 구현
* [feat] : fcm 토큰 proto 파일 추가
* [feat] : 토큰 재발행시 fcm 토큰 전달 구현
* [feat] : 토큰 재발행시 fcm 토큰 전달
* [feat] : 카카오 로그인시 fcm 토큰 전달
* [feat] : fcm 토큰 획득 및 fcm 서비스 구현
* [feat] : 모래사장 화면에서 알림 권한 획득 구현
* [Release] 버전 업데이트 - 0.9.4-beta (#77)
* 버전 업데이트 - 0.9.4-beta / 10005
* [hotfix] : 알람 권한 결과 메세지 삭제
* [Feat] Timber 적용 및 FCM 토큰 업데이트 대응 (#82)
* [build] : Timber 라이브러리 추가
* [feat] : Timber 디버그 모드 일때만 활성화 및 FCM 토큰 획득 시 로그 출력
* [build] : app 모듈 - datastore 모듈 의존성 제거
* [build] : data 모듈 Timber 의존성 추가
* [feat] : Token Preferences에 isUpdatedFcmToken Boolean 값 추가
* [feat] : fcm 토큰 업데이트 시 데이터 스토어 로직 정의
* [feat] : fcm 토큰 업데이트 api 구현
* [feat] : AuthRepository - fcm 토큰 로컬 업데이트 및 앱 서버 업데이트 로직 구현
* [feat] : fcm 토큰 업데이트 시 로컬 저장 및 onResum 마다 업데이트 판별시 앱 서버 토큰 전달 로직 구현
* [Feat] 데이터 스토어에 FCM 토큰이 없을 경우 저장하는 로직 구현 (#83)
[feat] : 데이터 스토어에 FCM 토큰이 없을 경우 저장하는 로직
* [Release] 버전 업데이트 - 0.9.5-beta (#84)
* 버전 코드 수정 - 0.9.0-beta
* [fix] : 텍스트 필드 포커스 시 화면 스크롤 영역 정상 작동
* [fix] : 신고 화면 화면이동 로직 수정
* [fix] : 보틀 보관함에 대화중 보틀만 존재시 모래사장 화면 상태의 IN_BOTTLE_BOX 갯수 수정
* [fix] : 자기소개 이미지 선택 안했을 시 생성 불가
* [fix] : 자기소개, 프로필 이미지 API 동시에 전달
* [refactor] : 자기소개 뒤로가기 버튼 클릭 효과 제거
* [feat] : 스플래쉬 화면에서 프로필 제작 상태에 따라 화면 이동 온보딩/모래사장 분기 처리
* [fix] : 카카오 로그인 취소시 로그인 화면 버튼 비활성화 오류 수정
* [build] : google-services 추가
* 버전 업데이트 0.9.2-beta
* [refactor] : 자기소개 api 호출 순서 변경
* [refactor] : 자기소개 바텀 버튼 활성 상태 로직 변경
* [build] : 이미지 blur 이펙트 라이브러리 추가
* [fix] : 보틀 보관함 리스트, 핑퐁 상대방 이미지 블러 효과 처리
* 버전 코드 수정 및 광고 ID 퍼미션 추가
* [Docs] Read.me 작성 (#60)
* [docs] : 리드미 제작
* [docs] : 리드미 수정
* [Release] 버전 업데이트 - 0.9.3-beta (#72)
* [Feat] Google Services 추가 (#54)
[build] : google-services 추가
* 버전 업데이트 0.9.2-beta
* [refactor] : 자기소개 api 호출 순서 변경
* [refactor] : 자기소개 바텀 버튼 활성 상태 로직 변경
* [build] : 이미지 blur 이펙트 라이브러리 추가
* [fix] : 보틀 보관함 리스트, 핑퐁 상대방 이미지 블러 효과 처리
* [Docs] Read.me 작성 (#60)
* [docs] : 리드미 제작
* [docs] : 리드미 수정
* [Release] 0.9.2-beta (#59)
* 버전 코드 수정 - 0.9.0-beta
* [fix] : 텍스트 필드 포커스 시 화면 스크롤 영역 정상 작동
* [fix] : 신고 화면 화면이동 로직 수정
* [fix] : 보틀 보관함에 대화중 보틀만 존재시 모래사장 화면 상태의 IN_BOTTLE_BOX 갯수 수정
* [fix] : 자기소개 이미지 선택 안했을 시 생성 불가
* [fix] : 자기소개, 프로필 이미지 API 동시에 전달
* [refactor] : 자기소개 뒤로가기 버튼 클릭 효과 제거
* [feat] : 스플래쉬 화면에서 프로필 제작 상태에 따라 화면 이동 온보딩/모래사장 분기 처리
* [fix] : 카카오 로그인 취소시 로그인 화면 버튼 비활성화 오류 수정
* [build] : google-services 추가
* 버전 코드 수정 및 광고 ID 퍼미션 추가
* [Docs] 이슈, 풀리퀘 템플릿 추가 (#61)
[docs] : 이슈, 풀리퀘 템플릿 추가
* Update issue templates
* [Fix] 프로필 이미지 다운 샘플링 (#65)
* [feat] : 로딩 화면시 터치 제어
* [refactor] : BottlesTopBar Modifier 파라미터 변경
* [fix] : 이미지 다운샘플링 적용
* [feat] : 프로필 이미지 로딩 스크린 적용
* [Feat] Firebase Crashlytics 및 Analytics 셋팅 (#67)
* [build] : 파이어베이스 크래시리틱스 라이브러리 및 플러그인 추가
* [build] : 파이어베이스 관련 플러그인 빌드로직으로 관리
* [refactor] : 로그 삭제
* [feat] : 파이어베이스 애널리틱스 인스턴스 활성화
* [refactor] : 자기소개 화면 이동 오류 수정
* [Feat] 핑퐁 화면 캡처 제한 (#69)
[feat] : 핑퐁 화면 캡처 제한
* [Fix] 모래사장 상태 오류 수정 (#70)
* [fix] : 모래사장 상태 오류 수정
* [refactor] : 온보딩 버튼 클릭 영역 확장
* 버전 업데이트 - 0.9.3-beta
* [feat] : 하드웨어 가속 설정
* [Release] 버전 업데이트 - 0.9.4-beta (#78)
* [Feat] Google Services 추가 (#54)
[build] : google-services 추가
* 버전 업데이트 0.9.2-beta
* [refactor] : 자기소개 api 호출 순서 변경
* [refactor] : 자기소개 바텀 버튼 활성 상태 로직 변경
* [build] : 이미지 blur 이펙트 라이브러리 추가
* [fix] : 보틀 보관함 리스트, 핑퐁 상대방 이미지 블러 효과 처리
* [Docs] Read.me 작성 (#60)
* [docs] : 리드미 제작
* [docs] : 리드미 수정
* [Release] 0.9.2-beta (#59)
* 버전 코드 수정 - 0.9.0-beta
* [fix] : 텍스트 필드 포커스 시 화면 스크롤 영역 정상 작동
* [fix] : 신고 화면 화면이동 로직 수정
* [fix] : 보틀 보관함에 대화중 보틀만 존재시 모래사장 화면 상태의 IN_BOTTLE_BOX 갯수 수정
* [fix] : 자기소개 이미지 선택 안했을 시 생성 불가
* [fix] : 자기소개, 프로필 이미지 API 동시에 전달
* [refactor] : 자기소개 뒤로가기 버튼 클릭 효과 제거
* [feat] : 스플래쉬 화면에서 프로필 제작 상태에 따라 화면 이동 온보딩/모래사장 분기 처리
* [fix] : 카카오 로그인 취소시 로그인 화면 버튼 비활성화 오류 수정
* [build] : google-services 추가
* 버전 코드 수정 및 광고 ID 퍼미션 추가
* [Docs] 이슈, 풀리퀘 템플릿 추가 (#61)
[docs] : 이슈, 풀리퀘 템플릿 추가
* Update issue templates
* [Fix] 프로필 이미지 다운 샘플링 (#65)
* [feat] : 로딩 화면시 터치 제어
* [refactor] : BottlesTopBar Modifier 파라미터 변경
* [fix] : 이미지 다운샘플링 적용
* [feat] : 프로필 이미지 로딩 스크린 적용
* [Feat] Firebase Crashlytics 및 Analytics 셋팅 (#67)
* [build] : 파이어베이스 크래시리틱스 라이브러리 및 플러그인 추가
* [build] : 파이어베이스 관련 플러그인 빌드로직으로 관리
* [refactor] : 로그 삭제
* [feat] : 파이어베이스 애널리틱스 인스턴스 활성화
* [refactor] : 자기소개 화면 이동 오류 수정
* [Feat] 핑퐁 화면 캡처 제한 (#69)
[feat] : 핑퐁 화면 캡처 제한
* [Fix] 모래사장 상태 오류 수정 (#70)
* [fix] : 모래사장 상태 오류 수정
* [refactor] : 온보딩 버튼 클릭 영역 확장
* [Release] 버전 업데이트 - 0.9.3-beta (#71)
* 버전 코드 수정 - 0.9.0-beta
* [fix] : 텍스트 필드 포커스 시 화면 스크롤 영역 정상 작동
* [fix] : 신고 화면 화면이동 로직 수정
* [fix] : 보틀 보관함에 대화중 보틀만 존재시 모래사장 화면 상태의 IN_BOTTLE_BOX 갯수 수정
* [fix] : 자기소개 이미지 선택 안했을 시 생성 불가
* [fix] : 자기소개, 프로필 이미지 API 동시에 전달
* [refactor] : 자기소개 뒤로가기 버튼 클릭 효과 제거
* [feat] : 스플래쉬 화면에서 프로필 제작 상태에 따라 화면 이동 온보딩/모래사장 분기 처리
* [fix] : 카카오 로그인 취소시 로그인 화면 버튼 비활성화 오류 수정
* [build] : google-services 추가
* 버전 업데이트 0.9.2-beta
* [refactor] : 자기소개 api 호출 순서 변경
* [refactor] : 자기소개 바텀 버튼 활성 상태 로직 변경
* [build] : 이미지 blur 이펙트 라이브러리 추가
* [fix] : 보틀 보관함 리스트, 핑퐁 상대방 이미지 블러 효과 처리
* 버전 코드 수정 및 광고 ID 퍼미션 추가
* [Docs] Read.me 작성 (#60)
* [docs] : 리드미 제작
* [docs] : 리드미 수정
* 버전 업데이트 - 0.9.3-beta
* [feat] : 하드웨어 가속 설정
* [Feat] 핑퐁 화면 당겨서 새로고침 기능 구현 (#74)
* [feat] : 핑퐁 화면 Pull To Refresh 기능 구현
* [chore] : 주석 제거
* [feat] : 핑퐁 읽음 처리 usecase 구현
* [feat] : 핑퐁 디테일 화면 생성시 읽음 처리
* [feat] : 시스템 네비게이션 뒤로가기 시 뒤로가기 인텐트 추가
* [Feat] FCM 기능 추가 (#76)
* [build] : FCM 의존성 추가
* [feat] : fcm 토큰 로컬 저장 및 가져오기 구현
* [feat] : fcm 토큰 proto 파일 추가
* [feat] : 토큰 재발행시 fcm 토큰 전달 구현
* [feat] : 토큰 재발행시 fcm 토큰 전달
* [feat] : 카카오 로그인시 fcm 토큰 전달
* [feat] : fcm 토큰 획득 및 fcm 서비스 구현
* [feat] : 모래사장 화면에서 알림 권한 획득 구현
* 버전 업데이트 - 0.9.4-beta / 10005
* [hotfix] : 알람 권한 결과 메세지 삭제
* 버전 업데이트 - 0.9.5-beta
* [Fix, Feat] 디자인 시스템 컴포넌트 수정 및 추가 (#86)
* [refactor] : BottlesSolidButton 수정
(cherry picked from commit 093f2339ceb66fe33eb7cf1f7682f9fb0f8c25f9)
* [chore] : 아이콘 에셋 추가
(cherry picked from commit 7cda32ebc025c4ba1be83cf07c525810d84404b1)
* [feat] : BottlesIconButton 원형 아이콘 버튼 추가
(cherry picked from commit 8071247b298f84d6cd400b091eac71eb8a615185)
* [refactor] : BottlesBottomBar 수정
(cherry picked from commit 820fc2826677df0be3c7b1a3c89097a025b124d8)
* [refactor] : typography lineHeight 값 수정
(cherry picked from commit 697c2de9a731d72c09da993814184e5d6105228a)
* [feat] : BottlesBalloonPopup modifier shadow 속성 추가
(cherry picked from commit d2b7e8142402ebde00d72178b6ba9094c73120f5)
* [chore] : 아이콘 에셋 추가
(cherry picked from commit 55332a019b24b6023ec93f41e0fca407b8c0dbee)
* [feat] : 디자인시스템 - shape L 사이즈 추가
(cherry picked from commit b7c18963e8f7f1b4604d75b3975696c74a5e6ee6)
* [refactor] : BottlesAlertDialog 디자인 시스템 수정 반영
(cherry picked from commit fcf17204cc0b44b72042fcda14f7c5a5c0f12723)
* [refactor] : 변경된 BottlesAlertDialog 적용
(cherry picked from commit b9597e3421dea3c90444527a86b75b858ee8bdfd)
* [feat] : 컬러 스키마 추가
(cherry picked from commit a865599cf3e9051fcff7c4f714d6ea64eca600d2)
* [feat] : BottlesToggleButton 구현
(cherry picked from commit d7b82db17be07187e85bdcf76b815ef16003e3b4)
* [refactor] : 프로필 이미지 컴포넌트 분리
(cherry picked from commit 4670c179cc6bdefa2ab538152f385edf7099192c)
* [feat] : 프로필 edit 타입 컴포넌트 추가
(cherry picked from commit 82b526b83d85a00c40148f523d5c8fb64d72d86d)
* [feat] : BottlesSettingItem 4종 구현
(cherry picked from commit 573d1df7302ce163701a676189d7cced0753ec56)
* [Feat] 마이 페이지 네이티브 마이그레이션 (#87)
* [fix] : 웹뷰 관련 코드 삭제
* [feat] : BottlesCard 컴포넌트 구현
* [feat] : CardProfile UI에 BottlesCard 컴포넌트 적용
* [feat] : 디바이스 내 연락처 가져오는 로직 구현
* [refactor] : TopBar horizontalPadding 제거
* [fix] : 연락처 불러올 때 하이폰 제거 및 중복된 번호 제거
* [refactor] : BottlesToggleButton 람다 파라미터 제거
* [refactor] : BottlesTopBar Row에 horizontalPadding 추가
* [feat] : 계정관리, 알림 설정 화면 구현
* [feat] : 마이페이지 네이브티 화면으로 마이그레이션
* [Feat] 마이페이지 - 연락처 차단, 앱 선택적 업데이트 기능 구현 (#88)
* [feat] : 앱 버전 확인 API 구현
* [feat] : 앱 버전 확인 리스폰스 추가
* [feat] : Json 데이터 설정 - ignoreUnknowKeys = true로 변경
* [feat] : 앱 최신버전 획득 로직 구현
* [feat] : 앱 업데이트 클릭시 플레이 스토어로 이동 로직 구현
* 충돌 해결
* [refactor] : 프로필 이미지 블러처리 제거
* [refactor] : 연락처 차단 서브 타이틀 임시 변경
* [Feat] 앱 강제 업데이트 로직 구현 (#89)
* [refactor] : 설정 화면에서 뒤로가기 클릭시 popBackStack 호출로 변경
* [feat] : 마이 페이지 유저 프로필 데이터 호출
* [fix] : 로그아웃 및 회원 탈퇴 기능 오류 수정
* [feat] : 최소 앱 버전 불러오기 구현
* [feat] : 스플래쉬 화면 강제 업데이트 구현
* [feat] : 모래사장 화면 앱 강제 업데이트 로직 구현
* [Feat] 알림 설정 기능 구현 (#90)
* [feat] : 알림 설정 목록 불러오기 및 설정하기 API 구현
* [feat] : 설정한 알림 목록 불러오기 로직 및 알림 설정 로직 구현
* [feat] : 알림 설정 기능 구현
* [fix] : 스플래시 화면 강제 업데이트 다이얼로그 상태 초기값 변경
* [feat] : 알림 권한 획득 시 모든 알림 설정 true로 변경
* [Refactor] 푸쉬 알림 아이콘 변경 및 온보딩 페이지 오류 수정 (#92)
* [refactor] : UpdateAppVersionReponse 타입 변경
* [refactor] : 앱 아이콘 백그라운드 변경
* [refactor] : 알림 아이콘 변경
* [refactor] : api 33버전 이상 푸쉬 알림 권한 획득 로직으로 변경
* [refactor] : 매칭 활성화 UI 보류
* [refactor] : BottlesBottomBar 디바운스 활성화 파라미터 추가
* [refactor] : 온보딩 페이지 오류 수정
* 앱 버전 업데이트 - 1.0.0
* [docs] : 리드미 수정
---
README.md | 21 +-
app/build.gradle.kts | 1 +
app/src/main/AndroidManifest.xml | 3 +-
app/src/main/bottle_app_icon-playstore.png | Bin 157204 -> 151402 bytes
.../java/com/team/bottles/BottleFcmService.kt | 2 +-
.../bottles/di/usecase/AuthUseCaseModule.kt | 14 +
.../bottles/di/usecase/UserUseCaseModule.kt | 28 ++
.../team/bottles/navigation/BottlesNavHost.kt | 22 +-
.../drawable/bottle_app_icon_background.xml | 74 -----
.../res/drawable/bottle_notification_icon.xml | 10 +
.../res/mipmap-anydpi-v26/bottle_app_icon.xml | 2 +-
.../bottle_app_icon_round.xml | 2 +-
.../main/res/mipmap-hdpi/bottle_app_icon.webp | Bin 2414 -> 2358 bytes
.../mipmap-hdpi/bottle_app_icon_round.webp | Bin 4332 -> 4174 bytes
.../main/res/mipmap-mdpi/bottle_app_icon.webp | Bin 1754 -> 1540 bytes
.../mipmap-mdpi/bottle_app_icon_round.webp | Bin 2714 -> 2538 bytes
.../res/mipmap-xhdpi/bottle_app_icon.webp | Bin 3828 -> 3634 bytes
.../mipmap-xhdpi/bottle_app_icon_round.webp | Bin 6156 -> 6058 bytes
.../res/mipmap-xxhdpi/bottle_app_icon.webp | Bin 6722 -> 6452 bytes
.../mipmap-xxhdpi/bottle_app_icon_round.webp | Bin 10516 -> 10390 bytes
.../res/mipmap-xxxhdpi/bottle_app_icon.webp | Bin 11250 -> 11072 bytes
.../mipmap-xxxhdpi/bottle_app_icon_round.webp | Bin 16820 -> 16672 bytes
.../res/values/bottle_app_icon_background.xml | 4 +
app/src/main/res/values/string.xml | 2 +-
core/data/build.gradle.kts | 1 +
.../core/data/mapper/AlimyResponseMapper.kt | 20 ++
.../data/mapper/NotificationTypeMapper.kt | 12 +
.../mapper/UpdateAppVersionResponseMapper.kt | 9 +
.../data/repository/AuthRepositoryImpl.kt | 8 +
.../data/repository/UserRepositoryImpl.kt | 32 ++
...Module.kt => DataStoreDataSourceModule.kt} | 2 +-
.../designsystem/components/bars/BottomBar.kt | 13 +-
.../designsystem/components/bars/TopBar.kt | 7 +-
.../components/buttons/IconButton.kt | 44 ++-
.../components/buttons/SolidButton.kt | 43 ++-
.../designsystem/components/cards/Card.kt | 63 ++++
.../designsystem/components/etc/Profile.kt | 143 +++++++++
.../designsystem/components/etc/Toggle.kt | 78 +++++
.../designsystem/components/etc/UserInfo.kt | 107 +++++--
.../components/lists/SettingItem.kt | 226 ++++++++++++++
.../components/popup/BalloonPopup.kt | 62 +++-
.../core/designsystem/foundation/Color.kt | 1 +
.../core/designsystem/foundation/Shape.kt | 1 +
.../core/designsystem/theme/BottlesColor.kt | 3 +-
.../core/designsystem/theme/BottlesShape.kt | 2 +
.../designsystem/theme/BottlesTypography.kt | 20 +-
.../core/designsystem/util/BottlesIcons.kt | 2 +
.../src/main/res/drawable/ic_pencil_12.xml | 14 +
.../src/main/res/drawable/ic_warning_24.xml | 14 +
.../domain/auth/repository/AuthRepository.kt | 4 +
.../usecase/GetLatestAppVersionUseCase.kt | 19 ++
.../usecase/GetRequiredAppVersionUseCase.kt | 19 ++
.../core/domain/user/model/Notification.kt | 14 +
.../domain/user/repository/UserRepository.kt | 10 +
.../domain/user/usecase/GetContactsUseCase.kt | 19 ++
.../usecase/GetSettingNotificationsUseCase.kt | 20 ++
.../usecase/UpdateBlockingContactsUseCase.kt | 20 ++
.../UpdateSettingNotificationUseCase.kt | 21 ++
core/local/.gitignore | 1 +
core/local/build.gradle.kts | 12 +
.../local/datasource/DeviceDataSource.kt | 7 +
.../local/datasource/DeviceDataSourceImpl.kt | 37 +++
.../bottles/local/di/LocalDataSourceModule.kt | 17 +
.../src/main/kotlin/SettingNavigator.kt | 11 +
.../team/bottles/network/api/AuthService.kt | 5 +
.../team/bottles/network/api/UserService.kt | 17 +
.../network/datasource/AuthDataSource.kt | 3 +
.../network/datasource/AuthDataSourceImpl.kt | 4 +
.../network/datasource/UserDataSource.kt | 9 +
.../network/datasource/UserDataSourceImpl.kt | 14 +
.../team/bottles/network/di/NetworkModule.kt | 1 +
.../auth/request/BlockContactListRequest.kt | 9 +
.../auth/response/UpdateAppVersionResponse.kt | 10 +
.../dto/user/request/AlimyOnOffRequest.kt | 11 +
.../dto/user/response/AlimyResponse.kt | 19 ++
.../kotlin/com/team/bottles/core/ui/Alert.kt | 292 +++++++++++++++---
.../com/team/bottles/core/ui/CardProfile.kt | 24 +-
.../team/bottles/core/ui/model/AlertType.kt | 18 +-
feat/mypage/build.gradle.kts | 23 +-
.../team/bottles/feat/mypage/MyPageBridge.kt | 37 ---
.../team/bottles/feat/mypage/MyPageRoute.kt | 76 ++++-
.../team/bottles/feat/mypage/MyPageScreen.kt | 109 ++++---
.../bottles/feat/mypage/MyPageViewModel.kt | 113 +++++--
.../feat/mypage/components/SettingList.kt | 129 ++++++++
.../bottles/feat/mypage/mvi/MyPageIntent.kt | 20 +-
.../feat/mypage/mvi/MyPageSideEffect.kt | 16 +-
.../bottles/feat/mypage/mvi/MyPageUiState.kt | 13 +-
.../mypage/navigation/MyPageNavigation.kt | 10 +-
.../feat/onboarding/OnboardingScreen.kt | 43 ++-
.../feat/onboarding/OnboardingViewModel.kt | 2 +-
.../feat/onboarding/mvi/OnboardingUiState.kt | 2 +-
.../bottles/feat/pingpong/PingPongScreen.kt | 10 +-
.../components/IntroductionContents.kt | 4 +-
.../introduction/IntroductionScreen.kt | 7 +-
.../introduction/component/SelecteImage.kt | 2 +
.../team/bottles/feat/report/ReportScreen.kt | 20 +-
feat/sandbeach/build.gradle.kts | 4 +
.../bottles/feat/sandbeach/SandBeachRoute.kt | 23 +-
.../bottles/feat/sandbeach/SandBeachScreen.kt | 15 +-
.../feat/sandbeach/SandBeachViewModel.kt | 32 +-
.../feat/sandbeach/mvi/SandBeachIntent.kt | 2 +
.../feat/sandbeach/mvi/SandBeachSideEffect.kt | 2 +
.../feat/sandbeach/mvi/SandBeachUiState.kt | 10 +-
feat/setting/.gitignore | 1 +
feat/setting/build.gradle.kts | 15 +
.../setting/account/AccountSettingRoute.kt | 32 ++
.../setting/account/AccountSettingScreen.kt | 76 +++++
.../account/AccountSettingViewModel.kt | 84 +++++
.../account/mvi/AccountSettingIntent.kt | 19 ++
.../account/mvi/AccountSettingSideEffect.kt | 11 +
.../account/mvi/AccountSettingUiState.kt | 31 ++
.../feat/setting/components/AccountSetting.kt | 57 ++++
.../setting/components/NotificationSetting.kt | 82 +++++
.../setting/navigation/SettingNavigation.kt | 29 ++
.../notification/NotificationSettingRoute.kt | 29 ++
.../notification/NotificationSettingScreen.kt | 67 ++++
.../NotificationSettingViewModel.kt | 111 +++++++
.../notification/mvi/NotificationIntent.kt | 17 +
.../mvi/NotificationSideEffect.kt | 9 +
.../notification/mvi/NotificationUiState.kt | 10 +
feat/splash/build.gradle.kts | 4 +
.../team/bottles/feat/splash/SplashRoute.kt | 24 +-
.../team/bottles/feat/splash/SplashScreen.kt | 25 +-
.../bottles/feat/splash/SplashSideEffect.kt | 11 -
.../bottles/feat/splash/SplashViewModel.kt | 59 ++--
.../bottles/feat/splash/mvi/SplashIntent.kt | 9 +
.../feat/splash/mvi/SplashSideEffect.kt | 15 +
.../bottles/feat/splash/mvi/SplashUiState.kt | 9 +
gradle/libs.versions.toml | 6 +-
settings.gradle.kts | 4 +-
130 files changed, 2866 insertions(+), 483 deletions(-)
delete mode 100644 app/src/main/res/drawable/bottle_app_icon_background.xml
create mode 100644 app/src/main/res/drawable/bottle_notification_icon.xml
create mode 100644 app/src/main/res/values/bottle_app_icon_background.xml
create mode 100644 core/data/src/main/kotlin/com/team/bottles/core/data/mapper/AlimyResponseMapper.kt
create mode 100644 core/data/src/main/kotlin/com/team/bottles/core/data/mapper/NotificationTypeMapper.kt
create mode 100644 core/data/src/main/kotlin/com/team/bottles/core/data/mapper/UpdateAppVersionResponseMapper.kt
rename core/datastore/src/main/java/com/team/bottles/core/datastore/di/{LocalDataSourceModule.kt => DataStoreDataSourceModule.kt} (91%)
create mode 100644 core/design-system/src/main/kotlin/com/team/bottles/core/designsystem/components/cards/Card.kt
create mode 100644 core/design-system/src/main/kotlin/com/team/bottles/core/designsystem/components/etc/Profile.kt
create mode 100644 core/design-system/src/main/kotlin/com/team/bottles/core/designsystem/components/etc/Toggle.kt
create mode 100644 core/design-system/src/main/kotlin/com/team/bottles/core/designsystem/components/lists/SettingItem.kt
create mode 100644 core/design-system/src/main/res/drawable/ic_pencil_12.xml
create mode 100644 core/design-system/src/main/res/drawable/ic_warning_24.xml
create mode 100644 core/domain/src/main/kotlin/com/team/bottles/core/domain/auth/usecase/GetLatestAppVersionUseCase.kt
create mode 100644 core/domain/src/main/kotlin/com/team/bottles/core/domain/auth/usecase/GetRequiredAppVersionUseCase.kt
create mode 100644 core/domain/src/main/kotlin/com/team/bottles/core/domain/user/model/Notification.kt
create mode 100644 core/domain/src/main/kotlin/com/team/bottles/core/domain/user/usecase/GetContactsUseCase.kt
create mode 100644 core/domain/src/main/kotlin/com/team/bottles/core/domain/user/usecase/GetSettingNotificationsUseCase.kt
create mode 100644 core/domain/src/main/kotlin/com/team/bottles/core/domain/user/usecase/UpdateBlockingContactsUseCase.kt
create mode 100644 core/domain/src/main/kotlin/com/team/bottles/core/domain/user/usecase/UpdateSettingNotificationUseCase.kt
create mode 100644 core/local/.gitignore
create mode 100644 core/local/build.gradle.kts
create mode 100644 core/local/src/main/kotlin/com/team/bottles/local/datasource/DeviceDataSource.kt
create mode 100644 core/local/src/main/kotlin/com/team/bottles/local/datasource/DeviceDataSourceImpl.kt
create mode 100644 core/local/src/main/kotlin/com/team/bottles/local/di/LocalDataSourceModule.kt
create mode 100644 core/navigator/src/main/kotlin/SettingNavigator.kt
create mode 100644 core/network/src/main/kotlin/com/team/bottles/network/dto/auth/request/BlockContactListRequest.kt
create mode 100644 core/network/src/main/kotlin/com/team/bottles/network/dto/auth/response/UpdateAppVersionResponse.kt
create mode 100644 core/network/src/main/kotlin/com/team/bottles/network/dto/user/request/AlimyOnOffRequest.kt
create mode 100644 core/network/src/main/kotlin/com/team/bottles/network/dto/user/response/AlimyResponse.kt
delete mode 100644 feat/mypage/src/main/kotlin/com/team/bottles/feat/mypage/MyPageBridge.kt
create mode 100644 feat/mypage/src/main/kotlin/com/team/bottles/feat/mypage/components/SettingList.kt
create mode 100644 feat/setting/.gitignore
create mode 100644 feat/setting/build.gradle.kts
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/account/AccountSettingRoute.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/account/AccountSettingScreen.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/account/AccountSettingViewModel.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/account/mvi/AccountSettingIntent.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/account/mvi/AccountSettingSideEffect.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/account/mvi/AccountSettingUiState.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/components/AccountSetting.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/components/NotificationSetting.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/navigation/SettingNavigation.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/notification/NotificationSettingRoute.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/notification/NotificationSettingScreen.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/notification/NotificationSettingViewModel.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/notification/mvi/NotificationIntent.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/notification/mvi/NotificationSideEffect.kt
create mode 100644 feat/setting/src/main/kotlin/com/team/bottles/feat/setting/notification/mvi/NotificationUiState.kt
delete mode 100644 feat/splash/src/main/kotlin/com/team/bottles/feat/splash/SplashSideEffect.kt
create mode 100644 feat/splash/src/main/kotlin/com/team/bottles/feat/splash/mvi/SplashIntent.kt
create mode 100644 feat/splash/src/main/kotlin/com/team/bottles/feat/splash/mvi/SplashSideEffect.kt
create mode 100644 feat/splash/src/main/kotlin/com/team/bottles/feat/splash/mvi/SplashUiState.kt
diff --git a/README.md b/README.md
index c49a1f46..4dc78720 100644
--- a/README.md
+++ b/README.md
@@ -29,18 +29,18 @@
떠내려온 편지를 통해 느린 소통의 감성을 경험해보세요.
## Features
-- ✨ Feature 1
-- ✨ Feature 2
-- ✨ Feature 3
+- ✨ 매일 오후 6시마다 알림을 받고 떠내려오는 보틀에 호감을 표시해보세요.
+- ✨ 호감을 받은 상대방이 수락하면 대화가 시작돼요.
+- ✨ 상대와 끝까지 핑퐁(대화)이 완료되면 카카오톡 연락처를 얻어 서로를 이어줄게요.
## Screenshots
## Architecture
@@ -51,7 +51,7 @@
-
+
## TechStack
@@ -63,7 +63,8 @@
- **Networking**: Retrofit / OkHttp
- **Database**: Proto-Datastore
- **Async**: Coroutines
-- **Others**: Coil / Lottie / Cloudy
+- **Debugging Tool**: Firebase
+- **Others**: Coil / Cloudy / Kakao-Sdk / FCM
## Contact & Contributor
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 564b794e..4923f88b 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -75,6 +75,7 @@ dependencies {
implementation(projects.feat.pingPong)
implementation(projects.feat.splash)
implementation(projects.feat.report)
+ implementation(projects.feat.setting)
// Compose
implementation(libs.androidx.compose.activity)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4e835ad9..ce018f09 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
+ android:resource="@drawable/bottle_notification_icon" />
!>Z@~<5LfDdoM
z06+Bb@;7{B8vyXY)qlgsjzM65@BI7Qm88hg%(v{3T(UvHKS;7PqUOOF`vYG<-d5BgWZ;jDn
z-iajAOgMoyb(H;qIRD(MPM_r?_S&D-bPXA(tZbATn{8Cjz1AgK%J(dPcOJntHjRxc
z8ksoNmT2aO6ie=y6phHNhADiV)$Q53`InnH`s0Dda3ZKT=kelS
zZz6OCFS@3Z)^^cF=koPdrM?P%Ng11?aCdRD+kb|u`o{gFNrUAt77g=e{@#(Mab+Vv
zOuXQFNihbVm(?X!V2_&lxnh!;HEDsrL;tP!OV-{An5;7RH`F;l5+SQvTOPJnVl^mj
z;n%7E(D30-VeSx9PfNGMbbeveH4VNqa3|+vn@P;m*Gm`M6Vc14#N=B`r`?>~@t2yOHu}Y~9UHI4tfsEk2Ej*Z;C7^w4QxW>XH*Mc+ax
zG2ozDgJSP1WVNbFW!mC@ZZrKzx!CL?t
z2aE9+yl?_Sq**N8)E*Q&_69fb@4X3AVrE_V
z@#SF^Qs7}olcAFmLLC^0hCX}>%2n&~XWFvIX*?$4&=4{8S@T`2or?P{lj*-y(i3a5GYq`r!F|{VNx>v!P@5Bbm?U3
zWcPvr&4-O_0i7XRuY!MIe+_w;500t^Ws@+^omR6}&V-1Y&KfU4=NuyHTr7rl04ay~
zAn1p-LVYE>fj`~p0r-h>)?1Kmvz{Ogbs_I{$$mGlW=Q^+_&zLhbEUj0qvdvDp{GRq
z2OC+$`D)tL_l0<&HrQ0S$v?zBwnBV3m1jkP_eF`AW@PFSIScpK|Cvv86763v2c;R1
zdM_D^h~C=AyAAej^(FdO-X(X884vI4hHG(JE9fc2DE6@5lTX+jd=HbQ>@@Z6t;$xNeMRpX8Iz{0j`
zDgIIY!B&Xcc~QK^o3WD*XR-v>F2wJx2Oxkfj9PA)I167)m{^ik(Ts1MkKFD3<4vcX
zbx(3v^N^)gl%@FS<#GHXA|F)YVGZwpwcwc_(ip!bT`sO-b-jFEeOZ()
zrVVPDo6vlpWor8Cjw0nWU4-94($Y>YE&^(jv;?$`{X`T
zGwWLy%l6-x5U(qb&YhyKjrW8~;X4kBtq}EVQUk&A7AbML8AD!u%UiXk0}|hgYW(R|
zX-B$%0bibP<9`0p&j76fKKbh^&vu{9mT@K5sCAI-%Vj;s9Vc7OW(H4rV_Q!@_6iU_
z&6eFgp5mEf9)ovU0{yJoI1%%>jrvmpw;!cSBgaK;mRP69Pzoq;lO`JlA&Y8w
z6OJnaJn|Dx_Uj9%sH04$$R`zecY)~&PUg9}O`Ne(bS%qG@=FR?u^0J3fTv6-jP@G)
zwt6g(wXjI>9uzHa`;xe(rBwEa^9p?_w=InC0qEdbL!kRo+8daC`7m>A6uEv;W-W=j
zHw)e93y@X5RY2WlD;@Qa#-~BaLvF4`i!alHH!!Z+%LQ#8LOJ5zGf?uc&~tYmO`Cz5
z2R+fOTa~dN;&3V6M10@}OvM|S7Kyd^Yiyp0i92aGF=E+
zViz^^2>a3;cKy`ULTcVO7(TjJJQQU1)rBW)#{=BD6(mQfodTq*4CPp+2~#g*A)g=A
zN_m@3PAVzCmnYC)IK8X-QucFB)$@_Z8YV?t32yXj=^#XH8h_5V>>%CieT*So&Us*w
ze%Am?ZP(yEGcmQ|MK{AsT6Jc<9aQ;@OyD0b4?boq@j-$c?#rIe*w?UV`AnQf&CuoR
zrvTTkm5s`786m=ToUJz>>*!yh{JzsEJe|b(#9tV-r^r&S%$&qR7Omz-Uoh<7%C7{o
z0ZU=Bi5{?^Cy~B$4yW3)_+c;pDIt=7KVu55(|Fg0JwY9p=jpI5(~Ww7gQQEh
zC~{zN_>3^l8TaY<(8}J*%?cdO08+d^r5nymRh8eY%)}t`5x*~D@c?BB0`jc
z-w(Q*4F2brBK=XrY5msreO0Rbz@oRCBMGdJ823A{(W+735_(7-+(*e>%-^!i%f5aM
z^CdJ~BLKv2D@v*w5ZS$C+C7}RXg|fXW&-+9>-adxM;i;Na()t-3#uL~lg_7_`ZJVl
z!K-f*10cUYD;-6qsH1SlfW@U)v0Ji0zdG}x5cwTsfD8xy_?h+k@3xOt%dx+nvxa}$
z6DW*uC%wP@(@0%VKz;SEFipO2v_gChGx);JnIaN_n+ZIEmcs#^01y%luhV_0-0vN)
z9j65U#+CFtV!(o{62hNSxqW5@ZqvvD;i~H`seSju1}i=f4;j*dswr<2#3QUyY~Yh?
z*_g-!k$$P0V3Rn~wr_rqBob{cM83HDzo-u@{be?b#igy=w=VcSx15!wus5+!ocJqb
zfxSS#*CvkiI%+^D>P9J*>H$im4z|52X@x4|1Up%asC%KDZ0#*8&m5<%FFQL_T^11f
z065cjF$~2o9idocfN^~Q6knhb{Ww$8x`B$$r-s~Z7{EIkY8{1MKuGM{qWH6eQ~2(>
zaI+(Vj{QyW8t*PLe3*xS59j|?J0f9}rcy|B(pRH5I&vGtg3@!+<>37^SIT11u5tW*
zIfxwXi$TTF-)dEu6v^Kfp_O+iBn+4{L-aIT0d$4{_O-UBIdSjPyq@>F%i$>~*S8Yy
zHhI#mws;yV^BJcK=RMpPZeYF%?z25zkuF7o6K-ZKc^lKz|E7nu-U%+uY4_T2ejYKK
zUsem%?#IlE(om?x6r3q?>ztn)<8vDd7S>&0U3=dpMQI1xPp}<0Y|C4CRyM-z4g~|@PJHZ
zn-mK|d#|}WIyv0X;>Gt4_h~o(1X;YEPCcj)>R|)pX12!dj)==Y{e`_rgYkbHcPz*X
znJBcG#0aHct@ZRlHuk)*;5a~rM>+N#g6iHL8tWHcVNiRo-U`fwkrdi=C)W$;4s88u
zjak~7s~z83E7feLZ12rc+ZlmqyzYYCc^uE&@ULm&@(MAnD4RB)I~S)k>x6(!8rqyg
zAiK8(qvphoQWjD9{sQGEyB?%?DcPn%3v~J56wH7-iCGn2K{&W%{}X9W^b8#6;Q4X8
z7DSK3`76c;WJ_uZvIS$}3~6UJ{z?90_|k~53C>Y|wN(zqD-ZOd5zRUPG{o(F&IEZtZL`flIj8$x
zujRgIcS^+W!*-LuuU-?Kc4|mll6Z2(#ilqjS$yRKY4G`y!4MosC=t#{@>QByPvdi7
z({=^8#?dED=uK0QV&G9T;o0mMv>*u+iEsJx$G(2+*tY8mZC;hdJl3g!<&tEuA~4KJNLf>S6T)X{{B-~w0UU3PIt}EUtBjN
z4^5|q_bCYB5f!?Cw1^lTeN0mi*m?xE)#xOK37rWbZ)oMK<$^R@US1$YhYooPX-c{b
zSl;+t-7vzF9+)k)N@JB4x&ZGbEm|uFCweeVsgzgJ&!TUM61Xlh9@w9EJClfdCY$QDoRJ18*{a+z;I+$=v2jmY4vKpM1
zo2@!RKbL!~n3Un)kAVREE9QCYxALi_t7@wYZjYhLeqSPJ%wQJ(ne(8a1k=%RGe_DF
zzx0(4cPh6BD8rS}@w!B#;k4C(78TL-!GinBXjYRLzwLdhekv0a8&UFKNO!v^p*3=^(SQ%ptn;l#d<9N2$Q|cry1d
z+;ncGSQkV^dQ-L*az%_@pro)DX3#M5lL_9^$ScmCPCJ)$5Da<(2iHwp5KWIvECbV}
zzBi;26l`y333t;$4atR2{NNWTK1BMHr*^tU-y`g=Lj1#tkx}(DIiNV!44uksX>B}1
zzAi*gVO#mEhpx#U{my^5@1%fW2%cs;%aH{tYT{!8bl=sD*+CH53uMbJQyVO2%EFts
zhEPw~y!KVoRXIU<0@dZKjyL%AElUmvIA0aJQol!KitH+&0O^HeyD~pWM7jTsiH{V5
z(*HN{`oXFpv3^?QDx$}m)Ti~1n}p-27+a~QDt%}&)qU?=ce5W@_x{TB&WyLeY~}g)
ztEd}w_w%Qb2zAYA><`nCg!1L%yanDx1-ii5$$5w)G-MN!?n?7gcn3R}VI0!~L0;BY
zg2bx>RCcZjkgbdt?s_m5&zg3r6~IQkC(GxP7HWaUpPLa8Va_VZp0whR+l6j~(qI!=
zCoc5Gd+V0y%?$suPqeV9DU5kCun-J+@f8*XAkEG9ikX-q
zFnYcM!;M{7i*#HHM;7n0-DUPaD1!1_E_f2SVJn6BVelekEo>kE9Q1AJlE5eXotxQ&
zOs*_&ilHjkx_p(lLD9v(uxV|R78HFy{K)U1N+aIpi|(~9>RW6jxRN&8Lkbk6z}a$d
zW2US|6yXW+xcHc-myAajLcebaYCdDY0fz}E4krY-*2SX_V)$x)3)_F=I5)6goJ21d
z`%b?tGgdQ&hU-?|bovci-rdGo2Pg1kMOdME=!3zqImyqbAKzZF5i&QSWqH|L8@A_n
z3Q968aIzAOmki@;AFzzdshOZa62D5Hr{Wv7|Mdkfmv_|8U&R4UxuYBGnSy;_v(%`?onYy$K0>=QK?$=Z!C{3)kVI
z>PQ}`vc94`;Zg%}&|USkr6rBO!LT8r2Df7cZKFK~rO!LDZU305b9z^&7WDMPXsb;x
z&Z@~nvwq#sCCuN|Fi67kVSw;Ia-U*o@+u42z}(D6
zZMELh3B(_(i>pUOi!KAYKN3YM@Pk$sD6sUjlzsV#MK}j>yj0XC`b+0ErC|{wS!;UA
zjS|I!-taV5gF~z!qRLKOFgqVz#}iZ&xioWKWKT#_ug*SUX8e)XRw|x6wT6KVgWAbN
z^BgafYptj2ENTD}%^N~C{l${&vCWTq1Fr3pS#8AM$TAE
zDp%d7>l^n(=~gAWP$ANd8o7&~doXoA=)(MIs2^|iMsu-17LJ4me%w2zS)i{c2lIkP
zx&4gv|KMg1>~xIF4TK|f9Cw9(Jx*IX{^fXy`c7GhUmXRPha|wl)v6%djlveR5ZKrq
zZ5r=xD?vIPE_0?4bfql#!)hF%L;z0=*)wz`dUMFaMlE}rd?uGMsVju`;
zsJ=sV+Rb>{zTby@?CCyXBLo?`o{PVV&hk*D(lh7H0CABs|LlIREv*nkB|9`Cll(&3
z{$X}FNt7MXD=md8A?YeURA59MSIJAi?Ds^~$V+Wp<+AxwupRoD%VL25o2EHmRGqnk
zLGe62S5;QA&Fcqm+s4)sQ8x$1JlJL{>WM)xYeh7xD?ZNK)i+h>UoUi_rNvBi-q+!c)%GX74rS7@N1MXBWOY+eb
zVV~bncN^vrhQ6F{r_%z%SQdbuB_;d6PmzVZge}3?K#1#iCM-CqV%1F^DKdP&AyNgw
zbbRaRWI63SEw7tFP++ed8fu3aXv>doW4Lf<;Hqxe?Yt45VU!ZW9S)TG0$xUDj2YAR
zANlA+jUIo9?Qz)@g7MF^V2%j?OB}(v^cf1=wH|dK%z{OaD86wXyeh=Eo6C15yVRtl
zuMGas&xYICM*rqCh3dC0a^XD{ZF97GJc;glls*|FUYUg-i6c;QcI?9gqD~u>
zzbf(=5cCf#N6YKnF0X!ZaFCw)4E9E&0|fspH}G!EE$yCSt@W>)(Kry+!7GP_M4%2HQ
z2b$rY>vvAYzhB*I-mMbZqPKna;rwmhPYjiDZjF|qacM_jwfnE#Kp7(O})Fx;LNaKTg^r4&q>-6LRLt0AnM>VRn89aaPd?%5zXM}Q%ZQ3Bw
z10ut;`^sK3^0U4?xcBYsn#)#6OCAFuSM=KcgyA6{5YZ!jvpkVqGZA5q&d|TLrn0fm
zo1eqw0gaxG^G~Va0fHB0e&o^^m;tRY?zdV$MGwhzlySi*El!<>el8irl>ah77^#H2
zLJEuTRYPgM!hp4_llL2e-^!Dt7f53~n$w{!!~%a#uhta)^_D`hphN!z-|&%X{$8B_
z+`U8!TzW=;#W55$+F7UP0CJEf#p_z?9~H(y?9o@Gx1Xn$Xa_G{eeV3CK>^*G>n;1D
zq80}mAnt=&q(k&-+Pafk3}H-vM_%ObS<&Y3^52UKdB?xh-uu%2sl6vCAQR!6i}edC
z)e0SK2K4z{A6!?$7V_Xyi_rFFcxV6BJ2%q)oA8rp$^YWA*O}%Y*-Qx>KqRY3ZZ7PZ
zHc|wFU>}RGZ;if$d-%+TTWKJLSG>OL`@+OO;t6bTe4`9!{;lC*Q)vG&KmMgGPIn#_UVF(J0WWaJ@VuNg
z^p7E@pw}^pS)w(a
z*%D_$CT%ElMWxz&&-f-coemTX7+~zKjL9
z`#_VW_P>|6+Ck)?8_hhOq{dsWDv#CuyNS$s2_woKJ
zffDnt`_IXZpsW#e@(s9ja$8eTxT^-O1bglYb%Njv*l7n{{kic|j;H$DihFanVgINk
zM$yTPoU?f520VTb(;BQxEksOzS{Jh@a2mc}WjJDae&E#5e9O~EIp!JWsdU(*6ba?W
zt%S&%t~rao6|#&6pW(sY&tyR#g!)`7Uxjq0Dd4fxKulavD&rPVzb)PGskSf#jMJ{C#u*dtbmS@y=TyE0&ne8ED!OP&q3rFS<1?F*O@}IXjNvQEDGBS}
z)IkXt$-oNLX8)2eE8C>$0bPlSFGX3!GCl|+NN(L>cdYu#F=7C{enTWsUDG$xs;gRD
z`vdtiMSG?(&prv$Xa=OY_1c^DGG>L|{R(e%e1bZq*t*Iup$JTOrPdaQ?D`7*tHHhH
zBF$iD1UZX#2S0qIs65{ip|C-@wx_cKW9zpBaD;lSifqY-(zSkxt*JFP8$v~
zBZ3#J)x>LccO$EyxwZ51HBVQTHg1>>W-bob0>1_Claa?^9^hWF72R*2drI3H?stLb
zA_nB;Y^6MYg(tTLS82tywB;AS)jBcwq(zj(;hU3-fga%I$M9Mq5fbfjj>tIhoh3y}
z&D7nfvwpP~nE%jkLC9@hkdMc@gm%YyfPHrU1;Fu
z6^tp-a`{Eg(+MeZYZ*oS-$aT&Dwk*cPblPvymq(udAyqPrt_v)gO#F9SS9x6Jv_$>
z=&3!MEGt
zP($PK)~5ibG4!r_n*D2~+7p(Z3~Jc|p)K19)C+I>;lC+ttPfbz$yZ`hq
zJ~iz_0mG5s^c9SX`$Q0BAtvP9S$)%jir`|Uuyuoveev|Z!Nw!+<#|sWDTq|)S2
zjB*7>#9~$*@JTVCFyugn!n(}gOZ7|!?^}>`kSV}%th+UB+aryMHDvuvbEsiL{`c`I
zvGTT8XweB)$Pe78P(e1>WpIN=K+j_%OrX_%Du=^?mVbzsgh12!a6u84Jgp*>9(J6o
z;l-=t26JS(owo?>0$xJH$dO&{)s49d-2g{gF
z31!V=$H!p%XXmp^#x7s@m-Zn%S*92kF*qcIhl^PW@m?U`#;nzH?0+Ujl#au?LQh1S
zS_V8y?NO$5USJBkef10&~#lWQVL*>v-SPo9WP?PzS~J;=rc=n8F8kMYsIL
zp?3{>eyY_zG__xoVQVL2OnV?NX4duT*YZpxe4We~Jx{T7%Jt`HUcMMt&f;xzD+B1V
zGZmeJf2e3N4!lz!ocmm|6|NoqspT{}&&@|E%b)E}F%Q6{
z#upeSiqmtMZF9-%f2tNgw*lOz__Bnx&->S|6}%dP-Bsu$F7fsY^~!Js=|?SsR%AiX
z%v6I?X6~{uBYHVQ5OQvkf#Y9cHppYmD=!>
zQduwf6_TGsWb=6JAXr(t&%s-MSeUFZM~vg=O>
z=skcM_&j}Z(xXhbqUfR!pZ?B7s&iRFW2b&WvOY9G5)R~DvqmTk^p^iI)O!sWP#XOc
zXVjgdKvT}EWkYg=(core0)i5l`V`MOz_nxbWF4>f<
zR1Mp@i($tjJ^K-tU7;J&N+_PvgZQUEi3BB1BS_P104`~oeETk6c#$+gjunw2u&-YO
z8-xYK8!P}nsw|J;vGgiP0iw{gU!m>ikLM}^1Cpi*--EIlhU+~w*De*FU!{KBQ9%d{~92f
zSc#RbG=Ubc?g6dP{3wuZ`S9k+YTPnQIN)}kiyO54qNCF%>E;Q?*)dnw0KEdnRWjW0
z?Cv>Db(@}-$USTs61lRAK=S&vTGP?X=jt+nhB?Em>lK25(d;zPkjU)M77fVCELaC>
z+J^(fE6=XmfAKcp6MBr|`sNZ)1t)up;>m-qMUO*ekeBg6AJS<5!uj->+rT*s;%m3r
z`@wGuu$b?n7_#E9RhW!agu}`@xsXsU5W~g^(PHVe8oTu?ZWjtH^qe%>GyT
zkwpvqdifY|xBb(jWT9_j-sFv}EY&KfNT1m|4p6iX*ch7Y`O3gzs>8~M&umSG&V#-=
zA|OY3pV?~RisoZ=7itOYUwyWy7M+x#5UU4cmvwOrr#`%*#?(ND&7*7}@oGj}cU_mt
z9CqzHyO664UYxhw8?+!Bb>7cG@w!3v8;$h$Ta!Qb^GQj63M%(Q6%yY4f{a&TVY|7V
zcm=TiMzRZk^cONtp?9$^W(__-u2c;4EB?-%ag1vXfRY&JX=|9|F|jFv+%U(0m;gM4
zX#GkvU|g4{-2oaoXY?0@%C>0+>_w_Uzb9AHNv3IEF**__Yap!ifj~f+20>mI
z7{lDhx;}1AiK2@5M#4zkb!&65$=zCG3d@)>+76|g?|krTD4S2%AKw9;fm`Ho7Wk3ENUA)j$jl~jSqoPp&J-;B;xbA^*LEa#g
z+VFC~b5^^o%V7E#S*?E~0r`oh@S(sh`$$+z$Q`LTq}QMILQ%VB|}e<|3D7%c80>kO(_(nMsvGUEcT6s+C57
z-e5wQz%}EZ2N&3Cn)3}NE;kXa4!|-^=|%B>9X`Iq9OhYAVV7oPdLC=rnrHykJWeYTgrDt
zfm^m3Wr7mZ_;wmDtUy_F9Y5fQ5^Wg60PJmTw9+<|iLVvyT%vqQvCV@Tq<{^ie`xfT
zW6903cS*x}A=g{CeXwPYrUa*v-nuNtwLE`uwb_pgK5P}JcRuM~EztD7>#XDY7heQp
zQ2G%Ewi0qU1fh-|9rrixej0_h@`vF#_5U33c$BF!vms`cx7Wd4HADV1D>btL8IIa1
zF7ilXO7NSFXC(rj95Srq`y*Hg7yL3@q
zdGF4ZoR*`6Y879CL&iq{x^cm0?>d2A!>PV12xk^|%lvZ~Ujwn?Wq(=kg`mH?M{m7W
zG#H)iGzLFgnRX7=15>$MZ3)y0z!DNkA#*1mR?wmeR)emY&NNM}>egdZj~5uN-je
zaZ9ZJA*TYDv@g1t3!3UMx$Zce;C12k;-$GVE5s&axB6*X?zzolw(AQq(B-$jvHL)-
zF8?wnCm(&w*69F$%3|{PBw3cEf=@(^oYe3&aE`Ib&gcuN$;nuaJGVh=(p-sqS04s}nIcV(=z6
zzIE_zm;pnYJ-^65{jgtfSbI*Qa{g_$!KQ?5YUh8w8J>ut3E5`pj
zLYUy(QAYOjMEc7!vH#RX{8L943`>Pbi|O?^%Bd|!QqU+&T
zygpG7pX-!v)G~3ox*p}7{ywZLV`628asjUg
zz@qT>6y7|tzops
z;M2wa!}M{ZV&)3Z#$di2M54fy2EJm`D!?xaVS%`fGQJ+xcKT`v$bxa5Gs2*|HKGcc>>gV=bG?;yRXCPdu
z4!_dtQeLQWvbhI%muqz^x368m!?wGj=Y1}Cd_n1`kFtJt7&Fk@(jv?#qLv0PHwEqLA_IzPeWNL?lp
z4q_nshX7!3fhnEml!#f%^^rA|WWGJ!2YgoBKS$Q5y~E8-=&VYwm)!6ARft%4EL06+
zv%Oo6#>GH!B?Qau3pCQJ?&YAm@j1)g@pXBJXTM#1~HU5&ODcEQ)Cb~I#ln^%aK8<4E9G}8h9
zMa4Qh?YdnXZ`M|V1IV2z^_6FB!RO2mu6Q%OjRZdpH(<_?cB#+;mnBG*)>ImDOZ;Qg
z^S1k+8fQ)ZpgUJs@sKj#V9KbtNU)cstZ2vb$Kk2QU+C4E+BMQ9MnyBf#Q!J`wF0*6b7zA6`HH&l
z75f}C3HbV5MXf{0uan0@rIcBq<=(~l4Z}8-=>n%1S5;Zi9vaWX<=F*wtQAGbjC(8A
z^PlcLBn};Cg@0cZ0(N*KjCJ{Y3<830tU6jQhHbsdm=g5Gsl_N@AflLzl+}ODDC_Wx
zn1I;xguI`o1os)h=|4#SserDd1vTo^@|EE~
z71PFHn~k92DhVog!Rhw}7S+-_5U5OQ?UP&W_9;lw>dp#(Y^n!9ZJRDI?iVW^W%37E
z-G}^7E59Sa`-x0YzgAw5)#H+mZ{nd%cf|C5874j$%nsqrZZ!!5>pXIQQkL@5w9+37
z7!OJGiX%}=xtR{NW<4*5LOHm~Dxco#
z@?K?Wd$%#J{WT9a%tnm4l(s*|$(5jVj6ZPVw3({1%^s5pJ>gSgu@AXcHD662^&}7-
z58MJujxA*42PGGPcGY<9=fUZC4LHzUG+PJ)oHOKiD1Ih9)B<`P$+T=hf@Q!puAzxJ`Ceh_I!=HYI7{
zKf*y(Sij2eJE-JAiD6Z&DxTtP9o*X}7LAwI^f?|DTe)+S58;z3kEc<(ogDU-!jUB)
z&EG}P>G**JoqRc7JT3qR`Nw9k39k6m5w*>xv9#>d$tDRsr>u_$SS2z9d!14`gd2>A
zO#ZvqjcH|we5TukpG|dDWQASY&uB3>^n8`4tKSzWS)6@0eeqgL&&e1cCE!#=7+>XK
z()WpHP?qoDt{nWn9ErWhS{>(+W^Ij0uFUc*fDZ(NeF1~cXcRag2zN#gBzCOe{qBn*
z(^R=F(<0i>eQ;1e2)TAPeSmT?8AQK?Ek6`9plMJ{?%7wAm&XPmDGCjVd=IsgWyS;A
zFEw3l(@Nt?{1#DLh;)k&Ns&=@G#CkYyk8o)fTUUm4;P4vJaLVvmE;8AH3QCMq0D7JS-o^y{S
z^0(uqjvk-}`i-lceeiy=>mB#mG2JPl0@uw>M_}iSY(XZ*$EIq?o3|_<)XYPYq*C|u$nOLZL1~N-BAQ-dde}x4nUc0D(NmID3F>%x_DXi_h;&xo
zP<9b`q*0)E<3#?fetUvZM~o%NDYgwbq>azK3jZ%M4rG>hJ^!Ktxpt9j98!dqu{E&v
zQ|SRqJ5Be_mGyar1b9+u`EBZ!Q=W)#Wv7&pfT|1w{Wl#
z%aP{UAKhfS6X2~#0T1@04%)*^Mf?UDF)XcrqM#Bk7=n*0{dce
zw69y?P&~oy^9^*3e)byXR}?>;7@u
z!HjG;3LWA9mfmf{nYn%#bk<%t`n}{+>$WsoP3T}&_tEf6H~w`5yW7Hp|kcidA#?_91g+osXHQi~{@@R)dettbRF0DUD
zl@uifpRA;CKvsQ8w40tO#`U+1A+FvZP`Aizrz)>XCJ)*U$n})37WgaB=IPTA@_kxY
z4zrZ4M4Lgo+Ci$$L;f+(juPg8O!G*xc$m-AdRM?SO^c@GIOGNKJ2n?w$c6n)yiP8n
zSAv3u_4Z4mGo1V}RysmDoWf6sMa$H~rj)Vk{L6{|5t%|sUa1tcVBI7UHQnD?)(U*&Jn3S9x{s@H(bv>Y3PSon+_Ma*A3pMYfaqVE2*SD1e;0<*>T^k=y
zhk!?l4F)BqA?3dRmZr>r>@w&JGFqrv^xU{@7uJm~-C$4i2HBC^WTwQ@&IS@1I3>
zlR1|QQd_O@`oE;lV6+iokXd<+HktVh{rH0A^g;t*WmYaCj7yrqfbs(1L|u!0;&|q^IKLXsuP9!+<|!y8-qI<*`V4;Z-jDw4sRDamjQKtFsS>ThjmnL
zADgReRkn8sog|1<-_$^X*Urt^2muxQ>*@er1n(m;g^$?4%xex+~f*u*IO}X5R4wMJ!{FCDkgO(?aV!zD=5%hz8`+-l#d`Eeeo&TTPnU+Bi(cX%Uun;~|s)rDFQV=oQB(R|S2rm`G5KSHfUru_pE<|t!CP-%g
zbNwJhe?A0)JrVlWfPcuY%Qt^_ZfODG9
z?ek}+^C+g9g~|w_#Kn!id|6(j$ke^f@2->)fFDqGPLk)=Of$32w)-|72?D+MkG!Se
zUAcNrsaZYXNQ2Ue0!QD3`&G1fkJ`Nz52ltII(7$8s+jX+>OZGV-+$9p06l;OIq>~8
zLHf9yg_z8bYbH}owoYis;*-vh1BNrTI!p-%cj(V~0-zpgXr5vpxlR!e%ca30&D;h0
zMzg&~!Lj~Kr=q0@d1hrgf3s6wg!J3Z3iY-!~(hrTBO-MU+
z);|K#^2wMsG+^UEpt@`)gt8PF3C1>(v7-V}9kd?8mBmszH&v-S`WL
zzl|x7;fPdcFz)Fsf$6yv_Pk!c-%2>6j{{jTo``0f6ft%tBb)YmcdYAUHdPLv4krF^
z2$(4L-p)2qvTZlccV-@PGIh}pzW?jDMCs=7TRtS+x|rV(AB)kK>kHDWrU%p56p_yc
ze>+Z8M{$jpJ9TI^bAwxIS5r`nUBMv(t<^-ccLs*9Xb~^{wzteDQ9xUkXx(IH%_n}b_0(I4aSU}=$%7snxdbsr8OUBk&2Bh5X7vNN|;303*ow%Ss
zzM}ReGMYwyFizhxdk7wKYZxDWlv;nwg_OgO@cW9%
zYMhAvMD&b)c3S!R`rVDqLcKGrsdb1dV<+bC!<|v0>4Yig>-VMaL_rs!yk%ox`}Ls6POTMw3)nRj
znO6Jv=XwLkxhcL|hUbAZ3|-WOaBX77k?
zHf>v&Jup%lX0Bf2Vete)%@}eqs#9<3ofFPc!c+Lf%k0c3gV$&w=^VtSMDqi>q=A?Z
zrk)~?=Y;2!JxrCa2laq4hDCSmBXz`~%MX4b-&tL(K6Q|L%fb8Z1tl-%pI=J%Uq!Dz
z+{v3VWwf!eye+sO)6K&-*)3JKG9?`%AN8G|~p){v7Bg_jrr
zy5G_4l#R*8)Hm}5be!u<QXqfJ1tJ+F+6c`}9XHj{Ct-&+w#qjI~Ip;;r*6C>=0*;;#r%ekDJ0
zJp9pTgpYK_z=Gx+Wz_G1D&E0-rP?oPOgM(9*UodM!0!>rnf>3GF{skNSyisXV5T>~
zn+y69F~Gj(j9EIYB0yQ2$tnGe@jAAeEo5B2lcc(kwa`L{v8zSiOec9-lli(bVh%y{
zxmW7Zx0k+{>>{@sE*_wnWxFdlChpY3P5#~4VB>}3D*~e%&o>iWoc6hCcYP2A{;Z0cu6uV)Oyc}Isd`G&pwwOlQDku5Jr#FgWfz~v%;
z9fqyhD_)9Utp0UdT{mEjrfD&@BoUua$*ssDip@sPn0AXJ$>A}2%AH1ze{XiyZB!_R
z4D*Bwbs4xGnf_zAJNAvV=VrIQ1dN|94#pTS|G~82k^47WR}TNvDegwilG6UqpY&zp
ziwEKIX-P_J?$0)p$0c`i+M^rxmREB9%~ofN7)Fz+30FZSFpbQ}}jbgrI=E@9kVa-IkJVOhF5{_)9~>(dv~Nw!a!e!h+<2B*qTs
z%MPI4{DkTq@4@N&!|Ix)A3$-*rN&HiL&rwj)!bKToU)mz
zbjH-m1wN3Y
zEE4O65J8T%!jBd|21ElA-0A_xrQvYQ}X*{tKk>qtipz;U{eN@d}B)C
z5eOc06)=VW^MI=SYXtP;RI#l}R4`Z}lUaJ1^{E$_Rc;G!>A0h&S(tIW{|tm~1zc^5
z2)>zQAs?Wj-&Q3_0qnBQl-m!hA@uucDhM)O^e6c9Es@@WZDz_8(Cmcoa1~shN#4Uy#4>JmFqkexE}t*q=?MKuF(4G
zc;b@O3g`srKGsbzvxLCC;SN;$cDYlqS(O`aW1O?+&mFo|OuhV$b}j|D
zR$DK?!v^{(ydoKN1oUtw;G3HHNWf0K<i16ELTHyAgm
zz^1Rc9G%u7Iaa6tu~NiafKJ5f*h8BG^(EQjZP%g*2~$#(!LskRnp?Bcqt2jLvx(Ht
z=1?44E_mEkvhjnz#h<&1U-iP$yqH!z5UE
zz`sS=4cA2!V@#}Nl?EIuQA?cN+7(+`{TaX|YU4;nMvU(CFunXELd)vnBbp|UGrF>e
zNqITk+(jN#)wj+LvO&J~tXEt-3;c=wxarGs7|0PsnY-h4-
z#E#C&dRNinD1Y;`Alqvs56&n}ZG<)t9&xWpb`lw-W7j{`hB%k}2D)d};V<%hBoZtyt&
z5GFWzR(MxWi+j}5{~8$2FWiocfNL@$G!}l*-c2;16wercPr7qW+RR3%h+?A-i}q-v
zvV4fvFKX03>xEh#YaiW{h-tal&&+V8a-370F+2Q|_V~NNF2z-mUTd|ft_d1@3nSIo
zv3twil}4B9BnA*nj_yIyE@WS{u5YazXxYbzcvwR_A?iHgLz=%b)Jpz{XAXPK%)(A!
zU-MkW{4il(eHL#ki@L`5v!8W5pvn;cAauGa6T%~tD}Fr<_Vh#EXhAZ1N$+1X6Zgj4
z&q~ZpfWJMY1tp(_zHe=~Mec(1zvY89caN+1CmZ??{C4^cY32i1?I#zlbghNdrcFCi
zb09q+W!(Qv#SL^zvSSh)M6Aw)iytX(9^o-mP;yMg`H)~-@w;BH`Uue=TJiHm@?9^srQSds^3%G5qlSLe%Z3~Mh)p1%UFzDgaurGn7kUX323Vq7
zvxek^x)d=-l}dY%Ss|7NbCR`cV&v!KjY#qQckWtNaX1T`fAii`y5oXZz~li-7%UAk
zdM@2#38<@wafgqBQfbKGEp~mv{#NWA417{W+?A&34meg>hbi}%zbi#nwyTc$sBOy9e=0pyFRU<}o_N4S?6@!8R@@u8pJD);|
zyjaCLcP&;$4q00k>A=X>-R#fENujIl<;Z`GH!B=P#Yd+9LX*Z#kPho>SxdYv)`acH
z{{lE`6Gq<8pEGgP!6hs>vOEV)n;wmF)sGZ)rST#DMb1FXY`U_(D13^%r?*PqTQ%mo}C$v3xO-ex$9ALeKM&H-}JaYQJa*p_b8ZapHvg|
zE+z5fQC`XJ@7ifTJ+fjJrb%?4HOhTy;-rJv@4`n&PxqqjEK3O^=>8%jA7xas!+-Ba
z{h=PqzJU8onf*cdbT@L}WDpHj)Od1Mw$m}M3Znn~#vNfjz
zx}%7VD&cv)`5cFM&=-9Vup3@W+74CBmJ(O9O_Wg<3R@p;kgfs=kFdKGdV;(qLWw07
zbnkmCJdgVr?~0F%s>J32nSr)WsrdT2oR(LRgmq2R+r=K2nuMzjCu?7hDUX;`M$?h=
zprmQ)DO)m))cgKl{HYK;E*@{*QpVzI&RpuYSLJDO3fuO8OGj^Q*htTrIpk^!}()
z?u9SFeL?w`L*Sce@XE!ELL2Ie&JwrCEA)j==$@}3q^s*0pg_
zJMak3=%^iB(T#NHOJ
z?h34&o#kG2Zn1-ksjJw|*LaG~L&EbIfSmCSGf8n3ccqxGjO2Cr~mrI_YXAeePJF
zU+O;6S#(;n*Qxw#iZUV)*|E+{#(gIjWg^u7@4V6a3|LnZT_uxrrwOO^d+Qac5H^JQ
zVVYk
zON$E96Scjc?ig1OmC?&09`TbO^X>f^Y+l`8UO5q>&+on<4iF8w;{WUT*J#_B)U|{o
zdh7T+w6dt1oY1h{<4TB#Omv4NUwoi8^k>XYZ#LBKVJi7!p#fsEtrYZ(qSnS_SilDg
z&kt1sge$$!;g8$~THX0HtNBq4wqBj0=vu@j@_67lJ{8Ycq0K$s393?@SM!mu(@DkP
z)wC+b>MF6bR@8gDS9-mpPUn~+t*Z0AwKu8x+s7YBqje@VRN7C7vj^(7krH8;a6nFd
zccX%7wRu?gU3}rKA(`FMs<}Uw{d3lJNKlo>{KU=;WuS}M;8*;7m()}UfK|(c*T=?W
z3|_qW+6iGF8tu9;Y$tKo*
zq&CUH*z;6#AYibj{Tgh*;Z?srU3UA?s0tzL0DMLqrjz>bT_L^dsc>mW^(=Rf*^`!9jl?*%&K*@U?^$#5&D>t`I`r
z*tLD=X6&P>kKP?zAJj5H@nRNt;>N3P2T}G>dJbVy{V6wIU(bV=)fwJXdOs3fK0wd{vb-Sd
z^c(UU!*zR(<52h&DUQTC*flJAe@Op>t{YQJF+tn)a|zlK5QR~`!%-y{D8Adn(q9!q
ze>C}GCz%1m^*#>piP^cd^GzTg{hQZ~CDOJ!c}MxLq&{B_nIw&zRiQ=;XGOJ6!tF{P
zr;)k-$x)K!5kNEVC$6|IV16MG>WBvUk6L{WI7(lV^{bsAlD%5q0tG;1TLkV0q7GDuy}c=x9E_x7Gpj3y+821+g(H71x+zmIvKt;@8YUGI
z!j|+Ind0S_(wCMMWVf1whLFw`H8&7Yhx}NRpNESaS^BWV3T+w6LdE~_S)Ykk7
zm>XHvRKI9NO?0F*6xh939eTgbJ4|WqiZ93bDv#s=0}_Jm{Q@)pH9}qH$jmE-v>&*U
z;za3*4r+@vH7Oyk)fBL_fY~Tm$wP#=D>_{Z_RY{YSZB29?EOajFl3<;Z{T)Pei%3VvU>Wh#OUPj
zf@G=@Ls}`(*aoZ>In}e&WZx;y`c!^D*pJ!j2cHZ>@Ny(m6cr
z>dxp$a{E6PU+l!x3Q#5!Xz}+r-+Gu6L?X972ulUTnIAB$x|{D$jQFGOkc`>3G=1%
z)F7{)KEAGpU`x_SJc4Lz$2e0$*Qh5TC8rbKiL8KBM}}(op^}tZm2&B@>66*}KOL-r
zuDtc(yuyDjgbxnfIlf$N;nba9yUojE#S&XY?Bgn)$rpH4tXb8+dy-I#
zdjR(boBH<7cZOb%IqP#Tw3(I8ij;8TSz&15>sExF1eGxVL!+MM6d&Id&zc>P`R_Pr
z+4h}9MDSMe_jz^AR0yt_Mc#U(QAgkEDPBnr*8sh^(ca+G(~BkKJ68r`l$^)Ehl>@K
z+s;Op>KMmxZ0+(5%__#bOFGg>g#cIJlQ4H30_za{XAP@QPlWlfVSly{BHi`as~%3*ccsI4DU
zE&LtjHwoclZ$Nh4HmLVO%>Sv3dM*=R
zXg}mq{F5ADm`OhGCwmfe3SaeQxyk$$SwhYI4~VC*f`y)>K&jEGBp-0Srf
zqc-V;s@yt+)nN|kM8~XjTLEj&ogmz~7I8-%)4BM9`K;wsNA@Uo!BHB)gqTevBg+F!
zkxx)#Z!-It{gHI>{Ga2+`Fi(Nv;UW*D_GfZzo|Cq$Hi;-lR0Q@;EOcoO^?VXuvDEi
z!Mj574Xd5;$|$I%d3b6es3=xUE@mc-{H5yFZ`n4VUB9&NFCCzd(Ldb*
zWUC;@4>4?snT~0ztkCi|P)O{JhI^3tkFEYiNyc71>0P#*ID
zKGrg1zp0c4r@;P@Av%;IHyzYVIoV=?aH|`USu8>`t088h0}>txB-}D8rZepx+99o#K5Ns6XHSOJ~{nuWB)UGQ4r{?VNBg
zw8(y7Y2s-_#ij!LoFV8cB$9JvS^tNVzyx$5)e)(d9oQ9llSqs|ug|=#|UKOWt~6
z1W|j-N+?x?ok}ZJ*
zqAN?n>HjAZv;AqsotzjiY>i(!3R1l4MYJ%q6Ee9Ayamw@RBO7%>1?ycwDJmiba1XPzcL;F#4}z4@#S|6iHi@JJnjIo&&%
z^G1vmJr#~4BwvalxN@xg5FAL71{CR}rHsDQ#tK56Nx($vi7kNXgsZs1AosP(s9|-OY_Al&RR*Ae73yv2+QAHsDTPdX{cr+GYje+xIKhXx3_M>16
zKkrR1PVHk${~Xn(fdvTE#=jm18lHqWVO|;l17CoK-V+(Asfe|iJwTmc{3H+uwWrE5
z!d1otlkj**i4JIEt(YgL`4PDsb2eP*wQ6m&Hr6Y|x*`ty{dGk3h!LK%tS
zGUv~S!??8u@(a$8NY6B6NHo6n!@C$KE!n%p6jutZS<1}4?7pr_X>2s&bafKmo`k#l&L>{O>h8{)>>w)7iY~?PTMbmeE#R$m*Xk
za2UB^PiSe{W~)LnzsTHB1hsQV(btWu%|+d|Fzgk%@+LS%^vTImZ9uJHhHdgWn;4wN
z)$t0HAz_hvCDyobc^|)V%+>Q@MJ332^{u_4XVE)Q{??VEKVduFXpu@$Vd45wtDeks
zkQnzlcqISvVW^`(wTd6A9I;1=l$4wi4tl`Yvox~(KE%&-@wY$6Tbfie$?8$k3Yxrbz-n!ZckQF+
ztgq-L5%Pv5A0Pw$sSunH!@t)*IVr8B95hv7ar(jD(3o|#JF@41w;5i_$H7K`yq0(d
zH8Je#o}v_7_h*Y@M0>IhqlX6lr_tzNZSX@#aD%apJ!4m3a5`o-BUCAQYD|@}^M9zz=e|S>p?zfZVcx>7ToU5|s)2%Ik@4<>BzGbGBJKE1)q+gEQs)Ll+
zdhXl`c!>1Jr_A5xsFnz4ZY@Zw$eA^h_){}S*phj3d$zP~JEK-o4{#O{TRmm0a3uSv
z?8P_V&NMLln;?6bQG^0$Eo2==dim6!VJD&%Ny!;cv|;JCSqC!bXwQFQy3ZTP?n(;YyWdq=8`oE3oP_>+$gr@JA+E09+Qi~Ht|l}K%b|0
zN>2@Vr9gYAuYb+b;msIxxQS-0z3x5!GieZ5y1WBbX7l!wZO177cwfEDVjJ$lo|#(d
z%fB=o2a1Ntsws?CZaQwj8tB#qv^YmW3t&Q~^LzoA@7Ii*_+Pz(UdZN+?J$`b$0sfd
zR=SA2Yy_)UMVx?s4xw;RMuH{qX90%)9NFBo&CmK24z78iz$u6c@ZOBDcO(y%{oLTO
zC}Ib>ZLCAlC$+fa#G7k?*<$S4uEH37ip8f!-M{To_||@`M}*?xZvftFKFF|B>V?sU
zkAd7+d-s0oy_$c`2Uyh0FrM0k`i7z(JcR}fRbuLMB7y9g@T1H-m9}s!#eBGge`xyN
z(rkx86;)r)R(9<7=Rut-a5V0WLZ?i8L5z=&`}d5bVW%4zoO6Ka&0x*C3r9b)jv#3i
zO6O`ONSGZR`Zx}_t0SHQs^9FjkpK@_T1d&nAYMxpQ{~Zri5|s5d7r=q}5oq!NU&dbYdVTa`9$
z8(!U+2dRpScZ}}{pJ+oXtTSBSXO6lY3Eep>;b-BNr?`?7TXLg26Iln;=$=BTyuZGn
z4PJ%*=ISVzT&oCNH{2&pojO@w;%r`?_$|7b_4;o^ePz_($i1i?JDD|GW&L-E*ttGw
z!-~}cGd#mAioSw_+yDQ7^OGCKB1q)FGZWlx4Zq|^akEn8qk
zJhZ{?+Dq)8mtBo@>Vov{oPU(m9(5)yZnIMBR?1w#s{=OaWXv`zg_TmhJtcVvXPm{x
zl#K&ils`@8eLsXPclJKDrIYAr-60LyFW0>PtCV!I@^PKXzw2?^gkiFx_v?`iq$O}~
z1!n<}CCR)xo@C(`L^X_XNTgmpCL=R+Xh3%vN|xcB)zVli@>=Fz981XRf-dW>J0PIB
z>L1J7N|-10*P)9O7B-!_(|@IVv6aFpN&IZxNBvY&U6Aa@xu`7oY
zvt9m|CGAb)SD-VciNIfz8z+d&v_Si7g^|rajQOE3Mg|4M6_u$Lyxo%K=gkfG{;aax
zEV9N8X+D0gyFT@RIQE&acH&mCHn`>IV+q-Kk5ktIIvFNgGsq9tPR>*Na6fA@WV02v
zFdYeXYr(8Y
z+-ClJ7_cxn8V`ti=qd?j400IoY!?I0SVE^n0bH^#Gev(XSsB^vS{n`xN9|*S<$t31{9G~}%&^F;#SC$Y-VXmh2
zw$4Zxx|I|LXxXyMFhFtthwJf=k*#Nd5DR<2Crc}1!yW(=YgZHwMd}iEmTRa&sxCK*
zc1}5sFx3-e!-LyG$ljYYhtyZ&Iv)f2XUcQdO^xrkV5(xGFJMAst_SMV>DwbNtVpyd
zodh{`2Ds<6zdF{&64HHAYG3kArige6FIk=BsMgK2rAp86vTkr$@OTV8kGOJB6gW(v
zdvB)DT5&Ba1Ue^i6G6~GZ%t3GsF9O!QrhF*iMOw3CR_&o+pDwBXM@>J
zDoAQtp4I(;GIa;hQnKVtBP1KWeeWdWaxzETwayhgE#^MLeVEbRb`l9-&nzJ7V&`7D
zfoG6x&LEw?%GZV(tM*A@$)NvIw7>@E+L=7l7`a3f>4>icSCZ&8uVe>`v9!$?qK@3co+cc<&E`(^WFNHhHzoQ)kgb&;}Y91hay86hzJtue2DZBP=S
z475#w1+7FV<%0Q0B|Ph%=5&&0R7dR)l|hJk755?TQTxJU1C;?Iy0(Rtb5YnbtbNBF
z-A+7#Fyggq03!VBP{_BFt=pFLu$UBqmVc^kn_kH(LvgWnzR|#~X|(Fv;pz4G?Jqm`FHc6Cfn5?D#`Oya2_N$7
zHohK3ZT;aN4!xv7iG(d%0#~d{uvgdQ3Z&ERd|k;4wsf=C$}pSu;@&!m3O_NpN;pQJ
z`b?k;MW89p(_u5iemvMIR>~*xO1wLA}YJyLj_S*x0k?DIol>xk=v_d@k
zdPs-Sg#+mfqd@FB_F|*^8~V{xG29BNE$Q9`#on&Gc~A3}yhOi%qHs)$4s#|n=Im!?
z;+V30p|xxsjABO8_K+V3*8!Qe66}H;|kGvgFxvCn5kJKEnU!4DNZn1fMGeWk(Q%Z-~W*NAaXp>Oi$_|tu|l*qw}|7W>giryo%4dW~s{QWwD6P;@)oZcBGRbtN8q8Qv(DL
zo!M-$Zj%n@6vZwPz%mWE;0tpL3_?PRrfZ-?(CbuuqOB2db_SA^F{cS6MyOb*RC^&Y
zY-g)rz7b*Wm%Sx|f=;4Y^D|dB)#MNW<3RtTGp6z>JO8}s2ndaYr$C?fo`khk3pwdmG8A!g(5d~f3l-sy#z=uZ?
zKiGg3BnB4s*FwB9Ac2;EW<)M*9*BWrVQb&5&mS95TYv=eVv5-?@v1e#TIq{sH9Alx
zvsk%=cQUm~DhA;l2O_?xjo^bn<)z$?w@`YZVGol^7|k@Fc`Lm0)lTIHq7>#W{P-Rm
z4pfD+Tf>R;OLYj~dGWYCvFgbDnr-QrY+mi2>*>yPAlDmu4_*=uErp|y{Eo8}f!y~U{q)JRdYv(l&6#y+RYB``swynb
z#4Yvj;}?ETF13PeZr9x;BijZidGu=lJ|zunIkYiO_@n~f_1c=uBaa0ZQ6d3+oXl(a
z3A`7etDla%^vqyC*SaL4PC5DW@CU{4V)J%gc3_VaSUA6I4bap{v5C&&SU1V)n0$pZoLZhRt>ZnnqslW-gTTO9ke=V3?n#sP4~+?d
zlbX8dR{6*SB9xwrgOf&-gI{2}s4x#Vz8>i#u0&q&5{txFwE$^ZGLYqg+e1$0F{IzA
zA1XRt5`XYMYz+Fh!>DUX<$#G>yr~x=b;|36i9S3h9Zmps8k*bX7zskN%!@&TP*EAhE)SvHqDCy$dJ4eP;53!H!
z68NPeeQOMR9*pb}&X?S6om7xkD8WL9(qa4dLrH}+bw?PQ%tSnVT(`ISKYP4&?GH=q
zyaF&5W@-(|B59XAL_6gmjz1`S_P;|&`)nY|V@;-*l4i2dJbM`_#bPlzRC@MO$u8$N
zX;RmG2zG}*WeQ}mHT0#dvkYKSX6fgOoEcBsL*6D4@4Dl@@1i5)e+Fe^b_GwzYjiY)%9uv
zi;ZVUa@)lmBgWL^e~p~qcDhKLl&pdi?0Qp%4_oC~GragX-pz5bNgbNA^qout*ul;V
z^|&P`DM{p7ClF!}G%175q>%|1vBH?0inj?+{p%DbVyR)v{mqc3t&GResq9I2+3Q40
zQSHe$Q?Yt?MTx-_ExFIg7aNuoMd8^4o{W+9eI5;d*4+n>`Cy3abU=(1bb>jnKB{sMjMEP;={D0
zQ6-!1ppjw35WzUB#d0&LuV!MTZQF2MC;5V)-kvniJ0mDS&{+h@imNhZDn$}Eha|fO
z^I4XV&3CO@VE+_-YEuQa0UT)6QU=0+^`U*)I%9yzb%ykQ5(|j?*(XFmHMw4!!h!tt
z`rpPe3!c9-XeT@Jv@b19-_JQ>r`x@lnLQBU+6~-hqPyGmSUD8MOCOn9gz2KAEQd9%
z0I7Sk%QdK7Z+7qji(O?kG0m_KH8BygN#!4H=Nn{AA(&tMdc7LrqhDM-eB-DxCHUwt
zV7kH61_e)1Vz)(Y@ZKtP0paw;2t`61k;3=3w*LY6!!h^Mx6iKAL?rPrt4A3it7`G<
zl~GB=&2h1ijhv9~UHb?`6DcF(3#`^2C>QURlWz-(355rZXoES*F}0APcL>_UnElqk
zU-6WmoGQL6gINln9nKC|Jt2E<8`})pYQgp|GJT;#12z%R<^$}4@2<+IChe%$IuFT^
zQf>{gTpOrh5V>toup%Y%i4*}-@jgYE(1I$A-TzA7}|@KQ$6WlA7YGf_@G)QI24jIwGlB4o&2H6%hwAB(m@
zNi{6{KtAWWl{F;$SGvfPni}bZRNa+(&A}O)mOyFx=tLZP;8mE~`R|BQ@<>A?<7A06
zVU;>N=!e>}W0NYCOO!FRGBr
zq^a*9{)WqMFW|=Zu$comD`1JiTxy&@&apA52dd%vZFGv=3D{@s?Wlw931%g*zD^h2
zRb~NgCQe~!YCh_UntsZ8Qrqwb9QNu_Z?=ZzN?o2oR<|PGEXTNwvI*gUDP|CNzagF_
zptKeu^Hal;c-NyTm}!Kd6M~iHKGk9z(dUUukG@Ro$lO-s
zI3c?^S@+%}FUT}VgXwMJB3kR5Ty6;PQT_&8e^RC7DgY;|h&3(DqW+Ngz!&BbcIVM|
zHq_d%zmb_^NLyoGm7g|q;fee8OeSZfnwdMWmPCmalB
zjsj8mVP}%_hxu#Ro0v-Pb=ey={hN^J*P++KpZlv0xY*-sViK!dH%ptZl6^1c8#va_
zrEHuDpV&FOelhswc5#rtP1YzK}p$Il^^pJx-^8B+?bp&VyFIhA?T(tn&k
zS6>&+`RlXV(C-c5CEiwWNQ~T8_$QfMaVd3sKS4wO?XI0L{c&Gq3cnHUebQgEMn#}4LKw%UzVWKV_9N2Z)F7`MISo-%9B4yUibaMU;P
zMx)(?j6luVM8sSG&=B#08VC|5#(fy;RusX-+CjQEh8hb1_&R%K6BwoNLTpI1!A9*<6>fy>vR;XA^LY38t1fn)(%k@uA
ztU!KqH^14{sqwHE@$+5&*t*6HLXVSE<~ci2l(D3Q-BSf?vARBj7;h+@&&H{WSJ=U?
zAmuY3PnOMDPJ89|-!B6I9yD=J{+T79p$80|M+JnM+(
zGZk#S$2@q?`x|{RX|H;2Hv=u@T4})hF3|7H@l1I6>sL_>P7nD9+M-3FT9#)-yg3;>
z?VB=7%xwjL=_!Q8qgT%ySuVOq2}`{~h#(u9uS`+7WK)JQmpRwRNH;hY1nT$s6JHBz
z9ra+j_ZrM0=XW;E$
zXq)VLrgaK`lRwHY%c_61t1&8olZa@k5wX*)^N6^Wt@W2CerTs;V#<`OFIqeoL(9hr
zKX1;B(@7-Ja?YN-?4!Yn3huc!)6`5q3;i@)H5
zB}x*zCgxtu?1kbl9gFA5vD~aPMpA7Amo5F=_K4IZl
zTk{jyPdJ=G`4?2tav4T2q4SngKQ$eq4Em~$0y4{^=V$B+gGH{NfF1_5hoDS(FTYct
zwQfV_?9O#KL^J|Zmj_(@U~#!u?lA3YRV@u4b_74?=BXxx6i(E4o=Hu$sQA_Ht5RZr
zy(Au*G)e85L}fW_+`bCtUqFnW{s(d=#T-!JUjo9$?=DvE1z%h&TP^&i--lXR|H7@l
zKI?&cw|l^hLzfj-YBK6&7t{y#@-J3hn`m+!kQ=(@o#oZ4njw!e1BPX8*j@Zh|30Al
zo1Qvj69|Gngp_zgx|IC0bzoP5p+}XvNaE~l2P3{nU|`V0mr5$c}!nv9|S_;hYQdRtPrbb|brEE+q+r4pSKK_s6{%-CB`xj;!Wm+ZN8@Ti|p+82Hy
zxv@^v%Bt9vxKgt{H)k@s!ug}vixh@yOg3kW`XUjB5nGhnUA;CjTOIGTS`$7zySgYhS6sUg+=RX0hH%lqU_!Q5I_8hC}%|m}x3KQm)fe
zuGXyDV8hiM-z7gHwo==9tEvDTEYtJW%aI~6dXItBNkdiodGQ>FmXA!J*P6Lw1%Jlh
zS}1t2QsGBJ{tU-)%V>E-(bDFeNKl4Q&L+Q{AWMF9l#90MzT-X9s(G|Y61jQy1Si<$
z?kwkS;)C*5G$?L
z_Ju?*W^Khjb#i_pGeQ%Y?)dgioy~n>yY)2XD%kuO(9A3^6Z~EOM=Mb)G2W6TtqL7q
z>&*J1F>k8QK7#Tyz14UsAF-feSDsXRc&MiFe~4F#b{@Ap35^o7JO
zhy{|I{(Zb&3CG_0#b&)&I#(q)#T&a93
z$#;Ry2w&N|@lIi28{(ZiYG&ELu3HVfOm#|(Qk&D1n^@D7fZ!ZDMBNN}o
zyY>v6Z~}S~^U$2Hhv`p?Gf<%bzu~#>E}G>Pm??Uscs?~iTSVJ<;b_GFE$Mi6n$@Vh
z{y~4Ek_km=y~kj|OOz
z*(!UGeQWMx;$dz#Q&;MkpaydClu^GmMv)N@%<}10fohedc8o~c1xw(kO6`xa_H9^=
z1=X&{HD7{PYfpd*4KkwNO=T{s`WKH4lKNLq>^`E&b`>6m+i@%2sJ=%KJ~6i7H!Fst
zolz9oH@ZbC%L_5m!A75x^G*H&+LGsz=t(#Oq0L2+SXswj+mHQ$m7hB%%#x?V$aI+qH*nkaZD(u0IY>NmY~m|WNiym
zzwI0dX4L)IL&=1rHa3(%MrdeSXtuL<0ffAa*;I-MA;4rinz{^`qlLK`*D
z${HT+zg-VkJbfkT&^`LT*_3y|+o8Wc-kv1KREw6#euy11@d9Jq+jIn}1|xcYtolGv
zD7`<|k8`l)_S!8(=by2Q#zKK8C+3u%?IYQ;>k(bHr9bn%U=(H;Oxmf$X7tF2PkI{y
z_L^W)ud5cD*7^MoPz@s!|K3iEchaW#F{Qz`3ez?u|c=MIxSEbAO
zw-?kGlti|Qrt4jrrX!>BFT~bKE2X4UUvnVf*Ass0cOm|2Q78BD6kV`sPO7Jmagakm
zgFkdg+Qel?T?>}h77o%ueisFE@-$_RKvc+fMmJXE_$~g%+*}
z?#EVxZqx|bMX#|2!*{;E;`r{J*z(_N4~z}c6!^9-(Am8>vxn;kLo5pvvHOE0NjvoS
zf{>I)L@qr9NO*uKiw^hYzKu>9jkVqjz;SBp1b<{I;uwsw3xt1_8cg2TS?6J3+Affw
z>gP@`D{&Ay=CE4Hg~4w}!Hi@3$Fjtgq&fq4z{b0Pqsy?#yQP!z1)I9PUwZ{uRJ!_p
zZ71o_Sc3ux*%|Q7b(8-RbxfGQvSaai5_D>9A9zRF)s`Zz(2{ON-GPUxb}a>eAKo{c
zn}?9q^LJU~dU#
zej~6u$8~jkVoF`#q*XAjK{Sa>oavVnXaA;)oza!+wkFkVv-Dk6F|#JtGzoDV!%+QK
zA^Q|%n@8t2Rw^`*Y=dWax!b1C`bV%of4I=*(rM#y@aJ@
zz_)*rXLBGspC~+Dub1ChA@H#pesH6!B4wzbId=xPX`@~}zI$Gu;Z)0PmSHB&qamx|
zzu$pVP*?rjv)bVdH?`_dz>Sj>&WZvgjodE|A5es`+f9K)@cHp-GayHy9Ik%?&{AU$
z2zu9!9?3#~HI~8m;@&2S?dc>Z{Aj+5@Zc;y{9grrG2Kp+rL!RJVs49=v!X4*M}!@B
zaeFQh(Nbqijc}OA*%Si+2>kxr@pDVAa-EIq{J=tv@Wlixi}UIvFe@s=3rtEM^q@Tjea=NdJPFS40p4GN{$`A5vGI)THuUN5Ktl2+T=Fk0o3}6`
zy#mfiS-EDAW8+lv4vh#UK0THy?zjBA_2KRNZ%x@Tghv{y?ZGLfk}lipKc?rR`-V8>
z1>ou@WGLGU20X7Qtv3f^=MgkF^O^ckH=^?gPi-{{8+lsO{I>uAz@ByHtLh{)SUx;wr*ghG5H`^26WskbVkJbkZ}7v>TL-lPYYn45p2e8bm*7|1
z8C!w}q&;FE+{2-Cvw`=s#<1*PMd=h|SH!NrwY7
z>bp^QErH2pd@zgj|2Vo5f2h{~|D2gImd2K3UrHAxAtCEbDcl>;w?!f|QY34Z?B>Xg
z?p2l+`!c1XtYs_fNJZIGc4lPFlF2$VX8E1_`w!0RInVO>ytfZ+!_o^IcEkDC@?b=h
zJrbP$m!S
zLO=EJ9mUJKr{Sbu;#Vc&z%~4J)O8HpRU2F
z9bg&_*{=p9
zci&Gf@c(PadP&r}HzO1bvUO1t6Kp#78+pCeilPreLEfGrsCAL49MA1T9a~L-7CIOg
z8Fun=mRE(>iGv^jLvlvgE1eM87pWQnIi9@g%eDBCC-!IW1ZmwiB_EQFeaSnU3bqX6s+PCS
zc~)Xx-u<^DHI*k9J1Pgh>?5*MRnYQSdWqLZOz@3GLv>XwMK(v*fknMm$-k&7tIxlR
zS^!?^q`&!GNvgILRd9Oet3Q~QJNKsy3U;iG8}(z_mx#N0pCecE6D#?1#aEYaH<lBGDYD^P+hOK{^iJGU6Vi}XkzK5p#V#@t;((>1uEK}do`^FRp=SYm!@o@EBLH@)aD
zA+HOBIcHiru8HfTLOfP3bri0S=(HYLxbr{b)jEcS9NO1Cq^JSqA_Mm3&>j`?F24J9
z5yN~Lr;Q~k<8%pCaRPLEbhj*g(7xYk|KFeW6%Rx8C!p0txF!=eJLRko)IQY9ja{QR
zM}_;Ftwihda>qM)_}{;~miXWGKluH8dFtsd|LC=r)y9m*$oM011l{q{
zBVq9haghBXm2J5n!t-MTtK8kFk;ujeo++YK!6@`>$^Sgs6s)LtDboE-?CEboHZq#d
z;f6wxXH-p*fArWM{msQ7IcT&t6w_M_F$|!WxiwwBpY~F{tz#bP5D;Ya((aV4VY6yz
z+IzwWTnH8#lKwP&eR{KQW-3gUMp}U93!aQta{_#mYx}TOH|M*?pQ5{#fRg#I>8N(@1aPJ#AmH)h!%RT(3x;!Er9!yV^$!~IcxOLpDiPb&x
zy-)Y=<)wTap@gG>)}`hn+O2f{x&MIuyfqYAWP5u=uD#&KuA6Joby&$K`XN}@4%wZH
z%!?43Ar~nQx5ngcv`So+0LS
z2)#Wm3(pTun(V8%XYwaH%H>7C$JdGr=V-N$X04Y^sD*~=hNAsA@-@T!Q7dEHW4V1R
zPuc3o^a+xnl!M@oyMm9dqQbyoG;9EU7qX30=!%LWl}Liaz|vV17VSQAaZL)6{f5v4
z4z^S)4dr(gE_KZ5e)gU{@9^6GqYqWO!Vi^l_$N~jo{L(E6ieIw6}gZIJy(k9vTs^D
zD%hR02FviSNlCmoJi%*23K`uNnjJwFel5Tp2Up`dt%fbRYEM1%WAa%+=ME{X@8aR>
zcMoeZw%B?e_k^gU3-_9{0AU0+`=TwLqAsPIjlu>jZTq68Q=M#nV#l<58=D>%a(#a^
zVVWGiy*vXz*dx87Qsvq|pRiK>vq;K7JjGqX_i4^G*6K6Be$WO+YdOBDAfUToIOb(s
zaK2|nty$U@akY3C+j&*=O{zHb&2UGpq4F2}3t#>DaQwpCcM>c;_v|m%XsSvxuQFJk
zXoo@U($fKOPA#BDOz4TOkRc^SZsUnTbFc%Hp1rY-IA6aI-U_Wf-vc0pB~Y8|uexm-gSn4BdQ
zBMmg+mAdL)%#$NS48jL}soP|;@`LCMT<}mlL>D3`=@t$@k^_d24>-)JgoM;2Bw;8P
zx?Neoy|ZS2Ff!7be4MUIpC#$l_4OeLN)=W5g${0}W)rNHe
zTAV=pFK`?mmOL;F^-EckQr%nv0l8HUnIrQ
zppV?V(2^WD(Oi(-n8>b^+QUpwr_R+!CyA0~T)7lUXt@1_rWpNTU3an!3n#AEq}Xhx`)
zOJj>vtf+p_5KkA#jSbdVp${B9S$(=RAx5p)nKSs0Tl4>Fpv$Pphqp4+y0|{8{rv*-
z$<_bE_6C~FI2~1)$#Y!5Qs>^3@yf2C1AdLg79$Z6s8v!b4rHSh0fI5i)$HlO{~W48d%~e4M-`$uXr@T?cx?!P`MM|{;L|aQoYI4P
zPhtW7=KWB<2AZHwUExoS(7iE(Npg@O6h4b@p3xz;rJf#SdFi7?*TXwyv2p7nQYRs$9TaF$ja4n@
z;Eh}G)&P)8m_382L|jXa5FvWq|8|T^Pi3DYb9)~t5elo91*k)hJb0lDiw^n@Y9u~Y
zrsDoQYEFP-EGjg$cEVNLk@4x~|Kv74x1Gp--Q%Uzf8_h+{=dTE#(0jGp6UW(3x^`^
zA|n&avy;&`$q%8oPFXmrZ@c(+Zi$*Kh&P@I(dPx9BH1N8+Ch3QMoKhGmjmVY)Vu{T
z$zFxGkxeblMj&g>9%@g7EzA`_2Ao=kK5j}n!bpG!`zW``MV&l1PzNP@obbUQA(&g|
z+<>aW-|kAV9PEbjkw}1KjX^$jwhk43>Fl40BHA
z{6!&VuD`z#SiNlin$>+e_w8GjpBBTDfxo*#tC1J(4bs5#duow;Gh~(~2e0m>+yECZ
zGHUg}RJ#5k-M)ug4`~i+5bKMv6bRo+TpzvyUT9L=rw*e-r1odn5~RQH&`n>3{DlQU|+F6Mjro|Xst(W5%x~1h60L{gZ*ganrXUiq;WZwY5@!46HX0dAd
z_UPYrsBe#NwVlAa(8NQw*2N8=+WqIe5$F9+hewt-8>-oA<8XsCqLNqi}k`uak$7
zc&>30-Rm5Bd(S?*dQASsMz>;)PP^
z1m*)KCu;ru>d+tDJx~06=>^GS7cH1P?+z`Zq2*$lUzuyIac%SO`?IGmUU}Xe<+z$_
zytMxtu|=F&kHDIg5Wt-xe*|W)Ou~QYoj;5+l?O(s`Yz7)FrHX&D>`3Hs`v7mH=|q<
zJ~CxA?;Z0QkK@T%z-;C9y7sKThv^2qsQ%!7LAUyVL6KDcb5B16g@C8?k?yo3X)>!()6<{JowIVIqqff^3Um;`^
z0n6WwcA()9o@8$o3QEpxIra$O#tXS0YV(vfV2M_$tb;1{xA0
zH(LEIOF2DNP$~|tgPlsekmpKl$xo!va*J_
z#?)l!2}p=%!AsQ)ADjFnh~~EftM+&HQreiLn$lAmB$}hA5{sr*=tm&fd=|*>Lh92XJl6%
zy$#9EF>qufFltLU+!ZnIV}Ov^pEiERt9I5~t?qp@*u@zJ6_QkU7z#pdg2?gOhAUz<
zukPc{p;bwjWmH|a|5PoEUU|6YO)j|SvF@6`nINVQTo3`u(i%=_+hS2?+gO~n$580u
zO$ztteh_as*Asp|xF>)0j12YuVRS{Iar3$zsq`Am#s$3czUBh}zigr%zqhD$Ux^$f
zVC1nR^wSZplx3x!mIY^IRUT5P^7vt;+0K}SA>*HlON;jAn+{$pD{jqL{IA{6V%^&E@XB|G)BpUY+^&jMi
z3)4S3vd@8Rkj1U6s2ddwKdXlhpA~23%LPc9bLhiewu=wU)x+Gw*ZUMY5-b9|MXCDQ
z;U8BQ{qYx@yu86Dakkn1xtC_M8YzP-)^>nQ{zHU7t5(402yW!;#}X!q`P_1>>IE(`
zX6=Fj1VxQ6ymv}`D#{Q>y%`C_})gi_C6Lkz+8d<^n@CDnE84q
z?)nW3h`GZ@cHgqEf0@
zSoAuYYy@d|An$=HbFujKwc^1)Gd$|jaLfdGSZ`ayU@%fJ(*Ep3m@+~9}h8&2R-a{UE=(WQ`C;vy2EXNe&p{dC9i_$y!m^vi?n=g26X
zWB0IzN}O{x_Gdtraj63Q2}3u8#mC%G?}c_TEya)nh&}NEjA?A^bwpi18^iu^r^~b9
z4IpCB!@G|HJGG
zT4Iu%1kP2CC;(a4`zWf=Xfl}0+RsSVBs7WYUVb<;(z&&r+D#2b%pFxL$tHmgP(rCX(RuvPzcnXiq3>6n|YpAsvA>ZC}l{*c@UC4T8)3S
zRzjRi4(`ftN#3jzk8@a<6@rhyzD--Z>g{l?61;=x9QWrF@b^6q{?jDCRk;!A_4BBc
zd|Z)#uWfX?VJVinV+;!ZQckh=9T;)0$FQ_LS{4VJl6rJd?@!)up%`JWRnQq^B~lng
z4*fvvbjF7JtV*2IKj7$k{*htu*@`0PaQP#Kc?swP&OZ1>7lsO|)ZyKHR*9Yh5D?A=
z@BRpgdAHS{ZZ!CQ0#oW-7yf|e6t-o$mF7?O4r($xpv9H^mAvAfEsV4mobjoslpxEV
zhf%+5y+INQ#0$$>QRH2oY0IaTiQdL%LYL7LEVV1NQTZW6ZRAHqYs^Px#;ROF!$NS&
z5jpUzZMPNNK>{994wIdX0k#v)-AJe=`HcZuS3v}=W6^5UrgsSq8|IRbv{;QN_|9I4
zeBMyBGE=BGbQ?p?`fY@mp@@K{J-hhDO@7zvFpiRo9(gLPG^8O~)a8&*vgZb65aGKq
zfsG@?>r0_2{tG7X8FE$MEvb^Tx&LbtSe5@;-j=iW)|UOy8En`g$vEx1KF~=kfFwor
z2H5Gr)+9y9#*M77d(qsRh8rFte~qEj(?z2{2)z)
zYdPA5rN`#y$^-UNqfDA9kvuct51GY9%yev~;Uj2L9Y)RST3mY;%|Z^wL>UIY`mL1R
z*BXlN7QkCGUA(CHtCAZ1BgmW{z5~?kquo`DTCe*&Yh0$$BuXd;zpf6JTCdiWK#YxJ
zLtit_5Hb4#l0yI{9P)7oDC)W9Y2j~y#DVTFsFAN$d(2~FUKNICe4h$ClW^}&tMNP;qU01Zd?`79n{H7+ye}K3ywO9~K=<-B?FGq#O>-yL;n5K8
zexJ{Z0c^uq$IkAv*)PShdEZZttiDSsd}(fJsA9T_prY>fx_PaumcFh&j-%nmY>gp>
zvD7(z{sWzGwk%0_MQ%O(45=_^ZtwlrzbD1f5?W>%6$dV16RgV%lX7r$O~{xO%9q$8zy0$5vVDBZ-cRyu=nK{_^6W)V6SN?~T
zLkrC-8)_F}PFZ-2$ICe|3mJHi6Cre4ETx-wUWi{TTv0_6>pf;>3*iW^J0z0hC(r0*
z07Kx0Q8e6oi3oDZIhT3#EoCA?l{sVSnJH#az_zbrI-=xS>#!$dm%`1yx)ffD4#i&
zr5m-We*^sZ18?3NK5G$|yNcsUFQtlKoNId8N$7CaF=A9gl)5pU9!_df(@XO$HPUJB
zdypbo(SYNEEgPwfKAi=0_wcS1Av!Pf)oa))`-adJeqOyMN`hKw#0t?5mrB?Adj~VQ
z%a?-jEq3-?6K0#|<7N;u;-2Lb}4ECv!)M0;tyLH2S?pCf#45P8Xqm94vamJv$&ZK2AEw9OS^?l=v
zl7FMwUhURk11!M~$iasf#oaY%)tTVL?XSMDL}x*seJ*rY2z2+c8fK!6dtT4pL6os7
z>P@#8`Yqo9on1V*Pa!tqa_B2bpsaI66sBscx>#6*z$TpMKae5#$U^8U%$Fx8dPDYy8~{t%(XxhQ}D=qOg!+9FJI=(M<;93I9XAGze646IBm!63?Om00X&Yti|Jn?{|l%`JeUbTYR(=8J}6}`
zTQJAE1Wftf^UZho|3b300<()du~apvE94gzZWA~mY=?vd0#2?R`*ro|17a6E_&DaE
zPAi^$Taqz#NeLJbPH((0e2^5;*9=K7TdOc#F3_HoZ$s|48JE9VJoa^r502X1qor%F
zP91ssC#C6ynNEL{0DfU884?Csy~VO@gTnzAM}-$k++S~GHcx+#{#NR>lsq-`8ke&-
zzNtIso#M9iSdh}Mo)%l()2Zlg9d+uc1XGEgrUExx)uN9Ek{GqVm(+9@%4EUOC>Q3V
zU*`%ynMp5$v=4pmA54Je+VoKRv7Vz3yL0
zCZYi|*$DVi344BAM5ovhkn@k)C&H*E<10D5$QeUwsV22+z&jaP;h!r#I(VMj9egH;
z<%gYn=noY^)Pa*&(m|}RKe{MD>?iB|q&=4UjM8STHCO(n=cZv(!)~iG;fJm|yX-0#
zMW}P@SqC_#Y7T9;P26mfA(2P>$5eh^0WO;TQHBsM`We*bRdYJzHF+y{@T@5|^3Jlv
z7n_&7nwn}A6gfl4*A!WP%uqq<6!RY>77e3XA0#70+{GlseQ4k;|p4*~&-^pcZ4
z^9iCG|A6k6RGR;4kr)b}RhciGj#NOaw<>RgphG*ZC%dZ@PEqn^zB@JDu9=o@w{#P`
zvF*~m#g4u}T(Dylx(6uxNq#sBg3pW!OuTQ#?Hc_+4;^x+yD{s74dYsT|2A7(BIAH&_)O7|FJ`h%=NWD#Ako3obuklQamU2vKp7I^y}DOu;APUx{W_bojXoD`Tn4wQ4<3ttbknp{
zA)xliKd~y|RVxlwDk6dQrekLYzZ7mZLT|Mm&mFE8sHh*(B@rhTkz^l}<2>I77=^n1rtD*2Tr^+(JZ{rw^;f_XM6)HNm{M4J%%U)4M?iAba-mbh_wT_~$MQDaQ);8S
z-5&<@jISofKr2_pgjT-;!dKVYH|4&r0rQQl(J$O>sEu=gNHFMndS5XVU*COwOE4fe1r1L7Qyjn;?qdF@62&k52pgT!;eBtM(e{rDWPNSUky|{d$iu&G-nM@a
z!Z5H5>R(~aO8$NneAnT2vme4(n-hY5r6QD-^{$Q<|5_;ir-9udmQE}$L}o>sbcI}+
z!IG|--Ti&MzfP!vkWa~@H=?!=`VvK9bl#}A(AnXkS`)FWT^;&t%^kfxzF~$d+);}-
z1=fCZ(y2Dxw{sC^@L$9s^Nq>9Zyk$vv`f!lh?&cRdO3T(H5VU5*;d{XY$6!KL^Xh0
zKQbkla+Y|>D7NWQ;o