From dff666fca14f4abb7726bf1c5f32cd672eac39ea Mon Sep 17 00:00:00 2001 From: DrKLO Date: Sun, 1 Feb 2015 21:51:02 +0300 Subject: [PATCH] Update to 2.4.0 --- TMessagesProj/build.gradle | 4 +- TMessagesProj/jni/sqlite/sqlite3.c | 4467 +++++++++++------ TMessagesProj/jni/sqlite/sqlite3.h | 804 +-- .../libs/armeabi-v7a/libtmessages.5.so | Bin 1565572 -> 1565572 bytes TMessagesProj/libs/armeabi/libtmessages.5.so | Bin 1110884 -> 1114980 bytes TMessagesProj/libs/x86/libtmessages.5.so | Bin 1869740 -> 1873836 bytes TMessagesProj/src/main/AndroidManifest.xml | 1 + .../org/telegram/android/ImageLoader.java | 1205 +++-- .../org/telegram/android/ImageReceiver.java | 545 +- .../telegram/android/LocaleController.java | 550 +- .../java/org/telegram/android/LruCache.java | 24 +- .../org/telegram/android/MediaController.java | 38 +- .../org/telegram/android/MessageObject.java | 109 +- .../telegram/android/MessagesController.java | 267 +- .../org/telegram/android/MessagesStorage.java | 364 +- .../telegram/android/NotificationCenter.java | 22 +- .../telegram/android/NotificationDelay.java | 29 + .../android/NotificationsController.java | 120 +- .../org/telegram/android/PhotoObject.java | 86 - .../telegram/android/SecretChatHelper.java | 14 +- .../telegram/android/SendMessagesHelper.java | 53 +- .../android/query/SharedMediaQuery.java | 398 ++ .../messenger/ConnectionsManager.java | 85 +- .../org/telegram/messenger/Datacenter.java | 10 + .../telegram/messenger/FileLoadOperation.java | 21 +- .../org/telegram/messenger/FileLoader.java | 39 +- .../java/org/telegram/messenger/FileLog.java | 20 + .../org/telegram/messenger/TcpConnection.java | 3 + .../org/telegram/ui/ActionBar/ActionBar.java | 9 + .../ui/ActionBar/ActionBarLayout.java | 10 +- .../telegram/ui/ActionBar/ActionBarMenu.java | 6 +- .../ui/ActionBar/ActionBarMenuItem.java | 54 +- .../ui/Adapters/ContactsSearchAdapter.java | 42 +- .../telegram/ui/Adapters/DialogsAdapter.java | 2 +- .../ui/Adapters/DialogsSearchAdapter.java | 232 +- .../org/telegram/ui/Cells/ChatActionCell.java | 10 +- .../org/telegram/ui/Cells/ChatMediaCell.java | 139 +- .../org/telegram/ui/Cells/DialogCell.java | 26 +- .../telegram/ui/Cells/PhotoEditToolCell.java | 59 + .../ui/Cells/PhotoPickerPhotoCell.java | 12 + .../telegram/ui/Cells/SharedDocumentCell.java | 381 ++ .../ui/Cells/TextDetailDocumentsCell.java | 142 - .../java/org/telegram/ui/ChatActivity.java | 130 +- .../ui/Components/AvatarDrawable.java | 10 +- .../telegram/ui/Components/AvatarUpdater.java | 6 +- .../ui/Components/BackupImageView.java | 36 +- .../ui/Components/LineProgressView.java | 98 + .../org/telegram/ui/ContactsActivity.java | 2 +- .../telegram/ui/DocumentSelectActivity.java | 85 +- .../java/org/telegram/ui/IntroActivity.java | 11 +- .../java/org/telegram/ui/LaunchActivity.java | 10 +- .../java/org/telegram/ui/LoginActivity.java | 2 +- .../java/org/telegram/ui/MediaActivity.java | 820 ++- .../org/telegram/ui/MessagesActivity.java | 26 +- .../telegram/ui/PhotoAlbumPickerActivity.java | 4 +- .../org/telegram/ui/PhotoCropActivity.java | 327 +- .../org/telegram/ui/PhotoEditorActivity.java | 1285 +++++ .../org/telegram/ui/PhotoPickerActivity.java | 46 +- .../java/org/telegram/ui/PhotoViewer.java | 270 +- .../ui/PopupNotificationActivity.java | 11 +- .../java/org/telegram/ui/ProfileActivity.java | 44 +- .../ui/ProfileNotificationsActivity.java | 68 +- .../org/telegram/ui/SecretPhotoViewer.java | 4 +- .../org/telegram/ui/SettingsActivity.java | 21 +- .../org/telegram/ui/WallpapersActivity.java | 4 +- .../src/main/res/drawable-hdpi/floating.png | Bin 4153 -> 3750 bytes .../res/drawable-hdpi/floating3_profile.png | Bin 3556 -> 3447 bytes .../res/drawable-hdpi/floating3_profile_m.png | Bin 0 -> 2124 bytes .../floating3_profile_pressed.png | Bin 3859 -> 3772 bytes .../res/drawable-hdpi/floating4_profile.png | Bin 4136 -> 0 bytes .../floating4_profile_pressed.png | Bin 4447 -> 0 bytes .../res/drawable-hdpi/floating_camera.png | Bin 0 -> 1417 bytes .../src/main/res/drawable-hdpi/floating_m.png | Bin 0 -> 2222 bytes .../res/drawable-hdpi/floating_message.png | Bin 0 -> 1039 bytes .../res/drawable-hdpi/floating_pencil.png | Bin 0 -> 1232 bytes .../res/drawable-hdpi/floating_pressed.png | Bin 4132 -> 3798 bytes .../res/drawable-hdpi/ic_arrow_drop_down.png | Bin 0 -> 1044 bytes .../main/res/drawable-hdpi/ic_directory.png | Bin 227 -> 1593 bytes .../res/drawable-hdpi/ic_external_storage.png | Bin 373 -> 1876 bytes .../src/main/res/drawable-hdpi/ic_storage.png | Bin 198 -> 1595 bytes .../res/drawable-hdpi/ic_storage_gallery.png | Bin 0 -> 1899 bytes .../main/res/drawable-hdpi/media_doc_blue.png | Bin 0 -> 1297 bytes .../res/drawable-hdpi/media_doc_green.png | Bin 0 -> 1274 bytes .../main/res/drawable-hdpi/media_doc_load.png | Bin 0 -> 1022 bytes .../res/drawable-hdpi/media_doc_pause.png | Bin 0 -> 951 bytes .../main/res/drawable-hdpi/media_doc_red.png | Bin 0 -> 1305 bytes .../res/drawable-hdpi/media_doc_yellow.png | Bin 0 -> 1293 bytes .../src/main/res/drawable-hdpi/mute_blue.png | Bin 0 -> 1171 bytes .../src/main/res/drawable-hdpi/mute_grey.png | Bin 0 -> 1169 bytes .../src/main/res/drawable-hdpi/photo_crop.png | Bin 0 -> 1237 bytes .../src/main/res/drawable-hdpi/photo_edit.png | Bin 0 -> 1186 bytes .../main/res/drawable-hdpi/photo_filters.png | Bin 0 -> 1439 bytes .../drawable-hdpi/photo_filters_active.png | Bin 0 -> 1538 bytes .../main/res/drawable-hdpi/photo_rotate.png | Bin 0 -> 1430 bytes .../main/res/drawable-hdpi/photo_sizes.png | Bin 0 -> 1057 bytes .../src/main/res/drawable-hdpi/photo_tune.png | Bin 0 -> 1173 bytes .../res/drawable-hdpi/photo_tune_active.png | Bin 0 -> 1243 bytes .../src/main/res/drawable-hdpi/tip1.png | Bin 0 -> 14307 bytes .../src/main/res/drawable-hdpi/tip2.png | Bin 0 -> 14031 bytes .../src/main/res/drawable-mdpi/floating.png | Bin 2821 -> 2539 bytes .../res/drawable-mdpi/floating3_profile.png | Bin 2403 -> 2312 bytes .../res/drawable-mdpi/floating3_profile_m.png | Bin 0 -> 1671 bytes .../floating3_profile_pressed.png | Bin 2688 -> 2599 bytes .../res/drawable-mdpi/floating4_profile.png | Bin 2717 -> 0 bytes .../floating4_profile_pressed.png | Bin 2988 -> 0 bytes .../res/drawable-mdpi/floating_camera.png | Bin 0 -> 1184 bytes .../src/main/res/drawable-mdpi/floating_m.png | Bin 0 -> 1756 bytes .../res/drawable-mdpi/floating_message.png | Bin 0 -> 1001 bytes .../res/drawable-mdpi/floating_pencil.png | Bin 0 -> 1105 bytes .../res/drawable-mdpi/floating_pressed.png | Bin 2837 -> 2546 bytes .../res/drawable-mdpi/ic_arrow_drop_down.png | Bin 0 -> 993 bytes .../main/res/drawable-mdpi/ic_directory.png | Bin 207 -> 1448 bytes .../res/drawable-mdpi/ic_external_storage.png | Bin 278 -> 1610 bytes .../src/main/res/drawable-mdpi/ic_storage.png | Bin 177 -> 1392 bytes .../res/drawable-mdpi/ic_storage_gallery.png | Bin 0 -> 1643 bytes .../main/res/drawable-mdpi/media_doc_blue.png | Bin 0 -> 1212 bytes .../res/drawable-mdpi/media_doc_green.png | Bin 0 -> 1183 bytes .../main/res/drawable-mdpi/media_doc_load.png | Bin 0 -> 1020 bytes .../res/drawable-mdpi/media_doc_pause.png | Bin 0 -> 946 bytes .../main/res/drawable-mdpi/media_doc_red.png | Bin 0 -> 1207 bytes .../res/drawable-mdpi/media_doc_yellow.png | Bin 0 -> 1192 bytes .../src/main/res/drawable-mdpi/mute_blue.png | Bin 0 -> 1084 bytes .../src/main/res/drawable-mdpi/mute_grey.png | Bin 0 -> 1079 bytes .../src/main/res/drawable-mdpi/photo_crop.png | Bin 0 -> 1012 bytes .../src/main/res/drawable-mdpi/photo_edit.png | Bin 0 -> 1088 bytes .../main/res/drawable-mdpi/photo_filters.png | Bin 0 -> 1308 bytes .../drawable-mdpi/photo_filters_active.png | Bin 0 -> 1370 bytes .../main/res/drawable-mdpi/photo_rotate.png | Bin 0 -> 1175 bytes .../main/res/drawable-mdpi/photo_sizes.png | Bin 0 -> 1017 bytes .../src/main/res/drawable-mdpi/photo_tune.png | Bin 0 -> 994 bytes .../res/drawable-mdpi/photo_tune_active.png | Bin 0 -> 1000 bytes .../src/main/res/drawable-mdpi/tip1.png | Bin 0 -> 8448 bytes .../src/main/res/drawable-mdpi/tip2.png | Bin 0 -> 9182 bytes .../main/res/drawable-v21/floating_states.xml | 6 + .../res/drawable-v21/floating_user_states.xml | 6 + .../main/res/drawable-v21/regbtn_states.xml | 6 + .../src/main/res/drawable-xhdpi/floating.png | Bin 5189 -> 4705 bytes .../res/drawable-xhdpi/floating3_profile.png | Bin 4790 -> 4651 bytes .../drawable-xhdpi/floating3_profile_m.png | Bin 0 -> 2614 bytes .../floating3_profile_pressed.png | Bin 5107 -> 4919 bytes .../res/drawable-xhdpi/floating4_profile.png | Bin 5472 -> 0 bytes .../floating4_profile_pressed.png | Bin 5723 -> 0 bytes .../res/drawable-xhdpi/floating_camera.png | Bin 0 -> 1509 bytes .../main/res/drawable-xhdpi/floating_m.png | Bin 0 -> 2640 bytes .../res/drawable-xhdpi/floating_message.png | Bin 0 -> 1090 bytes .../res/drawable-xhdpi/floating_pencil.png | Bin 0 -> 1416 bytes .../res/drawable-xhdpi/floating_pressed.png | Bin 5365 -> 4719 bytes .../res/drawable-xhdpi/ic_arrow_drop_down.png | Bin 0 -> 1050 bytes .../main/res/drawable-xhdpi/ic_directory.png | Bin 284 -> 1984 bytes .../drawable-xhdpi/ic_external_storage.png | Bin 456 -> 1895 bytes .../main/res/drawable-xhdpi/ic_storage.png | Bin 200 -> 1789 bytes .../res/drawable-xhdpi/ic_storage_gallery.png | Bin 0 -> 2193 bytes .../res/drawable-xhdpi/media_doc_blue.png | Bin 0 -> 1465 bytes .../res/drawable-xhdpi/media_doc_green.png | Bin 0 -> 1457 bytes .../res/drawable-xhdpi/media_doc_load.png | Bin 0 -> 1044 bytes .../res/drawable-xhdpi/media_doc_pause.png | Bin 0 -> 950 bytes .../main/res/drawable-xhdpi/media_doc_red.png | Bin 0 -> 1471 bytes .../res/drawable-xhdpi/media_doc_yellow.png | Bin 0 -> 1460 bytes .../src/main/res/drawable-xhdpi/mute_blue.png | Bin 0 -> 1477 bytes .../src/main/res/drawable-xhdpi/mute_grey.png | Bin 0 -> 1480 bytes .../main/res/drawable-xhdpi/photo_crop.png | Bin 0 -> 1093 bytes .../main/res/drawable-xhdpi/photo_edit.png | Bin 0 -> 1200 bytes .../main/res/drawable-xhdpi/photo_filters.png | Bin 0 -> 1701 bytes .../drawable-xhdpi/photo_filters_active.png | Bin 0 -> 1830 bytes .../main/res/drawable-xhdpi/photo_rotate.png | Bin 0 -> 1505 bytes .../main/res/drawable-xhdpi/photo_sizes.png | Bin 0 -> 1118 bytes .../main/res/drawable-xhdpi/photo_tune.png | Bin 0 -> 999 bytes .../res/drawable-xhdpi/photo_tune_active.png | Bin 0 -> 1032 bytes .../src/main/res/drawable-xhdpi/tip1.png | Bin 0 -> 21309 bytes .../src/main/res/drawable-xhdpi/tip2.png | Bin 0 -> 19703 bytes .../src/main/res/drawable-xxhdpi/floating.png | Bin 7587 -> 7052 bytes .../res/drawable-xxhdpi/floating3_profile.png | Bin 7546 -> 7380 bytes .../drawable-xxhdpi/floating3_profile_m.png | Bin 0 -> 3631 bytes .../floating3_profile_pressed.png | Bin 7408 -> 7244 bytes .../res/drawable-xxhdpi/floating4_profile.png | Bin 8622 -> 0 bytes .../floating4_profile_pressed.png | Bin 8495 -> 0 bytes .../res/drawable-xxhdpi/floating_camera.png | Bin 0 -> 1861 bytes .../main/res/drawable-xxhdpi/floating_m.png | Bin 0 -> 3641 bytes .../res/drawable-xxhdpi/floating_message.png | Bin 0 -> 1190 bytes .../res/drawable-xxhdpi/floating_pencil.png | Bin 0 -> 1475 bytes .../res/drawable-xxhdpi/floating_pressed.png | Bin 7612 -> 7047 bytes .../drawable-xxhdpi/ic_arrow_drop_down.png | Bin 0 -> 1131 bytes .../main/res/drawable-xxhdpi/ic_directory.png | Bin 356 -> 2516 bytes .../drawable-xxhdpi/ic_external_storage.png | Bin 620 -> 2597 bytes .../main/res/drawable-xxhdpi/ic_storage.png | Bin 226 -> 2247 bytes .../drawable-xxhdpi/ic_storage_gallery.png | Bin 0 -> 2935 bytes .../res/drawable-xxhdpi/media_doc_blue.png | Bin 0 -> 1392 bytes .../res/drawable-xxhdpi/media_doc_green.png | Bin 0 -> 1389 bytes .../res/drawable-xxhdpi/media_doc_load.png | Bin 0 -> 1161 bytes .../res/drawable-xxhdpi/media_doc_pause.png | Bin 0 -> 975 bytes .../res/drawable-xxhdpi/media_doc_red.png | Bin 0 -> 1410 bytes .../res/drawable-xxhdpi/media_doc_yellow.png | Bin 0 -> 1393 bytes .../main/res/drawable-xxhdpi/mute_blue.png | Bin 0 -> 1253 bytes .../main/res/drawable-xxhdpi/mute_grey.png | Bin 0 -> 1247 bytes .../main/res/drawable-xxhdpi/photo_crop.png | Bin 0 -> 1175 bytes .../main/res/drawable-xxhdpi/photo_edit.png | Bin 0 -> 1362 bytes .../drawable-xxhdpi/photo_editor_contrast.png | Bin 0 -> 2358 bytes .../drawable-xxhdpi/photo_editor_exposure.png | Bin 0 -> 2300 bytes .../drawable-xxhdpi/photo_editor_grain.png | Bin 0 -> 2648 bytes .../photo_editor_highlights.png | Bin 0 -> 2889 bytes .../photo_editor_saturation.png | Bin 0 -> 2738 bytes .../drawable-xxhdpi/photo_editor_shadows.png | Bin 0 -> 2618 bytes .../drawable-xxhdpi/photo_editor_sharpen.png | Bin 0 -> 2162 bytes .../drawable-xxhdpi/photo_editor_vignette.png | Bin 0 -> 2784 bytes .../drawable-xxhdpi/photo_editor_warmth.png | Bin 0 -> 3258 bytes .../res/drawable-xxhdpi/photo_filters.png | Bin 0 -> 1870 bytes .../drawable-xxhdpi/photo_filters_active.png | Bin 0 -> 2011 bytes .../main/res/drawable-xxhdpi/photo_rotate.png | Bin 0 -> 1825 bytes .../main/res/drawable-xxhdpi/photo_sizes.png | Bin 0 -> 1203 bytes .../main/res/drawable-xxhdpi/photo_tune.png | Bin 0 -> 1021 bytes .../res/drawable-xxhdpi/photo_tune_active.png | Bin 0 -> 1076 bytes .../src/main/res/drawable-xxhdpi/tip1.png | Bin 0 -> 42494 bytes .../src/main/res/drawable-xxhdpi/tip2.png | Bin 0 -> 20814 bytes .../res/drawable/floating_group_states.xml | 15 - .../src/main/res/drawable/mute_fixed.xml | 9 + .../src/main/res/layout/intro_layout.xml | 2 +- .../src/main/res/layout/media_layout.xml | 46 - .../src/main/res/layout/messages_list.xml | 3 +- .../src/main/res/values-ar/strings.xml | 27 +- .../src/main/res/values-de/strings.xml | 25 +- .../src/main/res/values-es/strings.xml | 25 +- .../src/main/res/values-it/strings.xml | 23 +- .../src/main/res/values-ko/strings.xml | 33 +- .../src/main/res/values-nl/strings.xml | 21 +- .../src/main/res/values-pt-rBR/strings.xml | 63 +- .../src/main/res/values-pt-rPT/strings.xml | 63 +- TMessagesProj/src/main/res/values/strings.xml | 27 +- 227 files changed, 10202 insertions(+), 3920 deletions(-) create mode 100644 TMessagesProj/src/main/java/org/telegram/android/NotificationDelay.java delete mode 100644 TMessagesProj/src/main/java/org/telegram/android/PhotoObject.java create mode 100644 TMessagesProj/src/main/java/org/telegram/android/query/SharedMediaQuery.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Cells/PhotoEditToolCell.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedDocumentCell.java delete mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Cells/TextDetailDocumentsCell.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/PhotoEditorActivity.java create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/floating3_profile_m.png delete mode 100755 TMessagesProj/src/main/res/drawable-hdpi/floating4_profile.png delete mode 100755 TMessagesProj/src/main/res/drawable-hdpi/floating4_profile_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/floating_camera.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/floating_m.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/floating_message.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/floating_pencil.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/ic_arrow_drop_down.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/ic_storage_gallery.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/media_doc_blue.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/media_doc_green.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/media_doc_load.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/media_doc_pause.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/media_doc_red.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/media_doc_yellow.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/mute_blue.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/mute_grey.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photo_crop.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photo_edit.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photo_filters.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photo_filters_active.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photo_rotate.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photo_sizes.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photo_tune.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photo_tune_active.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/tip1.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/tip2.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/floating3_profile_m.png delete mode 100755 TMessagesProj/src/main/res/drawable-mdpi/floating4_profile.png delete mode 100755 TMessagesProj/src/main/res/drawable-mdpi/floating4_profile_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/floating_camera.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/floating_m.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/floating_message.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/floating_pencil.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/ic_arrow_drop_down.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/ic_storage_gallery.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/media_doc_blue.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/media_doc_green.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/media_doc_load.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/media_doc_pause.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/media_doc_red.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/media_doc_yellow.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/mute_blue.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/mute_grey.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photo_crop.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photo_edit.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photo_filters.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photo_filters_active.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photo_rotate.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photo_sizes.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photo_tune.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photo_tune_active.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/tip1.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/tip2.png create mode 100644 TMessagesProj/src/main/res/drawable-v21/floating_states.xml create mode 100644 TMessagesProj/src/main/res/drawable-v21/floating_user_states.xml create mode 100644 TMessagesProj/src/main/res/drawable-v21/regbtn_states.xml create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/floating3_profile_m.png delete mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/floating4_profile.png delete mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/floating4_profile_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/floating_camera.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/floating_m.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/floating_message.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/floating_pencil.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/ic_arrow_drop_down.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/ic_storage_gallery.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/media_doc_blue.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/media_doc_green.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/media_doc_load.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/media_doc_pause.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/media_doc_red.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/media_doc_yellow.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/mute_blue.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/mute_grey.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photo_crop.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photo_edit.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photo_filters.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photo_filters_active.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photo_rotate.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photo_sizes.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photo_tune.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photo_tune_active.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/tip1.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/tip2.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/floating3_profile_m.png delete mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/floating4_profile.png delete mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/floating4_profile_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/floating_camera.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/floating_m.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/floating_message.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/floating_pencil.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/ic_arrow_drop_down.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/ic_storage_gallery.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_blue.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_green.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_load.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_pause.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_red.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_yellow.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/mute_blue.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/mute_grey.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_crop.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_edit.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_contrast.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_exposure.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_grain.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_highlights.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_saturation.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_shadows.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_sharpen.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_vignette.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_warmth.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_filters.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_filters_active.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_rotate.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_sizes.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_tune.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photo_tune_active.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/tip1.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/tip2.png delete mode 100644 TMessagesProj/src/main/res/drawable/floating_group_states.xml create mode 100644 TMessagesProj/src/main/res/drawable/mute_fixed.xml delete mode 100644 TMessagesProj/src/main/res/layout/media_layout.xml diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 451bba39d..5fbedf976 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -82,7 +82,7 @@ android { defaultConfig { minSdkVersion 8 targetSdkVersion 21 - versionCode 416 - versionName "2.3.3" + versionCode 423 + versionName "2.4.0" } } diff --git a/TMessagesProj/jni/sqlite/sqlite3.c b/TMessagesProj/jni/sqlite/sqlite3.c index 81e9c733c..cae0c4ad2 100644 --- a/TMessagesProj/jni/sqlite/sqlite3.c +++ b/TMessagesProj/jni/sqlite/sqlite3.c @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.8.7.4. By combining all the individual C code files into this +** version 3.8.8.1. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -43,6 +43,53 @@ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ +/* +** Include the header file used to customize the compiler options for MSVC. +** This should be done first so that it can successfully prevent spurious +** compiler warnings due to subsequent content in this file and other files +** that are included by this file. +*/ +/************** Include msvc.h in the middle of sqliteInt.h ******************/ +/************** Begin file msvc.h ********************************************/ +/* +** 2015 January 12 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file contains code that is specific to MSVC. +*/ +#ifndef _MSVC_H_ +#define _MSVC_H_ + +#if defined(_MSC_VER) +#pragma warning(disable : 4054) +#pragma warning(disable : 4055) +#pragma warning(disable : 4100) +#pragma warning(disable : 4127) +#pragma warning(disable : 4152) +#pragma warning(disable : 4189) +#pragma warning(disable : 4206) +#pragma warning(disable : 4210) +#pragma warning(disable : 4232) +#pragma warning(disable : 4244) +#pragma warning(disable : 4305) +#pragma warning(disable : 4306) +#pragma warning(disable : 4702) +#pragma warning(disable : 4706) +#endif /* defined(_MSC_VER) */ + +#endif /* _MSVC_H_ */ + +/************** End of msvc.h ************************************************/ +/************** Continuing where we left off in sqliteInt.h ******************/ + /* ** These #defines should enable >2GB file support on POSIX if the ** underlying operating system supports it. If the OS lacks @@ -181,7 +228,7 @@ extern "C" { /* ** These no-op macros are used in front of interfaces to mark those ** interfaces as either deprecated or experimental. New applications -** should not use deprecated interfaces - they are support for backwards +** should not use deprecated interfaces - they are supported for backwards ** compatibility only. Application writers should be aware that ** experimental interfaces are subject to change in point releases. ** @@ -231,9 +278,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.8.7.4" -#define SQLITE_VERSION_NUMBER 3008007 -#define SQLITE_SOURCE_ID "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e" +#define SQLITE_VERSION "3.8.8.1" +#define SQLITE_VERSION_NUMBER 3008008 +#define SQLITE_SOURCE_ID "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -325,7 +372,7 @@ SQLITE_API const char *sqlite3_compileoption_get(int N); ** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but ** can be fully or partially disabled using a call to [sqlite3_config()] ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD], -** or [SQLITE_CONFIG_MUTEX]. ^(The return value of the +** or [SQLITE_CONFIG_SERIALIZED]. ^(The return value of the ** sqlite3_threadsafe() function shows only the compile-time setting of ** thread safety, not any run-time changes to that setting made by ** sqlite3_config(). In other words, the return value from sqlite3_threadsafe() @@ -1345,7 +1392,7 @@ struct sqlite3_vfs { ** ** ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as -** was given no the corresponding lock. +** was given on the corresponding lock. ** ** The xShmLock method can transition between unlocked and SHARED or ** between unlocked and EXCLUSIVE. It cannot transition between SHARED @@ -1628,26 +1675,28 @@ struct sqlite3_mem_methods { ** SQLITE_CONFIG_SERIALIZED configuration option. ** ** [[SQLITE_CONFIG_MALLOC]]
SQLITE_CONFIG_MALLOC
-**
^(This option takes a single argument which is a pointer to an -** instance of the [sqlite3_mem_methods] structure. The argument specifies +**
^(The SQLITE_CONFIG_MALLOC option takes a single argument which is +** a pointer to an instance of the [sqlite3_mem_methods] structure. +** The argument specifies ** alternative low-level memory allocation routines to be used in place of ** the memory allocation routines built into SQLite.)^ ^SQLite makes ** its own private copy of the content of the [sqlite3_mem_methods] structure ** before the [sqlite3_config()] call returns.
** ** [[SQLITE_CONFIG_GETMALLOC]]
SQLITE_CONFIG_GETMALLOC
-**
^(This option takes a single argument which is a pointer to an -** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods] +**
^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which +** is a pointer to an instance of the [sqlite3_mem_methods] structure. +** The [sqlite3_mem_methods] ** structure is filled with the currently defined memory allocation routines.)^ ** This option can be used to overload the default memory allocation ** routines with a wrapper that simulations memory allocation failure or ** tracks memory usage, for example.
** ** [[SQLITE_CONFIG_MEMSTATUS]]
SQLITE_CONFIG_MEMSTATUS
-**
^This option takes single argument of type int, interpreted as a -** boolean, which enables or disables the collection of memory allocation -** statistics. ^(When memory allocation statistics are disabled, the -** following SQLite interfaces become non-operational: +**
^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int, +** interpreted as a boolean, which enables or disables the collection of +** memory allocation statistics. ^(When memory allocation statistics are +** disabled, the following SQLite interfaces become non-operational: **
** ** [[SQLITE_CONFIG_SCRATCH]]
SQLITE_CONFIG_SCRATCH
-**
^This option specifies a static memory buffer that SQLite can use for -** scratch memory. There are three arguments: A pointer an 8-byte +**
^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer +** that SQLite can use for scratch memory. ^(There are three arguments +** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte ** aligned memory buffer from which the scratch allocations will be ** drawn, the size of each scratch allocation (sz), -** and the maximum number of scratch allocations (N). The sz -** argument must be a multiple of 16. +** and the maximum number of scratch allocations (N).)^ ** The first argument must be a pointer to an 8-byte aligned buffer ** of at least sz*N bytes of memory. -** ^SQLite will use no more than two scratch buffers per thread. So -** N should be set to twice the expected maximum number of threads. -** ^SQLite will never require a scratch buffer that is more than 6 -** times the database page size. ^If SQLite needs needs additional +** ^SQLite will not use more than one scratch buffers per thread. +** ^SQLite will never request a scratch buffer that is more than 6 +** times the database page size. +** ^If SQLite needs needs additional ** scratch memory beyond what is provided by this configuration option, then -** [sqlite3_malloc()] will be used to obtain the memory needed.
+** [sqlite3_malloc()] will be used to obtain the memory needed.

+** ^When the application provides any amount of scratch memory using +** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large +** [sqlite3_malloc|heap allocations]. +** This can help [Robson proof|prevent memory allocation failures] due to heap +** fragmentation in low-memory embedded systems. +** ** ** [[SQLITE_CONFIG_PAGECACHE]]

SQLITE_CONFIG_PAGECACHE
-**
^This option specifies a static memory buffer that SQLite can use for -** the database page cache with the default page cache implementation. +**
^The SQLITE_CONFIG_PAGECACHE option specifies a static memory buffer +** that SQLite can use for the database page cache with the default page +** cache implementation. ** This configuration should not be used if an application-define page -** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option. -** There are three arguments to this option: A pointer to 8-byte aligned +** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2] +** configuration option. +** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to +** 8-byte aligned ** memory, the size of each page buffer (sz), and the number of pages (N). ** The sz argument should be the size of the largest database page -** (a power of two between 512 and 32768) plus a little extra for each -** page header. ^The page header size is 20 to 40 bytes depending on -** the host architecture. ^It is harmless, apart from the wasted memory, -** to make sz a little too large. The first -** argument should point to an allocation of at least sz*N bytes of memory. +** (a power of two between 512 and 65536) plus some extra bytes for each +** page header. ^The number of extra bytes needed by the page header +** can be determined using the [SQLITE_CONFIG_PCACHE_HDRSZ] option +** to [sqlite3_config()]. +** ^It is harmless, apart from the wasted memory, +** for the sz parameter to be larger than necessary. The first +** argument should pointer to an 8-byte aligned block of memory that +** is at least sz*N bytes of memory, otherwise subsequent behavior is +** undefined. ** ^SQLite will use the memory provided by the first argument to satisfy its ** memory needs for the first N pages that it adds to cache. ^If additional ** page cache memory is needed beyond what is provided by this option, then -** SQLite goes to [sqlite3_malloc()] for the additional storage space. -** The pointer in the first argument must -** be aligned to an 8-byte boundary or subsequent behavior of SQLite -** will be undefined.
+** SQLite goes to [sqlite3_malloc()] for the additional storage space. ** ** [[SQLITE_CONFIG_HEAP]]
SQLITE_CONFIG_HEAP
-**
^This option specifies a static memory buffer that SQLite will use -** for all of its dynamic memory allocation needs beyond those provided -** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE]. -** There are three arguments: An 8-byte aligned pointer to the memory, +**
^The SQLITE_CONFIG_HEAP option specifies a static memory buffer +** that SQLite will use for all of its dynamic memory allocation needs +** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and +** [SQLITE_CONFIG_PAGECACHE]. +** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled +** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns +** [SQLITE_ERROR] if invoked otherwise. +** ^There are three arguments to SQLITE_CONFIG_HEAP: +** An 8-byte aligned pointer to the memory, ** the number of bytes in the memory buffer, and the minimum allocation size. ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts ** to using its default memory allocator (the system malloc() implementation), ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the -** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or -** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory +** memory pointer is not NULL then the alternative memory ** allocator is engaged to handle all of SQLites memory allocation needs. ** The first pointer (the memory pointer) must be aligned to an 8-byte ** boundary or subsequent behavior of SQLite will be undefined. @@ -1714,11 +1777,11 @@ struct sqlite3_mem_methods { ** for the minimum allocation size are 2**5 through 2**8.
** ** [[SQLITE_CONFIG_MUTEX]]
SQLITE_CONFIG_MUTEX
-**
^(This option takes a single argument which is a pointer to an -** instance of the [sqlite3_mutex_methods] structure. The argument specifies -** alternative low-level mutex routines to be used in place -** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the -** content of the [sqlite3_mutex_methods] structure before the call to +**
^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a +** pointer to an instance of the [sqlite3_mutex_methods] structure. +** The argument specifies alternative low-level mutex routines to be used +** in place the mutex routines built into SQLite.)^ ^SQLite makes a copy of +** the content of the [sqlite3_mutex_methods] structure before the call to ** [sqlite3_config()] returns. ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then ** the entire mutexing subsystem is omitted from the build and hence calls to @@ -1726,8 +1789,8 @@ struct sqlite3_mem_methods { ** return [SQLITE_ERROR].
** ** [[SQLITE_CONFIG_GETMUTEX]]
SQLITE_CONFIG_GETMUTEX
-**
^(This option takes a single argument which is a pointer to an -** instance of the [sqlite3_mutex_methods] structure. The +**
^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which +** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The ** [sqlite3_mutex_methods] ** structure is filled with the currently defined mutex routines.)^ ** This option can be used to overload the default mutex allocation @@ -1739,25 +1802,25 @@ struct sqlite3_mem_methods { ** return [SQLITE_ERROR].
** ** [[SQLITE_CONFIG_LOOKASIDE]]
SQLITE_CONFIG_LOOKASIDE
-**
^(This option takes two arguments that determine the default -** memory allocation for the lookaside memory allocator on each -** [database connection]. The first argument is the +**
^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine +** the default size of lookaside memory on each [database connection]. +** The first argument is the ** size of each lookaside buffer slot and the second is the number of -** slots allocated to each database connection.)^ ^(This option sets the -** default lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE] -** verb to [sqlite3_db_config()] can be used to change the lookaside +** slots allocated to each database connection.)^ ^(SQLITE_CONFIG_LOOKASIDE +** sets the default lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE] +** option to [sqlite3_db_config()] can be used to change the lookaside ** configuration on individual connections.)^
** ** [[SQLITE_CONFIG_PCACHE2]]
SQLITE_CONFIG_PCACHE2
-**
^(This option takes a single argument which is a pointer to -** an [sqlite3_pcache_methods2] object. This object specifies the interface -** to a custom page cache implementation.)^ ^SQLite makes a copy of the -** object and uses it for page cache memory allocations.
+**
^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is +** a pointer to an [sqlite3_pcache_methods2] object. This object specifies +** the interface to a custom page cache implementation.)^ +** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.
** ** [[SQLITE_CONFIG_GETPCACHE2]]
SQLITE_CONFIG_GETPCACHE2
-**
^(This option takes a single argument which is a pointer to an -** [sqlite3_pcache_methods2] object. SQLite copies of the current -** page cache implementation into that object.)^
+**
^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which +** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of +** the current page cache implementation into that object.)^
** ** [[SQLITE_CONFIG_LOG]]
SQLITE_CONFIG_LOG
**
The SQLITE_CONFIG_LOG option is used to configure the SQLite @@ -1780,10 +1843,11 @@ struct sqlite3_mem_methods { ** function must be threadsafe.
** ** [[SQLITE_CONFIG_URI]]
SQLITE_CONFIG_URI -**
^(This option takes a single argument of type int. If non-zero, then -** URI handling is globally enabled. If the parameter is zero, then URI handling -** is globally disabled.)^ ^If URI handling is globally enabled, all filenames -** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or +**
^(The SQLITE_CONFIG_URI option takes a single argument of type int. +** If non-zero, then URI handling is globally enabled. If the parameter is zero, +** then URI handling is globally disabled.)^ ^If URI handling is globally +** enabled, all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], +** [sqlite3_open16()] or ** specified as part of [ATTACH] commands are interpreted as URIs, regardless ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database ** connection is opened. ^If it is globally disabled, filenames are @@ -1793,9 +1857,10 @@ struct sqlite3_mem_methods { ** [SQLITE_USE_URI] symbol defined.)^ ** ** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]]
SQLITE_CONFIG_COVERING_INDEX_SCAN -**
^This option takes a single integer argument which is interpreted as -** a boolean in order to enable or disable the use of covering indices for -** full table scans in the query optimizer. ^The default setting is determined +**
^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer +** argument which is interpreted as a boolean in order to enable or disable +** the use of covering indices for full table scans in the query optimizer. +** ^The default setting is determined ** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on" ** if that compile-time option is omitted. ** The ability to disable the use of covering indices for full table scans @@ -1835,19 +1900,39 @@ struct sqlite3_mem_methods { ** ^The default setting can be overridden by each database connection using ** either the [PRAGMA mmap_size] command, or by using the ** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size -** cannot be changed at run-time. Nor may the maximum allowed mmap size -** exceed the compile-time maximum mmap size set by the +** will be silently truncated if necessary so that it does not exceed the +** compile-time maximum mmap size set by the ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^ ** ^If either argument to this option is negative, then that argument is ** changed to its compile-time default. ** ** [[SQLITE_CONFIG_WIN32_HEAPSIZE]] **
SQLITE_CONFIG_WIN32_HEAPSIZE -**
^This option is only available if SQLite is compiled for Windows -** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined. -** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value +**
^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is +** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro +** defined. ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value ** that specifies the maximum size of the created heap. ** +** +** [[SQLITE_CONFIG_PCACHE_HDRSZ]] +**
SQLITE_CONFIG_PCACHE_HDRSZ +**
^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which +** is a pointer to an integer and writes into that integer the number of extra +** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. +** The amount of extra space required can change depending on the compiler, +** target platform, and SQLite version. +** +** [[SQLITE_CONFIG_PMASZ]] +**
SQLITE_CONFIG_PMASZ +**
^The SQLITE_CONFIG_PMASZ option takes a single parameter which +** is an unsigned integer and sets the "Minimum PMA Size" for the multithreaded +** sorter to that integer. The default minimum PMA Size is set by the +** [SQLITE_SORTER_PMASZ] compile-time option. New threads are launched +** to help with sort operations when multithreaded sorting +** is enabled (using the [PRAGMA threads] command) and the amount of content +** to be sorted exceeds the page size times the minimum of the +** [PRAGMA cache_size] setting and this value. +** */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ @@ -1872,6 +1957,8 @@ struct sqlite3_mem_methods { #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ +#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */ +#define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */ /* ** CAPI3REF: Database Connection Configuration Options @@ -1999,47 +2086,45 @@ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); /* ** CAPI3REF: Count The Number Of Rows Modified ** -** ^This function returns the number of database rows that were changed -** or inserted or deleted by the most recently completed SQL statement -** on the [database connection] specified by the first parameter. -** ^(Only changes that are directly specified by the [INSERT], [UPDATE], -** or [DELETE] statement are counted. Auxiliary changes caused by -** triggers or [foreign key actions] are not counted.)^ Use the -** [sqlite3_total_changes()] function to find the total number of changes -** including changes caused by triggers and foreign key actions. +** ^This function returns the number of rows modified, inserted or +** deleted by the most recently completed INSERT, UPDATE or DELETE +** statement on the database connection specified by the only parameter. +** ^Executing any other type of SQL statement does not modify the value +** returned by this function. ** -** ^Changes to a view that are simulated by an [INSTEAD OF trigger] -** are not counted. Only real table changes are counted. +** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are +** considered - auxiliary changes caused by [CREATE TRIGGER | triggers], +** [foreign key actions] or [REPLACE] constraint resolution are not counted. +** +** Changes to a view that are intercepted by +** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value +** returned by sqlite3_changes() immediately after an INSERT, UPDATE or +** DELETE statement run on a view is always zero. Only changes made to real +** tables are counted. ** -** ^(A "row change" is a change to a single row of a single table -** caused by an INSERT, DELETE, or UPDATE statement. Rows that -** are changed as side effects of [REPLACE] constraint resolution, -** rollback, ABORT processing, [DROP TABLE], or by any other -** mechanisms do not count as direct row changes.)^ -** -** A "trigger context" is a scope of execution that begins and -** ends with the script of a [CREATE TRIGGER | trigger]. -** Most SQL statements are -** evaluated outside of any trigger. This is the "top level" -** trigger context. If a trigger fires from the top level, a -** new trigger context is entered for the duration of that one -** trigger. Subtriggers create subcontexts for their duration. -** -** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does -** not create a new trigger context. -** -** ^This function returns the number of direct row changes in the -** most recent INSERT, UPDATE, or DELETE statement within the same -** trigger context. -** -** ^Thus, when called from the top level, this function returns the -** number of changes in the most recent INSERT, UPDATE, or DELETE -** that also occurred at the top level. ^(Within the body of a trigger, -** the sqlite3_changes() interface can be called to find the number of -** changes in the most recently completed INSERT, UPDATE, or DELETE -** statement within the body of the same trigger. -** However, the number returned does not include changes -** caused by subtriggers since those have their own context.)^ +** Things are more complicated if the sqlite3_changes() function is +** executed while a trigger program is running. This may happen if the +** program uses the [changes() SQL function], or if some other callback +** function invokes sqlite3_changes() directly. Essentially: +** +** +** +** ^This means that if the changes() SQL function (or similar) is used +** by the first INSERT, UPDATE or DELETE statement within a trigger, it +** returns the value as set when the calling statement began executing. +** ^If it is used by the second or subsequent such statement within a trigger +** program, the value returned reflects the number of rows modified by the +** previous INSERT, UPDATE or DELETE statement within the same trigger. ** ** See also the [sqlite3_total_changes()] interface, the ** [count_changes pragma], and the [changes() SQL function]. @@ -2053,20 +2138,17 @@ SQLITE_API int sqlite3_changes(sqlite3*); /* ** CAPI3REF: Total Number Of Rows Modified ** -** ^This function returns the number of row changes caused by [INSERT], -** [UPDATE] or [DELETE] statements since the [database connection] was opened. -** ^(The count returned by sqlite3_total_changes() includes all changes -** from all [CREATE TRIGGER | trigger] contexts and changes made by -** [foreign key actions]. However, -** the count does not include changes used to implement [REPLACE] constraints, -** do rollbacks or ABORT processing, or [DROP TABLE] processing. The -** count does not include rows of views that fire an [INSTEAD OF trigger], -** though if the INSTEAD OF trigger makes changes of its own, those changes -** are counted.)^ -** ^The sqlite3_total_changes() function counts the changes as soon as -** the statement that makes them is completed (when the statement handle -** is passed to [sqlite3_reset()] or [sqlite3_finalize()]). -** +** ^This function returns the total number of rows inserted, modified or +** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed +** since the database connection was opened, including those executed as +** part of trigger programs. ^Executing any other type of SQL statement +** does not affect the value returned by sqlite3_total_changes(). +** +** ^Changes made as part of [foreign key actions] are included in the +** count, but those made as part of REPLACE constraint resolution are +** not. ^Changes to a view that are intercepted by INSTEAD OF triggers +** are not counted. +** ** See also the [sqlite3_changes()] interface, the ** [count_changes pragma], and the [total_changes() SQL function]. ** @@ -2153,6 +2235,7 @@ SQLITE_API int sqlite3_complete16(const void *sql); /* ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors +** KEYWORDS: {busy-handler callback} {busy handler} ** ** ^The sqlite3_busy_handler(D,X,P) routine sets a callback function X ** that might be invoked with argument P whenever @@ -2169,7 +2252,7 @@ SQLITE_API int sqlite3_complete16(const void *sql); ** ^The first argument to the busy handler is a copy of the void* pointer which ** is the third argument to sqlite3_busy_handler(). ^The second argument to ** the busy handler callback is the number of times that the busy handler has -** been invoked for the same locking event. ^If the +** been invoked previously for the same locking event. ^If the ** busy callback returns 0, then no additional attempts are made to ** access the database and [SQLITE_BUSY] is returned ** to the application. @@ -2544,13 +2627,14 @@ SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag); ** applications to access the same PRNG for other purposes. ** ** ^A call to this routine stores N bytes of randomness into buffer P. -** ^If N is less than one, then P can be a NULL pointer. +** ^The P parameter can be a NULL pointer. ** ** ^If this routine has not been previously called or if the previous -** call had N less than one, then the PRNG is seeded using randomness -** obtained from the xRandomness method of the default [sqlite3_vfs] object. -** ^If the previous call to this routine had an N of 1 or more then -** the pseudo-randomness is generated +** call had N less than one or a NULL pointer for P, then the PRNG is +** seeded using randomness obtained from the xRandomness method of +** the default [sqlite3_vfs] object. +** ^If the previous call to this routine had an N of 1 or more and a +** non-NULL P then the pseudo-randomness is generated ** internally and without recourse to the [sqlite3_vfs] xRandomness ** method. */ @@ -4272,9 +4356,9 @@ SQLITE_API int sqlite3_create_function_v2( ** These constant define integer codes that represent the various ** text encodings supported by SQLite. */ -#define SQLITE_UTF8 1 -#define SQLITE_UTF16LE 2 -#define SQLITE_UTF16BE 3 +#define SQLITE_UTF8 1 /* IMP: R-37514-35566 */ +#define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */ +#define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */ #define SQLITE_UTF16 4 /* Use native byte order */ #define SQLITE_ANY 5 /* Deprecated */ #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */ @@ -4623,7 +4707,8 @@ typedef void (*sqlite3_destructor_type)(void*); ** the [sqlite3_context] pointer, the results are undefined. */ SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); -SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*,sqlite3_uint64,void(*)(void*)); +SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*, + sqlite3_uint64,void(*)(void*)); SQLITE_API void sqlite3_result_double(sqlite3_context*, double); SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int); SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int); @@ -5255,20 +5340,27 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); /* ** CAPI3REF: Extract Metadata About A Column Of A Table ** -** ^This routine returns metadata about a specific column of a specific -** database table accessible using the [database connection] handle -** passed as the first function argument. +** ^(The sqlite3_table_column_metadata(X,D,T,C,....) routine returns +** information about column C of table T in database D +** on [database connection] X.)^ ^The sqlite3_table_column_metadata() +** interface returns SQLITE_OK and fills in the non-NULL pointers in +** the final five arguments with appropriate values if the specified +** column exists. ^The sqlite3_table_column_metadata() interface returns +** SQLITE_ERROR and if the specified column does not exist. +** ^If the column-name parameter to sqlite3_table_column_metadata() is a +** NULL pointer, then this routine simply checks for the existance of the +** table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it +** does not. ** ** ^The column is identified by the second, third and fourth parameters to -** this function. ^The second parameter is either the name of the database +** this function. ^(The second parameter is either the name of the database ** (i.e. "main", "temp", or an attached database) containing the specified -** table or NULL. ^If it is NULL, then all attached databases are searched +** table or NULL.)^ ^If it is NULL, then all attached databases are searched ** for the table using the same algorithm used by the database engine to ** resolve unqualified table references. ** ** ^The third and fourth parameters to this function are the table and column -** name of the desired column, respectively. Neither of these parameters -** may be NULL. +** name of the desired column, respectively. ** ** ^Metadata is returned by writing to the memory locations passed as the 5th ** and subsequent parameters to this function. ^Any of these arguments may be @@ -5287,16 +5379,17 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); ** )^ ** ** ^The memory pointed to by the character pointers returned for the -** declaration type and collation sequence is valid only until the next +** declaration type and collation sequence is valid until the next ** call to any SQLite API function. ** ** ^If the specified table is actually a view, an [error code] is returned. ** -** ^If the specified column is "rowid", "oid" or "_rowid_" and an +** ^If the specified column is "rowid", "oid" or "_rowid_" and the table +** is not a [WITHOUT ROWID] table and an ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output ** parameters are set for the explicitly declared column. ^(If there is no -** explicitly declared [INTEGER PRIMARY KEY] column, then the output -** parameters are set as follows: +** [INTEGER PRIMARY KEY] column, then the outputs +** for the [rowid] are set as follows: ** **
 **     data type: "INTEGER"
@@ -5306,13 +5399,9 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
 **     auto increment: 0
 ** 
)^ ** -** ^(This function may load one or more schemas from database files. If an -** error occurs during this process, or if the requested table or column -** cannot be found, an [error code] is returned and an error message left -** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^ -** -** ^This API is only available if the library was compiled with the -** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. +** ^This function causes all database schemas to be read from disk and +** parsed, if that has not already been done, and returns an error if +** any errors are encountered while loading the schema. */ SQLITE_API int sqlite3_table_column_metadata( sqlite3 *db, /* Connection handle */ @@ -5765,26 +5854,42 @@ typedef struct sqlite3_blob sqlite3_blob; ** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow; ** )^ ** +** ^(Parameter zDb is not the filename that contains the database, but +** rather the symbolic name of the database. For attached databases, this is +** the name that appears after the AS keyword in the [ATTACH] statement. +** For the main database file, the database name is "main". For TEMP +** tables, the database name is "temp".)^ +** ** ^If the flags parameter is non-zero, then the BLOB is opened for read -** and write access. ^If it is zero, the BLOB is opened for read access. -** ^It is not possible to open a column that is part of an index or primary -** key for writing. ^If [foreign key constraints] are enabled, it is -** not possible to open a column that is part of a [child key] for writing. +** and write access. ^If the flags parameter is zero, the BLOB is opened for +** read-only access. ** -** ^Note that the database name is not the filename that contains -** the database but rather the symbolic name of the database that -** appears after the AS keyword when the database is connected using [ATTACH]. -** ^For the main database file, the database name is "main". -** ^For TEMP tables, the database name is "temp". +** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored +** in *ppBlob. Otherwise an [error code] is returned and, unless the error +** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided +** the API is not misused, it is always safe to call [sqlite3_blob_close()] +** on *ppBlob after this function it returns. +** +** This function fails with SQLITE_ERROR if any of the following are true: +** +** +** ^Unless it returns SQLITE_MISUSE, this function sets the +** [database connection] error code and message accessible via +** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. ** -** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written -** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set -** to be a null pointer.)^ -** ^This function sets the [database connection] error code and message -** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related -** functions. ^Note that the *ppBlob variable is always initialized in a -** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob -** regardless of the success or failure of this routine. ** ** ^(If the row that a BLOB handle points to is modified by an ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects @@ -5802,13 +5907,9 @@ typedef struct sqlite3_blob sqlite3_blob; ** interface. Use the [UPDATE] SQL command to change the size of a ** blob. ** -** ^The [sqlite3_blob_open()] interface will fail for a [WITHOUT ROWID] -** table. Incremental BLOB I/O is not possible on [WITHOUT ROWID] tables. -** ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces -** and the built-in [zeroblob] SQL function can be used, if desired, -** to create an empty, zero-filled blob in which to read or write using -** this interface. +** and the built-in [zeroblob] SQL function may be used to create a +** zero-filled blob to read or write using the incremental-blob interface. ** ** To avoid a resource leak, every open [BLOB handle] should eventually ** be released by a call to [sqlite3_blob_close()]. @@ -5850,24 +5951,22 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_i /* ** CAPI3REF: Close A BLOB Handle ** -** ^Closes an open [BLOB handle]. +** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed +** unconditionally. Even if this routine returns an error code, the +** handle is still closed.)^ ** -** ^Closing a BLOB shall cause the current transaction to commit -** if there are no other BLOBs, no pending prepared statements, and the -** database connection is in [autocommit mode]. -** ^If any writes were made to the BLOB, they might be held in cache -** until the close operation if they will fit. +** ^If the blob handle being closed was opened for read-write access, and if +** the database is in auto-commit mode and there are no other open read-write +** blob handles or active write statements, the current transaction is +** committed. ^If an error occurs while committing the transaction, an error +** code is returned and the transaction rolled back. ** -** ^(Closing the BLOB often forces the changes -** out to disk and so if any I/O errors occur, they will likely occur -** at the time when the BLOB is closed. Any errors that occur during -** closing are reported as a non-zero return value.)^ -** -** ^(The BLOB is closed unconditionally. Even if this routine returns -** an error code, the BLOB is still closed.)^ -** -** ^Calling this routine with a null pointer (such as would be returned -** by a failed call to [sqlite3_blob_open()]) is a harmless no-op. +** Calling this function with an argument that is not a NULL pointer or an +** open blob handle results in undefined behaviour. ^Calling this routine +** with a null pointer (such as would be returned by a failed call to +** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function +** is passed a valid open blob handle, the values returned by the +** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning. */ SQLITE_API int sqlite3_blob_close(sqlite3_blob *); @@ -5917,21 +6016,27 @@ SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); /* ** CAPI3REF: Write Data Into A BLOB Incrementally ** -** ^This function is used to write data into an open [BLOB handle] from a -** caller-supplied buffer. ^N bytes of data are copied from the buffer Z -** into the open BLOB, starting at offset iOffset. +** ^(This function is used to write data into an open [BLOB handle] from a +** caller-supplied buffer. N bytes of data are copied from the buffer Z +** into the open BLOB, starting at offset iOffset.)^ +** +** ^(On success, sqlite3_blob_write() returns SQLITE_OK. +** Otherwise, an [error code] or an [extended error code] is returned.)^ +** ^Unless SQLITE_MISUSE is returned, this function sets the +** [database connection] error code and message accessible via +** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. ** ** ^If the [BLOB handle] passed as the first argument was not opened for ** writing (the flags parameter to [sqlite3_blob_open()] was zero), ** this function returns [SQLITE_READONLY]. ** -** ^This function may only modify the contents of the BLOB; it is +** This function may only modify the contents of the BLOB; it is ** not possible to increase the size of a BLOB using this API. ** ^If offset iOffset is less than N bytes from the end of the BLOB, -** [SQLITE_ERROR] is returned and no data is written. ^If N is -** less than zero [SQLITE_ERROR] is returned and no data is written. -** The size of the BLOB (and hence the maximum value of N+iOffset) -** can be determined using the [sqlite3_blob_bytes()] interface. +** [SQLITE_ERROR] is returned and no data is written. The size of the +** BLOB (and hence the maximum value of N+iOffset) can be determined +** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less +** than zero [SQLITE_ERROR] is returned and no data is written. ** ** ^An attempt to write to an expired [BLOB handle] fails with an ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred @@ -5940,9 +6045,6 @@ SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); ** have been overwritten by the statement that expired the BLOB handle ** or by other independent statements. ** -** ^(On success, sqlite3_blob_write() returns SQLITE_OK. -** Otherwise, an [error code] or an [extended error code] is returned.)^ -** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not ** been closed by [sqlite3_blob_close()]. Passing any other pointer in @@ -5995,34 +6097,34 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** ** The SQLite source code contains multiple implementations ** of these mutex routines. An appropriate implementation -** is selected automatically at compile-time. ^(The following +** is selected automatically at compile-time. The following ** implementations are available in the SQLite core: ** ** )^ +** ** -** ^The SQLITE_MUTEX_NOOP implementation is a set of routines +** The SQLITE_MUTEX_NOOP implementation is a set of routines ** that does no real locking and is appropriate for use in -** a single-threaded application. ^The SQLITE_MUTEX_PTHREADS and +** a single-threaded application. The SQLITE_MUTEX_PTHREADS and ** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix ** and Windows. ** -** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor +** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex ** implementation is included with the library. In this case the ** application must supply a custom mutex implementation using the ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function ** before calling sqlite3_initialize() or any other public sqlite3_ -** function that calls sqlite3_initialize().)^ +** function that calls sqlite3_initialize(). ** ** ^The sqlite3_mutex_alloc() routine allocates a new -** mutex and returns a pointer to it. ^If it returns NULL -** that means that a mutex could not be allocated. ^SQLite -** will unwind its stack and return an error. ^(The argument -** to sqlite3_mutex_alloc() is one of these integer constants: +** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc() +** routine returns NULL if it is unable to allocate the requested +** mutex. The argument to sqlite3_mutex_alloc() must one of these +** integer constants: ** ** )^ +**
  • SQLITE_MUTEX_STATIC_APP3 +** ** ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) ** cause sqlite3_mutex_alloc() to create @@ -6043,14 +6146,14 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** is used but not necessarily so when SQLITE_MUTEX_FAST is used. ** The mutex implementation does not need to make a distinction ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does -** not want to. ^SQLite will only request a recursive mutex in -** cases where it really needs one. ^If a faster non-recursive mutex +** not want to. SQLite will only request a recursive mutex in +** cases where it really needs one. If a faster non-recursive mutex ** implementation is available on the host platform, the mutex subsystem ** might return such a mutex in response to SQLITE_MUTEX_FAST. ** ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return -** a pointer to a static preexisting mutex. ^Six static mutexes are +** a pointer to a static preexisting mutex. ^Nine static mutexes are ** used by the current version of SQLite. Future versions of SQLite ** may add additional static mutexes. Static mutexes are for internal ** use by SQLite only. Applications that use SQLite mutexes should @@ -6059,16 +6162,13 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() -** returns a different mutex on every call. ^But for the static +** returns a different mutex on every call. ^For the static ** mutex types, the same mutex is returned on every call that has ** the same type number. ** ** ^The sqlite3_mutex_free() routine deallocates a previously -** allocated dynamic mutex. ^SQLite is careful to deallocate every -** dynamic mutex that it allocates. The dynamic mutexes must not be in -** use when they are deallocated. Attempting to deallocate a static -** mutex results in undefined behavior. ^SQLite never deallocates -** a static mutex. +** allocated dynamic mutex. Attempting to deallocate a static +** mutex results in undefined behavior. ** ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt ** to enter a mutex. ^If another thread is already within the mutex, @@ -6076,23 +6176,21 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK] ** upon successful entry. ^(Mutexes created using ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. -** In such cases the, +** In such cases, the ** mutex must be exited an equal number of times before another thread -** can enter.)^ ^(If the same thread tries to enter any other -** kind of mutex more than once, the behavior is undefined. -** SQLite will never exhibit -** such behavior in its own use of mutexes.)^ +** can enter.)^ If the same thread tries to enter any mutex other +** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined. ** ** ^(Some systems (for example, Windows 95) do not support the operation ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() -** will always return SQLITE_BUSY. The SQLite core only ever uses -** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^ +** will always return SQLITE_BUSY. The SQLite core only ever uses +** sqlite3_mutex_try() as an optimization so this is acceptable +** behavior.)^ ** ** ^The sqlite3_mutex_leave() routine exits a mutex that was -** previously entered by the same thread. ^(The behavior +** previously entered by the same thread. The behavior ** is undefined if the mutex is not currently entered by the -** calling thread or is not currently allocated. SQLite will -** never do either.)^ +** calling thread or is not currently allocated. ** ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or ** sqlite3_mutex_leave() is a NULL pointer, then all three routines @@ -6113,9 +6211,9 @@ SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); ** used to allocate and use mutexes. ** ** Usually, the default mutex implementations provided by SQLite are -** sufficient, however the user has the option of substituting a custom +** sufficient, however the application has the option of substituting a custom ** implementation for specialized deployments or systems for which SQLite -** does not provide a suitable implementation. In this case, the user +** does not provide a suitable implementation. In this case, the application ** creates and populates an instance of this structure to pass ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option. ** Additionally, an instance of this structure can be used as an @@ -6156,13 +6254,13 @@ SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); ** (i.e. it is acceptable to provide an implementation that segfaults if ** it is passed a NULL pointer). ** -** The xMutexInit() method must be threadsafe. ^It must be harmless to +** The xMutexInit() method must be threadsafe. It must be harmless to ** invoke xMutexInit() multiple times within the same process and without ** intervening calls to xMutexEnd(). Second and subsequent calls to ** xMutexInit() must be no-ops. ** -** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] -** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory +** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] +** and its associates). Similarly, xMutexAlloc() must not use SQLite memory ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite ** memory allocation for a fast or recursive mutex. ** @@ -6188,29 +6286,29 @@ struct sqlite3_mutex_methods { ** CAPI3REF: Mutex Verification Routines ** ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines -** are intended for use inside assert() statements. ^The SQLite core +** are intended for use inside assert() statements. The SQLite core ** never uses these routines except inside an assert() and applications -** are advised to follow the lead of the core. ^The SQLite core only +** are advised to follow the lead of the core. The SQLite core only ** provides implementations for these routines when it is compiled -** with the SQLITE_DEBUG flag. ^External mutex implementations +** with the SQLITE_DEBUG flag. External mutex implementations ** are only required to provide these routines if SQLITE_DEBUG is ** defined and if NDEBUG is not defined. ** -** ^These routines should return true if the mutex in their argument +** These routines should return true if the mutex in their argument ** is held or not held, respectively, by the calling thread. ** -** ^The implementation is not required to provide versions of these +** The implementation is not required to provide versions of these ** routines that actually work. If the implementation does not provide working ** versions of these routines, it should at least provide stubs that always ** return true so that one does not get spurious assertion failures. ** -** ^If the argument to sqlite3_mutex_held() is a NULL pointer then +** If the argument to sqlite3_mutex_held() is a NULL pointer then ** the routine should return 1. This seems counter-intuitive since ** clearly the mutex cannot be held if it does not exist. But ** the reason the mutex does not exist is because the build is not ** using mutexes. And we do not want the assert() containing the ** call to sqlite3_mutex_held() to fail, so a non-zero return is -** the appropriate thing to do. ^The sqlite3_mutex_notheld() +** the appropriate thing to do. The sqlite3_mutex_notheld() ** interface should also return 1 when given a NULL pointer. */ #ifndef NDEBUG @@ -6943,6 +7041,10 @@ typedef struct sqlite3_backup sqlite3_backup; ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with ** an error. ** +** ^A call to sqlite3_backup_init() will fail, returning SQLITE_ERROR, if +** there is already a read or read-write transaction open on the +** destination database. +** ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is ** returned and an error code and error message are stored in the ** destination [database connection] D. @@ -7266,12 +7368,10 @@ SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); ** CAPI3REF: Write-Ahead Log Commit Hook ** ** ^The [sqlite3_wal_hook()] function is used to register a callback that -** will be invoked each time a database connection commits data to a -** [write-ahead log] (i.e. whenever a transaction is committed in -** [journal_mode | journal_mode=WAL mode]). +** is invoked each time data is committed to a database in wal mode. ** -** ^The callback is invoked by SQLite after the commit has taken place and -** the associated write-lock on the database released, so the implementation +** ^(The callback is invoked by SQLite after the commit has taken place and +** the associated write-lock on the database released)^, so the implementation ** may read, write or [checkpoint] the database as required. ** ** ^The first parameter passed to the callback function when it is invoked @@ -7336,97 +7436,114 @@ SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); /* ** CAPI3REF: Checkpoint a database ** -** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X -** on [database connection] D to be [checkpointed]. ^If X is NULL or an -** empty string, then a checkpoint is run on all databases of -** connection D. ^If the database connection D is not in -** [WAL | write-ahead log mode] then this interface is a harmless no-op. -** ^The [sqlite3_wal_checkpoint(D,X)] interface initiates a -** [sqlite3_wal_checkpoint_v2|PASSIVE] checkpoint. -** Use the [sqlite3_wal_checkpoint_v2()] interface to get a FULL -** or RESET checkpoint. +** ^(The sqlite3_wal_checkpoint(D,X) is equivalent to +** [sqlite3_wal_checkpoint_v2](D,X,[SQLITE_CHECKPOINT_PASSIVE],0,0).)^ ** -** ^The [wal_checkpoint pragma] can be used to invoke this interface -** from SQL. ^The [sqlite3_wal_autocheckpoint()] interface and the -** [wal_autocheckpoint pragma] can be used to cause this interface to be -** run whenever the WAL reaches a certain size threshold. +** In brief, sqlite3_wal_checkpoint(D,X) causes the content in the +** [write-ahead log] for database X on [database connection] D to be +** transferred into the database file and for the write-ahead log to +** be reset. See the [checkpointing] documentation for addition +** information. ** -** See also: [sqlite3_wal_checkpoint_v2()] +** This interface used to be the only way to cause a checkpoint to +** occur. But then the newer and more powerful [sqlite3_wal_checkpoint_v2()] +** interface was added. This interface is retained for backwards +** compatibility and as a convenience for applications that need to manually +** start a callback but which do not need the full power (and corresponding +** complication) of [sqlite3_wal_checkpoint_v2()]. */ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); /* ** CAPI3REF: Checkpoint a database ** -** Run a checkpoint operation on WAL database zDb attached to database -** handle db. The specific operation is determined by the value of the -** eMode parameter: +** ^(The sqlite3_wal_checkpoint_v2(D,X,M,L,C) interface runs a checkpoint +** operation on database X of [database connection] D in mode M. Status +** information is written back into integers pointed to by L and C.)^ +** ^(The M parameter must be a valid [checkpoint mode]:)^ ** **
    **
    SQLITE_CHECKPOINT_PASSIVE
    -** Checkpoint as many frames as possible without waiting for any database -** readers or writers to finish. Sync the db file if all frames in the log -** are checkpointed. This mode is the same as calling -** sqlite3_wal_checkpoint(). The [sqlite3_busy_handler|busy-handler callback] -** is never invoked. +** ^Checkpoint as many frames as possible without waiting for any database +** readers or writers to finish, then sync the database file if all frames +** in the log were checkpointed. ^The [busy-handler callback] +** is never invoked in the SQLITE_CHECKPOINT_PASSIVE mode. +** ^On the other hand, passive mode might leave the checkpoint unfinished +** if there are concurrent readers or writers. ** **
    SQLITE_CHECKPOINT_FULL
    -** This mode blocks (it invokes the +** ^This mode blocks (it invokes the ** [sqlite3_busy_handler|busy-handler callback]) until there is no ** database writer and all readers are reading from the most recent database -** snapshot. It then checkpoints all frames in the log file and syncs the -** database file. This call blocks database writers while it is running, -** but not database readers. +** snapshot. ^It then checkpoints all frames in the log file and syncs the +** database file. ^This mode blocks new database writers while it is pending, +** but new database readers are allowed to continue unimpeded. ** **
    SQLITE_CHECKPOINT_RESTART
    -** This mode works the same way as SQLITE_CHECKPOINT_FULL, except after -** checkpointing the log file it blocks (calls the -** [sqlite3_busy_handler|busy-handler callback]) -** until all readers are reading from the database file only. This ensures -** that the next client to write to the database file restarts the log file -** from the beginning. This call blocks database writers while it is running, -** but not database readers. +** ^This mode works the same way as SQLITE_CHECKPOINT_FULL with the addition +** that after checkpointing the log file it blocks (calls the +** [busy-handler callback]) +** until all readers are reading from the database file only. ^This ensures +** that the next writer will restart the log file from the beginning. +** ^Like SQLITE_CHECKPOINT_FULL, this mode blocks new +** database writer attempts while it is pending, but does not impede readers. +** +**
    SQLITE_CHECKPOINT_TRUNCATE
    +** ^This mode works the same way as SQLITE_CHECKPOINT_RESTART with the +** addition that it also truncates the log file to zero bytes just prior +** to a successful return. **
    ** -** If pnLog is not NULL, then *pnLog is set to the total number of frames in -** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to -** the total number of checkpointed frames (including any that were already -** checkpointed when this function is called). *pnLog and *pnCkpt may be -** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK. -** If no values are available because of an error, they are both set to -1 -** before returning to communicate this to the caller. +** ^If pnLog is not NULL, then *pnLog is set to the total number of frames in +** the log file or to -1 if the checkpoint could not run because +** of an error or because the database is not in [WAL mode]. ^If pnCkpt is not +** NULL,then *pnCkpt is set to the total number of checkpointed frames in the +** log file (including any that were already checkpointed before the function +** was called) or to -1 if the checkpoint could not run due to an error or +** because the database is not in WAL mode. ^Note that upon successful +** completion of an SQLITE_CHECKPOINT_TRUNCATE, the log file will have been +** truncated to zero bytes and so both *pnLog and *pnCkpt will be set to zero. ** -** All calls obtain an exclusive "checkpoint" lock on the database file. If +** ^All calls obtain an exclusive "checkpoint" lock on the database file. ^If ** any other process is running a checkpoint operation at the same time, the -** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a +** lock cannot be obtained and SQLITE_BUSY is returned. ^Even if there is a ** busy-handler configured, it will not be invoked in this case. ** -** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive -** "writer" lock on the database file. If the writer lock cannot be obtained -** immediately, and a busy-handler is configured, it is invoked and the writer -** lock retried until either the busy-handler returns 0 or the lock is -** successfully obtained. The busy-handler is also invoked while waiting for -** database readers as described above. If the busy-handler returns 0 before +** ^The SQLITE_CHECKPOINT_FULL, RESTART and TRUNCATE modes also obtain the +** exclusive "writer" lock on the database file. ^If the writer lock cannot be +** obtained immediately, and a busy-handler is configured, it is invoked and +** the writer lock retried until either the busy-handler returns 0 or the lock +** is successfully obtained. ^The busy-handler is also invoked while waiting for +** database readers as described above. ^If the busy-handler returns 0 before ** the writer lock is obtained or while waiting for database readers, the ** checkpoint operation proceeds from that point in the same way as ** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible -** without blocking any further. SQLITE_BUSY is returned in this case. +** without blocking any further. ^SQLITE_BUSY is returned in this case. ** -** If parameter zDb is NULL or points to a zero length string, then the -** specified operation is attempted on all WAL databases. In this case the -** values written to output parameters *pnLog and *pnCkpt are undefined. If +** ^If parameter zDb is NULL or points to a zero length string, then the +** specified operation is attempted on all WAL databases [attached] to +** [database connection] db. In this case the +** values written to output parameters *pnLog and *pnCkpt are undefined. ^If ** an SQLITE_BUSY error is encountered when processing one or more of the ** attached WAL databases, the operation is still attempted on any remaining -** attached databases and SQLITE_BUSY is returned to the caller. If any other +** attached databases and SQLITE_BUSY is returned at the end. ^If any other ** error occurs while processing an attached database, processing is abandoned -** and the error code returned to the caller immediately. If no error +** and the error code is returned to the caller immediately. ^If no error ** (SQLITE_BUSY or otherwise) is encountered while processing the attached ** databases, SQLITE_OK is returned. ** -** If database zDb is the name of an attached database that is not in WAL -** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If +** ^If database zDb is the name of an attached database that is not in WAL +** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. ^If ** zDb is not NULL (or a zero length string) and is not the name of any ** attached database, SQLITE_ERROR is returned to the caller. +** +** ^Unless it returns SQLITE_MISUSE, +** the sqlite3_wal_checkpoint_v2() interface +** sets the error information that is queried by +** [sqlite3_errcode()] and [sqlite3_errmsg()]. +** +** ^The [PRAGMA wal_checkpoint] command can be used to invoke this interface +** from SQL. */ SQLITE_API int sqlite3_wal_checkpoint_v2( sqlite3 *db, /* Database handle */ @@ -7437,16 +7554,18 @@ SQLITE_API int sqlite3_wal_checkpoint_v2( ); /* -** CAPI3REF: Checkpoint operation parameters +** CAPI3REF: Checkpoint Mode Values +** KEYWORDS: {checkpoint mode} ** -** These constants can be used as the 3rd parameter to -** [sqlite3_wal_checkpoint_v2()]. See the [sqlite3_wal_checkpoint_v2()] -** documentation for additional information about the meaning and use of -** each of these values. +** These constants define all valid values for the "checkpoint mode" passed +** as the third parameter to the [sqlite3_wal_checkpoint_v2()] interface. +** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the +** meaning of each of these checkpoint modes. */ -#define SQLITE_CHECKPOINT_PASSIVE 0 -#define SQLITE_CHECKPOINT_FULL 1 -#define SQLITE_CHECKPOINT_RESTART 2 +#define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ +#define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ +#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */ +#define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ /* ** CAPI3REF: Virtual Table Interface Configuration @@ -7535,6 +7654,106 @@ SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); /* #define SQLITE_ABORT 4 // Also an error code */ #define SQLITE_REPLACE 5 +/* +** CAPI3REF: Prepared Statement Scan Status Opcodes +** KEYWORDS: {scanstatus options} +** +** The following constants can be used for the T parameter to the +** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a +** different metric for sqlite3_stmt_scanstatus() to return. +** +** When the value returned to V is a string, space to hold that string is +** managed by the prepared statement S and will be automatically freed when +** S is finalized. +** +**
    +** [[SQLITE_SCANSTAT_NLOOP]]
    SQLITE_SCANSTAT_NLOOP
    +**
    ^The [sqlite3_int64] variable pointed to by the T parameter will be +** set to the total number of times that the X-th loop has run.
    +** +** [[SQLITE_SCANSTAT_NVISIT]]
    SQLITE_SCANSTAT_NVISIT
    +**
    ^The [sqlite3_int64] variable pointed to by the T parameter will be set +** to the total number of rows examined by all iterations of the X-th loop.
    +** +** [[SQLITE_SCANSTAT_EST]]
    SQLITE_SCANSTAT_EST
    +**
    ^The "double" variable pointed to by the T parameter will be set to the +** query planner's estimate for the average number of rows output from each +** iteration of the X-th loop. If the query planner's estimates was accurate, +** then this value will approximate the quotient NVISIT/NLOOP and the +** product of this value for all prior loops with the same SELECTID will +** be the NLOOP value for the current loop. +** +** [[SQLITE_SCANSTAT_NAME]]
    SQLITE_SCANSTAT_NAME
    +**
    ^The "const char *" variable pointed to by the T parameter will be set +** to a zero-terminated UTF-8 string containing the name of the index or table +** used for the X-th loop. +** +** [[SQLITE_SCANSTAT_EXPLAIN]]
    SQLITE_SCANSTAT_EXPLAIN
    +**
    ^The "const char *" variable pointed to by the T parameter will be set +** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] +** description for the X-th loop. +** +** [[SQLITE_SCANSTAT_SELECTID]]
    SQLITE_SCANSTAT_SELECT
    +**
    ^The "int" variable pointed to by the T parameter will be set to the +** "select-id" for the X-th loop. The select-id identifies which query or +** subquery the loop is part of. The main query has a select-id of zero. +** The select-id is the same value as is output in the first column +** of an [EXPLAIN QUERY PLAN] query. +**
    +*/ +#define SQLITE_SCANSTAT_NLOOP 0 +#define SQLITE_SCANSTAT_NVISIT 1 +#define SQLITE_SCANSTAT_EST 2 +#define SQLITE_SCANSTAT_NAME 3 +#define SQLITE_SCANSTAT_EXPLAIN 4 +#define SQLITE_SCANSTAT_SELECTID 5 + +/* +** CAPI3REF: Prepared Statement Scan Status +** +** This interface returns information about the predicted and measured +** performance for pStmt. Advanced applications can use this +** interface to compare the predicted and the measured performance and +** issue warnings and/or rerun [ANALYZE] if discrepancies are found. +** +** Since this interface is expected to be rarely used, it is only +** available if SQLite is compiled using the [SQLITE_ENABLE_STMT_SCANSTATUS] +** compile-time option. +** +** The "iScanStatusOp" parameter determines which status information to return. +** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior +** of this interface is undefined. +** ^The requested measurement is written into a variable pointed to by +** the "pOut" parameter. +** Parameter "idx" identifies the specific loop to retrieve statistics for. +** Loops are numbered starting from zero. ^If idx is out of range - less than +** zero or greater than or equal to the total number of loops used to implement +** the statement - a non-zero value is returned and the variable that pOut +** points to is unchanged. +** +** ^Statistics might not be available for all loops in all statements. ^In cases +** where there exist loops with no available statistics, this function behaves +** as if the loop did not exist - it returns non-zero and leave the variable +** that pOut points to unchanged. +** +** See also: [sqlite3_stmt_scanstatus_reset()] +*/ +SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_scanstatus( + sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ + int idx, /* Index of loop to report on */ + int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ + void *pOut /* Result written here */ +); + +/* +** CAPI3REF: Zero Scan-Status Counters +** +** ^Zero all [sqlite3_stmt_scanstatus()] related event counters. +** +** This API is only available if the library is built with pre-processor +** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined. +*/ +SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*); /* @@ -7980,10 +8199,9 @@ struct sqlite3_rtree_query_info { #endif /* -** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1. -** It determines whether or not the features related to -** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can -** be overridden at runtime using the sqlite3_config() API. +** EVIDENCE-OF: R-25715-37072 Memory allocation statistics are enabled by +** default unless SQLite is compiled with SQLITE_DEFAULT_MEMSTATUS=0 in +** which case memory allocation statistics are disabled by default. */ #if !defined(SQLITE_DEFAULT_MEMSTATUS) # define SQLITE_DEFAULT_MEMSTATUS 1 @@ -8613,7 +8831,7 @@ typedef INT8_TYPE i8; /* 1-byte signed integer */ ** gives a possible range of values of approximately 1.0e986 to 1e-986. ** But the allowed values are "grainy". Not every value is representable. ** For example, quantities 16 and 17 are both represented by a LogEst -** of 40. However, since LogEst quantaties are suppose to be estimates, +** of 40. However, since LogEst quantities are suppose to be estimates, ** not exact values, this imprecision is not a problem. ** ** "LogEst" is short for "Logarithmic Estimate". @@ -8949,7 +9167,7 @@ typedef struct With With; /* TODO: This definition is just included so other modules compile. It ** needs to be revisited. */ -#define SQLITE_N_BTREE_META 10 +#define SQLITE_N_BTREE_META 16 /* ** If defined as non-zero, auto-vacuum is enabled by default. Otherwise @@ -9064,6 +9282,11 @@ SQLITE_PRIVATE int sqlite3BtreeNewDb(Btree *p); ** For example, the free-page-count field is located at byte offset 36 of ** the database file header. The incr-vacuum-flag field is located at ** byte offset 64 (== 36+4*7). +** +** The BTREE_DATA_VERSION value is not really a value stored in the header. +** It is a read-only number computed by the pager. But we merge it with +** the header value access routines since its access pattern is the same. +** Call it a "virtual meta value". */ #define BTREE_FREE_PAGE_COUNT 0 #define BTREE_SCHEMA_VERSION 1 @@ -9074,6 +9297,7 @@ SQLITE_PRIVATE int sqlite3BtreeNewDb(Btree *p); #define BTREE_USER_VERSION 6 #define BTREE_INCR_VACUUM 7 #define BTREE_APPLICATION_ID 8 +#define BTREE_DATA_VERSION 15 /* A virtual meta-value */ /* ** Values that may be OR'd together to form the second argument of an @@ -9126,6 +9350,7 @@ SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *); SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion); SQLITE_PRIVATE void sqlite3BtreeCursorHints(BtCursor *, unsigned int mask); SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *pBt); +SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void); #ifndef NDEBUG SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*); @@ -9668,6 +9893,12 @@ SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe*,int); # define VDBE_OFFSET_LINENO(x) 0 #endif +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +SQLITE_PRIVATE void sqlite3VdbeScanStatus(Vdbe*, int, int, int, LogEst, const char*); +#else +# define sqlite3VdbeScanStatus(a,b,c,d,e) +#endif + #endif /************** End of vdbe.h ************************************************/ @@ -9848,6 +10079,7 @@ SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager); /* Functions used to query pager state and configuration. */ SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager*); +SQLITE_PRIVATE u32 sqlite3PagerDataVersion(Pager*); SQLITE_PRIVATE int sqlite3PagerRefcount(Pager*); SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager*); SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager*, int); @@ -9864,6 +10096,8 @@ SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *); /* Functions used to truncate the database file. */ SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno); +SQLITE_PRIVATE void sqlite3PagerRekey(DbPage*, Pgno, u16); + #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL) SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *); #endif @@ -10051,6 +10285,10 @@ SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*); SQLITE_PRIVATE void sqlite3PCacheSetDefault(void); +/* Return the header size */ +SQLITE_PRIVATE int sqlite3HeaderSizePcache(void); +SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void); + #endif /* _PCACHE_H_ */ /************** End of pcache.h **********************************************/ @@ -10583,6 +10821,7 @@ struct sqlite3 { int errCode; /* Most recent error code (SQLITE_*) */ int errMask; /* & result codes with this before returning */ u16 dbOptFlags; /* Flags to enable/disable optimizations */ + u8 enc; /* Text encoding */ u8 autoCommit; /* The auto-commit flag. */ u8 temp_store; /* 1: file 2: memory 0: default */ u8 mallocFailed; /* True if we have seen a malloc failure */ @@ -10684,7 +10923,8 @@ struct sqlite3 { /* ** A macro to discover the encoding of a database. */ -#define ENC(db) ((db)->aDb[0].pSchema->enc) +#define SCHEMA_ENC(db) ((db)->aDb[0].pSchema->enc) +#define ENC(db) ((db)->enc) /* ** Possible values for the sqlite3.flags. @@ -10737,7 +10977,7 @@ struct sqlite3 { #define SQLITE_SubqCoroutine 0x0100 /* Evaluate subqueries as coroutines */ #define SQLITE_Transitive 0x0200 /* Transitive constraints */ #define SQLITE_OmitNoopJoin 0x0400 /* Omit unused tables in joins */ -#define SQLITE_Stat3 0x0800 /* Use the SQLITE_STAT3 table */ +#define SQLITE_Stat34 0x0800 /* Use STAT3 or STAT4 data */ #define SQLITE_AllOpts 0xffff /* All optimizations */ /* @@ -11308,7 +11548,6 @@ struct Index { u8 *aSortOrder; /* for each column: True==DESC, False==ASC */ char **azColl; /* Array of collation sequence names for index */ Expr *pPartIdxWhere; /* WHERE clause for partial indices */ - KeyInfo *pKeyInfo; /* A KeyInfo object suitable for this index */ int tnum; /* DB Page containing root of this index */ LogEst szIdxRow; /* Estimated average row size in bytes */ u16 nKeyCol; /* Number of columns forming the key */ @@ -11319,12 +11558,14 @@ struct Index { unsigned uniqNotNull:1; /* True if UNIQUE and NOT NULL for all columns */ unsigned isResized:1; /* True if resizeIndexObject() has been called */ unsigned isCovering:1; /* True if this is a covering index */ + unsigned noSkipScan:1; /* Do not try to use skip-scan if true */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 int nSample; /* Number of elements in aSample[] */ int nSampleCol; /* Size of IndexSample.anEq[] and so on */ tRowcnt *aAvgEq; /* Average nEq values for keys not in aSample */ IndexSample *aSample; /* Samples of the left-most key */ - tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this table */ + tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this index */ + tRowcnt nRowEst0; /* Non-logarithmic number of rows in the index */ #endif }; @@ -11522,7 +11763,7 @@ struct Expr { int iTable; /* TK_COLUMN: cursor number of table holding column ** TK_REGISTER: register number ** TK_TRIGGER: 1 -> new, 0 -> old - ** EP_Unlikely: 1000 times likelihood */ + ** EP_Unlikely: 134217728 times likelihood */ ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid. ** TK_VARIABLE: variable number (always >= 1). */ i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */ @@ -11870,7 +12111,7 @@ struct Select { #define SF_HasTypeInfo 0x0020 /* FROM subqueries have Table metadata */ #define SF_Compound 0x0040 /* Part of a compound query */ #define SF_Values 0x0080 /* Synthesized from VALUES clause */ - /* 0x0100 NOT USED */ +#define SF_AllValues 0x0100 /* All terms of compound are VALUES */ #define SF_NestedFrom 0x0200 /* Part of a parenthesized FROM clause */ #define SF_MaybeConvert 0x0400 /* Need convertCompoundSelectToSubquery() */ #define SF_Recursive 0x0800 /* The recursive part of a recursive CTE */ @@ -12360,6 +12601,7 @@ struct Sqlite3Config { int nPage; /* Number of pages in pPage[] */ int mxParserStack; /* maximum depth of the parser stack */ int sharedCacheEnabled; /* true if shared-cache mode enabled */ + u32 szPma; /* Maximum Sorter PMA size */ /* The above might be initialized to non-zero. The following need to always ** initially be zero, however. */ int isInit; /* True after initialization has finished */ @@ -12415,9 +12657,11 @@ struct Walker { void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */ Parse *pParse; /* Parser context. */ int walkerDepth; /* Number of subqueries */ + u8 eCode; /* A small processing code */ union { /* Extra data for callback */ NameContext *pNC; /* Naming context */ - int i; /* Integer value */ + int n; /* A counter */ + int iCur; /* A cursor number */ SrcList *pSrcList; /* FROM clause */ struct SrcCount *pSrcCount; /* Counting column references */ } u; @@ -12495,7 +12739,7 @@ SQLITE_PRIVATE int sqlite3CantopenError(int); ** the SQLITE_ENABLE_FTS4 macro to serve as an alias for SQLITE_ENABLE_FTS3. */ #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3) -# define SQLITE_ENABLE_FTS3 +# define SQLITE_ENABLE_FTS3 1 #endif /* @@ -12818,6 +13062,7 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*); SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8); +SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr*,int); SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*); SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*); SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char); @@ -13279,7 +13524,7 @@ SQLITE_PRIVATE void sqlite3ParserTrace(FILE*, char *); #ifdef SQLITE_ENABLE_IOTRACE # define IOTRACE(A) if( sqlite3IoTrace ){ sqlite3IoTrace A; } SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe*); -SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*,...); +void (*sqlite3IoTrace)(const char*,...); #else # define IOTRACE(A) # define sqlite3VdbeIOTraceSql(X) @@ -13475,15 +13720,30 @@ SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = { ** ** EVIDENCE-OF: R-38799-08373 URI filenames can be enabled or disabled ** using the SQLITE_USE_URI=1 or SQLITE_USE_URI=0 compile-time options. +** +** EVIDENCE-OF: R-43642-56306 By default, URI handling is globally +** disabled. The default value may be changed by compiling with the +** SQLITE_USE_URI symbol defined. */ #ifndef SQLITE_USE_URI # define SQLITE_USE_URI 0 #endif +/* EVIDENCE-OF: R-38720-18127 The default setting is determined by the +** SQLITE_ALLOW_COVERING_INDEX_SCAN compile-time option, or is "on" if +** that compile-time option is omitted. +*/ #ifndef SQLITE_ALLOW_COVERING_INDEX_SCAN # define SQLITE_ALLOW_COVERING_INDEX_SCAN 1 #endif +/* The minimum PMA size is set to this value multiplied by the database +** page size in bytes. +*/ +#ifndef SQLITE_SORTER_PMASZ +# define SQLITE_SORTER_PMASZ 250 +#endif + /* ** The following singleton contains the global configuration for ** the SQLite library. @@ -13514,6 +13774,7 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { 0, /* nPage */ 0, /* mxParserStack */ 0, /* sharedCacheEnabled */ + SQLITE_SORTER_PMASZ, /* szPma */ /* All the rest should always be initialized to zero */ 0, /* isInit */ 0, /* inProgress */ @@ -13569,8 +13830,8 @@ SQLITE_PRIVATE const Token sqlite3IntTokens[] = { ** ** IMPORTANT: Changing the pending byte to any value other than ** 0x40000000 results in an incompatible database file format! -** Changing the pending byte during operating results in undefined -** and dileterious behavior. +** Changing the pending byte during operation will result in undefined +** and incorrect behavior. */ #ifndef SQLITE_OMIT_WSD SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000; @@ -13620,88 +13881,91 @@ static const char * const azCompileOpt[] = { #define CTIMEOPT_VAL_(opt) #opt #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) -#ifdef SQLITE_32BIT_ROWID +#if SQLITE_32BIT_ROWID "32BIT_ROWID", #endif -#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC +#if SQLITE_4_BYTE_ALIGNED_MALLOC "4_BYTE_ALIGNED_MALLOC", #endif -#ifdef SQLITE_CASE_SENSITIVE_LIKE +#if SQLITE_CASE_SENSITIVE_LIKE "CASE_SENSITIVE_LIKE", #endif -#ifdef SQLITE_CHECK_PAGES +#if SQLITE_CHECK_PAGES "CHECK_PAGES", #endif -#ifdef SQLITE_COVERAGE_TEST +#if SQLITE_COVERAGE_TEST "COVERAGE_TEST", #endif -#ifdef SQLITE_DEBUG +#if SQLITE_DEBUG "DEBUG", #endif -#ifdef SQLITE_DEFAULT_LOCKING_MODE +#if SQLITE_DEFAULT_LOCKING_MODE "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE), #endif #if defined(SQLITE_DEFAULT_MMAP_SIZE) && !defined(SQLITE_DEFAULT_MMAP_SIZE_xc) "DEFAULT_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_MMAP_SIZE), #endif -#ifdef SQLITE_DISABLE_DIRSYNC +#if SQLITE_DISABLE_DIRSYNC "DISABLE_DIRSYNC", #endif -#ifdef SQLITE_DISABLE_LFS +#if SQLITE_DISABLE_LFS "DISABLE_LFS", #endif -#ifdef SQLITE_ENABLE_ATOMIC_WRITE +#if SQLITE_ENABLE_API_ARMOR + "ENABLE_API_ARMOR", +#endif +#if SQLITE_ENABLE_ATOMIC_WRITE "ENABLE_ATOMIC_WRITE", #endif -#ifdef SQLITE_ENABLE_CEROD +#if SQLITE_ENABLE_CEROD "ENABLE_CEROD", #endif -#ifdef SQLITE_ENABLE_COLUMN_METADATA +#if SQLITE_ENABLE_COLUMN_METADATA "ENABLE_COLUMN_METADATA", #endif -#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT +#if SQLITE_ENABLE_EXPENSIVE_ASSERT "ENABLE_EXPENSIVE_ASSERT", #endif -#ifdef SQLITE_ENABLE_FTS1 +#if SQLITE_ENABLE_FTS1 "ENABLE_FTS1", #endif -#ifdef SQLITE_ENABLE_FTS2 +#if SQLITE_ENABLE_FTS2 "ENABLE_FTS2", #endif -#ifdef SQLITE_ENABLE_FTS3 +#if SQLITE_ENABLE_FTS3 "ENABLE_FTS3", #endif -#ifdef SQLITE_ENABLE_FTS3_PARENTHESIS +#if SQLITE_ENABLE_FTS3_PARENTHESIS "ENABLE_FTS3_PARENTHESIS", #endif -#ifdef SQLITE_ENABLE_FTS4 +#if SQLITE_ENABLE_FTS4 "ENABLE_FTS4", #endif -#ifdef SQLITE_ENABLE_ICU +#if SQLITE_ENABLE_ICU "ENABLE_ICU", #endif -#ifdef SQLITE_ENABLE_IOTRACE +#if SQLITE_ENABLE_IOTRACE "ENABLE_IOTRACE", #endif -#ifdef SQLITE_ENABLE_LOAD_EXTENSION +#if SQLITE_ENABLE_LOAD_EXTENSION "ENABLE_LOAD_EXTENSION", #endif -#ifdef SQLITE_ENABLE_LOCKING_STYLE +#if SQLITE_ENABLE_LOCKING_STYLE "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE), #endif -#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT +#if SQLITE_ENABLE_MEMORY_MANAGEMENT "ENABLE_MEMORY_MANAGEMENT", #endif -#ifdef SQLITE_ENABLE_MEMSYS3 +#if SQLITE_ENABLE_MEMSYS3 "ENABLE_MEMSYS3", #endif -#ifdef SQLITE_ENABLE_MEMSYS5 +#if SQLITE_ENABLE_MEMSYS5 "ENABLE_MEMSYS5", #endif -#ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK +#if SQLITE_ENABLE_OVERSIZE_CELL_CHECK "ENABLE_OVERSIZE_CELL_CHECK", #endif -#ifdef SQLITE_ENABLE_RTREE +#if SQLITE_ENABLE_RTREE "ENABLE_RTREE", #endif #if defined(SQLITE_ENABLE_STAT4) @@ -13709,31 +13973,31 @@ static const char * const azCompileOpt[] = { #elif defined(SQLITE_ENABLE_STAT3) "ENABLE_STAT3", #endif -#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY +#if SQLITE_ENABLE_UNLOCK_NOTIFY "ENABLE_UNLOCK_NOTIFY", #endif -#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT +#if SQLITE_ENABLE_UPDATE_DELETE_LIMIT "ENABLE_UPDATE_DELETE_LIMIT", #endif -#ifdef SQLITE_HAS_CODEC +#if SQLITE_HAS_CODEC "HAS_CODEC", #endif -#ifdef SQLITE_HAVE_ISNAN +#if HAVE_ISNAN || SQLITE_HAVE_ISNAN "HAVE_ISNAN", #endif -#ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX +#if SQLITE_HOMEGROWN_RECURSIVE_MUTEX "HOMEGROWN_RECURSIVE_MUTEX", #endif -#ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS +#if SQLITE_IGNORE_AFP_LOCK_ERRORS "IGNORE_AFP_LOCK_ERRORS", #endif -#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS +#if SQLITE_IGNORE_FLOCK_LOCK_ERRORS "IGNORE_FLOCK_LOCK_ERRORS", #endif #ifdef SQLITE_INT64_TYPE "INT64_TYPE", #endif -#ifdef SQLITE_LOCK_TRACE +#if SQLITE_LOCK_TRACE "LOCK_TRACE", #endif #if defined(SQLITE_MAX_MMAP_SIZE) && !defined(SQLITE_MAX_MMAP_SIZE_xc) @@ -13742,226 +14006,226 @@ static const char * const azCompileOpt[] = { #ifdef SQLITE_MAX_SCHEMA_RETRY "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY), #endif -#ifdef SQLITE_MEMDEBUG +#if SQLITE_MEMDEBUG "MEMDEBUG", #endif -#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT +#if SQLITE_MIXED_ENDIAN_64BIT_FLOAT "MIXED_ENDIAN_64BIT_FLOAT", #endif -#ifdef SQLITE_NO_SYNC +#if SQLITE_NO_SYNC "NO_SYNC", #endif -#ifdef SQLITE_OMIT_ALTERTABLE +#if SQLITE_OMIT_ALTERTABLE "OMIT_ALTERTABLE", #endif -#ifdef SQLITE_OMIT_ANALYZE +#if SQLITE_OMIT_ANALYZE "OMIT_ANALYZE", #endif -#ifdef SQLITE_OMIT_ATTACH +#if SQLITE_OMIT_ATTACH "OMIT_ATTACH", #endif -#ifdef SQLITE_OMIT_AUTHORIZATION +#if SQLITE_OMIT_AUTHORIZATION "OMIT_AUTHORIZATION", #endif -#ifdef SQLITE_OMIT_AUTOINCREMENT +#if SQLITE_OMIT_AUTOINCREMENT "OMIT_AUTOINCREMENT", #endif -#ifdef SQLITE_OMIT_AUTOINIT +#if SQLITE_OMIT_AUTOINIT "OMIT_AUTOINIT", #endif -#ifdef SQLITE_OMIT_AUTOMATIC_INDEX +#if SQLITE_OMIT_AUTOMATIC_INDEX "OMIT_AUTOMATIC_INDEX", #endif -#ifdef SQLITE_OMIT_AUTORESET +#if SQLITE_OMIT_AUTORESET "OMIT_AUTORESET", #endif -#ifdef SQLITE_OMIT_AUTOVACUUM +#if SQLITE_OMIT_AUTOVACUUM "OMIT_AUTOVACUUM", #endif -#ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION +#if SQLITE_OMIT_BETWEEN_OPTIMIZATION "OMIT_BETWEEN_OPTIMIZATION", #endif -#ifdef SQLITE_OMIT_BLOB_LITERAL +#if SQLITE_OMIT_BLOB_LITERAL "OMIT_BLOB_LITERAL", #endif -#ifdef SQLITE_OMIT_BTREECOUNT +#if SQLITE_OMIT_BTREECOUNT "OMIT_BTREECOUNT", #endif -#ifdef SQLITE_OMIT_BUILTIN_TEST +#if SQLITE_OMIT_BUILTIN_TEST "OMIT_BUILTIN_TEST", #endif -#ifdef SQLITE_OMIT_CAST +#if SQLITE_OMIT_CAST "OMIT_CAST", #endif -#ifdef SQLITE_OMIT_CHECK +#if SQLITE_OMIT_CHECK "OMIT_CHECK", #endif -#ifdef SQLITE_OMIT_COMPLETE +#if SQLITE_OMIT_COMPLETE "OMIT_COMPLETE", #endif -#ifdef SQLITE_OMIT_COMPOUND_SELECT +#if SQLITE_OMIT_COMPOUND_SELECT "OMIT_COMPOUND_SELECT", #endif -#ifdef SQLITE_OMIT_CTE +#if SQLITE_OMIT_CTE "OMIT_CTE", #endif -#ifdef SQLITE_OMIT_DATETIME_FUNCS +#if SQLITE_OMIT_DATETIME_FUNCS "OMIT_DATETIME_FUNCS", #endif -#ifdef SQLITE_OMIT_DECLTYPE +#if SQLITE_OMIT_DECLTYPE "OMIT_DECLTYPE", #endif -#ifdef SQLITE_OMIT_DEPRECATED +#if SQLITE_OMIT_DEPRECATED "OMIT_DEPRECATED", #endif -#ifdef SQLITE_OMIT_DISKIO +#if SQLITE_OMIT_DISKIO "OMIT_DISKIO", #endif -#ifdef SQLITE_OMIT_EXPLAIN +#if SQLITE_OMIT_EXPLAIN "OMIT_EXPLAIN", #endif -#ifdef SQLITE_OMIT_FLAG_PRAGMAS +#if SQLITE_OMIT_FLAG_PRAGMAS "OMIT_FLAG_PRAGMAS", #endif -#ifdef SQLITE_OMIT_FLOATING_POINT +#if SQLITE_OMIT_FLOATING_POINT "OMIT_FLOATING_POINT", #endif -#ifdef SQLITE_OMIT_FOREIGN_KEY +#if SQLITE_OMIT_FOREIGN_KEY "OMIT_FOREIGN_KEY", #endif -#ifdef SQLITE_OMIT_GET_TABLE +#if SQLITE_OMIT_GET_TABLE "OMIT_GET_TABLE", #endif -#ifdef SQLITE_OMIT_INCRBLOB +#if SQLITE_OMIT_INCRBLOB "OMIT_INCRBLOB", #endif -#ifdef SQLITE_OMIT_INTEGRITY_CHECK +#if SQLITE_OMIT_INTEGRITY_CHECK "OMIT_INTEGRITY_CHECK", #endif -#ifdef SQLITE_OMIT_LIKE_OPTIMIZATION +#if SQLITE_OMIT_LIKE_OPTIMIZATION "OMIT_LIKE_OPTIMIZATION", #endif -#ifdef SQLITE_OMIT_LOAD_EXTENSION +#if SQLITE_OMIT_LOAD_EXTENSION "OMIT_LOAD_EXTENSION", #endif -#ifdef SQLITE_OMIT_LOCALTIME +#if SQLITE_OMIT_LOCALTIME "OMIT_LOCALTIME", #endif -#ifdef SQLITE_OMIT_LOOKASIDE +#if SQLITE_OMIT_LOOKASIDE "OMIT_LOOKASIDE", #endif -#ifdef SQLITE_OMIT_MEMORYDB +#if SQLITE_OMIT_MEMORYDB "OMIT_MEMORYDB", #endif -#ifdef SQLITE_OMIT_OR_OPTIMIZATION +#if SQLITE_OMIT_OR_OPTIMIZATION "OMIT_OR_OPTIMIZATION", #endif -#ifdef SQLITE_OMIT_PAGER_PRAGMAS +#if SQLITE_OMIT_PAGER_PRAGMAS "OMIT_PAGER_PRAGMAS", #endif -#ifdef SQLITE_OMIT_PRAGMA +#if SQLITE_OMIT_PRAGMA "OMIT_PRAGMA", #endif -#ifdef SQLITE_OMIT_PROGRESS_CALLBACK +#if SQLITE_OMIT_PROGRESS_CALLBACK "OMIT_PROGRESS_CALLBACK", #endif -#ifdef SQLITE_OMIT_QUICKBALANCE +#if SQLITE_OMIT_QUICKBALANCE "OMIT_QUICKBALANCE", #endif -#ifdef SQLITE_OMIT_REINDEX +#if SQLITE_OMIT_REINDEX "OMIT_REINDEX", #endif -#ifdef SQLITE_OMIT_SCHEMA_PRAGMAS +#if SQLITE_OMIT_SCHEMA_PRAGMAS "OMIT_SCHEMA_PRAGMAS", #endif -#ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS +#if SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS "OMIT_SCHEMA_VERSION_PRAGMAS", #endif -#ifdef SQLITE_OMIT_SHARED_CACHE +#if SQLITE_OMIT_SHARED_CACHE "OMIT_SHARED_CACHE", #endif -#ifdef SQLITE_OMIT_SUBQUERY +#if SQLITE_OMIT_SUBQUERY "OMIT_SUBQUERY", #endif -#ifdef SQLITE_OMIT_TCL_VARIABLE +#if SQLITE_OMIT_TCL_VARIABLE "OMIT_TCL_VARIABLE", #endif -#ifdef SQLITE_OMIT_TEMPDB +#if SQLITE_OMIT_TEMPDB "OMIT_TEMPDB", #endif -#ifdef SQLITE_OMIT_TRACE +#if SQLITE_OMIT_TRACE "OMIT_TRACE", #endif -#ifdef SQLITE_OMIT_TRIGGER +#if SQLITE_OMIT_TRIGGER "OMIT_TRIGGER", #endif -#ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION +#if SQLITE_OMIT_TRUNCATE_OPTIMIZATION "OMIT_TRUNCATE_OPTIMIZATION", #endif -#ifdef SQLITE_OMIT_UTF16 +#if SQLITE_OMIT_UTF16 "OMIT_UTF16", #endif -#ifdef SQLITE_OMIT_VACUUM +#if SQLITE_OMIT_VACUUM "OMIT_VACUUM", #endif -#ifdef SQLITE_OMIT_VIEW +#if SQLITE_OMIT_VIEW "OMIT_VIEW", #endif -#ifdef SQLITE_OMIT_VIRTUALTABLE +#if SQLITE_OMIT_VIRTUALTABLE "OMIT_VIRTUALTABLE", #endif -#ifdef SQLITE_OMIT_WAL +#if SQLITE_OMIT_WAL "OMIT_WAL", #endif -#ifdef SQLITE_OMIT_WSD +#if SQLITE_OMIT_WSD "OMIT_WSD", #endif -#ifdef SQLITE_OMIT_XFER_OPT +#if SQLITE_OMIT_XFER_OPT "OMIT_XFER_OPT", #endif -#ifdef SQLITE_PERFORMANCE_TRACE +#if SQLITE_PERFORMANCE_TRACE "PERFORMANCE_TRACE", #endif -#ifdef SQLITE_PROXY_DEBUG +#if SQLITE_PROXY_DEBUG "PROXY_DEBUG", #endif -#ifdef SQLITE_RTREE_INT_ONLY +#if SQLITE_RTREE_INT_ONLY "RTREE_INT_ONLY", #endif -#ifdef SQLITE_SECURE_DELETE +#if SQLITE_SECURE_DELETE "SECURE_DELETE", #endif -#ifdef SQLITE_SMALL_STACK +#if SQLITE_SMALL_STACK "SMALL_STACK", #endif -#ifdef SQLITE_SOUNDEX +#if SQLITE_SOUNDEX "SOUNDEX", #endif -#ifdef SQLITE_SYSTEM_MALLOC +#if SQLITE_SYSTEM_MALLOC "SYSTEM_MALLOC", #endif -#ifdef SQLITE_TCL +#if SQLITE_TCL "TCL", #endif #if defined(SQLITE_TEMP_STORE) && !defined(SQLITE_TEMP_STORE_xc) "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE), #endif -#ifdef SQLITE_TEST +#if SQLITE_TEST "TEST", #endif #if defined(SQLITE_THREADSAFE) "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE), #endif -#ifdef SQLITE_USE_ALLOCA +#if SQLITE_USE_ALLOCA "USE_ALLOCA", #endif -#ifdef SQLITE_USER_AUTHENTICATION +#if SQLITE_USER_AUTHENTICATION "USER_AUTHENTICATION", #endif -#ifdef SQLITE_WIN32_MALLOC +#if SQLITE_WIN32_MALLOC "WIN32_MALLOC", #endif -#ifdef SQLITE_ZERO_MALLOC +#if SQLITE_ZERO_MALLOC "ZERO_MALLOC" #endif }; @@ -13975,6 +14239,13 @@ static const char * const azCompileOpt[] = { */ SQLITE_API int sqlite3_compileoption_used(const char *zOptName){ int i, n; + +#if SQLITE_ENABLE_API_ARMOR + if( zOptName==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7; n = sqlite3Strlen30(zOptName); @@ -14156,6 +14427,7 @@ struct VdbeFrame { Vdbe *v; /* VM this frame belongs to */ VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */ Op *aOp; /* Program instructions for parent frame */ + i64 *anExec; /* Event counters from parent frame */ Mem *aMem; /* Array of memory cells for parent frame */ u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */ VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */ @@ -14168,7 +14440,8 @@ struct VdbeFrame { int nOnceFlag; /* Number of entries in aOnceFlag */ int nChildMem; /* Number of memory cells for child frame */ int nChildCsr; /* Number of cursors for child frame */ - int nChange; /* Statement changes (Vdbe.nChanges) */ + int nChange; /* Statement changes (Vdbe.nChange) */ + int nDbChange; /* Value of db->nChange */ }; #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))]) @@ -14319,6 +14592,16 @@ struct Explain { */ typedef unsigned bft; /* Bit Field Type */ +typedef struct ScanStatus ScanStatus; +struct ScanStatus { + int addrExplain; /* OP_Explain for loop */ + int addrLoop; /* Address of "loops" counter */ + int addrVisit; /* Address of "rows visited" counter */ + int iSelectID; /* The "Select-ID" for this loop */ + LogEst nEst; /* Estimated output rows per loop */ + char *zName; /* Name of table or index */ +}; + /* ** An instance of the virtual machine. This structure contains the complete ** state of the virtual machine. @@ -14391,6 +14674,11 @@ struct Vdbe { int nOnceFlag; /* Size of array aOnceFlag[] */ u8 *aOnceFlag; /* Flags for OP_Once */ AuxData *pAuxData; /* Linked list of auxdata allocations */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + i64 *anExec; /* Number of times each op has been executed */ + int nScan; /* Entries in aScan[] */ + ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */ +#endif }; /* @@ -14580,6 +14868,9 @@ SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetF if( op<0 || op>=ArraySize(wsdStat.nowValue) ){ return SQLITE_MISUSE_BKPT; } +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCurrent==0 || pHighwater==0 ) return SQLITE_MISUSE_BKPT; +#endif *pCurrent = wsdStat.nowValue[op]; *pHighwater = wsdStat.mxValue[op]; if( resetFlag ){ @@ -14599,6 +14890,11 @@ SQLITE_API int sqlite3_db_status( int resetFlag /* Reset high-water mark if true */ ){ int rc = SQLITE_OK; /* Return code */ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || pCurrent==0|| pHighwater==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif sqlite3_mutex_enter(db->mutex); switch( op ){ case SQLITE_DBSTATUS_LOOKASIDE_USED: { @@ -14777,7 +15073,7 @@ SQLITE_API int sqlite3_db_status( ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file. ** All other code has file scope. ** -** SQLite processes all times and dates as Julian Day numbers. The +** SQLite processes all times and dates as julian day numbers. The ** dates and times are stored as the number of days since noon ** in Greenwich on November 24, 4714 B.C. according to the Gregorian ** calendar system. @@ -14792,7 +15088,7 @@ SQLITE_API int sqlite3_db_status( ** ** The Gregorian calendar system is used for all dates and times, ** even those that predate the Gregorian calendar. Historians usually -** use the Julian calendar for dates prior to 1582-10-15 and for some +** use the julian calendar for dates prior to 1582-10-15 and for some ** dates afterwards, depending on locale. Beware of this difference. ** ** The conversion algorithms are implemented based on descriptions @@ -15064,7 +15360,7 @@ static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){ } /* -** Attempt to parse the given string into a Julian Day Number. Return +** Attempt to parse the given string into a julian day number. Return ** the number of errors. ** ** The following are acceptable forms for the input string: @@ -15172,8 +15468,9 @@ static void clearYMD_HMS_TZ(DateTime *p){ ** already, check for an MSVC build environment that provides ** localtime_s(). */ -#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \ - defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE) +#if !HAVE_LOCALTIME_R && !HAVE_LOCALTIME_S \ + && defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE) +#undef HAVE_LOCALTIME_S #define HAVE_LOCALTIME_S 1 #endif @@ -15193,8 +15490,7 @@ static void clearYMD_HMS_TZ(DateTime *p){ */ static int osLocaltime(time_t *t, struct tm *pTm){ int rc; -#if (!defined(HAVE_LOCALTIME_R) || !HAVE_LOCALTIME_R) \ - && (!defined(HAVE_LOCALTIME_S) || !HAVE_LOCALTIME_S) +#if !HAVE_LOCALTIME_R && !HAVE_LOCALTIME_S struct tm *pX; #if SQLITE_THREADSAFE>0 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); @@ -15211,7 +15507,7 @@ static int osLocaltime(time_t *t, struct tm *pTm){ #ifndef SQLITE_OMIT_BUILTIN_TEST if( sqlite3GlobalConfig.bLocaltimeFault ) return 1; #endif -#if defined(HAVE_LOCALTIME_R) && HAVE_LOCALTIME_R +#if HAVE_LOCALTIME_R rc = localtime_r(t, pTm)==0; #else rc = localtime_s(pTm, t); @@ -15635,7 +15931,7 @@ static void dateFunc( ** %f ** fractional seconds SS.SSS ** %H hour 00-24 ** %j day of year 000-366 -** %J ** Julian day number +** %J ** julian day number ** %m month 01-12 ** %M minute 00-59 ** %s seconds since 1970-01-01 @@ -15655,8 +15951,10 @@ static void strftimeFunc( size_t i,j; char *z; sqlite3 *db; - const char *zFmt = (const char*)sqlite3_value_text(argv[0]); + const char *zFmt; char zBuf[100]; + if( argc==0 ) return; + zFmt = (const char*)sqlite3_value_text(argv[0]); if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return; db = sqlite3_context_db_handle(context); for(i=0, n=1; zFmt[i]; i++, n++){ @@ -15850,7 +16148,7 @@ static void currentTimeFunc( iT = sqlite3StmtCurrentTime(context); if( iT<=0 ) return; t = iT/1000 - 10000*(sqlite3_int64)21086676; -#ifdef HAVE_GMTIME_R +#if HAVE_GMTIME_R pTm = gmtime_r(&t, &sNow); #else sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); @@ -16260,6 +16558,10 @@ SQLITE_API int sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){ int rc = sqlite3_initialize(); if( rc ) return rc; #endif +#ifdef SQLITE_ENABLE_API_ARMOR + if( pVfs==0 ) return SQLITE_MISUSE_BKPT; +#endif + MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); ) sqlite3_mutex_enter(mutex); vfsUnlink(pVfs); @@ -16520,9 +16822,9 @@ static malloc_zone_t* _sqliteZone_; ** The malloc.h header file is needed for malloc_usable_size() function ** on some systems (e.g. Linux). */ -#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLOC_USABLE_SIZE) -# define SQLITE_USE_MALLOC_H -# define SQLITE_USE_MALLOC_USABLE_SIZE +#if HAVE_MALLOC_H && HAVE_MALLOC_USABLE_SIZE +# define SQLITE_USE_MALLOC_H 1 +# define SQLITE_USE_MALLOC_USABLE_SIZE 1 /* ** The MSVCRT has malloc_usable_size(), but it is called _msize(). The ** use of _msize() is automatic, but can be disabled by compiling with @@ -18617,6 +18919,7 @@ SQLITE_PRIVATE int sqlite3MutexEnd(void){ SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){ #ifndef SQLITE_OMIT_AUTOINIT if( id<=SQLITE_MUTEX_RECURSIVE && sqlite3_initialize() ) return 0; + if( id>SQLITE_MUTEX_RECURSIVE && sqlite3MutexInit() ) return 0; #endif return sqlite3GlobalConfig.mutex.xMutexAlloc(id); } @@ -19073,8 +19376,12 @@ static sqlite3_mutex *pthreadMutexAlloc(int iType){ break; } default: { - assert( iType-2 >= 0 ); - assert( iType-2 < ArraySize(staticMutexes) ); +#ifdef SQLITE_ENABLE_API_ARMOR + if( iType-2<0 || iType-2>=ArraySize(staticMutexes) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif p = &staticMutexes[iType-2]; #if SQLITE_MUTEX_NREF p->id = iType; @@ -19755,6 +20062,12 @@ static sqlite3_mutex *winMutexAlloc(int iType){ break; } default: { +#ifdef SQLITE_ENABLE_API_ARMOR + if( iType-2<0 || iType-2>=ArraySize(winMutex_staticMutexes) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif assert( iType-2 >= 0 ); assert( iType-2 < ArraySize(winMutex_staticMutexes) ); assert( winMutex_isInit==1 ); @@ -20296,11 +20609,12 @@ SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){ #if SQLITE_THREADSAFE==0 && !defined(NDEBUG) - /* Verify that no more than two scratch allocations per thread - ** are outstanding at one time. (This is only checked in the - ** single-threaded case since checking in the multi-threaded case - ** would be much more complicated.) */ - assert( scratchAllocOut<=1 ); + /* EVIDENCE-OF: R-12970-05880 SQLite will not use more than one scratch + ** buffers per thread. + ** + ** This can only be checked in single-threaded mode. + */ + assert( scratchAllocOut==0 ); if( p ) scratchAllocOut++; #endif @@ -20750,17 +21064,6 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){ ** SQLlite. */ -/* -** If the strchrnul() library function is available, then set -** HAVE_STRCHRNUL. If that routine is not available, this module -** will supply its own. The built-in version is slower than -** the glibc version so the glibc version is definitely preferred. -*/ -#if !defined(HAVE_STRCHRNUL) -# define HAVE_STRCHRNUL 0 -#endif - - /* ** Conversion types fall into various categories as defined by the ** following enumeration. @@ -20959,6 +21262,13 @@ SQLITE_PRIVATE void sqlite3VXPrintf( PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */ char buf[etBUFSIZE]; /* Conversion buffer */ +#ifdef SQLITE_ENABLE_API_ARMOR + if( ap==0 ){ + (void)SQLITE_MISUSE_BKPT; + sqlite3StrAccumReset(pAccum); + return; + } +#endif bufpt = 0; if( bFlags ){ if( (bArgList = (bFlags & SQLITE_PRINTF_SQLFUNC))!=0 ){ @@ -21499,6 +21809,11 @@ static int sqlite3StrAccumEnlarge(StrAccum *p, int N){ char *zOld = (p->zText==p->zBase ? 0 : p->zText); i64 szNew = p->nChar; szNew += N + 1; + if( szNew+p->nChar<=p->mxAlloc ){ + /* Force exponential buffer size growth as long as it does not overflow, + ** to avoid having to call this routine too often */ + szNew += p->nChar; + } if( szNew > p->mxAlloc ){ sqlite3StrAccumReset(p); setStrAccumError(p, STRACCUM_TOOBIG); @@ -21515,6 +21830,7 @@ static int sqlite3StrAccumEnlarge(StrAccum *p, int N){ assert( p->zText!=0 || p->nChar==0 ); if( zOld==0 && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar); p->zText = zNew; + p->nAlloc = sqlite3DbMallocSize(p->db, zNew); }else{ sqlite3StrAccumReset(p); setStrAccumError(p, STRACCUM_NOMEM); @@ -21684,6 +22000,13 @@ SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){ char *z; char zBase[SQLITE_PRINT_BUF_SIZE]; StrAccum acc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( zFormat==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif #ifndef SQLITE_OMIT_AUTOINIT if( sqlite3_initialize() ) return 0; #endif @@ -21726,6 +22049,13 @@ SQLITE_API char *sqlite3_mprintf(const char *zFormat, ...){ SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){ StrAccum acc; if( n<=0 ) return zBuf; +#ifdef SQLITE_ENABLE_API_ARMOR + if( zBuf==0 || zFormat==0 ) { + (void)SQLITE_MISUSE_BKPT; + if( zBuf && n>0 ) zBuf[0] = 0; + return zBuf; + } +#endif sqlite3StrAccumInit(&acc, zBuf, n, 0); acc.useMalloc = 0; sqlite3VXPrintf(&acc, 0, zFormat, ap); @@ -21917,11 +22247,19 @@ SQLITE_API void sqlite3_randomness(int N, void *pBuf){ #endif #if SQLITE_THREADSAFE - sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG); - sqlite3_mutex_enter(mutex); + sqlite3_mutex *mutex; #endif - if( N<=0 ){ +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return; +#endif + +#if SQLITE_THREADSAFE + mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG); +#endif + + sqlite3_mutex_enter(mutex); + if( N<=0 || pBuf==0 ){ wsdPrng.isInit = 0; sqlite3_mutex_leave(mutex); return; @@ -22023,6 +22361,8 @@ SQLITE_PRIVATE void sqlite3PrngRestoreState(void){ ** of multiple cores can do so, while also allowing applications to stay ** single-threaded if desired. */ +#if SQLITE_OS_WIN +#endif #if SQLITE_MAX_WORKER_THREADS>0 @@ -22809,7 +23149,7 @@ SQLITE_PRIVATE void sqlite3UtfSelfTest(void){ ** */ /* #include */ -#ifdef SQLITE_HAVE_ISNAN +#if HAVE_ISNAN || SQLITE_HAVE_ISNAN # include #endif @@ -22850,7 +23190,7 @@ SQLITE_PRIVATE int sqlite3FaultSim(int iTest){ */ SQLITE_PRIVATE int sqlite3IsNaN(double x){ int rc; /* The value return */ -#if !defined(SQLITE_HAVE_ISNAN) +#if !SQLITE_HAVE_ISNAN && !HAVE_ISNAN /* ** Systems that support the isnan() library function should probably ** make use of it by compiling with -DSQLITE_HAVE_ISNAN. But we have @@ -22880,9 +23220,9 @@ SQLITE_PRIVATE int sqlite3IsNaN(double x){ volatile double y = x; volatile double z = y; rc = (y!=z); -#else /* if defined(SQLITE_HAVE_ISNAN) */ +#else /* if HAVE_ISNAN */ rc = isnan(x); -#endif /* SQLITE_HAVE_ISNAN */ +#endif /* HAVE_ISNAN */ testcase( rc ); return rc; } @@ -23043,6 +23383,11 @@ SQLITE_PRIVATE int sqlite3Dequote(char *z){ */ SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){ register unsigned char *a, *b; + if( zLeft==0 ){ + return zRight ? -1 : 0; + }else if( zRight==0 ){ + return 1; + } a = (unsigned char *)zLeft; b = (unsigned char *)zRight; while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; } @@ -23050,6 +23395,11 @@ SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){ } SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){ register unsigned char *a, *b; + if( zLeft==0 ){ + return zRight ? -1 : 0; + }else if( zRight==0 ){ + return 1; + } a = (unsigned char *)zLeft; b = (unsigned char *)zRight; while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; } @@ -28193,9 +28543,9 @@ SQLITE_API int sqlite3_fullsync_count = 0; ** We do not trust systems to provide a working fdatasync(). Some do. ** Others do no. To be safe, we will stick with the (slightly slower) ** fsync(). If you know that your system does support fdatasync() correctly, -** then simply compile with -Dfdatasync=fdatasync +** then simply compile with -Dfdatasync=fdatasync or -DHAVE_FDATASYNC */ -#if !defined(fdatasync) +#if !defined(fdatasync) && !HAVE_FDATASYNC # define fdatasync fsync #endif @@ -28516,24 +28866,28 @@ static int fcntlSizeHint(unixFile *pFile, i64 nByte){ }while( err==EINTR ); if( err ) return SQLITE_IOERR_WRITE; #else - /* If the OS does not have posix_fallocate(), fake it. First use - ** ftruncate() to set the file size, then write a single byte to - ** the last byte in each block within the extended region. This - ** is the same technique used by glibc to implement posix_fallocate() - ** on systems that do not have a real fallocate() system call. + /* If the OS does not have posix_fallocate(), fake it. Write a + ** single byte to the last byte in each block that falls entirely + ** within the extended region. Then, if required, a single byte + ** at offset (nSize-1), to set the size of the file correctly. + ** This is a similar technique to that used by glibc on systems + ** that do not have a real fallocate() call. */ int nBlk = buf.st_blksize; /* File-system block size */ + int nWrite = 0; /* Number of bytes written by seekAndWrite */ i64 iWrite; /* Next offset to write to */ - if( robust_ftruncate(pFile->h, nSize) ){ - pFile->lastErrno = errno; - return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath); - } iWrite = ((buf.st_size + 2*nBlk - 1)/nBlk)*nBlk-1; - while( iWrite=buf.st_size ); + assert( (iWrite/nBlk)==((buf.st_size+nBlk-1)/nBlk) ); + assert( ((iWrite+1)%nBlk)==0 ); + for(/*no-op*/; iWrite0 +# error "Memory mapped files require support from the Windows NT kernel,\ + compile with SQLITE_MAX_MMAP_SIZE=0." +#endif + /* ** Are most of the Win32 ANSI APIs available (i.e. with certain exceptions ** based on the sub-platform)? @@ -32711,10 +33070,11 @@ SQLITE_API int sqlite3_open_file_count = 0; /* ** Do we need to manually define the Win32 file mapping APIs for use with WAL -** mode (e.g. these APIs are available in the Windows CE SDK; however, they -** are not present in the header file)? +** mode or memory mapped files (e.g. these APIs are available in the Windows +** CE SDK; however, they are not present in the header file)? */ -#if SQLITE_WIN32_FILEMAPPING_API && !defined(SQLITE_OMIT_WAL) +#if SQLITE_WIN32_FILEMAPPING_API && \ + (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) /* ** Two of the file mapping APIs are different under WinRT. Figure out which ** set we need. @@ -32742,7 +33102,7 @@ WINBASEAPI LPVOID WINAPI MapViewOfFile(HANDLE, DWORD, DWORD, DWORD, SIZE_T); ** This file mapping API is common to both Win32 and WinRT. */ WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID); -#endif /* SQLITE_WIN32_FILEMAPPING_API && !defined(SQLITE_OMIT_WAL) */ +#endif /* SQLITE_WIN32_FILEMAPPING_API */ /* ** Some Microsoft compilers lack this definition. @@ -33035,7 +33395,7 @@ static struct win_syscall { LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[5].pCurrent) #if (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_ANSI) && \ - !defined(SQLITE_OMIT_WAL)) + (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)) { "CreateFileMappingA", (SYSCALL)CreateFileMappingA, 0 }, #else { "CreateFileMappingA", (SYSCALL)0, 0 }, @@ -33045,7 +33405,7 @@ static struct win_syscall { DWORD,DWORD,DWORD,LPCSTR))aSyscall[6].pCurrent) #if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \ - !defined(SQLITE_OMIT_WAL)) + (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)) { "CreateFileMappingW", (SYSCALL)CreateFileMappingW, 0 }, #else { "CreateFileMappingW", (SYSCALL)0, 0 }, @@ -33385,7 +33745,8 @@ static struct win_syscall { LPOVERLAPPED))aSyscall[48].pCurrent) #endif -#if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL)) +#if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && \ + (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)) { "MapViewOfFile", (SYSCALL)MapViewOfFile, 0 }, #else { "MapViewOfFile", (SYSCALL)0, 0 }, @@ -33455,7 +33816,7 @@ static struct win_syscall { #define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ LPOVERLAPPED))aSyscall[58].pCurrent) -#if SQLITE_OS_WINCE || !defined(SQLITE_OMIT_WAL) +#if SQLITE_OS_WINCE || !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 { "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 }, #else { "UnmapViewOfFile", (SYSCALL)0, 0 }, @@ -33518,7 +33879,7 @@ static struct win_syscall { #define osGetFileInformationByHandleEx ((BOOL(WINAPI*)(HANDLE, \ FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[66].pCurrent) -#if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL) +#if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) { "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 }, #else { "MapViewOfFileFromApp", (SYSCALL)0, 0 }, @@ -33582,7 +33943,7 @@ static struct win_syscall { #define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[74].pCurrent) -#if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL) +#if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) { "CreateFileMappingFromApp", (SYSCALL)CreateFileMappingFromApp, 0 }, #else { "CreateFileMappingFromApp", (SYSCALL)0, 0 }, @@ -33744,8 +34105,8 @@ SQLITE_API int sqlite3_win32_reset_heap(){ int rc; MUTEX_LOGIC( sqlite3_mutex *pMaster; ) /* The main static mutex */ MUTEX_LOGIC( sqlite3_mutex *pMem; ) /* The memsys static mutex */ - MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); ) - MUTEX_LOGIC( pMem = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM); ) + MUTEX_LOGIC( pMaster = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER); ) + MUTEX_LOGIC( pMem = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MEM); ) sqlite3_mutex_enter(pMaster); sqlite3_mutex_enter(pMem); winMemAssertMagic(); @@ -35020,7 +35381,7 @@ static int winRead( int amt, /* Number of bytes to read */ sqlite3_int64 offset /* Begin reading at this offset */ ){ -#if !SQLITE_OS_WINCE +#if !SQLITE_OS_WINCE && !defined(SQLITE_WIN32_NO_OVERLAPPED) OVERLAPPED overlapped; /* The offset for ReadFile. */ #endif winFile *pFile = (winFile*)id; /* file handle */ @@ -35052,7 +35413,7 @@ static int winRead( } #endif -#if SQLITE_OS_WINCE +#if SQLITE_OS_WINCE || defined(SQLITE_WIN32_NO_OVERLAPPED) if( winSeekFile(pFile, offset) ){ OSTRACE(("READ file=%p, rc=SQLITE_FULL\n", pFile->h)); return SQLITE_FULL; @@ -35124,13 +35485,13 @@ static int winWrite( } #endif -#if SQLITE_OS_WINCE +#if SQLITE_OS_WINCE || defined(SQLITE_WIN32_NO_OVERLAPPED) rc = winSeekFile(pFile, offset); if( rc==0 ){ #else { #endif -#if !SQLITE_OS_WINCE +#if !SQLITE_OS_WINCE && !defined(SQLITE_WIN32_NO_OVERLAPPED) OVERLAPPED overlapped; /* The offset for WriteFile. */ #endif u8 *aRem = (u8 *)pBuf; /* Data yet to be written */ @@ -35138,14 +35499,14 @@ static int winWrite( DWORD nWrite; /* Bytes written by each WriteFile() call */ DWORD lastErrno = NO_ERROR; /* Value returned by GetLastError() */ -#if !SQLITE_OS_WINCE +#if !SQLITE_OS_WINCE && !defined(SQLITE_WIN32_NO_OVERLAPPED) memset(&overlapped, 0, sizeof(OVERLAPPED)); overlapped.Offset = (LONG)(offset & 0xffffffff); overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff); #endif while( nRem>0 ){ -#if SQLITE_OS_WINCE +#if SQLITE_OS_WINCE || defined(SQLITE_WIN32_NO_OVERLAPPED) if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, 0) ){ #else if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, &overlapped) ){ @@ -35158,7 +35519,7 @@ static int winWrite( lastErrno = osGetLastError(); break; } -#if !SQLITE_OS_WINCE +#if !SQLITE_OS_WINCE && !defined(SQLITE_WIN32_NO_OVERLAPPED) offset += nWrite; overlapped.Offset = (LONG)(offset & 0xffffffff); overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff); @@ -38539,18 +38900,6 @@ struct PCache { PgHdr *pPage1; /* Reference to page 1 */ }; -/* -** Some of the assert() macros in this code are too expensive to run -** even during normal debugging. Use them only rarely on long-running -** tests. Enable the expensive asserts using the -** -DSQLITE_ENABLE_EXPENSIVE_ASSERT=1 compile-time option. -*/ -#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT -# define expensive_assert(X) assert(X) -#else -# define expensive_assert(X) -#endif - /********************************** Linked List Management ********************/ /* Allowed values for second argument to pcacheManageDirtyList() */ @@ -38704,7 +39053,8 @@ SQLITE_PRIVATE int sqlite3PcacheSetPageSize(PCache *pCache, int szPage){ if( pCache->szPage ){ sqlite3_pcache *pNew; pNew = sqlite3GlobalConfig.pcache2.xCreate( - szPage, pCache->szExtra + sizeof(PgHdr), pCache->bPurgeable + szPage, pCache->szExtra + ROUND8(sizeof(PgHdr)), + pCache->bPurgeable ); if( pNew==0 ) return SQLITE_NOMEM; sqlite3GlobalConfig.pcache2.xCachesize(pNew, numberOfCachePages(pCache)); @@ -39159,6 +39509,13 @@ SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){ sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache); } +/* +** Return the size of the header added by this middleware layer +** in the page-cache hierarchy. +*/ +SQLITE_PRIVATE int sqlite3HeaderSizePcache(void){ return ROUND8(sizeof(PgHdr)); } + + #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG) /* ** For all dirty pages currently in the cache, invoke the specified @@ -39472,7 +39829,7 @@ static PgHdr1 *pcache1AllocPage(PCache1 *pCache){ pPg = 0; } #else - pPg = pcache1Alloc(sizeof(PgHdr1) + pCache->szPage + pCache->szExtra); + pPg = pcache1Alloc(ROUND8(sizeof(PgHdr1)) + pCache->szPage + pCache->szExtra); p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage]; #endif pcache1EnterMutex(pCache->pGroup); @@ -40157,6 +40514,11 @@ SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){ sqlite3_config(SQLITE_CONFIG_PCACHE2, &defaultMethods); } +/* +** Return the size of the header on each page of this PCACHE implementation. +*/ +SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void){ return ROUND8(sizeof(PgHdr1)); } + #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT /* ** This function is called to free superfluous dynamically allocated memory @@ -41513,6 +41875,8 @@ struct Pager { u8 setMaster; /* True if a m-j name has been written to jrnl */ u8 doNotSpill; /* Do not spill the cache when non-zero */ u8 subjInMemory; /* True to use in-memory sub-journals */ + u8 bUseFetch; /* True to use xFetch() */ + u8 hasBeenUsed; /* True if any content previously read from this pager*/ Pgno dbSize; /* Number of pages in the database */ Pgno dbOrigSize; /* dbSize before the current transaction */ Pgno dbFileSize; /* Number of pages in the database file */ @@ -41530,9 +41894,9 @@ struct Pager { sqlite3_backup *pBackup; /* Pointer to list of ongoing backup processes */ PagerSavepoint *aSavepoint; /* Array of active savepoints */ int nSavepoint; /* Number of elements in aSavepoint[] */ + u32 iDataVersion; /* Changes whenever database content changes */ char dbFileVers[16]; /* Changes whenever database file changes */ - u8 bUseFetch; /* True to use xFetch() */ int nMmapOut; /* Number of mmap pages currently outstanding */ sqlite3_int64 szMmap; /* Desired maximum mmap size */ PgHdr *pMmapFreelist; /* List of free mmap page headers (pDirty) */ @@ -42548,10 +42912,19 @@ static int writeMasterJournal(Pager *pPager, const char *zMaster){ ** Discard the entire contents of the in-memory page-cache. */ static void pager_reset(Pager *pPager){ + pPager->iDataVersion++; sqlite3BackupRestart(pPager->pBackup); sqlite3PcacheClear(pPager->pPCache); } +/* +** Return the pPager->iDataVersion value +*/ +SQLITE_PRIVATE u32 sqlite3PagerDataVersion(Pager *pPager){ + assert( pPager->eState>PAGER_OPEN ); + return pPager->iDataVersion; +} + /* ** Free all structures in the Pager.aSavepoint[] array and set both ** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal @@ -43766,7 +44139,7 @@ static int readDbPage(PgHdr *pPg, u32 iFrame){ ** ** For an encrypted database, the situation is more complex: bytes ** 24..39 of the database are white noise. But the probability of - ** white noising equaling 16 bytes of 0xff is vanishingly small so + ** white noise equaling 16 bytes of 0xff is vanishingly small so ** we should still be ok. */ memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers)); @@ -44754,7 +45127,7 @@ static int pagerAcquireMapPage( PgHdr **ppPage /* OUT: Acquired page object */ ){ PgHdr *p; /* Memory mapped page to return */ - + if( pPager->pMmapFreelist ){ *ppPage = p = pPager->pMmapFreelist; pPager->pMmapFreelist = p->pDirty; @@ -45985,16 +46358,12 @@ SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){ ); } - if( !pPager->tempFile && ( - pPager->pBackup - || sqlite3PcachePagecount(pPager->pPCache)>0 - || USEFETCH(pPager) - )){ - /* The shared-lock has just been acquired on the database file - ** and there are already pages in the cache (from a previous - ** read or write transaction). Check to see if the database - ** has been modified. If the database has changed, flush the - ** cache. + if( !pPager->tempFile && pPager->hasBeenUsed ){ + /* The shared-lock has just been acquired then check to + ** see if the database has been modified. If the database has changed, + ** flush the cache. The pPager->hasBeenUsed flag prevents this from + ** occurring on the very first access to a file, in order to save a + ** single unnecessary sqlite3OsRead() call at the start-up. ** ** Database changes is detected by looking at 15 bytes beginning ** at offset 24 into the file. The first 4 of these 16 bytes are @@ -46159,6 +46528,7 @@ SQLITE_PRIVATE int sqlite3PagerAcquire( if( pgno==0 ){ return SQLITE_CORRUPT_BKPT; } + pPager->hasBeenUsed = 1; /* If the pager is in the error state, return an error immediately. ** Otherwise, request the page from the PCache layer. */ @@ -46308,6 +46678,7 @@ SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){ assert( pgno!=0 ); assert( pPager->pPCache!=0 ); pPage = sqlite3PcacheFetch(pPager->pPCache, pgno, 0); + assert( pPage==0 || pPager->hasBeenUsed ); return sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pPage); } @@ -47174,6 +47545,7 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){ } PAGERTRACE(("COMMIT %d\n", PAGERID(pPager))); + pPager->iDataVersion++; rc = pager_end_transaction(pPager, pPager->setMaster, 1); return pager_error(pPager, rc); } @@ -47714,6 +48086,18 @@ SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, i } #endif +/* +** The page handle passed as the first argument refers to a dirty page +** with a page number other than iNew. This function changes the page's +** page number to iNew and sets the value of the PgHdr.flags field to +** the value passed as the third parameter. +*/ +SQLITE_PRIVATE void sqlite3PagerRekey(DbPage *pPg, Pgno iNew, u16 flags){ + assert( pPg->pgno!=iNew ); + pPg->flags = flags; + sqlite3PcacheMove(pPg, iNew); +} + /* ** Return a pointer to the data for the specified page. */ @@ -47930,7 +48314,8 @@ SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int eMode, int *pnLog, int rc = SQLITE_OK; if( pPager->pWal ){ rc = sqlite3WalCheckpoint(pPager->pWal, eMode, - pPager->xBusyHandler, pPager->pBusyHandlerArg, + (eMode==SQLITE_CHECKPOINT_PASSIVE ? 0 : pPager->xBusyHandler), + pPager->pBusyHandlerArg, pPager->ckptSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace, pnLog, pnCkpt ); @@ -48112,6 +48497,7 @@ SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){ } #endif + #endif /* SQLITE_OMIT_DISKIO */ /************** End of pager.c ***********************************************/ @@ -49621,7 +50007,7 @@ static void walMergesort( ** Free an iterator allocated by walIteratorInit(). */ static void walIteratorFree(WalIterator *p){ - sqlite3ScratchFree(p); + sqlite3_free(p); } /* @@ -49656,7 +50042,7 @@ static int walIteratorInit(Wal *pWal, WalIterator **pp){ nByte = sizeof(WalIterator) + (nSegment-1)*sizeof(struct WalSegment) + iLast*sizeof(ht_slot); - p = (WalIterator *)sqlite3ScratchMalloc(nByte); + p = (WalIterator *)sqlite3_malloc(nByte); if( !p ){ return SQLITE_NOMEM; } @@ -49666,7 +50052,7 @@ static int walIteratorInit(Wal *pWal, WalIterator **pp){ /* Allocate temporary space used by the merge-sort routine. This block ** of memory will be freed before this function returns. */ - aTmp = (ht_slot *)sqlite3ScratchMalloc( + aTmp = (ht_slot *)sqlite3_malloc( sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast) ); if( !aTmp ){ @@ -49703,7 +50089,7 @@ static int walIteratorInit(Wal *pWal, WalIterator **pp){ p->aSegment[i].aPgno = (u32 *)aPgno; } } - sqlite3ScratchFree(aTmp); + sqlite3_free(aTmp); if( rc!=SQLITE_OK ){ walIteratorFree(p); @@ -49740,6 +50126,38 @@ static int walPagesize(Wal *pWal){ return (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16); } +/* +** The following is guaranteed when this function is called: +** +** a) the WRITER lock is held, +** b) the entire log file has been checkpointed, and +** c) any existing readers are reading exclusively from the database +** file - there are no readers that may attempt to read a frame from +** the log file. +** +** This function updates the shared-memory structures so that the next +** client to write to the database (which may be this one) does so by +** writing frames into the start of the log file. +** +** The value of parameter salt1 is used as the aSalt[1] value in the +** new wal-index header. It should be passed a pseudo-random value (i.e. +** one obtained from sqlite3_randomness()). +*/ +static void walRestartHdr(Wal *pWal, u32 salt1){ + volatile WalCkptInfo *pInfo = walCkptInfo(pWal); + int i; /* Loop counter */ + u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */ + pWal->nCkpt++; + pWal->hdr.mxFrame = 0; + sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0])); + memcpy(&pWal->hdr.aSalt[1], &salt1, 4); + walIndexWriteHdr(pWal); + pInfo->nBackfill = 0; + pInfo->aReadMark[1] = 0; + for(i=2; iaReadMark[i] = READMARK_NOT_USED; + assert( pInfo->aReadMark[0]==0 ); +} + /* ** Copy as much content as we can from the WAL back into the database file ** in response to an sqlite3_wal_checkpoint() request or the equivalent. @@ -49774,7 +50192,7 @@ static int walPagesize(Wal *pWal){ static int walCheckpoint( Wal *pWal, /* Wal connection */ int eMode, /* One of PASSIVE, FULL or RESTART */ - int (*xBusyCall)(void*), /* Function to call when busy */ + int (*xBusy)(void*), /* Function to call when busy */ void *pBusyArg, /* Context argument for xBusyHandler */ int sync_flags, /* Flags for OsSync() (or 0) */ u8 *zBuf /* Temporary buffer to use */ @@ -49788,7 +50206,6 @@ static int walCheckpoint( u32 mxPage; /* Max database page to write */ int i; /* Loop counter */ volatile WalCkptInfo *pInfo; /* The checkpoint status information */ - int (*xBusy)(void*) = 0; /* Function to call when waiting for locks */ szPage = walPagesize(pWal); testcase( szPage<=32768 ); @@ -49803,7 +50220,9 @@ static int walCheckpoint( } assert( pIter ); - if( eMode!=SQLITE_CHECKPOINT_PASSIVE ) xBusy = xBusyCall; + /* EVIDENCE-OF: R-62920-47450 The busy-handler callback is never invoked + ** in the SQLITE_CHECKPOINT_PASSIVE mode. */ + assert( eMode!=SQLITE_CHECKPOINT_PASSIVE || xBusy==0 ); /* Compute in mxSafeFrame the index of the last frame of the WAL that is ** safe to write into the database. Frames beyond mxSafeFrame might @@ -49892,19 +50311,38 @@ static int walCheckpoint( rc = SQLITE_OK; } - /* If this is an SQLITE_CHECKPOINT_RESTART operation, and the entire wal - ** file has been copied into the database file, then block until all - ** readers have finished using the wal file. This ensures that the next - ** process to write to the database restarts the wal file. + /* If this is an SQLITE_CHECKPOINT_RESTART or TRUNCATE operation, and the + ** entire wal file has been copied into the database file, then block + ** until all readers have finished using the wal file. This ensures that + ** the next process to write to the database restarts the wal file. */ if( rc==SQLITE_OK && eMode!=SQLITE_CHECKPOINT_PASSIVE ){ assert( pWal->writeLock ); if( pInfo->nBackfillhdr.mxFrame ){ rc = SQLITE_BUSY; - }else if( eMode==SQLITE_CHECKPOINT_RESTART ){ + }else if( eMode>=SQLITE_CHECKPOINT_RESTART ){ + u32 salt1; + sqlite3_randomness(4, &salt1); assert( mxSafeFrame==pWal->hdr.mxFrame ); rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(1), WAL_NREADER-1); if( rc==SQLITE_OK ){ + if( eMode==SQLITE_CHECKPOINT_TRUNCATE ){ + /* IMPLEMENTATION-OF: R-44699-57140 This mode works the same way as + ** SQLITE_CHECKPOINT_RESTART with the addition that it also + ** truncates the log file to zero bytes just prior to a + ** successful return. + ** + ** In theory, it might be safe to do this without updating the + ** wal-index header in shared memory, as all subsequent reader or + ** writer clients should see that the entire log file has been + ** checkpointed and behave accordingly. This seems unsafe though, + ** as it would leave the system in a state where the contents of + ** the wal-index header do not match the contents of the + ** file-system. To avoid this, update the wal-index header to + ** indicate that the log file contains zero valid frames. */ + walRestartHdr(pWal, salt1); + rc = sqlite3OsTruncate(pWal->pWalFd, 0); + } walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); } } @@ -50477,7 +50915,7 @@ SQLITE_PRIVATE int sqlite3WalFindFrame( for(iKey=walHash(pgno); aHash[iKey]; iKey=walNextHash(iKey)){ u32 iFrame = aHash[iKey] + iZero; if( iFrame<=iLast && aPgno[aHash[iKey]]==pgno ){ - /* assert( iFrame>iRead ); -- not true if there is corruption */ + assert( iFrame>iRead || CORRUPT_DB ); iRead = iFrame; } if( (nCollide--)==0 ){ @@ -50690,7 +51128,6 @@ SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){ return rc; } - /* ** This function is called just before writing a set of frames to the log ** file (see sqlite3WalFrames()). It checks to see if, instead of appending @@ -50723,20 +51160,8 @@ static int walRestartLog(Wal *pWal){ ** In theory it would be Ok to update the cache of the header only ** at this point. But updating the actual wal-index header is also ** safe and means there is no special case for sqlite3WalUndo() - ** to handle if this transaction is rolled back. - */ - int i; /* Loop counter */ - u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */ - - pWal->nCkpt++; - pWal->hdr.mxFrame = 0; - sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0])); - aSalt[1] = salt1; - walIndexWriteHdr(pWal); - pInfo->nBackfill = 0; - pInfo->aReadMark[1] = 0; - for(i=2; iaReadMark[i] = READMARK_NOT_USED; - assert( pInfo->aReadMark[0]==0 ); + ** to handle if this transaction is rolled back. */ + walRestartHdr(pWal, salt1); walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); }else if( rc!=SQLITE_BUSY ){ return rc; @@ -51024,7 +51449,7 @@ SQLITE_PRIVATE int sqlite3WalFrames( */ SQLITE_PRIVATE int sqlite3WalCheckpoint( Wal *pWal, /* Wal connection */ - int eMode, /* PASSIVE, FULL or RESTART */ + int eMode, /* PASSIVE, FULL, RESTART, or TRUNCATE */ int (*xBusy)(void*), /* Function to call when busy */ void *pBusyArg, /* Context argument for xBusyHandler */ int sync_flags, /* Flags to sync db file with (or 0) */ @@ -51036,29 +51461,42 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( int rc; /* Return code */ int isChanged = 0; /* True if a new wal-index header is loaded */ int eMode2 = eMode; /* Mode to pass to walCheckpoint() */ + int (*xBusy2)(void*) = xBusy; /* Busy handler for eMode2 */ assert( pWal->ckptLock==0 ); assert( pWal->writeLock==0 ); + /* EVIDENCE-OF: R-62920-47450 The busy-handler callback is never invoked + ** in the SQLITE_CHECKPOINT_PASSIVE mode. */ + assert( eMode!=SQLITE_CHECKPOINT_PASSIVE || xBusy==0 ); + if( pWal->readOnly ) return SQLITE_READONLY; WALTRACE(("WAL%p: checkpoint begins\n", pWal)); + + /* IMPLEMENTATION-OF: R-62028-47212 All calls obtain an exclusive + ** "checkpoint" lock on the database file. */ rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1); if( rc ){ - /* Usually this is SQLITE_BUSY meaning that another thread or process - ** is already running a checkpoint, or maybe a recovery. But it might - ** also be SQLITE_IOERR. */ + /* EVIDENCE-OF: R-10421-19736 If any other process is running a + ** checkpoint operation at the same time, the lock cannot be obtained and + ** SQLITE_BUSY is returned. + ** EVIDENCE-OF: R-53820-33897 Even if there is a busy-handler configured, + ** it will not be invoked in this case. + */ + testcase( rc==SQLITE_BUSY ); + testcase( xBusy!=0 ); return rc; } pWal->ckptLock = 1; - /* If this is a blocking-checkpoint, then obtain the write-lock as well - ** to prevent any writers from running while the checkpoint is underway. - ** This has to be done before the call to walIndexReadHdr() below. + /* IMPLEMENTATION-OF: R-59782-36818 The SQLITE_CHECKPOINT_FULL, RESTART and + ** TRUNCATE modes also obtain the exclusive "writer" lock on the database + ** file. ** - ** If the writer lock cannot be obtained, then a passive checkpoint is - ** run instead. Since the checkpointer is not holding the writer lock, - ** there is no point in blocking waiting for any readers. Assuming no - ** other error occurs, this function will return SQLITE_BUSY to the caller. + ** EVIDENCE-OF: R-60642-04082 If the writer lock cannot be obtained + ** immediately, and a busy-handler is configured, it is invoked and the + ** writer lock retried until either the busy-handler returns 0 or the + ** lock is successfully obtained. */ if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){ rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_WRITE_LOCK, 1); @@ -51066,6 +51504,7 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( pWal->writeLock = 1; }else if( rc==SQLITE_BUSY ){ eMode2 = SQLITE_CHECKPOINT_PASSIVE; + xBusy2 = 0; rc = SQLITE_OK; } } @@ -51083,7 +51522,7 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){ rc = SQLITE_CORRUPT_BKPT; }else{ - rc = walCheckpoint(pWal, eMode2, xBusy, pBusyArg, sync_flags, zBuf); + rc = walCheckpoint(pWal, eMode2, xBusy2, pBusyArg, sync_flags, zBuf); } /* If no error occurred, set the output variables. */ @@ -51582,6 +52021,7 @@ struct Btree { u8 locked; /* True if db currently has pBt locked */ int wantToLock; /* Number of nested calls to sqlite3BtreeEnter() */ int nBackup; /* Number of backup operations reading this btree */ + u32 iDataVersion; /* Combines with pBt->pPager->iDataVersion */ Btree *pNext; /* List of other sharable Btrees from the same db */ Btree *pPrev; /* Back pointer of the same list */ #ifndef SQLITE_OMIT_SHARED_CACHE @@ -53334,6 +53774,11 @@ static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){ ** end of the page and all free space is collected into one ** big FreeBlk that occurs in between the header and cell ** pointer array and the cell content area. +** +** EVIDENCE-OF: R-44582-60138 SQLite may from time to time reorganize a +** b-tree page so that there are no freeblocks or fragment bytes, all +** unused bytes are contained in the unallocated space region, and all +** cells are packed tightly at the end of the page. */ static int defragmentPage(MemPage *pPage){ int i; /* Loop counter */ @@ -53346,6 +53791,7 @@ static int defragmentPage(MemPage *pPage){ int nCell; /* Number of cells on the page */ unsigned char *data; /* The page data */ unsigned char *temp; /* Temp area for cell content */ + unsigned char *src; /* Source of content */ int iCellFirst; /* First allowable cell index */ int iCellLast; /* Last possible cell index */ @@ -53355,15 +53801,13 @@ static int defragmentPage(MemPage *pPage){ assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); assert( pPage->nOverflow==0 ); assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - temp = sqlite3PagerTempSpace(pPage->pBt->pPager); - data = pPage->aData; + temp = 0; + src = data = pPage->aData; hdr = pPage->hdrOffset; cellOffset = pPage->cellOffset; nCell = pPage->nCell; assert( nCell==get2byte(&data[hdr+3]) ); usableSize = pPage->pBt->usableSize; - cbrk = get2byte(&data[hdr+5]); - memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk); cbrk = usableSize; iCellFirst = cellOffset + 2*nCell; iCellLast = usableSize - 4; @@ -53382,7 +53826,7 @@ static int defragmentPage(MemPage *pPage){ } #endif assert( pc>=iCellFirst && pc<=iCellLast ); - size = cellSizePtr(pPage, &temp[pc]); + size = cellSizePtr(pPage, &src[pc]); cbrk -= size; #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK) if( cbrk=iCellFirst ); testcase( cbrk+size==usableSize ); testcase( pc+size==usableSize ); - memcpy(&data[cbrk], &temp[pc], size); put2byte(pAddr, cbrk); + if( temp==0 ){ + int x; + if( cbrk==pc ) continue; + temp = sqlite3PagerTempSpace(pPage->pBt->pPager); + x = get2byte(&data[hdr+5]); + memcpy(&temp[x], &data[x], (cbrk+size) - x); + src = temp; + } + memcpy(&data[cbrk], &src[pc], size); } assert( cbrk>=iCellFirst ); put2byte(&data[hdr+5], cbrk); @@ -53412,6 +53864,69 @@ static int defragmentPage(MemPage *pPage){ return SQLITE_OK; } +/* +** Search the free-list on page pPg for space to store a cell nByte bytes in +** size. If one can be found, return a pointer to the space and remove it +** from the free-list. +** +** If no suitable space can be found on the free-list, return NULL. +** +** This function may detect corruption within pPg. If corruption is +** detected then *pRc is set to SQLITE_CORRUPT and NULL is returned. +** +** If a slot of at least nByte bytes is found but cannot be used because +** there are already at least 60 fragmented bytes on the page, return NULL. +** In this case, if pbDefrag parameter is not NULL, set *pbDefrag to true. +*/ +static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc, int *pbDefrag){ + const int hdr = pPg->hdrOffset; + u8 * const aData = pPg->aData; + int iAddr; + int pc; + int usableSize = pPg->pBt->usableSize; + + for(iAddr=hdr+1; (pc = get2byte(&aData[iAddr]))>0; iAddr=pc){ + int size; /* Size of the free slot */ + /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of + ** increasing offset. */ + if( pc>usableSize-4 || pc=nByte ){ + int x = size - nByte; + testcase( x==4 ); + testcase( x==3 ); + if( x<4 ){ + /* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total + ** number of bytes in fragments may not exceed 60. */ + if( aData[hdr+7]>=60 ){ + if( pbDefrag ) *pbDefrag = 1; + return 0; + } + /* Remove the slot from the free-list. Update the number of + ** fragmented bytes within the page. */ + memcpy(&aData[iAddr], &aData[pc], 2); + aData[hdr+7] += (u8)x; + }else if( size+pc > usableSize ){ + *pRc = SQLITE_CORRUPT_BKPT; + return 0; + }else{ + /* The slot remains on the free-list. Reduce its size to account + ** for the portion used by the new allocation. */ + put2byte(&aData[pc+2], x); + } + return &aData[pc + x]; + } + } + + return 0; +} + /* ** Allocate nByte bytes of space from within the B-Tree page passed ** as the first argument. Write into *pIdx the index into pPage->aData[] @@ -53429,9 +53944,8 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */ u8 * const data = pPage->aData; /* Local cache of pPage->aData */ int top; /* First byte of cell content area */ + int rc = SQLITE_OK; /* Integer return code */ int gap; /* First byte of gap between cell pointers and cell content */ - int rc; /* Integer return code */ - int usableSize; /* Usable size of the page */ assert( sqlite3PagerIswriteable(pPage->pDbPage) ); assert( pPage->pBt ); @@ -53439,20 +53953,18 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ assert( nByte>=0 ); /* Minimum cell size is 4 */ assert( pPage->nFree>=nByte ); assert( pPage->nOverflow==0 ); - usableSize = pPage->pBt->usableSize; - assert( nByte < usableSize-8 ); + assert( nByte < (int)(pPage->pBt->usableSize-8) ); assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf ); gap = pPage->cellOffset + 2*pPage->nCell; assert( gap<=65536 ); - top = get2byte(&data[hdr+5]); - if( gap>top ){ - if( top==0 ){ - top = 65536; - }else{ - return SQLITE_CORRUPT_BKPT; - } - } + /* EVIDENCE-OF: R-29356-02391 If the database uses a 65536-byte page size + ** and the reserved space is zero (the usual value for reserved space) + ** then the cell content offset of an empty page wants to be 65536. + ** However, that integer is too large to be stored in a 2-byte unsigned + ** integer, so a value of 0 is used in its place. */ + top = get2byteNotZero(&data[hdr+5]); + if( gap>top ) return SQLITE_CORRUPT_BKPT; /* If there is enough space between gap and top for one more cell pointer ** array entry offset, and if the freelist is not empty, then search the @@ -53462,33 +53974,14 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ testcase( gap+1==top ); testcase( gap==top ); if( gap+2<=top && (data[hdr+1] || data[hdr+2]) ){ - int pc, addr; - for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){ - int size; /* Size of the free slot */ - if( pc>usableSize-4 || pc=nByte ){ - int x = size - nByte; - testcase( x==4 ); - testcase( x==3 ); - if( x<4 ){ - if( data[hdr+7]>=60 ) goto defragment_page; - /* Remove the slot from the free-list. Update the number of - ** fragmented bytes within the page. */ - memcpy(&data[addr], &data[pc], 2); - data[hdr+7] += (u8)x; - }else if( size+pc > usableSize ){ - return SQLITE_CORRUPT_BKPT; - }else{ - /* The slot remains on the free-list. Reduce its size to account - ** for the portion used by the new allocation. */ - put2byte(&data[pc+2], x); - } - *pIdx = pc + x; - return SQLITE_OK; - } + int bDefrag = 0; + u8 *pSpace = pageFindSlot(pPage, nByte, &rc, &bDefrag); + if( rc ) return rc; + if( bDefrag ) goto defragment_page; + if( pSpace ){ + assert( pSpace>=data && (pSpace - data)<65536 ); + *pIdx = (int)(pSpace - data); + return SQLITE_OK; } } @@ -53497,8 +53990,8 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ */ testcase( gap+2+nByte==top ); if( gap+2+nByte>top ){ -defragment_page: - testcase( pPage->nCell==0 ); + defragment_page: + assert( pPage->nCell>0 || CORRUPT_DB ); rc = defragmentPage(pPage); if( rc ) return rc; top = get2byteNotZero(&data[hdr+5]); @@ -53545,7 +54038,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ assert( pPage->pBt!=0 ); assert( sqlite3PagerIswriteable(pPage->pDbPage) ); assert( iStart>=pPage->hdrOffset+6+pPage->childPtrSize ); - assert( iEnd <= pPage->pBt->usableSize ); + assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize ); assert( sqlite3_mutex_held(pPage->pBt->mutex) ); assert( iSize>=4 ); /* Minimum cell size is 4 */ assert( iStart<=iLast ); @@ -53640,18 +54133,32 @@ static int decodeFlags(MemPage *pPage, int flagByte){ pPage->childPtrSize = 4-4*pPage->leaf; pBt = pPage->pBt; if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){ + /* EVIDENCE-OF: R-03640-13415 A value of 5 means the page is an interior + ** table b-tree page. */ + assert( (PTF_LEAFDATA|PTF_INTKEY)==5 ); + /* EVIDENCE-OF: R-20501-61796 A value of 13 means the page is a leaf + ** table b-tree page. */ + assert( (PTF_LEAFDATA|PTF_INTKEY|PTF_LEAF)==13 ); pPage->intKey = 1; pPage->intKeyLeaf = pPage->leaf; pPage->noPayload = !pPage->leaf; pPage->maxLocal = pBt->maxLeaf; pPage->minLocal = pBt->minLeaf; }else if( flagByte==PTF_ZERODATA ){ + /* EVIDENCE-OF: R-27225-53936 A value of 2 means the page is an interior + ** index b-tree page. */ + assert( (PTF_ZERODATA)==2 ); + /* EVIDENCE-OF: R-16571-11615 A value of 10 means the page is a leaf + ** index b-tree page. */ + assert( (PTF_ZERODATA|PTF_LEAF)==10 ); pPage->intKey = 0; pPage->intKeyLeaf = 0; pPage->noPayload = 0; pPage->maxLocal = pBt->maxLocal; pPage->minLocal = pBt->minLocal; }else{ + /* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is + ** an error. */ return SQLITE_CORRUPT_BKPT; } pPage->max1bytePayload = pBt->max1bytePayload; @@ -53691,21 +54198,33 @@ static int btreeInitPage(MemPage *pPage){ hdr = pPage->hdrOffset; data = pPage->aData; + /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating + ** the b-tree page type. */ if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT; assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); pPage->maskPage = (u16)(pBt->pageSize - 1); pPage->nOverflow = 0; usableSize = pBt->usableSize; - pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf; + pPage->cellOffset = cellOffset = hdr + 8 + pPage->childPtrSize; pPage->aDataEnd = &data[usableSize]; pPage->aCellIdx = &data[cellOffset]; + /* EVIDENCE-OF: R-58015-48175 The two-byte integer at offset 5 designates + ** the start of the cell content area. A zero value for this integer is + ** interpreted as 65536. */ top = get2byteNotZero(&data[hdr+5]); + /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the + ** number of cells on the page. */ pPage->nCell = get2byte(&data[hdr+3]); if( pPage->nCell>MX_CELL(pBt) ){ /* To many cells for a single page. The page must be corrupt */ return SQLITE_CORRUPT_BKPT; } testcase( pPage->nCell==MX_CELL(pBt) ); + /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only + ** possible for a root page of a table that contains no rows) then the + ** offset to the cell content area will equal the page size minus the + ** bytes of reserved space. */ + assert( pPage->nCell>0 || top==usableSize || CORRUPT_DB ); /* A malformed database page might cause us to read past the end ** of page when parsing a cell. @@ -53739,13 +54258,20 @@ static int btreeInitPage(MemPage *pPage){ } #endif - /* Compute the total free space on the page */ + /* Compute the total free space on the page + ** EVIDENCE-OF: R-23588-34450 The two-byte integer at offset 1 gives the + ** start of the first freeblock on the page, or is zero if there are no + ** freeblocks. */ pc = get2byte(&data[hdr+1]); - nFree = data[hdr+7] + top; + nFree = data[hdr+7] + top; /* Init nFree to non-freeblock free space */ while( pc>0 ){ u16 next, size; if( pciCellLast ){ - /* Start of free block is off the page */ + /* EVIDENCE-OF: R-55530-52930 In a well-formed b-tree page, there will + ** always be at least one cell before the first freeblock. + ** + ** Or, the freeblock is off the end of the page + */ return SQLITE_CORRUPT_BKPT; } next = get2byte(&data[pc]); @@ -54151,6 +54677,9 @@ SQLITE_PRIVATE int sqlite3BtreeOpen( #ifdef SQLITE_SECURE_DELETE pBt->btsFlags |= BTS_SECURE_DELETE; #endif + /* EVIDENCE-OF: R-51873-39618 The page size for a database file is + ** determined by the 2-byte integer located at an offset of 16 bytes from + ** the beginning of the database file. */ pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16); if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){ @@ -54169,6 +54698,9 @@ SQLITE_PRIVATE int sqlite3BtreeOpen( #endif nReserve = 0; }else{ + /* EVIDENCE-OF: R-37497-42412 The size of the reserved region is + ** determined by the one-byte unsigned integer found at an offset of 20 + ** into the database file header. */ nReserve = zDbHeader[20]; pBt->btsFlags |= BTS_PAGESIZE_FIXED; #ifndef SQLITE_OMIT_AUTOVACUUM @@ -54678,6 +55210,9 @@ static int lockBtree(BtShared *pBt){ u32 usableSize; u8 *page1 = pPage1->aData; rc = SQLITE_NOTADB; + /* EVIDENCE-OF: R-43737-39999 Every valid SQLite database file begins + ** with the following 16 bytes (in hex): 53 51 4c 69 74 65 20 66 6f 72 6d + ** 61 74 20 33 00. */ if( memcmp(page1, zMagicHeader, 16)!=0 ){ goto page1_init_failed; } @@ -54718,15 +55253,21 @@ static int lockBtree(BtShared *pBt){ } #endif - /* The maximum embedded fraction must be exactly 25%. And the minimum - ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data. + /* EVIDENCE-OF: R-15465-20813 The maximum and minimum embedded payload + ** fractions and the leaf payload fraction values must be 64, 32, and 32. + ** ** The original design allowed these amounts to vary, but as of ** version 3.6.0, we require them to be fixed. */ if( memcmp(&page1[21], "\100\040\040",3)!=0 ){ goto page1_init_failed; } + /* EVIDENCE-OF: R-51873-39618 The page size for a database file is + ** determined by the 2-byte integer located at an offset of 16 bytes from + ** the beginning of the database file. */ pageSize = (page1[16]<<8) | (page1[17]<<16); + /* EVIDENCE-OF: R-25008-21688 The size of a page is a power of two + ** between 512 and 65536 inclusive. */ if( ((pageSize-1)&pageSize)!=0 || pageSize>SQLITE_MAX_PAGE_SIZE || pageSize<=256 @@ -54734,6 +55275,13 @@ static int lockBtree(BtShared *pBt){ goto page1_init_failed; } assert( (pageSize & 7)==0 ); + /* EVIDENCE-OF: R-59310-51205 The "reserved space" size in the 1-byte + ** integer at offset 20 is the number of bytes of space at the end of + ** each page to reserve for extensions. + ** + ** EVIDENCE-OF: R-37497-42412 The size of the reserved region is + ** determined by the one-byte unsigned integer found at an offset of 20 + ** into the database file header. */ usableSize = pageSize - page1[20]; if( (u32)pageSize!=pBt->pageSize ){ /* After reading the first page of the database assuming a page size @@ -54754,6 +55302,9 @@ static int lockBtree(BtShared *pBt){ rc = SQLITE_CORRUPT_BKPT; goto page1_init_failed; } + /* EVIDENCE-OF: R-28312-64704 However, the usable size is not allowed to + ** be less than 480. In other words, if the page size is 512, then the + ** reserved space size cannot exceed 32. */ if( usableSize<480 ){ goto page1_init_failed; } @@ -55634,6 +56185,7 @@ SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){ sqlite3BtreeLeave(p); return rc; } + p->iDataVersion--; /* Compensate for pPager->iDataVersion++; */ pBt->inTransaction = TRANS_READ; btreeClearHasContent(pBt); } @@ -55997,7 +56549,7 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){ releasePage(pCur->apPage[i]); } unlockBtreeIfUnused(pBt); - sqlite3DbFree(pBtree->db, pCur->aOverflow); + sqlite3_free(pCur->aOverflow); /* sqlite3_free(pCur); */ sqlite3BtreeLeave(pBtree); } @@ -56292,6 +56844,7 @@ static int accessPayload( offset -= pCur->info.nLocal; } + if( rc==SQLITE_OK && amt>0 ){ const u32 ovflSize = pBt->usableSize - 4; /* Bytes content per ovfl page */ Pgno nextPage; @@ -56309,8 +56862,8 @@ static int accessPayload( if( eOp!=2 && (pCur->curFlags & BTCF_ValidOvfl)==0 ){ int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize; if( nOvfl>pCur->nOvflAlloc ){ - Pgno *aNew = (Pgno*)sqlite3DbRealloc( - pCur->pBtree->db, pCur->aOverflow, nOvfl*2*sizeof(Pgno) + Pgno *aNew = (Pgno*)sqlite3Realloc( + pCur->aOverflow, nOvfl*2*sizeof(Pgno) ); if( aNew==0 ){ rc = SQLITE_NOMEM; @@ -56357,6 +56910,7 @@ static int accessPayload( */ assert( eOp!=2 ); assert( pCur->curFlags & BTCF_ValidOvfl ); + assert( pCur->pBtree->db==pBt->db ); if( pCur->aOverflow[iIdx+1] ){ nextPage = pCur->aOverflow[iIdx+1]; }else{ @@ -57331,6 +57885,8 @@ static int allocateBtreePage( assert( eMode==BTALLOC_ANY || (nearby>0 && IfNotOmitAV(pBt->autoVacuum)) ); pPage1 = pBt->pPage1; mxPage = btreePagecount(pBt); + /* EVIDENCE-OF: R-05119-02637 The 4-byte big-endian integer at offset 36 + ** stores stores the total number of pages on the freelist. */ n = get4byte(&pPage1->aData[36]); testcase( n==mxPage-1 ); if( n>=mxPage ){ @@ -57377,8 +57933,14 @@ static int allocateBtreePage( do { pPrevTrunk = pTrunk; if( pPrevTrunk ){ + /* EVIDENCE-OF: R-01506-11053 The first integer on a freelist trunk page + ** is the page number of the next freelist trunk page in the list or + ** zero if this is the last freelist trunk page. */ iTrunk = get4byte(&pPrevTrunk->aData[0]); }else{ + /* EVIDENCE-OF: R-59841-13798 The 4-byte big-endian integer at offset 32 + ** stores the page number of the first page of the freelist, or zero if + ** the freelist is empty. */ iTrunk = get4byte(&pPage1->aData[32]); } testcase( iTrunk==mxPage ); @@ -57393,8 +57955,9 @@ static int allocateBtreePage( } assert( pTrunk!=0 ); assert( pTrunk->aData!=0 ); - - k = get4byte(&pTrunk->aData[4]); /* # of leaves on this trunk page */ + /* EVIDENCE-OF: R-13523-04394 The second integer on a freelist trunk page + ** is the number of leaf page pointers to follow. */ + k = get4byte(&pTrunk->aData[4]); if( k==0 && !searchList ){ /* The trunk has no leaves and the list is not being searched. ** So extract the trunk page itself and use it as the newly @@ -57712,6 +58275,11 @@ static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){ ** for now. At some point in the future (once everyone has upgraded ** to 3.6.0 or later) we should consider fixing the conditional above ** to read "usableSize/4-2" instead of "usableSize/4-8". + ** + ** EVIDENCE-OF: R-19920-11576 However, newer versions of SQLite still + ** avoid using the last six entries in the freelist trunk page array in + ** order that database files created by newer versions of SQLite can be + ** read by older versions of SQLite. */ rc = sqlite3PagerWrite(pTrunk->pDbPage); if( rc==SQLITE_OK ){ @@ -58063,9 +58631,17 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){ return; } pPage->nCell--; - memmove(ptr, ptr+2, 2*(pPage->nCell - idx)); - put2byte(&data[hdr+3], pPage->nCell); - pPage->nFree += 2; + if( pPage->nCell==0 ){ + memset(&data[hdr+1], 0, 4); + data[hdr+7] = 0; + put2byte(&data[hdr+5], pPage->pBt->usableSize); + pPage->nFree = pPage->pBt->usableSize - pPage->hdrOffset + - pPage->childPtrSize - 8; + }else{ + memmove(ptr, ptr+2, 2*(pPage->nCell - idx)); + put2byte(&data[hdr+3], pPage->nCell); + pPage->nFree += 2; + } } /* @@ -58160,45 +58736,271 @@ static void insertCell( } /* -** Add a list of cells to a page. The page should be initially empty. -** The cells are guaranteed to fit on the page. +** Array apCell[] contains pointers to nCell b-tree page cells. The +** szCell[] array contains the size in bytes of each cell. This function +** replaces the current contents of page pPg with the contents of the cell +** array. +** +** Some of the cells in apCell[] may currently be stored in pPg. This +** function works around problems caused by this by making a copy of any +** such cells before overwriting the page data. +** +** The MemPage.nFree field is invalidated by this function. It is the +** responsibility of the caller to set it correctly. */ -static void assemblePage( - MemPage *pPage, /* The page to be assembled */ - int nCell, /* The number of cells to add to this page */ - u8 **apCell, /* Pointers to cell bodies */ - u16 *aSize /* Sizes of the cells */ +static void rebuildPage( + MemPage *pPg, /* Edit this page */ + int nCell, /* Final number of cells on page */ + u8 **apCell, /* Array of cells */ + u16 *szCell /* Array of cell sizes */ ){ - int i; /* Loop counter */ - u8 *pCellptr; /* Address of next cell pointer */ - int cellbody; /* Address of next cell body */ - u8 * const data = pPage->aData; /* Pointer to data for pPage */ - const int hdr = pPage->hdrOffset; /* Offset of header on pPage */ - const int nUsable = pPage->pBt->usableSize; /* Usable size of page */ + const int hdr = pPg->hdrOffset; /* Offset of header on pPg */ + u8 * const aData = pPg->aData; /* Pointer to data for pPg */ + const int usableSize = pPg->pBt->usableSize; + u8 * const pEnd = &aData[usableSize]; + int i; + u8 *pCellptr = pPg->aCellIdx; + u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager); + u8 *pData; - assert( pPage->nOverflow==0 ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - assert( nCell>=0 && nCell<=(int)MX_CELL(pPage->pBt) - && (int)MX_CELL(pPage->pBt)<=10921); - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + i = get2byte(&aData[hdr+5]); + memcpy(&pTmp[i], &aData[i], usableSize - i); - /* Check that the page has just been zeroed by zeroPage() */ - assert( pPage->nCell==0 ); - assert( get2byteNotZero(&data[hdr+5])==nUsable ); - - pCellptr = &pPage->aCellIdx[nCell*2]; - cellbody = nUsable; - for(i=nCell-1; i>=0; i--){ - u16 sz = aSize[i]; - pCellptr -= 2; - cellbody -= sz; - put2byte(pCellptr, cellbody); - memcpy(&data[cellbody], apCell[i], sz); + pData = pEnd; + for(i=0; iaData && pCellnFree -= (nCell*2 + nUsable - cellbody); - pPage->nCell = (u16)nCell; + + /* The pPg->nFree field is now set incorrectly. The caller will fix it. */ + pPg->nCell = nCell; + pPg->nOverflow = 0; + + put2byte(&aData[hdr+1], 0); + put2byte(&aData[hdr+3], pPg->nCell); + put2byte(&aData[hdr+5], pData - aData); + aData[hdr+7] = 0x00; +} + +/* +** Array apCell[] contains nCell pointers to b-tree cells. Array szCell +** contains the size in bytes of each such cell. This function attempts to +** add the cells stored in the array to page pPg. If it cannot (because +** the page needs to be defragmented before the cells will fit), non-zero +** is returned. Otherwise, if the cells are added successfully, zero is +** returned. +** +** Argument pCellptr points to the first entry in the cell-pointer array +** (part of page pPg) to populate. After cell apCell[0] is written to the +** page body, a 16-bit offset is written to pCellptr. And so on, for each +** cell in the array. It is the responsibility of the caller to ensure +** that it is safe to overwrite this part of the cell-pointer array. +** +** When this function is called, *ppData points to the start of the +** content area on page pPg. If the size of the content area is extended, +** *ppData is updated to point to the new start of the content area +** before returning. +** +** Finally, argument pBegin points to the byte immediately following the +** end of the space required by this page for the cell-pointer area (for +** all cells - not just those inserted by the current call). If the content +** area must be extended to before this point in order to accomodate all +** cells in apCell[], then the cells do not fit and non-zero is returned. +*/ +static int pageInsertArray( + MemPage *pPg, /* Page to add cells to */ + u8 *pBegin, /* End of cell-pointer array */ + u8 **ppData, /* IN/OUT: Page content -area pointer */ + u8 *pCellptr, /* Pointer to cell-pointer area */ + int nCell, /* Number of cells to add to pPg */ + u8 **apCell, /* Array of cells */ + u16 *szCell /* Array of cell sizes */ +){ + int i; + u8 *aData = pPg->aData; + u8 *pData = *ppData; + const int bFreelist = aData[1] || aData[2]; + assert( CORRUPT_DB || pPg->hdrOffset==0 ); /* Never called on page 1 */ + for(i=0; iaData; + u8 * const pEnd = &aData[pPg->pBt->usableSize]; + u8 * const pStart = &aData[pPg->hdrOffset + 8 + pPg->childPtrSize]; + int nRet = 0; + int i; + u8 *pFree = 0; + int szFree = 0; + + for(i=0; i=pStart && pCellaData && (pFree - aData)<65536 ); + freeSpace(pPg, (u16)(pFree - aData), szFree); + } + pFree = pCell; + szFree = sz; + if( pFree+sz>pEnd ) return 0; + }else{ + pFree = pCell; + szFree += sz; + } + nRet++; + } + } + if( pFree ){ + assert( pFree>aData && (pFree - aData)<65536 ); + freeSpace(pPg, (u16)(pFree - aData), szFree); + } + return nRet; +} + +/* +** apCell[] and szCell[] contains pointers to and sizes of all cells in the +** pages being balanced. The current page, pPg, has pPg->nCell cells starting +** with apCell[iOld]. After balancing, this page should hold nNew cells +** starting at apCell[iNew]. +** +** This routine makes the necessary adjustments to pPg so that it contains +** the correct cells after being balanced. +** +** The pPg->nFree field is invalid when this function returns. It is the +** responsibility of the caller to set it correctly. +*/ +static void editPage( + MemPage *pPg, /* Edit this page */ + int iOld, /* Index of first cell currently on page */ + int iNew, /* Index of new first cell on page */ + int nNew, /* Final number of cells on page */ + u8 **apCell, /* Array of cells */ + u16 *szCell /* Array of cell sizes */ +){ + u8 * const aData = pPg->aData; + const int hdr = pPg->hdrOffset; + u8 *pBegin = &pPg->aCellIdx[nNew * 2]; + int nCell = pPg->nCell; /* Cells stored on pPg */ + u8 *pData; + u8 *pCellptr; + int i; + int iOldEnd = iOld + pPg->nCell + pPg->nOverflow; + int iNewEnd = iNew + nNew; + +#ifdef SQLITE_DEBUG + u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager); + memcpy(pTmp, aData, pPg->pBt->usableSize); +#endif + + /* Remove cells from the start and end of the page */ + if( iOldaCellIdx, &pPg->aCellIdx[nShift*2], nCell*2); + nCell -= nShift; + } + if( iNewEnd < iOldEnd ){ + nCell -= pageFreeArray( + pPg, iOldEnd-iNewEnd, &apCell[iNewEnd], &szCell[iNewEnd] + ); + } + + pData = &aData[get2byteNotZero(&aData[hdr+5])]; + if( pDataaCellIdx; + memmove(&pCellptr[nAdd*2], pCellptr, nCell*2); + if( pageInsertArray( + pPg, pBegin, &pData, pCellptr, + nAdd, &apCell[iNew], &szCell[iNew] + ) ) goto editpage_fail; + nCell += nAdd; + } + + /* Add any overflow cells */ + for(i=0; inOverflow; i++){ + int iCell = (iOld + pPg->aiOvfl[i]) - iNew; + if( iCell>=0 && iCellaCellIdx[iCell * 2]; + memmove(&pCellptr[2], pCellptr, (nCell - iCell) * 2); + nCell++; + if( pageInsertArray( + pPg, pBegin, &pData, pCellptr, + 1, &apCell[iCell + iNew], &szCell[iCell + iNew] + ) ) goto editpage_fail; + } + } + + /* Append cells to the end of the page */ + pCellptr = &pPg->aCellIdx[nCell*2]; + if( pageInsertArray( + pPg, pBegin, &pData, pCellptr, + nNew-nCell, &apCell[iNew+nCell], &szCell[iNew+nCell] + ) ) goto editpage_fail; + + pPg->nCell = nNew; + pPg->nOverflow = 0; + + put2byte(&aData[hdr+3], pPg->nCell); + put2byte(&aData[hdr+5], pData - aData); + +#ifdef SQLITE_DEBUG + for(i=0; iaCellIdx[i*2]); + if( pCell>=aData && pCell<&aData[pPg->pBt->usableSize] ){ + pCell = &pTmp[pCell - aData]; + } + assert( 0==memcmp(pCell, &aData[iOff], szCell[i+iNew]) ); + } +#endif + + return; + editpage_fail: + /* Unable to edit this page. Rebuild it from scratch instead. */ + rebuildPage(pPg, nNew, &apCell[iNew], &szCell[iNew]); } /* @@ -58252,7 +59054,7 @@ static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){ assert( pPage->nOverflow==1 ); /* This error condition is now caught prior to reaching this function */ - if( pPage->nCell==0 ) return SQLITE_CORRUPT_BKPT; + if( NEVER(pPage->nCell==0) ) return SQLITE_CORRUPT_BKPT; /* Allocate a new page. This page will become the right-sibling of ** pPage. Make the parent page writable, so that the new divider cell @@ -58270,7 +59072,8 @@ static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){ assert( sqlite3PagerIswriteable(pNew->pDbPage) ); assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) ); zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF); - assemblePage(pNew, 1, &pCell, &szCell); + rebuildPage(pNew, 1, &pCell, &szCell); + pNew->nFree = pBt->usableSize - pNew->cellOffset - 2 - szCell; /* If this is an auto-vacuum database, update the pointer map ** with entries for the new page, and any pointer from the @@ -58489,17 +59292,22 @@ static int balance_nonroot( int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */ int szScratch; /* Size of scratch memory requested */ MemPage *apOld[NB]; /* pPage and up to two siblings */ - MemPage *apCopy[NB]; /* Private copies of apOld[] pages */ MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */ u8 *pRight; /* Location in parent of right-sibling pointer */ u8 *apDiv[NB-1]; /* Divider cells in pParent */ int cntNew[NB+2]; /* Index in aCell[] of cell after i-th page */ - int szNew[NB+2]; /* Combined size of cells place on i-th page */ + int cntOld[NB+2]; /* Old index in aCell[] after i-th page */ + int szNew[NB+2]; /* Combined size of cells placed on i-th page */ u8 **apCell = 0; /* All cells begin balanced */ u16 *szCell; /* Local size of all cells in apCell[] */ u8 *aSpace1; /* Space for copies of dividers cells */ Pgno pgno; /* Temp var to store a page number in */ + u8 abDone[NB+2]; /* True after i'th new page is populated */ + Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */ + Pgno aPgOrder[NB+2]; /* Copy of aPgno[] used for sorting pages */ + u16 aPgFlags[NB+2]; /* flags field of new pages before shuffling */ + memset(abDone, 0, sizeof(abDone)); pBt = pParent->pBt; assert( sqlite3_mutex_held(pBt->mutex) ); assert( sqlite3PagerIswriteable(pParent->pDbPage) ); @@ -58608,12 +59416,14 @@ static int balance_nonroot( /* ** Allocate space for memory structures */ - k = pBt->pageSize + ROUND8(sizeof(MemPage)); szScratch = nMaxCells*sizeof(u8*) /* apCell */ + nMaxCells*sizeof(u16) /* szCell */ - + pBt->pageSize /* aSpace1 */ - + k*nOld; /* Page copies (apCopy) */ + + pBt->pageSize; /* aSpace1 */ + + /* EVIDENCE-OF: R-28375-38319 SQLite will never request a scratch buffer + ** that is more than 6 times the database page size. */ + assert( szScratch<=6*(int)pBt->pageSize ); apCell = sqlite3ScratchMalloc( szScratch ); if( apCell==0 ){ rc = SQLITE_NOMEM; @@ -58626,8 +59436,8 @@ static int balance_nonroot( /* ** Load pointers to all cells on sibling pages and the divider cells ** into the local apCell[] array. Make copies of the divider cells - ** into space obtained from aSpace1[] and remove the divider cells - ** from pParent. + ** into space obtained from aSpace1[]. The divider cells have already + ** been removed from pParent. ** ** If the siblings are on leaf pages, then the child pointers of the ** divider cells are stripped from the cells before they are copied @@ -58643,15 +59453,7 @@ static int balance_nonroot( leafData = apOld[0]->intKeyLeaf; for(i=0; ipageSize + k*i]; - memcpy(pOld, apOld[i], sizeof(MemPage)); - pOld->aData = (void*)&pOld[1]; - memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize); + MemPage *pOld = apOld[i]; limit = pOld->nCell+pOld->nOverflow; if( pOld->nOverflow>0 ){ @@ -58672,6 +59474,7 @@ static int balance_nonroot( nCell++; } } + cntOld[i] = nCell; if( i usableSpace ){ - szNew[k] = subtotal - szCell[i]; + szNew[k] = subtotal - szCell[i] - 2; cntNew[k] = i; if( leafData ){ i--; } subtotal = 0; @@ -58737,9 +59544,10 @@ static int balance_nonroot( /* ** The packing computed by the previous block is biased toward the siblings - ** on the left side. The left siblings are always nearly full, while the - ** right-most sibling might be nearly empty. This block of code attempts - ** to adjust the packing of siblings to get a better balance. + ** on the left side (siblings with smaller keys). The left siblings are + ** always nearly full, while the right-most sibling might be nearly empty. + ** The next block of code attempts to adjust the packing of siblings to + ** get a better balance. ** ** This adjustment is more than an optimization. The packing above might ** be so out of balance as to be illegal. For example, the right-most @@ -58768,22 +59576,18 @@ static int balance_nonroot( szNew[i-1] = szLeft; } - /* Either we found one or more cells (cntnew[0])>0) or pPage is - ** a virtual root page. A virtual root page is when the real root - ** page is page 1 and we are the only child of that page. - ** - ** UPDATE: The assert() below is not necessarily true if the database - ** file is corrupt. The corruption will be detected and reported later - ** in this procedure so there is no need to act upon it now. + /* Sanity check: For a non-corrupt database file one of the follwing + ** must be true: + ** (1) We found one or more cells (cntNew[0])>0), or + ** (2) pPage is a virtual root page. A virtual root page is when + ** the real root page is page 1 and we are the only child of + ** that page. */ -#if 0 - assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) ); -#endif - - TRACE(("BALANCE: old: %d %d %d ", - apOld[0]->pgno, - nOld>=2 ? apOld[1]->pgno : 0, - nOld>=3 ? apOld[2]->pgno : 0 + assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) || CORRUPT_DB); + TRACE(("BALANCE: old: %d(nc=%d) %d(nc=%d) %d(nc=%d)\n", + apOld[0]->pgno, apOld[0]->nCell, + nOld>=2 ? apOld[1]->pgno : 0, nOld>=2 ? apOld[1]->nCell : 0, + nOld>=3 ? apOld[2]->pgno : 0, nOld>=3 ? apOld[2]->nCell : 0 )); /* @@ -58806,8 +59610,10 @@ static int balance_nonroot( assert( i>0 ); rc = allocateBtreePage(pBt, &pNew, &pgno, (bBulk ? 1 : pgno), 0); if( rc ) goto balance_cleanup; + zeroPage(pNew, pageFlags); apNew[i] = pNew; nNew++; + cntOld[i] = nCell; /* Set the pointer-map entry for the new sibling page. */ if( ISAUTOVACUUM ){ @@ -58819,135 +59625,247 @@ static int balance_nonroot( } } - /* Free any old pages that were not reused as new pages. - */ - while( ipgno; - int minI = i; - for(j=i+1; jpgno<(unsigned)minV ){ - minI = j; - minV = apNew[j]->pgno; + for(i=0; ipgno; + aPgFlags[i] = apNew[i]->pDbPage->flags; + for(j=0; ji ){ - MemPage *pT; - pT = apNew[i]; - apNew[i] = apNew[minI]; - apNew[minI] = pT; + } + for(i=0; ii ){ + sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0); + } + sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]); + apNew[i]->pgno = pgno; } } - TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n", - apNew[0]->pgno, szNew[0], + + TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) " + "%d(%d nc=%d) %d(%d nc=%d)\n", + apNew[0]->pgno, szNew[0], cntNew[0], nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0, + nNew>=2 ? cntNew[1] - cntNew[0] - !leafData : 0, nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0, + nNew>=3 ? cntNew[2] - cntNew[1] - !leafData : 0, nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0, - nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0)); + nNew>=4 ? cntNew[3] - cntNew[2] - !leafData : 0, + nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0, + nNew>=5 ? cntNew[4] - cntNew[3] - !leafData : 0 + )); assert( sqlite3PagerIswriteable(pParent->pDbPage) ); put4byte(pRight, apNew[nNew-1]->pgno); - /* - ** Evenly distribute the data in apCell[] across the new pages. - ** Insert divider cells into pParent as necessary. + /* If the sibling pages are not leaves, ensure that the right-child pointer + ** of the right-most new sibling page is set to the value that was + ** originally in the same field of the right-most old sibling page. */ + if( (pageFlags & PTF_LEAF)==0 && nOld!=nNew ){ + MemPage *pOld = (nNew>nOld ? apNew : apOld)[nOld-1]; + memcpy(&apNew[nNew-1]->aData[8], &pOld->aData[8], 4); + } + + /* Make any required updates to pointer map entries associated with + ** cells stored on sibling pages following the balance operation. Pointer + ** map entries associated with divider cells are set by the insertCell() + ** routine. The associated pointer map entries are: + ** + ** a) if the cell contains a reference to an overflow chain, the + ** entry associated with the first page in the overflow chain, and + ** + ** b) if the sibling pages are not leaves, the child page associated + ** with the cell. + ** + ** If the sibling pages are not leaves, then the pointer map entry + ** associated with the right-child of each sibling may also need to be + ** updated. This happens below, after the sibling pages have been + ** populated, not here. */ - j = 0; - for(i=0; inCell>0 || (nNew==1 && cntNew[0]==0) ); - assert( pNew->nOverflow==0 ); + if( ISAUTOVACUUM ){ + MemPage *pNew = apNew[0]; + u8 *aOld = pNew->aData; + int cntOldNext = pNew->nCell + pNew->nOverflow; + int usableSize = pBt->usableSize; + int iNew = 0; + int iOld = 0; - j = cntNew[i]; + for(i=0; inCell + pOld->nOverflow + !leafData; + aOld = pOld->aData; + } + if( i==cntNew[iNew] ){ + pNew = apNew[++iNew]; + if( !leafData ) continue; + } - /* If the sibling page assembled above was not the right-most sibling, - ** insert a divider cell into the parent page. - */ - assert( ileaf ){ - memcpy(&pNew->aData[8], pCell, 4); - }else if( leafData ){ - /* If the tree is a leaf-data tree, and the siblings are leaves, - ** then there is no divider cell in apCell[]. Instead, the divider - ** cell consists of the integer key for the right-most cell of - ** the sibling-page assembled above only. - */ - CellInfo info; - j--; - btreeParseCellPtr(pNew, apCell[j], &info); - pCell = pTemp; - sz = 4 + putVarint(&pCell[4], info.nKey); - pTemp = 0; - }else{ - pCell -= 4; - /* Obscure case for non-leaf-data trees: If the cell at pCell was - ** previously stored on a leaf node, and its reported size was 4 - ** bytes, then it may actually be smaller than this - ** (see btreeParseCellPtr(), 4 bytes is the minimum size of - ** any cell). But it is important to pass the correct size to - ** insertCell(), so reparse the cell now. - ** - ** Note that this can never happen in an SQLite data file, as all - ** cells are at least 4 bytes. It only happens in b-trees used - ** to evaluate "IN (SELECT ...)" and similar clauses. - */ - if( szCell[j]==4 ){ - assert(leafCorrection==4); - sz = cellSizePtr(pParent, pCell); + /* Cell pCell is destined for new sibling page pNew. Originally, it + ** was either part of sibling page iOld (possibly an overflow cell), + ** or else the divider cell to the left of sibling page iOld. So, + ** if sibling page iOld had the same page number as pNew, and if + ** pCell really was a part of sibling page iOld (not a divider or + ** overflow cell), we can skip updating the pointer map entries. */ + if( iOld>=nNew + || pNew->pgno!=aPgno[iOld] + || pCell=&aOld[usableSize] + ){ + if( !leafCorrection ){ + ptrmapPut(pBt, get4byte(pCell), PTRMAP_BTREE, pNew->pgno, &rc); + } + if( szCell[i]>pNew->minLocal ){ + ptrmapPutOvflPtr(pNew, pCell, &rc); } } - iOvflSpace += sz; - assert( sz<=pBt->maxLocal+23 ); - assert( iOvflSpace <= (int)pBt->pageSize ); - insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno, &rc); - if( rc!=SQLITE_OK ) goto balance_cleanup; - assert( sqlite3PagerIswriteable(pParent->pDbPage) ); - - j++; - nxDiv++; } } - assert( j==nCell ); + + /* Insert new divider cells into pParent. */ + for(i=0; ileaf ){ + memcpy(&pNew->aData[8], pCell, 4); + }else if( leafData ){ + /* If the tree is a leaf-data tree, and the siblings are leaves, + ** then there is no divider cell in apCell[]. Instead, the divider + ** cell consists of the integer key for the right-most cell of + ** the sibling-page assembled above only. + */ + CellInfo info; + j--; + btreeParseCellPtr(pNew, apCell[j], &info); + pCell = pTemp; + sz = 4 + putVarint(&pCell[4], info.nKey); + pTemp = 0; + }else{ + pCell -= 4; + /* Obscure case for non-leaf-data trees: If the cell at pCell was + ** previously stored on a leaf node, and its reported size was 4 + ** bytes, then it may actually be smaller than this + ** (see btreeParseCellPtr(), 4 bytes is the minimum size of + ** any cell). But it is important to pass the correct size to + ** insertCell(), so reparse the cell now. + ** + ** Note that this can never happen in an SQLite data file, as all + ** cells are at least 4 bytes. It only happens in b-trees used + ** to evaluate "IN (SELECT ...)" and similar clauses. + */ + if( szCell[j]==4 ){ + assert(leafCorrection==4); + sz = cellSizePtr(pParent, pCell); + } + } + iOvflSpace += sz; + assert( sz<=pBt->maxLocal+23 ); + assert( iOvflSpace <= (int)pBt->pageSize ); + insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno, &rc); + if( rc!=SQLITE_OK ) goto balance_cleanup; + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + } + + /* Now update the actual sibling pages. The order in which they are updated + ** is important, as this code needs to avoid disrupting any page from which + ** cells may still to be read. In practice, this means: + ** + ** (1) If cells are moving left (from apNew[iPg] to apNew[iPg-1]) + ** then it is not safe to update page apNew[iPg] until after + ** the left-hand sibling apNew[iPg-1] has been updated. + ** + ** (2) If cells are moving right (from apNew[iPg] to apNew[iPg+1]) + ** then it is not safe to update page apNew[iPg] until after + ** the right-hand sibling apNew[iPg+1] has been updated. + ** + ** If neither of the above apply, the page is safe to update. + ** + ** The iPg value in the following loop starts at nNew-1 goes down + ** to 0, then back up to nNew-1 again, thus making two passes over + ** the pages. On the initial downward pass, only condition (1) above + ** needs to be tested because (2) will always be true from the previous + ** step. On the upward pass, both conditions are always true, so the + ** upwards pass simply processes pages that were missed on the downward + ** pass. + */ + for(i=1-nNew; i=0 && iPg=0 /* On the upwards pass, or... */ + || cntOld[iPg-1]>=cntNew[iPg-1] /* Condition (1) is true */ + ){ + int iNew; + int iOld; + int nNewCell; + + /* Verify condition (1): If cells are moving left, update iPg + ** only after iPg-1 has already been updated. */ + assert( iPg==0 || cntOld[iPg-1]>=cntNew[iPg-1] || abDone[iPg-1] ); + + /* Verify condition (2): If cells are moving right, update iPg + ** only after iPg+1 has already been updated. */ + assert( cntNew[iPg]>=cntOld[iPg] || abDone[iPg+1] ); + + if( iPg==0 ){ + iNew = iOld = 0; + nNewCell = cntNew[0]; + }else{ + iOld = iPgnFree = usableSpace-szNew[iPg]; + assert( apNew[iPg]->nOverflow==0 ); + assert( apNew[iPg]->nCell==nNewCell ); + } + } + + /* All pages have been processed exactly once */ + assert( memcmp(abDone, "\01\01\01\01\01", nNew)==0 ); + assert( nOld>0 ); assert( nNew>0 ); - if( (pageFlags & PTF_LEAF)==0 ){ - u8 *zChild = &apCopy[nOld-1]->aData[8]; - memcpy(&apNew[nNew-1]->aData[8], zChild, 4); - } if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){ /* The root page of the b-tree now contains no cells. The only sibling @@ -58960,126 +59878,50 @@ static int balance_nonroot( ** sets all pointer-map entries corresponding to database image pages ** for which the pointer is stored within the content being copied. ** - ** The second assert below verifies that the child page is defragmented - ** (it must be, as it was just reconstructed using assemblePage()). This - ** is important if the parent page happens to be page 1 of the database - ** image. */ + ** It is critical that the child page be defragmented before being + ** copied into the parent, because if the parent is page 1 then it will + ** by smaller than the child due to the database header, and so all the + ** free space needs to be up front. + */ assert( nNew==1 ); + rc = defragmentPage(apNew[0]); + testcase( rc!=SQLITE_OK ); assert( apNew[0]->nFree == - (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2) + (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2) + || rc!=SQLITE_OK ); copyNodeContent(apNew[0], pParent, &rc); freePage(apNew[0], &rc); - }else if( ISAUTOVACUUM ){ - /* Fix the pointer-map entries for all the cells that were shifted around. - ** There are several different types of pointer-map entries that need to - ** be dealt with by this routine. Some of these have been set already, but - ** many have not. The following is a summary: - ** - ** 1) The entries associated with new sibling pages that were not - ** siblings when this function was called. These have already - ** been set. We don't need to worry about old siblings that were - ** moved to the free-list - the freePage() code has taken care - ** of those. - ** - ** 2) The pointer-map entries associated with the first overflow - ** page in any overflow chains used by new divider cells. These - ** have also already been taken care of by the insertCell() code. - ** - ** 3) If the sibling pages are not leaves, then the child pages of - ** cells stored on the sibling pages may need to be updated. - ** - ** 4) If the sibling pages are not internal intkey nodes, then any - ** overflow pages used by these cells may need to be updated - ** (internal intkey nodes never contain pointers to overflow pages). - ** - ** 5) If the sibling pages are not leaves, then the pointer-map - ** entries for the right-child pages of each sibling may need - ** to be updated. - ** - ** Cases 1 and 2 are dealt with above by other code. The next - ** block deals with cases 3 and 4 and the one after that, case 5. Since - ** setting a pointer map entry is a relatively expensive operation, this - ** code only sets pointer map entries for child or overflow pages that have - ** actually moved between pages. */ - MemPage *pNew = apNew[0]; - MemPage *pOld = apCopy[0]; - int nOverflow = pOld->nOverflow; - int iNextOld = pOld->nCell + nOverflow; - int iOverflow = (nOverflow ? pOld->aiOvfl[0] : -1); - j = 0; /* Current 'old' sibling page */ - k = 0; /* Current 'new' sibling page */ - for(i=0; inCell + pOld->nOverflow; - if( pOld->nOverflow ){ - nOverflow = pOld->nOverflow; - iOverflow = i + !leafData + pOld->aiOvfl[0]; - } - isDivider = !leafData; - } - - assert(nOverflow>0 || iOverflowaiOvfl[0]==pOld->aiOvfl[1]-1); - assert(nOverflow<3 || pOld->aiOvfl[1]==pOld->aiOvfl[2]-1); - if( i==iOverflow ){ - isDivider = 1; - if( (--nOverflow)>0 ){ - iOverflow++; - } - } - - if( i==cntNew[k] ){ - /* Cell i is the cell immediately following the last cell on new - ** sibling page k. If the siblings are not leaf pages of an - ** intkey b-tree, then cell i is a divider cell. */ - pNew = apNew[++k]; - if( !leafData ) continue; - } - assert( jpgno!=pNew->pgno ){ - if( !leafCorrection ){ - ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno, &rc); - } - if( szCell[i]>pNew->minLocal ){ - ptrmapPutOvflPtr(pNew, apCell[i], &rc); - } - } + }else if( ISAUTOVACUUM && !leafCorrection ){ + /* Fix the pointer map entries associated with the right-child of each + ** sibling page. All other pointer map entries have already been taken + ** care of. */ + for(i=0; iaData[8]); + ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc); } + } - if( !leafCorrection ){ - for(i=0; iaData[8]); - ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc); - } - } + assert( pParent->isInit ); + TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n", + nOld, nNew, nCell)); + + /* Free any old pages that were not reused as new pages. + */ + for(i=nNew; iisInit ){ /* The ptrmapCheckPages() contains assert() statements that verify that ** all pointer map pages are set correctly. This is helpful while ** debugging. This is usually disabled because a corrupt database may ** cause an assert() statement to fail. */ ptrmapCheckPages(apNew, nNew); ptrmapCheckPages(&pParent, 1); -#endif } - - assert( pParent->isInit ); - TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n", - nOld, nNew, nCell)); +#endif /* ** Cleanup before returning. @@ -59971,6 +60813,13 @@ SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){ ** The schema layer numbers meta values differently. At the schema ** layer (and the SetCookie and ReadCookie opcodes) the number of ** free pages is not visible. So Cookie[0] is the same as Meta[1]. +** +** This routine treats Meta[BTREE_DATA_VERSION] as a special case. Instead +** of reading the value out of the header, it instead loads the "DataVersion" +** from the pager. The BTREE_DATA_VERSION value is not actually stored in the +** database file. It is a number computed by the pager. But its access +** pattern is the same as header meta values, and so it is convenient to +** read it from this routine. */ SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){ BtShared *pBt = p->pBt; @@ -59981,7 +60830,11 @@ SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){ assert( pBt->pPage1 ); assert( idx>=0 && idx<=15 ); - *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]); + if( idx==BTREE_DATA_VERSION ){ + *pMeta = sqlite3PagerDataVersion(pBt->pPager) + p->iDataVersion; + }else{ + *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]); + } /* If auto-vacuum is disabled in this build and this is an auto-vacuum ** database, mark the database as read-only. */ @@ -60072,7 +60925,7 @@ SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){ if( pCur->iPage==0 ){ /* All pages of the b-tree have been visited. Return successfully. */ *pnEntry = nEntry; - return SQLITE_OK; + return moveToRoot(pCur); } moveToParent(pCur); }while ( pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell ); @@ -60464,8 +61317,14 @@ static int checkTreePage( assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */ memset(hit+contentOffset, 0, usableSize-contentOffset); memset(hit, 1, contentOffset); + /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the + ** number of cells on the page. */ nCell = get2byte(&data[hdr+3]); + /* EVIDENCE-OF: R-23882-45353 The cell pointer array of a b-tree page + ** immediately follows the b-tree page header. */ cellStart = hdr + 12 - 4*pPage->leaf; + /* EVIDENCE-OF: R-02776-14802 The cell pointer array consists of K 2-byte + ** integer offsets to the cell contents. */ for(i=0; i=pc; j--) hit[j]++; } } + /* EVIDENCE-OF: R-20690-50594 The second field of the b-tree page header + ** is the offset of the first freeblock, or zero if there are no + ** freeblocks on the page. */ i = get2byte(&data[hdr+1]); while( i>0 ){ int size, j; @@ -60488,7 +61350,13 @@ static int checkTreePage( size = get2byte(&data[i+2]); assert( i+size<=usableSize ); /* Enforced by btreeInitPage() */ for(j=i+size-1; j>=i; j--) hit[j]++; + /* EVIDENCE-OF: R-58208-19414 The first 2 bytes of a freeblock are a + ** big-endian integer which is the offset in the b-tree page of the next + ** freeblock in the chain, or zero if the freeblock is the last on the + ** chain. */ j = get2byte(&data[i]); + /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of + ** increasing offset. */ assert( j==0 || j>i+size ); /* Enforced by btreeInitPage() */ assert( j<=usableSize-4 ); /* Enforced by btreeInitPage() */ i = j; @@ -60502,6 +61370,11 @@ static int checkTreePage( break; } } + /* EVIDENCE-OF: R-43263-13491 The total number of bytes in all fragments + ** is stored in the fifth field of the b-tree page header. + ** EVIDENCE-OF: R-07161-27322 The one-byte integer at offset 7 gives the + ** number of fragmented free bytes within the cell content area. + */ if( cnt!=data[hdr+7] ){ checkAppendMsg(pCheck, "Fragmentation of %d bytes reported as %d on page %d", @@ -60905,6 +61778,11 @@ SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *p){ return (p->pBt->btsFlags & BTS_READ_ONLY)!=0; } +/* +** Return the size of the header added to each page by this module. +*/ +SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void){ return ROUND8(sizeof(MemPage)); } + /************** End of btree.c ***********************************************/ /************** Begin file backup.c ******************************************/ /* @@ -61029,6 +61907,20 @@ static int setDestPgsz(sqlite3_backup *p){ return rc; } +/* +** Check that there is no open read-transaction on the b-tree passed as the +** second argument. If there is not, return SQLITE_OK. Otherwise, if there +** is an open read-transaction, return SQLITE_ERROR and leave an error +** message in database handle db. +*/ +static int checkReadTransaction(sqlite3 *db, Btree *p){ + if( sqlite3BtreeIsInReadTrans(p) ){ + sqlite3ErrorWithMsg(db, SQLITE_ERROR, "destination database is in use"); + return SQLITE_ERROR; + } + return SQLITE_OK; +} + /* ** Create an sqlite3_backup process to copy the contents of zSrcDb from ** connection handle pSrcDb to zDestDb in pDestDb. If successful, return @@ -61045,6 +61937,13 @@ SQLITE_API sqlite3_backup *sqlite3_backup_init( ){ sqlite3_backup *p; /* Value to return */ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(pSrcDb)||!sqlite3SafetyCheckOk(pDestDb) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + /* Lock the source database handle. The destination database ** handle is not locked in this routine, but it is locked in ** sqlite3_backup_step(). The user is required to ensure that no @@ -61081,12 +61980,15 @@ SQLITE_API sqlite3_backup *sqlite3_backup_init( p->iNext = 1; p->isAttached = 0; - if( 0==p->pSrc || 0==p->pDest || setDestPgsz(p)==SQLITE_NOMEM ){ + if( 0==p->pSrc || 0==p->pDest + || setDestPgsz(p)==SQLITE_NOMEM + || checkReadTransaction(pDestDb, p->pDest)!=SQLITE_OK + ){ /* One (or both) of the named databases did not exist or an OOM - ** error was hit. The error has already been written into the - ** pDestDb handle. All that is left to do here is free the - ** sqlite3_backup structure. - */ + ** error was hit. Or there is a transaction open on the destination + ** database. The error has already been written into the pDestDb + ** handle. All that is left to do here is free the sqlite3_backup + ** structure. */ sqlite3_free(p); p = 0; } @@ -61241,6 +62143,9 @@ SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){ int pgszSrc = 0; /* Source page size */ int pgszDest = 0; /* Destination page size */ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(p->pSrcDb->mutex); sqlite3BtreeEnter(p->pSrc); if( p->pDestDb ){ @@ -61530,6 +62435,12 @@ SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){ ** call to sqlite3_backup_step(). */ SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif return p->nRemaining; } @@ -61538,6 +62449,12 @@ SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){ ** recent call to sqlite3_backup_step(). */ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif return p->nPagecount; } @@ -63628,6 +64545,7 @@ static Op *opIterNext(VdbeOpIter *p){ */ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){ int hasAbort = 0; + int hasFkCounter = 0; Op *pOp; VdbeOpIter sIter; memset(&sIter, 0, sizeof(sIter)); @@ -63636,15 +64554,17 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){ while( (pOp = opIterNext(&sIter))!=0 ){ int opcode = pOp->opcode; if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename -#ifndef SQLITE_OMIT_FOREIGN_KEY - || (opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1) -#endif || ((opcode==OP_Halt || opcode==OP_HaltIfNull) && ((pOp->p1&0xff)==SQLITE_CONSTRAINT && pOp->p2==OE_Abort)) ){ hasAbort = 1; break; } +#ifndef SQLITE_OMIT_FOREIGN_KEY + if( opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1 ){ + hasFkCounter = 1; + } +#endif } sqlite3DbFree(v->db, sIter.apSub); @@ -63653,7 +64573,7 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){ ** through all opcodes and hasAbort may be set incorrectly. Return ** true for this case to prevent the assert() in the callers frame ** from failing. */ - return ( v->db->mallocFailed || hasAbort==mayAbort ); + return ( v->db->mallocFailed || hasAbort==mayAbort || hasFkCounter ); } #endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */ @@ -63829,6 +64749,34 @@ SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp, return addr; } +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) +/* +** Add an entry to the array of counters managed by sqlite3_stmt_scanstatus(). +*/ +SQLITE_PRIVATE void sqlite3VdbeScanStatus( + Vdbe *p, /* VM to add scanstatus() to */ + int addrExplain, /* Address of OP_Explain (or 0) */ + int addrLoop, /* Address of loop counter */ + int addrVisit, /* Address of rows visited counter */ + LogEst nEst, /* Estimated number of output rows */ + const char *zName /* Name of table or index being scanned */ +){ + int nByte = (p->nScan+1) * sizeof(ScanStatus); + ScanStatus *aNew; + aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte); + if( aNew ){ + ScanStatus *pNew = &aNew[p->nScan++]; + pNew->addrExplain = addrExplain; + pNew->addrLoop = addrLoop; + pNew->addrVisit = addrVisit; + pNew->nEst = nEst; + pNew->zName = sqlite3DbStrDup(p->db, zName); + p->aScan = aNew; + } +} +#endif + + /* ** Change the value of the P1 operand for a specific instruction. ** This routine is useful when a large program is loaded from a @@ -64927,6 +65875,9 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*), &zCsr, zEnd, &nByte); p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte); +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + p->anExec = allocSpace(p->anExec, p->nOp*sizeof(i64), &zCsr, zEnd, &nByte); +#endif if( nByte ){ p->pFree = sqlite3DbMallocZero(db, nByte); } @@ -64943,7 +65894,7 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( p->aVar[n].db = db; } } - if( p->azVar ){ + if( p->azVar && pParse->nzVar>0 ){ p->nzVar = pParse->nzVar; memcpy(p->azVar, pParse->azVar, p->nzVar*sizeof(p->azVar[0])); memset(pParse->azVar, 0, pParse->nzVar*sizeof(pParse->azVar[0])); @@ -64994,6 +65945,9 @@ SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ */ SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){ Vdbe *v = pFrame->v; +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + v->anExec = pFrame->anExec; +#endif v->aOnceFlag = pFrame->aOnceFlag; v->nOnceFlag = pFrame->nOnceFlag; v->aOp = pFrame->aOp; @@ -65004,6 +65958,7 @@ SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){ v->nCursor = pFrame->nCursor; v->db->lastRowid = pFrame->lastRowid; v->nChange = pFrame->nChange; + v->db->nChange = pFrame->nDbChange; return pFrame->pc; } @@ -65571,6 +66526,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); sqlite3CloseSavepoints(db); db->autoCommit = 1; + p->nChange = 0; } } } @@ -65611,6 +66567,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ }else if( rc!=SQLITE_OK ){ p->rc = rc; sqlite3RollbackAll(db, SQLITE_OK); + p->nChange = 0; }else{ db->nDeferredCons = 0; db->nDeferredImmCons = 0; @@ -65619,6 +66576,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ } }else{ sqlite3RollbackAll(db, SQLITE_OK); + p->nChange = 0; } db->nStatement = 0; }else if( eStatementOp==0 ){ @@ -65630,6 +66588,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); sqlite3CloseSavepoints(db); db->autoCommit = 1; + p->nChange = 0; } } @@ -65650,6 +66609,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); sqlite3CloseSavepoints(db); db->autoCommit = 1; + p->nChange = 0; } } @@ -65911,6 +66871,12 @@ SQLITE_PRIVATE void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ sqlite3DbFree(db, p->aColName); sqlite3DbFree(db, p->zSql); sqlite3DbFree(db, p->pFree); +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + for(i=0; inScan; i++){ + sqlite3DbFree(db, p->aScan[i].zName); + } + sqlite3DbFree(db, p->aScan); +#endif } /* @@ -66069,9 +67035,7 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){ i64 i = pMem->u.i; u64 u; if( i<0 ){ - if( i<(-MAX_6BYTE) ) return 6; - /* Previous test prevents: u = -(-9223372036854775808) */ - u = -i; + u = ~i; }else{ u = i; } @@ -66237,10 +67201,14 @@ static u32 SQLITE_NOINLINE serialGet( u32 y = FOUR_BYTE_UINT(buf+4); x = (x<<32) + y; if( serial_type==6 ){ + /* EVIDENCE-OF: R-29851-52272 Value is a big-endian 64-bit + ** twos-complement integer. */ pMem->u.i = *(i64*)&x; pMem->flags = MEM_Int; testcase( pMem->u.i<0 ); }else{ + /* EVIDENCE-OF: R-57343-49114 Value is a big-endian IEEE 754-2008 64-bit + ** floating point number. */ #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT) /* Verify that integers and floating point values use the same ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is @@ -66268,35 +67236,46 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( switch( serial_type ){ case 10: /* Reserved for future use */ case 11: /* Reserved for future use */ - case 0: { /* NULL */ + case 0: { /* Null */ + /* EVIDENCE-OF: R-24078-09375 Value is a NULL. */ pMem->flags = MEM_Null; break; } - case 1: { /* 1-byte signed integer */ + case 1: { + /* EVIDENCE-OF: R-44885-25196 Value is an 8-bit twos-complement + ** integer. */ pMem->u.i = ONE_BYTE_INT(buf); pMem->flags = MEM_Int; testcase( pMem->u.i<0 ); return 1; } case 2: { /* 2-byte signed integer */ + /* EVIDENCE-OF: R-49794-35026 Value is a big-endian 16-bit + ** twos-complement integer. */ pMem->u.i = TWO_BYTE_INT(buf); pMem->flags = MEM_Int; testcase( pMem->u.i<0 ); return 2; } case 3: { /* 3-byte signed integer */ + /* EVIDENCE-OF: R-37839-54301 Value is a big-endian 24-bit + ** twos-complement integer. */ pMem->u.i = THREE_BYTE_INT(buf); pMem->flags = MEM_Int; testcase( pMem->u.i<0 ); return 3; } case 4: { /* 4-byte signed integer */ + /* EVIDENCE-OF: R-01849-26079 Value is a big-endian 32-bit + ** twos-complement integer. */ pMem->u.i = FOUR_BYTE_INT(buf); pMem->flags = MEM_Int; testcase( pMem->u.i<0 ); return 4; } case 5: { /* 6-byte signed integer */ + /* EVIDENCE-OF: R-50385-09674 Value is a big-endian 48-bit + ** twos-complement integer. */ pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf); pMem->flags = MEM_Int; testcase( pMem->u.i<0 ); @@ -66310,11 +67289,17 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( } case 8: /* Integer 0 */ case 9: { /* Integer 1 */ + /* EVIDENCE-OF: R-12976-22893 Value is the integer 0. */ + /* EVIDENCE-OF: R-18143-12121 Value is the integer 1. */ pMem->u.i = serial_type-8; pMem->flags = MEM_Int; return 0; } default: { + /* EVIDENCE-OF: R-14606-31564 Value is a BLOB that is (N-12)/2 bytes in + ** length. + ** EVIDENCE-OF: R-28401-00140 Value is a string in the text encoding and + ** (N-13)/2 bytes in length. */ static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem }; pMem->z = (char *)buf; pMem->n = (serial_type-12)/2; @@ -66513,6 +67498,41 @@ debugCompareEnd: } #endif +#if SQLITE_DEBUG +/* +** Count the number of fields (a.k.a. columns) in the record given by +** pKey,nKey. The verify that this count is less than or equal to the +** limit given by pKeyInfo->nField + pKeyInfo->nXField. +** +** If this constraint is not satisfied, it means that the high-speed +** vdbeRecordCompareInt() and vdbeRecordCompareString() routines will +** not work correctly. If this assert() ever fires, it probably means +** that the KeyInfo.nField or KeyInfo.nXField values were computed +** incorrectly. +*/ +static void vdbeAssertFieldCountWithinLimits( + int nKey, const void *pKey, /* The record to verify */ + const KeyInfo *pKeyInfo /* Compare size with this KeyInfo */ +){ + int nField = 0; + u32 szHdr; + u32 idx; + u32 notUsed; + const unsigned char *aKey = (const unsigned char*)pKey; + + if( CORRUPT_DB ) return; + idx = getVarint32(aKey, szHdr); + assert( szHdr<=nKey ); + while( idxnField+pKeyInfo->nXField ); +} +#else +# define vdbeAssertFieldCountWithinLimits(A,B,C) +#endif + /* ** Both *pMem1 and *pMem2 contain string values. Compare the two values ** using the collation sequence pColl. As usual, return a negative , zero @@ -66924,6 +67944,7 @@ static int vdbeRecordCompareInt( i64 v = pPKey2->aMem[0].u.i; i64 lhs; + vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo); assert( (*(u8*)pKey1)<=0x3F || CORRUPT_DB ); switch( serial_type ){ case 1: { /* 1-byte signed integer */ @@ -67011,6 +68032,7 @@ static int vdbeRecordCompareString( int serial_type; int res; + vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo); getVarint32(&aKey1[1], serial_type); if( serial_type<12 ){ res = pPKey2->r1; /* (pKey1/nKey1) is a number or a null */ @@ -67712,7 +68734,10 @@ static int doWalCallbacks(sqlite3 *db){ for(i=0; inDb; i++){ Btree *pBt = db->aDb[i].pBt; if( pBt ){ - int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt)); + int nEntry; + sqlite3BtreeEnter(pBt); + nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt)); + sqlite3BtreeLeave(pBt); if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){ rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry); } @@ -67892,7 +68917,6 @@ SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){ ** sqlite3_errmsg() and sqlite3_errcode(). */ const char *zErr = (const char *)sqlite3_value_text(db->pErr); - assert( zErr!=0 || db->mallocFailed ); sqlite3DbFree(db, v->zErrMsg); if( !db->mallocFailed ){ v->zErrMsg = sqlite3DbStrDup(db, zErr); @@ -68278,11 +69302,19 @@ static const void *columnName( const void *(*xFunc)(Mem*), int useType ){ - const void *ret = 0; - Vdbe *p = (Vdbe *)pStmt; + const void *ret; + Vdbe *p; int n; - sqlite3 *db = p->db; - + sqlite3 *db; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pStmt==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + ret = 0; + p = (Vdbe *)pStmt; + db = p->db; assert( db!=0 ); n = sqlite3_column_count(pStmt); if( N=0 ){ @@ -68747,6 +69779,12 @@ SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt *pStmt){ */ SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ sqlite3_stmt *pNext; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(pDb) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif sqlite3_mutex_enter(pDb->mutex); if( pStmt==0 ){ pNext = (sqlite3_stmt*)pDb->pVdbe; @@ -68762,11 +69800,87 @@ SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ */ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ Vdbe *pVdbe = (Vdbe*)pStmt; - u32 v = pVdbe->aCounter[op]; + u32 v; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !pStmt ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + v = pVdbe->aCounter[op]; if( resetFlag ) pVdbe->aCounter[op] = 0; return (int)v; } +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +/* +** Return status data for a single loop within query pStmt. +*/ +SQLITE_API int sqlite3_stmt_scanstatus( + sqlite3_stmt *pStmt, /* Prepared statement being queried */ + int idx, /* Index of loop to report on */ + int iScanStatusOp, /* Which metric to return */ + void *pOut /* OUT: Write the answer here */ +){ + Vdbe *p = (Vdbe*)pStmt; + ScanStatus *pScan; + if( idx<0 || idx>=p->nScan ) return 1; + pScan = &p->aScan[idx]; + switch( iScanStatusOp ){ + case SQLITE_SCANSTAT_NLOOP: { + *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop]; + break; + } + case SQLITE_SCANSTAT_NVISIT: { + *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit]; + break; + } + case SQLITE_SCANSTAT_EST: { + double r = 1.0; + LogEst x = pScan->nEst; + while( x<100 ){ + x += 10; + r *= 0.5; + } + *(double*)pOut = r*sqlite3LogEstToInt(x); + break; + } + case SQLITE_SCANSTAT_NAME: { + *(const char**)pOut = pScan->zName; + break; + } + case SQLITE_SCANSTAT_EXPLAIN: { + if( pScan->addrExplain ){ + *(const char**)pOut = p->aOp[ pScan->addrExplain ].p4.z; + }else{ + *(const char**)pOut = 0; + } + break; + } + case SQLITE_SCANSTAT_SELECTID: { + if( pScan->addrExplain ){ + *(int*)pOut = p->aOp[ pScan->addrExplain ].p1; + }else{ + *(int*)pOut = -1; + } + break; + } + default: { + return 1; + } + } + return 0; +} + +/* +** Zero all counters associated with the sqlite3_stmt_scanstatus() data. +*/ +SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe*)pStmt; + memset(p->anExec, 0, p->nOp * sizeof(i64)); +} +#endif /* SQLITE_ENABLE_STMT_SCANSTATUS */ + /************** End of vdbeapi.c *********************************************/ /************** Begin file vdbetrace.c ***************************************/ /* @@ -69652,6 +70766,9 @@ SQLITE_PRIVATE int sqlite3VdbeExec( #endif nVmStep++; pOp = &aOp[pc]; +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + if( p->anExec ) p->anExec[pc]++; +#endif /* Only allow tracing if SQLITE_DEBUG is defined. */ @@ -71677,7 +72794,10 @@ case OP_MakeRecord: { nHdr += serial_type<=127 ? 1 : sqlite3VarintLen(serial_type); }while( (--pRec)>=pData0 ); - /* Add the initial header varint and total the size */ + /* EVIDENCE-OF: R-22564-11647 The header begins with a single varint + ** which determines the total number of bytes in the header. The varint + ** value is the size of the header in bytes including the size varint + ** itself. */ testcase( nHdr==126 ); testcase( nHdr==127 ); if( nHdr<=126 ){ @@ -71711,7 +72831,11 @@ case OP_MakeRecord: { pRec = pData0; do{ serial_type = pRec->uTemp; + /* EVIDENCE-OF: R-06529-47362 Following the size varint are one or more + ** additional varints, one per column. */ i += putVarint32(&zNewRecord[i], serial_type); /* serial type */ + /* EVIDENCE-OF: R-64536-51728 The values for each column in the record + ** immediately follow the header. */ j += sqlite3VdbeSerialPut(&zNewRecord[j], pRec, serial_type); /* content */ }while( (++pRec)<=pLast ); assert( i==nHdr ); @@ -72846,10 +73970,10 @@ case OP_Found: { /* jump, in3 */ }else{ pIdxKey = sqlite3VdbeAllocUnpackedRecord( pC->pKeyInfo, aTempRec, sizeof(aTempRec), &pFree - ); + ); if( pIdxKey==0 ) goto no_mem; assert( pIn3->flags & MEM_Blob ); - assert( (pIn3->flags & MEM_Zero)==0 ); /* zeroblobs already expanded */ + ExpandBlob(pIn3); sqlite3VdbeRecordUnpack(pC->pKeyInfo, pIn3->n, pIn3->z, pIdxKey); } pIdxKey->default_rc = 0; @@ -72857,8 +73981,8 @@ case OP_Found: { /* jump, in3 */ /* For the OP_NoConflict opcode, take the jump if any of the ** input fields are NULL, since any key with a NULL will not ** conflict */ - for(ii=0; iinField; ii++){ + if( pIdxKey->aMem[ii].flags & MEM_Null ){ pc = pOp->p2 - 1; VdbeBranchTaken(1,2); break; } @@ -73543,9 +74667,9 @@ case OP_Sort: { /* jump */ ** ** The next use of the Rowid or Column or Next instruction for P1 ** will refer to the first entry in the database table or index. -** If the table or index is empty and P2>0, then jump immediately to P2. -** If P2 is 0 or if the table or index is not empty, fall through -** to the following instruction. +** If the table or index is empty, jump immediately to P2. +** If the table or index is not empty, fall through to the following +** instruction. ** ** This opcode leaves the cursor configured to move in forward order, ** from the beginning toward the end. In other words, the cursor is @@ -74461,6 +75585,9 @@ case OP_Program: { /* jump */ pFrame->token = pProgram->token; pFrame->aOnceFlag = p->aOnceFlag; pFrame->nOnceFlag = p->nOnceFlag; +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + pFrame->anExec = p->anExec; +#endif pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem]; for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){ @@ -74478,6 +75605,7 @@ case OP_Program: { /* jump */ pFrame->pParent = p->pFrame; pFrame->lastRowid = lastRowid; pFrame->nChange = p->nChange; + pFrame->nDbChange = p->db->nChange; p->nChange = 0; p->pFrame = pFrame; p->aMem = aMem = &VdbeFrameMem(pFrame)[-1]; @@ -74488,6 +75616,9 @@ case OP_Program: { /* jump */ p->nOp = pProgram->nOp; p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor]; p->nOnceFlag = pProgram->nOnce; +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + p->anExec = 0; +#endif pc = -1; memset(p->aOnceFlag, 0, p->nOnceFlag); @@ -74732,8 +75863,8 @@ case OP_AggFinal: { /* Opcode: Checkpoint P1 P2 P3 * * ** ** Checkpoint database P1. This is a no-op if P1 is not currently in -** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL -** or RESTART. Write 1 or 0 into mem[P3] if the checkpoint returns +** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL, +** RESTART, or TRUNCATE. Write 1 or 0 into mem[P3] if the checkpoint returns ** SQLITE_BUSY or not, respectively. Write the number of pages in the ** WAL after the checkpoint into mem[P3+1] and the number of pages ** in the WAL that have been checkpointed after the checkpoint @@ -74751,6 +75882,7 @@ case OP_Checkpoint: { assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE || pOp->p2==SQLITE_CHECKPOINT_FULL || pOp->p2==SQLITE_CHECKPOINT_RESTART + || pOp->p2==SQLITE_CHECKPOINT_TRUNCATE ); rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &aRes[1], &aRes[2]); if( rc==SQLITE_BUSY ){ @@ -75676,6 +76808,11 @@ SQLITE_API int sqlite3_blob_open( Parse *pParse = 0; Incrblob *pBlob = 0; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || ppBlob==0 || zTable==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif flags = !!flags; /* flags = (flags ? 1 : 0); */ *ppBlob = 0; @@ -75894,7 +77031,6 @@ static int blobReadWrite( if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){ /* Request is out of range. Return a transient error. */ rc = SQLITE_ERROR; - sqlite3Error(db, SQLITE_ERROR); }else if( v==0 ){ /* If there is no statement handle, then the blob-handle has ** already been invalidated. Return SQLITE_ABORT in this case. @@ -75912,10 +77048,10 @@ static int blobReadWrite( sqlite3VdbeFinalize(v); p->pStmt = 0; }else{ - db->errCode = rc; v->rc = rc; } } + sqlite3Error(db, rc); rc = sqlite3ApiExit(db, rc); sqlite3_mutex_leave(db->mutex); return rc; @@ -76092,7 +77228,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ ** The sorter is running in multi-threaded mode if (a) the library was built ** with pre-processor symbol SQLITE_MAX_WORKER_THREADS set to a value greater ** than zero, and (b) worker threads have been enabled at runtime by calling -** sqlite3_config(SQLITE_CONFIG_WORKER_THREADS, ...). +** "PRAGMA threads=N" with some value of N greater than 0. ** ** When Rewind() is called, any data remaining in memory is flushed to a ** final PMA. So at this point the data is stored in some number of sorted @@ -76137,6 +77273,13 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ # define SQLITE_DEBUG_SORTER_THREADS 1 #endif +/* +** Hard-coded maximum amount of data to accumulate in memory before flushing +** to a level 0 PMA. The purpose of this limit is to prevent various integer +** overflows. 512MiB. +*/ +#define SQLITE_MAX_PMASZ (1<<29) + /* ** Private objects used by the sorter */ @@ -76431,9 +77574,6 @@ struct SorterRecord { */ #define SRVAL(p) ((void*)((SorterRecord*)(p) + 1)) -/* The minimum PMA size is set to this value multiplied by the database -** page size in bytes. */ -#define SORTER_MIN_WORKING 10 /* Maximum number of PMAs that a single MergeEngine can merge */ #define SORTER_MAX_MERGE_COUNT 16 @@ -76832,16 +77972,15 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit( } if( !sqlite3TempInMemory(db) ){ - pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz; + u32 szPma = sqlite3GlobalConfig.szPma; + pSorter->mnPmaSize = szPma * pgsz; mxCache = db->aDb[0].pSchema->cache_size; - if( mxCachemxPmaSize = mxCache * pgsz; + if( mxCache<(int)szPma ) mxCache = (int)szPma; + pSorter->mxPmaSize = MIN((i64)mxCache*pgsz, SQLITE_MAX_PMASZ); - /* If the application has not configure scratch memory using - ** SQLITE_CONFIG_SCRATCH then we assume it is OK to do large memory - ** allocations. If scratch memory has been configured, then assume - ** large memory allocations should be avoided to prevent heap - ** fragmentation. + /* EVIDENCE-OF: R-26747-61719 When the application provides any amount of + ** scratch memory using SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary + ** large heap allocations. */ if( sqlite3GlobalConfig.pScratch==0 ){ assert( pSorter->iMemory==0 ); @@ -77115,12 +78254,12 @@ SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){ */ static void vdbeSorterExtendFile(sqlite3 *db, sqlite3_file *pFd, i64 nByte){ if( nByte<=(i64)(db->nMaxSorterMmap) && pFd->pMethods->iVersion>=3 ){ - int rc = sqlite3OsTruncate(pFd, nByte); - if( rc==SQLITE_OK ){ - void *p = 0; - sqlite3OsFetch(pFd, 0, (int)nByte, &p); - sqlite3OsUnfetch(pFd, 0, p); - } + void *p = 0; + int chunksize = 4*1024; + sqlite3OsFileControlHint(pFd, SQLITE_FCNTL_CHUNK_SIZE, &chunksize); + sqlite3OsFileControlHint(pFd, SQLITE_FCNTL_SIZE_HINT, &nByte); + sqlite3OsFetch(pFd, 0, (int)nByte, &p); + sqlite3OsUnfetch(pFd, 0, p); } } #else @@ -78401,6 +79540,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, const VdbeCursor *pCsr, in }else #endif /*if( !pSorter->bUseThreads )*/ { + assert( pSorter->pMerger!=0 ); assert( pSorter->pMerger->pTask==(&pSorter->aTask[0]) ); rc = vdbeMergeEngineStep(pSorter->pMerger, pbEof); } @@ -79213,7 +80353,7 @@ SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ ** is a helper function - a callback for the tree walker. */ static int incrAggDepth(Walker *pWalker, Expr *pExpr){ - if( pExpr->op==TK_AGG_FUNCTION ) pExpr->op2 += pWalker->u.i; + if( pExpr->op==TK_AGG_FUNCTION ) pExpr->op2 += pWalker->u.n; return WRC_Continue; } static void incrAggFunctionDepth(Expr *pExpr, int N){ @@ -79221,7 +80361,7 @@ static void incrAggFunctionDepth(Expr *pExpr, int N){ Walker w; memset(&w, 0, sizeof(w)); w.xExprCallback = incrAggDepth; - w.u.i = N; + w.u.n = N; sqlite3WalkExpr(&w, pExpr); } } @@ -79773,7 +80913,7 @@ static int exprProbability(Expr *p){ sqlite3AtoF(p->u.zToken, &r, sqlite3Strlen30(p->u.zToken), SQLITE_UTF8); assert( r>=0.0 ); if( r>1.0 ) return -1; - return (int)(r*1000.0); + return (int)(r*134217728.0); } /* @@ -79905,7 +81045,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ ** EVIDENCE-OF: R-53436-40973 The likely(X) function is equivalent to ** likelihood(X,0.9375). */ /* TUNING: unlikely() probability is 0.0625. likely() is 0.9375 */ - pExpr->iTable = pDef->zName[0]=='u' ? 62 : 938; + pExpr->iTable = pDef->zName[0]=='u' ? 8388608 : 125829120; } } #ifndef SQLITE_OMIT_AUTHORIZATION @@ -81167,7 +82307,7 @@ SQLITE_PRIVATE Expr *sqlite3PExpr( const Token *pToken /* Argument token */ ){ Expr *p; - if( op==TK_AND && pLeft && pRight ){ + if( op==TK_AND && pLeft && pRight && pParse->nErr==0 ){ /* Take advantage of short-circuit false optimization for AND */ p = sqlite3ExprAnd(pParse->db, pLeft, pRight); }else{ @@ -81862,20 +83002,24 @@ SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ } /* -** These routines are Walker callbacks. Walker.u.pi is a pointer -** to an integer. These routines are checking an expression to see -** if it is a constant. Set *Walker.u.i to 0 if the expression is -** not constant. +** These routines are Walker callbacks used to check expressions to +** see if they are "constant" for some definition of constant. The +** Walker.eCode value determines the type of "constant" we are looking +** for. ** ** These callback routines are used to implement the following: ** -** sqlite3ExprIsConstant() pWalker->u.i==1 -** sqlite3ExprIsConstantNotJoin() pWalker->u.i==2 -** sqlite3ExprIsConstantOrFunction() pWalker->u.i==3 or 4 +** sqlite3ExprIsConstant() pWalker->eCode==1 +** sqlite3ExprIsConstantNotJoin() pWalker->eCode==2 +** sqlite3ExprRefOneTableOnly() pWalker->eCode==3 +** sqlite3ExprIsConstantOrFunction() pWalker->eCode==4 or 5 +** +** In all cases, the callbacks set Walker.eCode=0 and abort if the expression +** is found to not be a constant. ** ** The sqlite3ExprIsConstantOrFunction() is used for evaluating expressions -** in a CREATE TABLE statement. The Walker.u.i value is 4 when parsing -** an existing schema and 3 when processing a new statement. A bound +** in a CREATE TABLE statement. The Walker.eCode value is 5 when parsing +** an existing schema and 4 when processing a new statement. A bound ** parameter raises an error for new statements, but is silently converted ** to NULL for existing schemas. This allows sqlite_master tables that ** contain a bound parameter because they were generated by older versions @@ -81884,23 +83028,25 @@ SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ */ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ - /* If pWalker->u.i is 2 then any term of the expression that comes from - ** the ON or USING clauses of a join disqualifies the expression + /* If pWalker->eCode is 2 then any term of the expression that comes from + ** the ON or USING clauses of a left join disqualifies the expression ** from being considered constant. */ - if( pWalker->u.i==2 && ExprHasProperty(pExpr, EP_FromJoin) ){ - pWalker->u.i = 0; + if( pWalker->eCode==2 && ExprHasProperty(pExpr, EP_FromJoin) ){ + pWalker->eCode = 0; return WRC_Abort; } switch( pExpr->op ){ /* Consider functions to be constant if all their arguments are constant - ** and either pWalker->u.i==3 or 4 or the function as the SQLITE_FUNC_CONST - ** flag. */ + ** and either pWalker->eCode==4 or 5 or the function has the + ** SQLITE_FUNC_CONST flag. */ case TK_FUNCTION: - if( pWalker->u.i>=3 || ExprHasProperty(pExpr,EP_Constant) ){ + if( pWalker->eCode>=4 || ExprHasProperty(pExpr,EP_Constant) ){ return WRC_Continue; + }else{ + pWalker->eCode = 0; + return WRC_Abort; } - /* Fall through */ case TK_ID: case TK_COLUMN: case TK_AGG_FUNCTION: @@ -81909,18 +83055,22 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ testcase( pExpr->op==TK_COLUMN ); testcase( pExpr->op==TK_AGG_FUNCTION ); testcase( pExpr->op==TK_AGG_COLUMN ); - pWalker->u.i = 0; - return WRC_Abort; + if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){ + return WRC_Continue; + }else{ + pWalker->eCode = 0; + return WRC_Abort; + } case TK_VARIABLE: - if( pWalker->u.i==4 ){ + if( pWalker->eCode==5 ){ /* Silently convert bound parameters that appear inside of CREATE ** statements into a NULL when parsing the CREATE statement text out ** of the sqlite_master table */ pExpr->op = TK_NULL; - }else if( pWalker->u.i==3 ){ + }else if( pWalker->eCode==4 ){ /* A bound parameter in a CREATE statement that originates from ** sqlite3_prepare() causes an error */ - pWalker->u.i = 0; + pWalker->eCode = 0; return WRC_Abort; } /* Fall through */ @@ -81932,21 +83082,22 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ } static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){ UNUSED_PARAMETER(NotUsed); - pWalker->u.i = 0; + pWalker->eCode = 0; return WRC_Abort; } -static int exprIsConst(Expr *p, int initFlag){ +static int exprIsConst(Expr *p, int initFlag, int iCur){ Walker w; memset(&w, 0, sizeof(w)); - w.u.i = initFlag; + w.eCode = initFlag; w.xExprCallback = exprNodeIsConstant; w.xSelectCallback = selectNodeIsConstant; + w.u.iCur = iCur; sqlite3WalkExpr(&w, p); - return w.u.i; + return w.eCode; } /* -** Walk an expression tree. Return 1 if the expression is constant +** Walk an expression tree. Return non-zero if the expression is constant ** and 0 if it involves variables or function calls. ** ** For the purposes of this function, a double-quoted string (ex: "abc") @@ -81954,21 +83105,31 @@ static int exprIsConst(Expr *p, int initFlag){ ** a constant. */ SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){ - return exprIsConst(p, 1); + return exprIsConst(p, 1, 0); } /* -** Walk an expression tree. Return 1 if the expression is constant +** Walk an expression tree. Return non-zero if the expression is constant ** that does no originate from the ON or USING clauses of a join. ** Return 0 if it involves variables or function calls or terms from ** an ON or USING clause. */ SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){ - return exprIsConst(p, 2); + return exprIsConst(p, 2, 0); } /* -** Walk an expression tree. Return 1 if the expression is constant +** Walk an expression tree. Return non-zero if the expression constant +** for any single row of the table with cursor iCur. In other words, the +** expression must not refer to any non-deterministic function nor any +** table other than iCur. +*/ +SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){ + return exprIsConst(p, 3, iCur); +} + +/* +** Walk an expression tree. Return non-zero if the expression is constant ** or a function call with constant arguments. Return and 0 if there ** are any variables. ** @@ -81978,7 +83139,7 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){ */ SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){ assert( isInit==0 || isInit==1 ); - return exprIsConst(p, 3+isInit); + return exprIsConst(p, 4+isInit, 0); } /* @@ -83635,7 +84796,10 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) #ifndef SQLITE_OMIT_FLOATING_POINT /* If the column has REAL affinity, it may currently be stored as an - ** integer. Use OP_RealAffinity to make sure it is really real. */ + ** integer. Use OP_RealAffinity to make sure it is really real. + ** + ** EVIDENCE-OF: R-60985-57662 SQLite will convert the value back to + ** floating point when extracting it from the record. */ if( pExpr->iColumn>=0 && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL ){ @@ -84697,10 +85861,11 @@ static int exprSrcCount(Walker *pWalker, Expr *pExpr){ int i; struct SrcCount *p = pWalker->u.pSrcCount; SrcList *pSrc = p->pSrc; - for(i=0; inSrc; i++){ + int nSrc = pSrc ? pSrc->nSrc : 0; + for(i=0; iiTable==pSrc->a[i].iCursor ) break; } - if( inSrc ){ + if( inThis++; }else{ p->nOther++; @@ -86278,7 +87443,7 @@ static void statInit( p->mxSample = mxSample; p->nPSample = (tRowcnt)(sqlite3_value_int64(argv[2])/(mxSample/3+1) + 1); p->current.anLt = &p->current.anEq[nColUp]; - p->iPrn = nCol*0x689e962d ^ sqlite3_value_int(argv[2])*0xd0944565; + p->iPrn = 0x689e962d*(u32)nCol ^ 0xd0944565*(u32)sqlite3_value_int(argv[2]); /* Set up the Stat4Accum.a[] and aBest[] arrays */ p->a = (struct Stat4Sample*)&p->current.anLt[nColUp]; @@ -87287,23 +88452,28 @@ static void decodeIntArray( if( *z==' ' ) z++; } #ifndef SQLITE_ENABLE_STAT3_OR_STAT4 - assert( pIndex!=0 ); + assert( pIndex!=0 ); { #else - if( pIndex ) + if( pIndex ){ #endif - while( z[0] ){ - if( sqlite3_strglob("unordered*", z)==0 ){ - pIndex->bUnordered = 1; - }else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){ - pIndex->szIdxRow = sqlite3LogEst(sqlite3Atoi(z+3)); - } + pIndex->bUnordered = 0; + pIndex->noSkipScan = 0; + while( z[0] ){ + if( sqlite3_strglob("unordered*", z)==0 ){ + pIndex->bUnordered = 1; + }else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){ + pIndex->szIdxRow = sqlite3LogEst(sqlite3Atoi(z+3)); + }else if( sqlite3_strglob("noskipscan*", z)==0 ){ + pIndex->noSkipScan = 1; + } #ifdef SQLITE_ENABLE_COSTMULT - else if( sqlite3_strglob("costmult=[0-9]*",z)==0 ){ - pIndex->pTable->costMult = sqlite3LogEst(sqlite3Atoi(z+9)); - } + else if( sqlite3_strglob("costmult=[0-9]*",z)==0 ){ + pIndex->pTable->costMult = sqlite3LogEst(sqlite3Atoi(z+9)); + } #endif - while( z[0]!=0 && z[0]!=' ' ) z++; - while( z[0]==' ' ) z++; + while( z[0]!=0 && z[0]!=' ' ) z++; + while( z[0]==' ' ) z++; + } } } @@ -87429,6 +88599,7 @@ static void initAvgEq(Index *pIdx){ nRow = pIdx->aiRowEst[0]; nDist100 = ((i64)100 * pIdx->aiRowEst[0]) / pIdx->aiRowEst[iCol+1]; } + pIdx->nRowEst0 = nRow; /* Set nSum to the number of distinct (iCol+1) field prefixes that ** occur in the stat4 table for this index. Set sumEq to the sum of @@ -87690,7 +88861,7 @@ SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){ /* Load the statistics from the sqlite_stat4 table. */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK && OptimizationEnabled(db, SQLITE_Stat34) ){ int lookasideEnabled = db->lookaside.bEnabled; db->lookaside.bEnabled = 0; rc = loadStat4(db, sInfo.zDatabase); @@ -87865,6 +89036,7 @@ static void attachFunc( "attached databases must use the same text encoding as main database"); rc = SQLITE_ERROR; } + sqlite3BtreeEnter(aNew->pBt); pPager = sqlite3BtreePager(aNew->pBt); sqlite3PagerLockingMode(pPager, db->dfltLockMode); sqlite3BtreeSecureDelete(aNew->pBt, @@ -87872,6 +89044,7 @@ static void attachFunc( #ifndef SQLITE_OMIT_PAGER_PRAGMAS sqlite3BtreeSetPagerFlags(aNew->pBt, 3 | (db->flags & PAGER_FLAGS_MASK)); #endif + sqlite3BtreeLeave(aNew->pBt); } aNew->safety_level = 3; aNew->zName = sqlite3DbStrDup(db, zName); @@ -88372,6 +89545,9 @@ SQLITE_API int sqlite3_set_authorizer( int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), void *pArg ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); db->xAuth = (sqlite3_xauth)xAuth; db->pAuthArg = pArg; @@ -88866,7 +90042,11 @@ SQLITE_PRIVATE int sqlite3UserAuthTable(const char *zTable){ SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){ Table *p = 0; int i; - assert( zName!=0 ); + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return 0; +#endif + /* All mutexes are required for schema access. Make sure we hold them. */ assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) ); #if SQLITE_USER_AUTHENTICATION @@ -88990,7 +90170,6 @@ static void freeIndex(sqlite3 *db, Index *p){ #ifndef SQLITE_OMIT_ANALYZE sqlite3DeleteIndexSamples(db, p); #endif - if( db==0 || db->pnBytesFreed==0 ) sqlite3KeyInfoUnref(p->pKeyInfo); sqlite3ExprDelete(db, p->pPartIdxWhere); sqlite3DbFree(db, p->zColAff); if( p->isResized ) sqlite3DbFree(db, p->azColl); @@ -90269,6 +91448,19 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){ pTab->iPKey = -1; }else{ pPk = sqlite3PrimaryKeyIndex(pTab); + /* + ** Remove all redundant columns from the PRIMARY KEY. For example, change + ** "PRIMARY KEY(a,b,a,b,c,b,c,d)" into just "PRIMARY KEY(a,b,c,d)". Later + ** code assumes the PRIMARY KEY contains no repeated columns. + */ + for(i=j=1; inKeyCol; i++){ + if( hasColumn(pPk->aiColumn, j, pPk->aiColumn[i]) ){ + pPk->nColumn--; + }else{ + pPk->aiColumn[j++] = pPk->aiColumn[i]; + } + } + pPk->nKeyCol = j; } pPk->isCovering = 1; assert( pPk!=0 ); @@ -92745,40 +93937,31 @@ SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){ ** when it has finished using it. */ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ + int i; + int nCol = pIdx->nColumn; + int nKey = pIdx->nKeyCol; + KeyInfo *pKey; if( pParse->nErr ) return 0; -#ifndef SQLITE_OMIT_SHARED_CACHE - if( pIdx->pKeyInfo && pIdx->pKeyInfo->db!=pParse->db ){ - sqlite3KeyInfoUnref(pIdx->pKeyInfo); - pIdx->pKeyInfo = 0; + if( pIdx->uniqNotNull ){ + pKey = sqlite3KeyInfoAlloc(pParse->db, nKey, nCol-nKey); + }else{ + pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0); } -#endif - if( pIdx->pKeyInfo==0 ){ - int i; - int nCol = pIdx->nColumn; - int nKey = pIdx->nKeyCol; - KeyInfo *pKey; - if( pIdx->uniqNotNull ){ - pKey = sqlite3KeyInfoAlloc(pParse->db, nKey, nCol-nKey); - }else{ - pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0); + if( pKey ){ + assert( sqlite3KeyInfoIsWriteable(pKey) ); + for(i=0; iazColl[i]; + assert( zColl!=0 ); + pKey->aColl[i] = strcmp(zColl,"BINARY")==0 ? 0 : + sqlite3LocateCollSeq(pParse, zColl); + pKey->aSortOrder[i] = pIdx->aSortOrder[i]; } - if( pKey ){ - assert( sqlite3KeyInfoIsWriteable(pKey) ); - for(i=0; iazColl[i]; - assert( zColl!=0 ); - pKey->aColl[i] = strcmp(zColl,"BINARY")==0 ? 0 : - sqlite3LocateCollSeq(pParse, zColl); - pKey->aSortOrder[i] = pIdx->aSortOrder[i]; - } - if( pParse->nErr ){ - sqlite3KeyInfoUnref(pKey); - }else{ - pIdx->pKeyInfo = pKey; - } + if( pParse->nErr ){ + sqlite3KeyInfoUnref(pKey); + pKey = 0; } } - return sqlite3KeyInfoRef(pIdx->pKeyInfo); + return pKey; } #ifndef SQLITE_OMIT_CTE @@ -93559,8 +94742,8 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( WhereInfo *pWInfo; /* Information about the WHERE clause */ Index *pIdx; /* For looping over indices of the table */ int iTabCur; /* Cursor number for the table */ - int iDataCur; /* VDBE cursor for the canonical data source */ - int iIdxCur; /* Cursor number of the first index */ + int iDataCur = 0; /* VDBE cursor for the canonical data source */ + int iIdxCur = 0; /* Cursor number of the first index */ int nIdx; /* Number of indices */ sqlite3 *db; /* Main database structure */ AuthContext sContext; /* Authorization context */ @@ -94330,8 +95513,8 @@ static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ default: { /* Because sqlite3_value_double() returns 0.0 if the argument is not ** something that can be converted into a number, we have: - ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that - ** cannot be converted to a numeric value. + ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob + ** that cannot be converted to a numeric value. */ double rVal = sqlite3_value_double(argv[0]); if( rVal<0 ) rVal = -rVal; @@ -96399,7 +97582,7 @@ static void fkLookupParent( OE_Abort, 0, P4_STATIC, P5_ConstraintFK); }else{ if( nIncr>0 && pFKey->isDeferred==0 ){ - sqlite3ParseToplevel(pParse)->mayAbort = 1; + sqlite3MayAbort(pParse); } sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); } @@ -96471,6 +97654,10 @@ static Expr *exprTableColumn( ** code for an SQL UPDATE operation, this function may be called twice - ** once to "delete" the old row and once to "insert" the new row. ** +** Parameter nIncr is passed -1 when inserting a row (as this may decrease +** the number of FK violations in the db) or +1 when deleting one (as this +** may increase the number of FK constraint problems). +** ** The code generated by this function scans through the rows in the child ** table that correspond to the parent table row being deleted or inserted. ** For each child row found, one of the following actions is taken: @@ -96587,13 +97774,9 @@ static void fkScanChildren( sqlite3ResolveExprNames(&sNameContext, pWhere); /* Create VDBE to loop through the entries in pSrc that match the WHERE - ** clause. If the constraint is not deferred, throw an exception for - ** each row found. Otherwise, for deferred constraints, increment the - ** deferred constraint counter by nIncr for each row selected. */ + ** clause. For each row found, increment either the deferred or immediate + ** foreign key constraint counter. */ pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0, 0, 0); - if( nIncr>0 && pFKey->isDeferred==0 ){ - sqlite3ParseToplevel(pParse)->mayAbort = 1; - } sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); if( pWInfo ){ sqlite3WhereEnd(pWInfo); @@ -96772,6 +97955,24 @@ static int fkParentIsModified( return 0; } +/* +** Return true if the parser passed as the first argument is being +** used to code a trigger that is really a "SET NULL" action belonging +** to trigger pFKey. +*/ +static int isSetNullAction(Parse *pParse, FKey *pFKey){ + Parse *pTop = sqlite3ParseToplevel(pParse); + if( pTop->pTriggerPrg ){ + Trigger *p = pTop->pTriggerPrg->pTrigger; + if( (p==pFKey->apTrigger[0] && pFKey->aAction[0]==OE_SetNull) + || (p==pFKey->apTrigger[1] && pFKey->aAction[1]==OE_SetNull) + ){ + return 1; + } + } + return 0; +} + /* ** This function is called when inserting, deleting or updating a row of ** table pTab to generate VDBE code to perform foreign key constraint @@ -96824,7 +98025,7 @@ SQLITE_PRIVATE void sqlite3FkCheck( int *aiCol; int iCol; int i; - int isIgnore = 0; + int bIgnore = 0; if( aChange && sqlite3_stricmp(pTab->zName, pFKey->zTo)!=0 @@ -96883,7 +98084,7 @@ SQLITE_PRIVATE void sqlite3FkCheck( int rcauth; char *zCol = pTo->aCol[pIdx ? pIdx->aiColumn[i] : pTo->iPKey].zName; rcauth = sqlite3AuthReadCol(pParse, pTo->zName, zCol, iDb); - isIgnore = (rcauth==SQLITE_IGNORE); + bIgnore = (rcauth==SQLITE_IGNORE); } #endif } @@ -96898,12 +98099,18 @@ SQLITE_PRIVATE void sqlite3FkCheck( /* A row is being removed from the child table. Search for the parent. ** If the parent does not exist, removing the child row resolves an ** outstanding foreign key constraint violation. */ - fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1,isIgnore); + fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1, bIgnore); } - if( regNew!=0 ){ + if( regNew!=0 && !isSetNullAction(pParse, pFKey) ){ /* A row is being added to the child table. If a parent row cannot - ** be found, adding the child row has violated the FK constraint. */ - fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1,isIgnore); + ** be found, adding the child row has violated the FK constraint. + ** + ** If this operation is being performed as part of a trigger program + ** that is actually a "SET NULL" action belonging to this very + ** foreign key, then omit this scan altogether. As all child key + ** values are guaranteed to be NULL, it is not possible for adding + ** this row to cause an FK violation. */ + fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1, bIgnore); } sqlite3DbFree(db, aiFree); @@ -96924,8 +98131,8 @@ SQLITE_PRIVATE void sqlite3FkCheck( && !pParse->pToplevel && !pParse->isMultiWrite ){ assert( regOld==0 && regNew!=0 ); - /* Inserting a single row into a parent table cannot cause an immediate - ** foreign key violation. So do nothing in this case. */ + /* Inserting a single row into a parent table cannot cause (or fix) + ** an immediate foreign key violation. So do nothing in this case. */ continue; } @@ -96949,13 +98156,28 @@ SQLITE_PRIVATE void sqlite3FkCheck( fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1); } if( regOld!=0 ){ - /* If there is a RESTRICT action configured for the current operation - ** on the parent table of this FK, then throw an exception - ** immediately if the FK constraint is violated, even if this is a - ** deferred trigger. That's what RESTRICT means. To defer checking - ** the constraint, the FK should specify NO ACTION (represented - ** using OE_None). NO ACTION is the default. */ + int eAction = pFKey->aAction[aChange!=0]; fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1); + /* If this is a deferred FK constraint, or a CASCADE or SET NULL + ** action applies, then any foreign key violations caused by + ** removing the parent key will be rectified by the action trigger. + ** So do not set the "may-abort" flag in this case. + ** + ** Note 1: If the FK is declared "ON UPDATE CASCADE", then the + ** may-abort flag will eventually be set on this statement anyway + ** (when this function is called as part of processing the UPDATE + ** within the action trigger). + ** + ** Note 2: At first glance it may seem like SQLite could simply omit + ** all OP_FkCounter related scans when either CASCADE or SET NULL + ** applies. The trouble starts if the CASCADE or SET NULL action + ** trigger causes other triggers or action rules attached to the + ** child table to fire. In these cases the fk constraint counters + ** might be set incorrectly if any OP_FkCounter related scans are + ** omitted. */ + if( !pFKey->isDeferred && eAction!=OE_Cascade && eAction!=OE_SetNull ){ + sqlite3MayAbort(pParse); + } } pItem->zName = 0; sqlite3SrcListDelete(db, pSrc); @@ -100049,7 +101271,6 @@ struct sqlite3_api_routines { # define sqlite3_column_table_name16 0 # define sqlite3_column_origin_name 0 # define sqlite3_column_origin_name16 0 -# define sqlite3_table_column_metadata 0 #endif #ifdef SQLITE_OMIT_AUTHORIZATION @@ -100859,6 +102080,7 @@ SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){ #define PragTyp_LOCK_STATUS 40 #define PragTyp_PARSER_TRACE 41 #define PragFlag_NeedSchema 0x01 +#define PragFlag_ReadOnly 0x02 static const struct sPragmaNames { const char *const zName; /* Name of pragma */ u8 ePragTyp; /* PragTyp_XXX value */ @@ -100875,7 +102097,7 @@ static const struct sPragmaNames { { /* zName: */ "application_id", /* ePragTyp: */ PragTyp_HEADER_VALUE, /* ePragFlag: */ 0, - /* iArg: */ 0 }, + /* iArg: */ BTREE_APPLICATION_ID }, #endif #if !defined(SQLITE_OMIT_AUTOVACUUM) { /* zName: */ "auto_vacuum", @@ -100941,6 +102163,12 @@ static const struct sPragmaNames { /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) + { /* zName: */ "data_version", + /* ePragTyp: */ PragTyp_HEADER_VALUE, + /* ePragFlag: */ PragFlag_ReadOnly, + /* iArg: */ BTREE_DATA_VERSION }, +#endif #if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) { /* zName: */ "database_list", /* ePragTyp: */ PragTyp_DATABASE_LIST, @@ -100996,8 +102224,8 @@ static const struct sPragmaNames { #if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) { /* zName: */ "freelist_count", /* ePragTyp: */ PragTyp_HEADER_VALUE, - /* ePragFlag: */ 0, - /* iArg: */ 0 }, + /* ePragFlag: */ PragFlag_ReadOnly, + /* iArg: */ BTREE_FREE_PAGE_COUNT }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "full_column_names", @@ -101149,7 +102377,7 @@ static const struct sPragmaNames { { /* zName: */ "schema_version", /* ePragTyp: */ PragTyp_HEADER_VALUE, /* ePragFlag: */ 0, - /* iArg: */ 0 }, + /* iArg: */ BTREE_SCHEMA_VERSION }, #endif #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) { /* zName: */ "secure_delete", @@ -101215,7 +102443,7 @@ static const struct sPragmaNames { { /* zName: */ "user_version", /* ePragTyp: */ PragTyp_HEADER_VALUE, /* ePragFlag: */ 0, - /* iArg: */ 0 }, + /* iArg: */ BTREE_USER_VERSION }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if defined(SQLITE_DEBUG) @@ -101258,7 +102486,7 @@ static const struct sPragmaNames { /* iArg: */ SQLITE_WriteSchema|SQLITE_RecoveryMode }, #endif }; -/* Number of pragmas: 57 on by default, 70 total. */ +/* Number of pragmas: 58 on by default, 71 total. */ /* End of the automatically generated pragma table. ***************************************************************************/ @@ -101508,7 +102736,7 @@ SQLITE_PRIVATE void sqlite3Pragma( Token *pId; /* Pointer to token */ char *aFcntl[4]; /* Argument to SQLITE_FCNTL_PRAGMA */ int iDb; /* Database index for */ - int lwr, upr, mid; /* Binary search bounds */ + int lwr, upr, mid = 0; /* Binary search bounds */ int rc; /* return value form SQLITE_FCNTL_PRAGMA */ sqlite3 *db = pParse->db; /* The database connection */ Db *pDb; /* The specific database being pragmaed */ @@ -102868,7 +104096,8 @@ SQLITE_PRIVATE void sqlite3Pragma( ){ for(pEnc=&encnames[0]; pEnc->zName; pEnc++){ if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){ - ENC(pParse->db) = pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE; + SCHEMA_ENC(db) = ENC(db) = + pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE; break; } } @@ -102913,24 +104142,9 @@ SQLITE_PRIVATE void sqlite3Pragma( ** applications for any purpose. */ case PragTyp_HEADER_VALUE: { - int iCookie; /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */ + int iCookie = aPragmaNames[mid].iArg; /* Which cookie to read or write */ sqlite3VdbeUsesBtree(v, iDb); - switch( zLeft[0] ){ - case 'a': case 'A': - iCookie = BTREE_APPLICATION_ID; - break; - case 'f': case 'F': - iCookie = BTREE_FREE_PAGE_COUNT; - break; - case 's': case 'S': - iCookie = BTREE_SCHEMA_VERSION; - break; - default: - iCookie = BTREE_USER_VERSION; - break; - } - - if( zRight && iCookie!=BTREE_FREE_PAGE_COUNT ){ + if( zRight && (aPragmaNames[mid].mPragFlag & PragFlag_ReadOnly)==0 ){ /* Write the specified cookie value */ static const VdbeOpList setCookie[] = { { OP_Transaction, 0, 1, 0}, /* 0 */ @@ -102983,7 +104197,7 @@ SQLITE_PRIVATE void sqlite3Pragma( #ifndef SQLITE_OMIT_WAL /* - ** PRAGMA [database.]wal_checkpoint = passive|full|restart + ** PRAGMA [database.]wal_checkpoint = passive|full|restart|truncate ** ** Checkpoint the database. */ @@ -102995,6 +104209,8 @@ SQLITE_PRIVATE void sqlite3Pragma( eMode = SQLITE_CHECKPOINT_FULL; }else if( sqlite3StrICmp(zRight, "restart")==0 ){ eMode = SQLITE_CHECKPOINT_RESTART; + }else if( sqlite3StrICmp(zRight, "truncate")==0 ){ + eMode = SQLITE_CHECKPOINT_TRUNCATE; } } sqlite3VdbeSetNumCols(v, 3); @@ -103574,9 +104790,11 @@ SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){ int commit_internal = !(db->flags&SQLITE_InternChanges); assert( sqlite3_mutex_held(db->mutex) ); + assert( sqlite3BtreeHoldsMutex(db->aDb[0].pBt) ); assert( db->init.busy==0 ); rc = SQLITE_OK; db->init.busy = 1; + ENC(db) = SCHEMA_ENC(db); for(i=0; rc==SQLITE_OK && inDb; i++){ if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue; rc = sqlite3InitOne(db, i, pzErrMsg); @@ -103889,9 +105107,12 @@ static int sqlite3LockAndPrepare( const char **pzTail /* OUT: End of parsed string */ ){ int rc; - assert( ppStmt!=0 ); + +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppStmt==0 ) return SQLITE_MISUSE_BKPT; +#endif *ppStmt = 0; - if( !sqlite3SafetyCheckOk(db) ){ + if( !sqlite3SafetyCheckOk(db)||zSql==0 ){ return SQLITE_MISUSE_BKPT; } sqlite3_mutex_enter(db->mutex); @@ -103998,9 +105219,11 @@ static int sqlite3Prepare16( const char *zTail8 = 0; int rc = SQLITE_OK; - assert( ppStmt ); +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppStmt==0 ) return SQLITE_MISUSE_BKPT; +#endif *ppStmt = 0; - if( !sqlite3SafetyCheckOk(db) ){ + if( !sqlite3SafetyCheckOk(db)||zSql==0 ){ return SQLITE_MISUSE_BKPT; } if( nBytes>=0 ){ @@ -104126,20 +105349,25 @@ struct SortCtx { #define SORTFLAG_UseSorter 0x01 /* Use SorterOpen instead of OpenEphemeral */ /* -** Delete all the content of a Select structure but do not deallocate -** the select structure itself. +** Delete all the content of a Select structure. Deallocate the structure +** itself only if bFree is true. */ -static void clearSelect(sqlite3 *db, Select *p){ - sqlite3ExprListDelete(db, p->pEList); - sqlite3SrcListDelete(db, p->pSrc); - sqlite3ExprDelete(db, p->pWhere); - sqlite3ExprListDelete(db, p->pGroupBy); - sqlite3ExprDelete(db, p->pHaving); - sqlite3ExprListDelete(db, p->pOrderBy); - sqlite3SelectDelete(db, p->pPrior); - sqlite3ExprDelete(db, p->pLimit); - sqlite3ExprDelete(db, p->pOffset); - sqlite3WithDelete(db, p->pWith); +static void clearSelect(sqlite3 *db, Select *p, int bFree){ + while( p ){ + Select *pPrior = p->pPrior; + sqlite3ExprListDelete(db, p->pEList); + sqlite3SrcListDelete(db, p->pSrc); + sqlite3ExprDelete(db, p->pWhere); + sqlite3ExprListDelete(db, p->pGroupBy); + sqlite3ExprDelete(db, p->pHaving); + sqlite3ExprListDelete(db, p->pOrderBy); + sqlite3ExprDelete(db, p->pLimit); + sqlite3ExprDelete(db, p->pOffset); + sqlite3WithDelete(db, p->pWith); + if( bFree ) sqlite3DbFree(db, p); + p = pPrior; + bFree = 1; + } } /* @@ -104198,8 +105426,7 @@ SQLITE_PRIVATE Select *sqlite3SelectNew( pNew->addrOpenEphm[0] = -1; pNew->addrOpenEphm[1] = -1; if( db->mallocFailed ) { - clearSelect(db, pNew); - if( pNew!=&standin ) sqlite3DbFree(db, pNew); + clearSelect(db, pNew, pNew!=&standin); pNew = 0; }else{ assert( pNew->pSrc!=0 || pParse->nErr>0 ); @@ -104224,10 +105451,7 @@ SQLITE_PRIVATE void sqlite3SelectSetName(Select *p, const char *zName){ ** Delete the given Select structure and all of its substructures. */ SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){ - if( p ){ - clearSelect(db, p); - sqlite3DbFree(db, p); - } + clearSelect(db, p, 1); } /* @@ -104610,7 +105834,9 @@ static void pushOntoSorter( pKI = pOp->p4.pKeyInfo; memset(pKI->aSortOrder, 0, pKI->nField); /* Makes OP_Jump below testable */ sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO); - pOp->p4.pKeyInfo = keyInfoFromExprList(pParse, pSort->pOrderBy, nOBSat, 1); + testcase( pKI->nXField>2 ); + pOp->p4.pKeyInfo = keyInfoFromExprList(pParse, pSort->pOrderBy, nOBSat, + pKI->nXField-1); addrJmp = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v); pSort->labelBkOut = sqlite3VdbeMakeLabel(v); @@ -105121,7 +106347,7 @@ static KeyInfo *keyInfoFromExprList( int i; nExpr = pList->nExpr; - pInfo = sqlite3KeyInfoAlloc(db, nExpr+nExtra-iStart, 1); + pInfo = sqlite3KeyInfoAlloc(db, nExpr-iStart, nExtra+1); if( pInfo ){ assert( sqlite3KeyInfoIsWriteable(pInfo) ); for(i=iStart, pItem=pList->a+iStart; iselFlags & SF_Values ){ + sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms"); + }else{ + sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" + " do not have the same number of result columns", selectOpName(p->op)); + } +} + +/* +** Handle the special case of a compound-select that originates from a +** VALUES clause. By handling this as a special case, we avoid deep +** recursion, and thus do not need to enforce the SQLITE_LIMIT_COMPOUND_SELECT +** on a VALUES clause. +** +** Because the Select object originates from a VALUES clause: +** (1) It has no LIMIT or OFFSET +** (2) All terms are UNION ALL +** (3) There is no ORDER BY clause +*/ +static int multiSelectValues( + Parse *pParse, /* Parsing context */ + Select *p, /* The right-most of SELECTs to be coded */ + SelectDest *pDest /* What to do with query results */ +){ + Select *pPrior; + int nExpr = p->pEList->nExpr; + int nRow = 1; + int rc = 0; + assert( p->pNext==0 ); + assert( p->selFlags & SF_AllValues ); + do{ + assert( p->selFlags & SF_Values ); + assert( p->op==TK_ALL || (p->op==TK_SELECT && p->pPrior==0) ); + assert( p->pLimit==0 ); + assert( p->pOffset==0 ); + if( p->pEList->nExpr!=nExpr ){ + selectWrongNumTermsError(pParse, p); + return 1; + } + if( p->pPrior==0 ) break; + assert( p->pPrior->pNext==p ); + p = p->pPrior; + nRow++; + }while(1); + while( p ){ + pPrior = p->pPrior; + p->pPrior = 0; + rc = sqlite3Select(pParse, p, pDest); + p->pPrior = pPrior; + if( rc ) break; + p->nSelectRow = nRow; + p = p->pNext; + } + return rc; +} /* ** This routine is called to process a compound query form from @@ -106224,17 +107510,19 @@ static int multiSelect( dest.eDest = SRT_Table; } + /* Special handling for a compound-select that originates as a VALUES clause. + */ + if( p->selFlags & SF_AllValues ){ + rc = multiSelectValues(pParse, p, &dest); + goto multi_select_end; + } + /* Make sure all SELECTs in the statement have the same number of elements ** in their result sets. */ assert( p->pEList && pPrior->pEList ); if( p->pEList->nExpr!=pPrior->pEList->nExpr ){ - if( p->selFlags & SF_Values ){ - sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms"); - }else{ - sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" - " do not have the same number of result columns", selectOpName(p->op)); - } + selectWrongNumTermsError(pParse, p); rc = 1; goto multi_select_end; } @@ -108120,7 +109408,9 @@ static int selectExpander(Walker *pWalker, Select *p){ } pTabList = p->pSrc; pEList = p->pEList; - sqlite3WithPush(pParse, findRightmost(p)->pWith, 0); + if( pWalker->xSelectCallback2==selectPopWith ){ + sqlite3WithPush(pParse, findRightmost(p)->pWith, 0); + } /* Make sure cursor numbers have been assigned to all entries in ** the FROM clause of the SELECT statement. @@ -108411,7 +109701,9 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ sqlite3WalkSelect(&w, pSelect); } w.xSelectCallback = selectExpander; - w.xSelectCallback2 = selectPopWith; + if( (pSelect->selFlags & SF_AllValues)==0 ){ + w.xSelectCallback2 = selectPopWith; + } sqlite3WalkSelect(&w, pSelect); } @@ -108897,7 +110189,7 @@ SQLITE_PRIVATE int sqlite3Select( ** ** is transformed to: ** - ** SELECT xyz FROM ... GROUP BY xyz + ** SELECT xyz FROM ... GROUP BY xyz ORDER BY xyz ** ** The second form is preferred as a single index (or temp-table) may be ** used for both the ORDER BY and DISTINCT processing. As originally @@ -108910,7 +110202,6 @@ SQLITE_PRIVATE int sqlite3Select( p->selFlags &= ~SF_Distinct; p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0); pGroupBy = p->pGroupBy; - sSort.pOrderBy = 0; /* Notice that even thought SF_Distinct has been cleared from p->selFlags, ** the sDistinct.isTnct is still set. Hence, isTnct represents the ** original setting of the SF_Distinct flag, not the current setting */ @@ -108926,7 +110217,7 @@ SQLITE_PRIVATE int sqlite3Select( */ if( sSort.pOrderBy ){ KeyInfo *pKeyInfo; - pKeyInfo = keyInfoFromExprList(pParse, sSort.pOrderBy, 0, 0); + pKeyInfo = keyInfoFromExprList(pParse, sSort.pOrderBy, 0, pEList->nExpr); sSort.iECursor = pParse->nTab++; sSort.addrSortIndex = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, @@ -109100,7 +110391,7 @@ SQLITE_PRIVATE int sqlite3Select( ** will be converted into a Noop. */ sAggInfo.sortingIdx = pParse->nTab++; - pKeyInfo = keyInfoFromExprList(pParse, pGroupBy, 0, 0); + pKeyInfo = keyInfoFromExprList(pParse, pGroupBy, 0, sAggInfo.nColumn); addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, sAggInfo.sortingIdx, sAggInfo.nSortingColumn, 0, (char*)pKeyInfo, P4_KEYINFO); @@ -109713,6 +111004,9 @@ SQLITE_API int sqlite3_get_table( int rc; TabResult res; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || pazResult==0 ) return SQLITE_MISUSE_BKPT; +#endif *pazResult = 0; if( pnColumn ) *pnColumn = 0; if( pnRow ) *pnRow = 0; @@ -111776,7 +113070,7 @@ static int execExecSql(sqlite3 *db, char **pzErrMsg, const char *zSql){ ** overwriting the database with the vacuumed content. ** ** Only 1x temporary space and only 1x writes would be required if -** the copy of step (3) were replace by deleting the original database +** the copy of step (3) were replaced by deleting the original database ** and renaming the transient database as the original. But that will ** not work if other processes are attached to the original database. ** And a power loss in between deleting the original and renaming the @@ -112134,6 +113428,9 @@ SQLITE_API int sqlite3_create_module( const sqlite3_module *pModule, /* The definition of the module */ void *pAux /* Context pointer for xCreate/xConnect */ ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif return createModule(db, zName, pModule, pAux, 0); } @@ -112147,6 +113444,9 @@ SQLITE_API int sqlite3_create_module_v2( void *pAux, /* Context pointer for xCreate/xConnect */ void (*xDestroy)(void *) /* Module destructor function */ ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif return createModule(db, zName, pModule, pAux, xDestroy); } @@ -112379,7 +113679,12 @@ SQLITE_PRIVATE void sqlite3VtabBeginParse( addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName)); addModuleArgument(db, pTable, 0); addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName)); - pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z); + assert( (pParse->sNameToken.z==pName2->z && pName2->z!=0) + || (pParse->sNameToken.z==pName1->z && pName2->z==0) + ); + pParse->sNameToken.n = (int)( + &pModuleName->z[pModuleName->n] - pParse->sNameToken.z + ); #ifndef SQLITE_OMIT_AUTHORIZATION /* Creating a virtual table invokes the authorization callback twice. @@ -112751,6 +114056,9 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ Table *pTab; char *zErr = 0; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){ sqlite3Error(db, SQLITE_MISUSE); @@ -113107,6 +114415,9 @@ SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){ static const unsigned char aMap[] = { SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE }; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 ); assert( OE_Ignore==4 && OE_Replace==5 ); assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 ); @@ -113122,8 +114433,10 @@ SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){ va_list ap; int rc = SQLITE_OK; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); - va_start(ap, op); switch( op ){ case SQLITE_VTAB_CONSTRAINT_SUPPORT: { @@ -113258,6 +114571,9 @@ struct WhereLevel { } u; struct WhereLoop *pWLoop; /* The selected WhereLoop object */ Bitmask notReady; /* FROM entries not usable at this level */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrVisit; /* Address at which row is visited */ +#endif }; /* @@ -113288,7 +114604,6 @@ struct WhereLoop { union { struct { /* Information for internal btree tables */ u16 nEq; /* Number of equality constraints */ - u16 nSkip; /* Number of initial index columns to skip */ Index *pIndex; /* Index used, or NULL */ } btree; struct { /* Information for virtual tables */ @@ -113301,12 +114616,13 @@ struct WhereLoop { } u; u32 wsFlags; /* WHERE_* flags describing the plan */ u16 nLTerm; /* Number of entries in aLTerm[] */ + u16 nSkip; /* Number of NULL aLTerm[] entries */ /**** whereLoopXfer() copies fields above ***********************/ # define WHERE_LOOP_XFER_SZ offsetof(WhereLoop,nLSlot) u16 nLSlot; /* Number of slots allocated for aLTerm[] */ WhereTerm **aLTerm; /* WhereTerms used */ WhereLoop *pNextLoop; /* Next WhereLoop object in the WhereClause */ - WhereTerm *aLTermSpace[4]; /* Initial aLTerm[] space */ + WhereTerm *aLTermSpace[3]; /* Initial aLTerm[] space */ }; /* This object holds the prerequisites and the cost of running a @@ -113632,6 +114948,7 @@ struct WhereInfo { #define WHERE_AUTO_INDEX 0x00004000 /* Uses an ephemeral index */ #define WHERE_SKIPSCAN 0x00008000 /* Uses the skip-scan algorithm */ #define WHERE_UNQ_WANTED 0x00010000 /* WHERE_ONEROW would have been helpful*/ +#define WHERE_PARTIALIDX 0x00020000 /* The automatic index is partial */ /************** End of whereInt.h ********************************************/ /************** Continuing where we left off in where.c **********************/ @@ -113839,10 +115156,11 @@ static int whereClauseInsert(WhereClause *pWC, Expr *p, u8 wtFlags){ sqlite3DbFree(db, pOld); } pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]); + memset(&pWC->a[pWC->nTerm], 0, sizeof(pWC->a[0])*(pWC->nSlot-pWC->nTerm)); } pTerm = &pWC->a[idx = pWC->nTerm++]; if( p && ExprHasProperty(p, EP_Unlikely) ){ - pTerm->truthProb = sqlite3LogEst(p->iTable) - 99; + pTerm->truthProb = sqlite3LogEst(p->iTable) - 270; }else{ pTerm->truthProb = 1; } @@ -114373,6 +115691,15 @@ static void transferJoinMarkings(Expr *pDerived, Expr *pBase){ } } +/* +** Mark term iChild as being a child of term iParent +*/ +static void markTermAsChild(WhereClause *pWC, int iChild, int iParent){ + pWC->a[iChild].iParent = iParent; + pWC->a[iChild].truthProb = pWC->a[iParent].truthProb; + pWC->a[iParent].nChild++; +} + #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY) /* ** Analyze a term that consists of two or more OR-connected @@ -114670,8 +115997,7 @@ static void exprAnalyzeOrTerm( testcase( idxNew==0 ); exprAnalyze(pSrc, pWC, idxNew); pTerm = &pWC->a[idxTerm]; - pWC->a[idxNew].iParent = idxTerm; - pTerm->nChild = 1; + markTermAsChild(pWC, idxNew, idxTerm); }else{ sqlite3ExprListDelete(db, pList); } @@ -114773,9 +116099,8 @@ static void exprAnalyze( idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC); if( idxNew==0 ) return; pNew = &pWC->a[idxNew]; - pNew->iParent = idxTerm; + markTermAsChild(pWC, idxNew, idxTerm); pTerm = &pWC->a[idxTerm]; - pTerm->nChild = 1; pTerm->wtFlags |= TERM_COPIED; if( pExpr->op==TK_EQ && !ExprHasProperty(pExpr, EP_FromJoin) @@ -114832,9 +116157,8 @@ static void exprAnalyze( testcase( idxNew==0 ); exprAnalyze(pSrc, pWC, idxNew); pTerm = &pWC->a[idxTerm]; - pWC->a[idxNew].iParent = idxTerm; + markTermAsChild(pWC, idxNew, idxTerm); } - pTerm->nChild = 2; } #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */ @@ -114909,9 +116233,8 @@ static void exprAnalyze( exprAnalyze(pSrc, pWC, idxNew2); pTerm = &pWC->a[idxTerm]; if( isComplete ){ - pWC->a[idxNew1].iParent = idxTerm; - pWC->a[idxNew2].iParent = idxTerm; - pTerm->nChild = 2; + markTermAsChild(pWC, idxNew1, idxTerm); + markTermAsChild(pWC, idxNew2, idxTerm); } } #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ @@ -114944,9 +116267,8 @@ static void exprAnalyze( pNewTerm->leftCursor = pLeft->iTable; pNewTerm->u.leftColumn = pLeft->iColumn; pNewTerm->eOperator = WO_MATCH; - pNewTerm->iParent = idxTerm; + markTermAsChild(pWC, idxNew, idxTerm); pTerm = &pWC->a[idxTerm]; - pTerm->nChild = 1; pTerm->wtFlags |= TERM_COPIED; pNewTerm->prereqAll = pTerm->prereqAll; } @@ -114967,7 +116289,7 @@ static void exprAnalyze( if( pExpr->op==TK_NOTNULL && pExpr->pLeft->op==TK_COLUMN && pExpr->pLeft->iColumn>=0 - && OptimizationEnabled(db, SQLITE_Stat3) + && OptimizationEnabled(db, SQLITE_Stat34) ){ Expr *pNewExpr; Expr *pLeft = pExpr->pLeft; @@ -114986,9 +116308,8 @@ static void exprAnalyze( pNewTerm->leftCursor = pLeft->iTable; pNewTerm->u.leftColumn = pLeft->iColumn; pNewTerm->eOperator = WO_GT; - pNewTerm->iParent = idxTerm; + markTermAsChild(pWC, idxNew, idxTerm); pTerm = &pWC->a[idxTerm]; - pTerm->nChild = 1; pTerm->wtFlags |= TERM_COPIED; pNewTerm->prereqAll = pTerm->prereqAll; } @@ -115208,6 +116529,8 @@ static void constructAutomaticIndex( Bitmask idxCols; /* Bitmap of columns used for indexing */ Bitmask extraCols; /* Bitmap of additional columns */ u8 sentWarning = 0; /* True if a warnning has been issued */ + Expr *pPartial = 0; /* Partial Index Expression */ + int iContinue = 0; /* Jump here to skip excluded rows */ /* Generate code to skip over the creation and initialization of the ** transient index on 2nd and subsequent iterations of the loop. */ @@ -115223,6 +116546,12 @@ static void constructAutomaticIndex( pLoop = pLevel->pWLoop; idxCols = 0; for(pTerm=pWC->a; pTermprereq==0 + && (pTerm->wtFlags & TERM_VIRTUAL)==0 + && sqlite3ExprIsTableConstant(pTerm->pExpr, pSrc->iCursor) ){ + pPartial = sqlite3ExprAnd(pParse->db, pPartial, + sqlite3ExprDup(pParse->db, pTerm->pExpr, 0)); + } if( termCanDriveIndex(pTerm, pSrc, notReady) ){ int iCol = pTerm->u.leftColumn; Bitmask cMask = iCol>=BMS ? MASKBIT(BMS-1) : MASKBIT(iCol); @@ -115235,7 +116564,9 @@ static void constructAutomaticIndex( sentWarning = 1; } if( (idxCols & cMask)==0 ){ - if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ) return; + if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ){ + goto end_auto_index_create; + } pLoop->aLTerm[nKeyCol++] = pTerm; idxCols |= cMask; } @@ -115255,7 +116586,7 @@ static void constructAutomaticIndex( ** if they go out of sync. */ extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1)); - mxBitCol = (pTable->nCol >= BMS-1) ? BMS-1 : pTable->nCol; + mxBitCol = MIN(BMS-1,pTable->nCol); testcase( pTable->nCol==BMS-1 ); testcase( pTable->nCol==BMS-2 ); for(i=0; icolUsed & MASKBIT(BMS-1) ){ nKeyCol += pTable->nCol - BMS + 1; } - pLoop->wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY; /* Construct the Index object to describe this index */ pIdx = sqlite3AllocateIndexObject(pParse->db, nKeyCol+1, 0, &zNotUsed); - if( pIdx==0 ) return; + if( pIdx==0 ) goto end_auto_index_create; pLoop->u.btree.pIndex = pIdx; pIdx->zName = "auto-index"; pIdx->pTable = pTable; @@ -115320,18 +116650,29 @@ static void constructAutomaticIndex( VdbeComment((v, "for %s", pTable->zName)); /* Fill the automatic index with content */ + sqlite3ExprCachePush(pParse); addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v); + if( pPartial ){ + iContinue = sqlite3VdbeMakeLabel(v); + sqlite3ExprIfFalse(pParse, pPartial, iContinue, SQLITE_JUMPIFNULL); + pLoop->wsFlags |= WHERE_PARTIALIDX; + } regRecord = sqlite3GetTempReg(pParse); sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 0, 0, 0, 0); sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord); sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue); sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v); sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX); sqlite3VdbeJumpHere(v, addrTop); sqlite3ReleaseTempReg(pParse, regRecord); + sqlite3ExprCachePop(pParse); /* Jump here when skipping the initialization */ sqlite3VdbeJumpHere(v, addrInit); + +end_auto_index_create: + sqlite3ExprDelete(pParse->db, pPartial); } #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */ @@ -115491,7 +116832,6 @@ static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){ } #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */ - #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 /* ** Estimate the location of a particular key among all keys in an @@ -115500,9 +116840,10 @@ static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){ ** aStat[0] Est. number of rows less than pVal ** aStat[1] Est. number of rows equal to pVal ** -** Return SQLITE_OK on success. +** Return the index of the sample that is the smallest sample that +** is greater than or equal to pRec. */ -static void whereKeyStats( +static int whereKeyStats( Parse *pParse, /* Database connection */ Index *pIdx, /* Index to consider domain of */ UnpackedRecord *pRec, /* Vector of values to consider */ @@ -115584,6 +116925,7 @@ static void whereKeyStats( } aStat[0] = iLower + iGap; } + return i; } #endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */ @@ -115734,7 +117076,7 @@ static int whereRangeSkipScanEst( ** If either of the upper or lower bound is not present, then NULL is passed in ** place of the corresponding WhereTerm. ** -** The value in (pBuilder->pNew->u.btree.nEq) is the index of the index +** The value in (pBuilder->pNew->u.btree.nEq) is the number of the index ** column subject to the range constraint. Or, equivalently, the number of ** equality constraints optimized by the proposed index scan. For example, ** assuming index p is on t1(a, b), and the SQL query is: @@ -115750,7 +117092,7 @@ static int whereRangeSkipScanEst( ** ** When this function is called, *pnOut is set to the sqlite3LogEst() of the ** number of rows that the index scan is expected to visit without -** considering the range constraints. If nEq is 0, this is the number of +** considering the range constraints. If nEq is 0, then *pnOut is the number of ** rows in the index. Assuming no error occurs, *pnOut is adjusted (reduced) ** to account for the range constraints pLower and pUpper. ** @@ -115774,10 +117116,7 @@ static int whereRangeScanEst( Index *p = pLoop->u.btree.pIndex; int nEq = pLoop->u.btree.nEq; - if( p->nSample>0 - && nEqnSampleCol - && OptimizationEnabled(pParse->db, SQLITE_Stat3) - ){ + if( p->nSample>0 && nEqnSampleCol ){ if( nEq==pBuilder->nRecValid ){ UnpackedRecord *pRec = pBuilder->pRec; tRowcnt a[2]; @@ -115793,15 +117132,19 @@ static int whereRangeScanEst( ** is not a simple variable or literal value), the lower bound of the ** range is $P. Due to a quirk in the way whereKeyStats() works, even ** if $L is available, whereKeyStats() is called for both ($P) and - ** ($P:$L) and the larger of the two returned values used. + ** ($P:$L) and the larger of the two returned values is used. ** ** Similarly, iUpper is to be set to the estimate of the number of rows ** less than the upper bound of the range query. Where the upper bound ** is either ($P) or ($P:$U). Again, even if $U is available, both values ** of iUpper are requested of whereKeyStats() and the smaller used. + ** + ** The number of rows between the two bounds is then just iUpper-iLower. */ - tRowcnt iLower; - tRowcnt iUpper; + tRowcnt iLower; /* Rows less than the lower bound */ + tRowcnt iUpper; /* Rows less than the upper bound */ + int iLwrIdx = -2; /* aSample[] for the lower bound */ + int iUprIdx = -1; /* aSample[] for the upper bound */ if( pRec ){ testcase( pRec->nField!=pBuilder->nRecValid ); @@ -115815,7 +117158,7 @@ static int whereRangeScanEst( /* Determine iLower and iUpper using ($P) only. */ if( nEq==0 ){ iLower = 0; - iUpper = sqlite3LogEstToInt(p->aiRowLogEst[0]); + iUpper = p->nRowEst0; }else{ /* Note: this call could be optimized away - since the same values must ** have been requested when testing key $P in whereEqualScanEst(). */ @@ -115839,7 +117182,7 @@ static int whereRangeScanEst( rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk); if( rc==SQLITE_OK && bOk ){ tRowcnt iNew; - whereKeyStats(pParse, p, pRec, 0, a); + iLwrIdx = whereKeyStats(pParse, p, pRec, 0, a); iNew = a[0] + ((pLower->eOperator & (WO_GT|WO_LE)) ? a[1] : 0); if( iNew>iLower ) iLower = iNew; nOut--; @@ -115854,7 +117197,7 @@ static int whereRangeScanEst( rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk); if( rc==SQLITE_OK && bOk ){ tRowcnt iNew; - whereKeyStats(pParse, p, pRec, 1, a); + iUprIdx = whereKeyStats(pParse, p, pRec, 1, a); iNew = a[0] + ((pUpper->eOperator & (WO_GT|WO_LE)) ? a[1] : 0); if( iNewiLower ){ nNew = sqlite3LogEst(iUpper - iLower); + /* TUNING: If both iUpper and iLower are derived from the same + ** sample, then assume they are 4x more selective. This brings + ** the estimated selectivity more in line with what it would be + ** if estimated without the use of STAT3/4 tables. */ + if( iLwrIdx==iUprIdx ) nNew -= 20; assert( 20==sqlite3LogEst(4) ); }else{ nNew = 10; assert( 10==sqlite3LogEst(2) ); } @@ -115890,12 +117238,15 @@ static int whereRangeScanEst( nNew = whereRangeAdjust(pLower, nOut); nNew = whereRangeAdjust(pUpper, nNew); - /* TUNING: If there is both an upper and lower limit, assume the range is + /* TUNING: If there is both an upper and lower limit and neither limit + ** has an application-defined likelihood(), assume the range is ** reduced by an additional 75%. This means that, by default, an open-ended ** range query (e.g. col > ?) is assumed to match 1/4 of the rows in the ** index. While a closed range (e.g. col BETWEEN ? AND ?) is estimated to ** match 1/64 of the index. */ - if( pLower && pUpper ) nNew -= 20; + if( pLower && pLower->truthProb>0 && pUpper && pUpper->truthProb>0 ){ + nNew -= 20; + } nOut -= (pLower!=0) + (pUpper!=0); if( nNew<10 ) nNew = 10; @@ -116255,7 +117606,7 @@ static int codeAllEqualityTerms( pLoop = pLevel->pWLoop; assert( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 ); nEq = pLoop->u.btree.nEq; - nSkip = pLoop->u.btree.nSkip; + nSkip = pLoop->nSkip; pIdx = pLoop->u.btree.pIndex; assert( pIdx!=0 ); @@ -116369,7 +117720,7 @@ static void explainAppendTerm( static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop, Table *pTab){ Index *pIndex = pLoop->u.btree.pIndex; u16 nEq = pLoop->u.btree.nEq; - u16 nSkip = pLoop->u.btree.nSkip; + u16 nSkip = pLoop->nSkip; int i, j; Column *aCol = pTab->aCol; i16 *aiColumn = pIndex->aiColumn; @@ -116400,11 +117751,14 @@ static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop, Table *pTab){ /* ** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN -** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single -** record is added to the output to describe the table scan strategy in -** pLevel. +** command, or if either SQLITE_DEBUG or SQLITE_ENABLE_STMT_SCANSTATUS was +** defined at compile-time. If it is not a no-op, a single OP_Explain opcode +** is added to the output to describe the table scan strategy in pLevel. +** +** If an OP_Explain opcode is added to the VM, its address is returned. +** Otherwise, if no OP_Explain is coded, zero is returned. */ -static void explainOneScan( +static int explainOneScan( Parse *pParse, /* Parse context */ SrcList *pTabList, /* Table list this loop refers to */ WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */ @@ -116412,7 +117766,8 @@ static void explainOneScan( int iFrom, /* Value for "from" column of output */ u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */ ){ -#ifndef SQLITE_DEBUG + int ret = 0; +#if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS) if( pParse->explain==2 ) #endif { @@ -116429,7 +117784,7 @@ static void explainOneScan( pLoop = pLevel->pWLoop; flags = pLoop->wsFlags; - if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return; + if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return 0; isSearch = (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 || ((flags&WHERE_VIRTUALTABLE)==0 && (pLoop->u.btree.nEq>0)) @@ -116458,6 +117813,8 @@ static void explainOneScan( if( isSearch ){ zFmt = "PRIMARY KEY"; } + }else if( flags & WHERE_PARTIALIDX ){ + zFmt = "AUTOMATIC PARTIAL COVERING INDEX"; }else if( flags & WHERE_AUTO_INDEX ){ zFmt = "AUTOMATIC COVERING INDEX"; }else if( flags & WHERE_IDX_ONLY ){ @@ -116499,13 +117856,46 @@ static void explainOneScan( } #endif zMsg = sqlite3StrAccumFinish(&str); - sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC); + ret = sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg,P4_DYNAMIC); } + return ret; } #else -# define explainOneScan(u,v,w,x,y,z) +# define explainOneScan(u,v,w,x,y,z) 0 #endif /* SQLITE_OMIT_EXPLAIN */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +/* +** Configure the VM passed as the first argument with an +** sqlite3_stmt_scanstatus() entry corresponding to the scan used to +** implement level pLvl. Argument pSrclist is a pointer to the FROM +** clause that the scan reads data from. +** +** If argument addrExplain is not 0, it must be the address of an +** OP_Explain instruction that describes the same loop. +*/ +static void addScanStatus( + Vdbe *v, /* Vdbe to add scanstatus entry to */ + SrcList *pSrclist, /* FROM clause pLvl reads data from */ + WhereLevel *pLvl, /* Level to add scanstatus() entry for */ + int addrExplain /* Address of OP_Explain (or 0) */ +){ + const char *zObj = 0; + WhereLoop *pLoop = pLvl->pWLoop; + if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){ + zObj = pLoop->u.btree.pIndex->zName; + }else{ + zObj = pSrclist->a[pLvl->iFrom].zName; + } + sqlite3VdbeScanStatus( + v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj + ); +} +#else +# define addScanStatus(a, b, c, d) ((void)d) +#endif + + /* ** Generate code for the start of the iLevel-th loop in the WHERE clause @@ -116806,7 +118196,7 @@ static Bitmask codeOneLoopStart( pIdx = pLoop->u.btree.pIndex; iIdxCur = pLevel->iIdxCur; - assert( nEq>=pLoop->u.btree.nSkip ); + assert( nEq>=pLoop->nSkip ); /* If this loop satisfies a sort order (pOrderBy) request that ** was passed to this function to implement a "SELECT min(x) ..." @@ -116823,7 +118213,7 @@ static Bitmask codeOneLoopStart( && pWInfo->nOBSat>0 && (pIdx->nKeyCol>nEq) ){ - assert( pLoop->u.btree.nSkip==0 ); + assert( pLoop->nSkip==0 ); bSeekPastNull = 1; nExtraReg = 1; } @@ -117136,10 +118526,9 @@ static Bitmask codeOneLoopStart( Expr *pExpr = pWC->a[iTerm].pExpr; if( &pWC->a[iTerm] == pTerm ) continue; if( ExprHasProperty(pExpr, EP_FromJoin) ) continue; - testcase( pWC->a[iTerm].wtFlags & TERM_ORINFO ); - testcase( pWC->a[iTerm].wtFlags & TERM_VIRTUAL ); - if( pWC->a[iTerm].wtFlags & (TERM_ORINFO|TERM_VIRTUAL) ) continue; + if( (pWC->a[iTerm].wtFlags & TERM_VIRTUAL)!=0 ) continue; if( (pWC->a[iTerm].eOperator & WO_ALL)==0 ) continue; + testcase( pWC->a[iTerm].wtFlags & TERM_ORINFO ); pExpr = sqlite3ExprDup(db, pExpr, 0); pAndExpr = sqlite3ExprAnd(db, pAndExpr, pExpr); } @@ -117172,9 +118561,11 @@ static Bitmask codeOneLoopStart( assert( pSubWInfo || pParse->nErr || db->mallocFailed ); if( pSubWInfo ){ WhereLoop *pSubLoop; - explainOneScan( + int addrExplain = explainOneScan( pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0 ); + addScanStatus(v, pOrTab, &pSubWInfo->a[0], addrExplain); + /* This is the sub-WHERE clause body. First skip over ** duplicate rows from prior sub-WHERE clauses, and record the ** rowid (or PRIMARY KEY) for the current row so that the same @@ -117305,6 +118696,10 @@ static Bitmask codeOneLoopStart( } } +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + pLevel->addrVisit = sqlite3VdbeCurrentAddr(v); +#endif + /* Insert code to test every subexpression that can be completely ** computed using the current set of tables. */ @@ -117444,7 +118839,7 @@ static void whereLoopPrint(WhereLoop *p, WhereClause *pWC){ sqlite3_free(z); } if( p->wsFlags & WHERE_SKIPSCAN ){ - sqlite3DebugPrintf(" f %05x %d-%d", p->wsFlags, p->nLTerm,p->u.btree.nSkip); + sqlite3DebugPrintf(" f %05x %d-%d", p->wsFlags, p->nLTerm,p->nSkip); }else{ sqlite3DebugPrintf(" f %05x N %d", p->wsFlags, p->nLTerm); } @@ -117480,7 +118875,6 @@ static void whereLoopClearUnion(sqlite3 *db, WhereLoop *p){ p->u.vtab.idxStr = 0; }else if( (p->wsFlags & WHERE_AUTO_INDEX)!=0 && p->u.btree.pIndex!=0 ){ sqlite3DbFree(db, p->u.btree.pIndex->zColAff); - sqlite3KeyInfoUnref(p->u.btree.pIndex->pKeyInfo); sqlite3DbFree(db, p->u.btree.pIndex); p->u.btree.pIndex = 0; } @@ -117555,10 +118949,11 @@ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ } /* -** Return TRUE if both of the following are true: +** Return TRUE if all of the following are true: ** ** (1) X has the same or lower cost that Y ** (2) X is a proper subset of Y +** (3) X skips at least as many columns as Y ** ** By "proper subset" we mean that X uses fewer WHERE clause terms ** than Y and that every WHERE clause term used by X is also used @@ -117566,19 +118961,25 @@ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ ** ** If X is a proper subset of Y then Y is a better choice and ought ** to have a lower cost. This routine returns TRUE when that cost -** relationship is inverted and needs to be adjusted. +** relationship is inverted and needs to be adjusted. The third rule +** was added because if X uses skip-scan less than Y it still might +** deserve a lower cost even if it is a proper subset of Y. */ static int whereLoopCheaperProperSubset( const WhereLoop *pX, /* First WhereLoop to compare */ const WhereLoop *pY /* Compare against this WhereLoop */ ){ int i, j; - if( pX->nLTerm >= pY->nLTerm ) return 0; /* X is not a subset of Y */ + if( pX->nLTerm-pX->nSkip >= pY->nLTerm-pY->nSkip ){ + return 0; /* X is not a subset of Y */ + } + if( pY->nSkip > pX->nSkip ) return 0; if( pX->rRun >= pY->rRun ){ if( pX->rRun > pY->rRun ) return 0; /* X costs more than Y */ if( pX->nOut > pY->nOut ) return 0; /* X costs more than Y */ } for(i=pX->nLTerm-1; i>=0; i--){ + if( pX->aLTerm[i]==0 ) continue; for(j=pY->nLTerm-1; j>=0; j--){ if( pY->aLTerm[j]==pX->aLTerm[i] ) break; } @@ -117600,33 +119001,24 @@ static int whereLoopCheaperProperSubset( ** To say "WhereLoop X is a proper subset of Y" means that X uses fewer ** WHERE clause terms than Y and that every WHERE clause term used by X is ** also used by Y. -** -** This adjustment is omitted for SKIPSCAN loops. In a SKIPSCAN loop, the -** WhereLoop.nLTerm field is not an accurate measure of the number of WHERE -** clause terms covered, since some of the first nLTerm entries in aLTerm[] -** will be NULL (because they are skipped). That makes it more difficult -** to compare the loops. We could add extra code to do the comparison, and -** perhaps we will someday. But SKIPSCAN is sufficiently uncommon, and this -** adjustment is sufficient minor, that it is very difficult to construct -** a test case where the extra code would improve the query plan. Better -** to avoid the added complexity and just omit cost adjustments to SKIPSCAN -** loops. */ static void whereLoopAdjustCost(const WhereLoop *p, WhereLoop *pTemplate){ if( (pTemplate->wsFlags & WHERE_INDEXED)==0 ) return; - if( (pTemplate->wsFlags & WHERE_SKIPSCAN)!=0 ) return; for(; p; p=p->pNextLoop){ if( p->iTab!=pTemplate->iTab ) continue; if( (p->wsFlags & WHERE_INDEXED)==0 ) continue; - if( (p->wsFlags & WHERE_SKIPSCAN)!=0 ) continue; if( whereLoopCheaperProperSubset(p, pTemplate) ){ /* Adjust pTemplate cost downward so that it is cheaper than its - ** subset p */ + ** subset p. */ + WHERETRACE(0x80,("subset cost adjustment %d,%d to %d,%d\n", + pTemplate->rRun, pTemplate->nOut, p->rRun, p->nOut-1)); pTemplate->rRun = p->rRun; pTemplate->nOut = p->nOut - 1; }else if( whereLoopCheaperProperSubset(pTemplate, p) ){ /* Adjust pTemplate cost upward so that it is costlier than p since ** pTemplate is a proper subset of p */ + WHERETRACE(0x80,("subset cost adjustment %d,%d to %d,%d\n", + pTemplate->rRun, pTemplate->nOut, p->rRun, p->nOut+1)); pTemplate->rRun = p->rRun; pTemplate->nOut = p->nOut + 1; } @@ -117671,8 +119063,9 @@ static WhereLoop **whereLoopFindLesser( /* Any loop using an appliation-defined index (or PRIMARY KEY or ** UNIQUE constraint) with one or more == constraints is better - ** than an automatic index. */ + ** than an automatic index. Unless it is a skip-scan. */ if( (p->wsFlags & WHERE_AUTO_INDEX)!=0 + && (pTemplate->nSkip)==0 && (pTemplate->wsFlags & WHERE_INDEXED)!=0 && (pTemplate->wsFlags & WHERE_COLUMN_EQ)!=0 && (p->prereq & pTemplate->prereq)==pTemplate->prereq @@ -117831,10 +119224,30 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){ ** Adjust the WhereLoop.nOut value downward to account for terms of the ** WHERE clause that reference the loop but which are not used by an ** index. +* +** For every WHERE clause term that is not used by the index +** and which has a truth probability assigned by one of the likelihood(), +** likely(), or unlikely() SQL functions, reduce the estimated number +** of output rows by the probability specified. ** -** In the current implementation, the first extra WHERE clause term reduces -** the number of output rows by a factor of 10 and each additional term -** reduces the number of output rows by sqrt(2). +** TUNING: For every WHERE clause term that is not used by the index +** and which does not have an assigned truth probability, heuristics +** described below are used to try to estimate the truth probability. +** TODO --> Perhaps this is something that could be improved by better +** table statistics. +** +** Heuristic 1: Estimate the truth probability as 93.75%. The 93.75% +** value corresponds to -1 in LogEst notation, so this means decrement +** the WhereLoop.nOut field for every such WHERE clause term. +** +** Heuristic 2: If there exists one or more WHERE clause terms of the +** form "x==EXPR" and EXPR is not a constant 0 or 1, then make sure the +** final output row estimate is no greater than 1/4 of the total number +** of rows in the table. In other words, assume that x==EXPR will filter +** out at least 3 out of 4 rows. If EXPR is -1 or 0 or 1, then maybe the +** "x" column is boolean or else -1 or 0 or 1 is a common default value +** on the "x" column and so in that case only cap the output row estimate +** at 1/2 instead of 1/4. */ static void whereLoopOutputAdjust( WhereClause *pWC, /* The WHERE clause */ @@ -117843,9 +119256,10 @@ static void whereLoopOutputAdjust( ){ WhereTerm *pTerm, *pX; Bitmask notAllowed = ~(pLoop->prereq|pLoop->maskSelf); - int i, j; - int nEq = 0; /* Number of = constraints not within likely()/unlikely() */ + int i, j, k; + LogEst iReduce = 0; /* pLoop->nOut should not exceed nRow-iReduce */ + assert( (pLoop->wsFlags & WHERE_AUTO_INDEX)==0 ); for(i=pWC->nTerm, pTerm=pWC->a; i>0; i--, pTerm++){ if( (pTerm->wtFlags & TERM_VIRTUAL)!=0 ) break; if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue; @@ -117858,20 +119272,26 @@ static void whereLoopOutputAdjust( } if( j<0 ){ if( pTerm->truthProb<=0 ){ + /* If a truth probability is specified using the likelihood() hints, + ** then use the probability provided by the application. */ pLoop->nOut += pTerm->truthProb; }else{ + /* In the absence of explicit truth probabilities, use heuristics to + ** guess a reasonable truth probability. */ pLoop->nOut--; - if( pTerm->eOperator&WO_EQ ) nEq++; + if( pTerm->eOperator&WO_EQ ){ + Expr *pRight = pTerm->pExpr->pRight; + if( sqlite3ExprIsInteger(pRight, &k) && k>=(-1) && k<=1 ){ + k = 10; + }else{ + k = 20; + } + if( iReducenOut>nRow-10 ){ - pLoop->nOut = nRow - 10; - } + if( pLoop->nOut > nRow-iReduce ) pLoop->nOut = nRow - iReduce; } /* @@ -117912,7 +119332,7 @@ static int whereLoopAddBtreeIndex( Bitmask saved_prereq; /* Original value of pNew->prereq */ u16 saved_nLTerm; /* Original value of pNew->nLTerm */ u16 saved_nEq; /* Original value of pNew->u.btree.nEq */ - u16 saved_nSkip; /* Original value of pNew->u.btree.nSkip */ + u16 saved_nSkip; /* Original value of pNew->nSkip */ u32 saved_wsFlags; /* Original value of pNew->wsFlags */ LogEst saved_nOut; /* Original value of pNew->nOut */ int iCol; /* Index of the column in the table */ @@ -117941,7 +119361,7 @@ static int whereLoopAddBtreeIndex( pTerm = whereScanInit(&scan, pBuilder->pWC, pSrc->iCursor, iCol, opMask, pProbe); saved_nEq = pNew->u.btree.nEq; - saved_nSkip = pNew->u.btree.nSkip; + saved_nSkip = pNew->nSkip; saved_nLTerm = pNew->nLTerm; saved_wsFlags = pNew->wsFlags; saved_prereq = pNew->prereq; @@ -117949,44 +119369,6 @@ static int whereLoopAddBtreeIndex( pNew->rSetup = 0; rSize = pProbe->aiRowLogEst[0]; rLogSize = estLog(rSize); - - /* Consider using a skip-scan if there are no WHERE clause constraints - ** available for the left-most terms of the index, and if the average - ** number of repeats in the left-most terms is at least 18. - ** - ** The magic number 18 is selected on the basis that scanning 17 rows - ** is almost always quicker than an index seek (even though if the index - ** contains fewer than 2^17 rows we assume otherwise in other parts of - ** the code). And, even if it is not, it should not be too much slower. - ** On the other hand, the extra seeks could end up being significantly - ** more expensive. */ - assert( 42==sqlite3LogEst(18) ); - if( saved_nEq==saved_nSkip - && saved_nEq+1nKeyCol - && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */ - && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK - ){ - LogEst nIter; - pNew->u.btree.nEq++; - pNew->u.btree.nSkip++; - pNew->aLTerm[pNew->nLTerm++] = 0; - pNew->wsFlags |= WHERE_SKIPSCAN; - nIter = pProbe->aiRowLogEst[saved_nEq] - pProbe->aiRowLogEst[saved_nEq+1]; - if( pTerm ){ - /* TUNING: When estimating skip-scan for a term that is also indexable, - ** multiply the cost of the skip-scan by 2.0, to make it a little less - ** desirable than the regular index lookup. */ - nIter += 10; assert( 10==sqlite3LogEst(2) ); - } - pNew->nOut -= nIter; - /* TUNING: Because uncertainties in the estimates for skip-scan queries, - ** add a 1.375 fudge factor to make skip-scan slightly less likely. */ - nIter += 5; - whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter + nInMul); - pNew->nOut = saved_nOut; - pNew->u.btree.nEq = saved_nEq; - pNew->u.btree.nSkip = saved_nSkip; - } for(; rc==SQLITE_OK && pTerm!=0; pTerm = whereScanNext(&scan)){ u16 eOp = pTerm->eOperator; /* Shorthand for pTerm->eOperator */ LogEst rCostIdx; @@ -118081,7 +119463,6 @@ static int whereLoopAddBtreeIndex( if( nInMul==0 && pProbe->nSample && pNew->u.btree.nEq<=pProbe->nSampleCol - && OptimizationEnabled(db, SQLITE_Stat3) && ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect)) ){ Expr *pExpr = pTerm->pExpr; @@ -118149,10 +119530,45 @@ static int whereLoopAddBtreeIndex( } pNew->prereq = saved_prereq; pNew->u.btree.nEq = saved_nEq; - pNew->u.btree.nSkip = saved_nSkip; + pNew->nSkip = saved_nSkip; pNew->wsFlags = saved_wsFlags; pNew->nOut = saved_nOut; pNew->nLTerm = saved_nLTerm; + + /* Consider using a skip-scan if there are no WHERE clause constraints + ** available for the left-most terms of the index, and if the average + ** number of repeats in the left-most terms is at least 18. + ** + ** The magic number 18 is selected on the basis that scanning 17 rows + ** is almost always quicker than an index seek (even though if the index + ** contains fewer than 2^17 rows we assume otherwise in other parts of + ** the code). And, even if it is not, it should not be too much slower. + ** On the other hand, the extra seeks could end up being significantly + ** more expensive. */ + assert( 42==sqlite3LogEst(18) ); + if( saved_nEq==saved_nSkip + && saved_nEq+1nKeyCol + && pProbe->noSkipScan==0 + && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */ + && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK + ){ + LogEst nIter; + pNew->u.btree.nEq++; + pNew->nSkip++; + pNew->aLTerm[pNew->nLTerm++] = 0; + pNew->wsFlags |= WHERE_SKIPSCAN; + nIter = pProbe->aiRowLogEst[saved_nEq] - pProbe->aiRowLogEst[saved_nEq+1]; + pNew->nOut -= nIter; + /* TUNING: Because uncertainties in the estimates for skip-scan queries, + ** add a 1.375 fudge factor to make skip-scan slightly less likely. */ + nIter += 5; + whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter + nInMul); + pNew->nOut = saved_nOut; + pNew->u.btree.nEq = saved_nEq; + pNew->nSkip = saved_nSkip; + pNew->wsFlags = saved_wsFlags; + } + return rc; } @@ -118331,7 +119747,7 @@ static int whereLoopAddBtree( if( pTerm->prereqRight & pNew->maskSelf ) continue; if( termCanDriveIndex(pTerm, pSrc, 0) ){ pNew->u.btree.nEq = 1; - pNew->u.btree.nSkip = 0; + pNew->nSkip = 0; pNew->u.btree.pIndex = 0; pNew->nLTerm = 1; pNew->aLTerm[0] = pTerm; @@ -118372,7 +119788,7 @@ static int whereLoopAddBtree( } rSize = pProbe->aiRowLogEst[0]; pNew->u.btree.nEq = 0; - pNew->u.btree.nSkip = 0; + pNew->nSkip = 0; pNew->nLTerm = 0; pNew->iSortIdx = 0; pNew->rSetup = 0; @@ -118922,7 +120338,7 @@ static i8 wherePathSatisfiesOrderBy( /* Skip over == and IS NULL terms */ if( ju.btree.nEq - && pLoop->u.btree.nSkip==0 + && pLoop->nSkip==0 && ((i = pLoop->aLTerm[j]->eOperator) & (WO_EQ|WO_ISNULL))!=0 ){ if( i & WO_ISNULL ){ @@ -119376,7 +120792,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ } #ifdef WHERETRACE_ENABLED /* >=2 */ - if( sqlite3WhereTrace>=2 ){ + if( sqlite3WhereTrace & 0x02 ){ sqlite3DebugPrintf("---- after round %d ----\n", iLoop); for(ii=0, pTo=aTo; iisWC; pLoop = pBuilder->pNew; pLoop->wsFlags = 0; - pLoop->u.btree.nSkip = 0; + pLoop->nSkip = 0; pTerm = findTerm(pWC, iCur, -1, 0, WO_EQ, 0); if( pTerm ){ pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_IPK|WHERE_ONEROW; @@ -119507,7 +120923,6 @@ static int whereShortCut(WhereLoopBuilder *pBuilder){ }else{ for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ assert( pLoop->aLTermSpace==pLoop->aLTerm ); - assert( ArraySize(pLoop->aLTermSpace)==4 ); if( !IsUniqueIndex(pIdx) || pIdx->pPartIdxWhere!=0 || pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace) @@ -120016,7 +121431,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( */ notReady = ~(Bitmask)0; for(ii=0; iia[ii]; + wsFlags = pLevel->pWLoop->wsFlags; #ifndef SQLITE_OMIT_AUTOMATIC_INDEX if( (pLevel->pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 ){ constructAutomaticIndex(pParse, &pWInfo->sWC, @@ -120024,10 +121442,15 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( if( db->mallocFailed ) goto whereBeginError; } #endif - explainOneScan(pParse, pTabList, pLevel, ii, pLevel->iFrom, wctrlFlags); + addrExplain = explainOneScan( + pParse, pTabList, pLevel, ii, pLevel->iFrom, wctrlFlags + ); pLevel->addrBody = sqlite3VdbeCurrentAddr(v); notReady = codeOneLoopStart(pWInfo, ii, notReady); pWInfo->iContinue = pLevel->addrCont; + if( (wsFlags&WHERE_MULTI_OR)==0 && (wctrlFlags&WHERE_ONETABLE_ONLY)==0 ){ + addScanStatus(v, pTabList, pLevel, addrExplain); + } } /* Done. */ @@ -122608,13 +124031,19 @@ static void yy_reduce( int cnt = 0, mxSelect; p->pWith = yymsp[-1].minor.yy59; if( p->pPrior ){ + u16 allValues = SF_Values; pNext = 0; for(pLoop=p; pLoop; pNext=pLoop, pLoop=pLoop->pPrior, cnt++){ pLoop->pNext = pNext; pLoop->selFlags |= SF_Compound; + allValues &= pLoop->selFlags; } - mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT]; - if( mxSelect && cnt>mxSelect ){ + if( allValues ){ + p->selFlags |= SF_AllValues; + }else if( + (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 + && cnt>mxSelect + ){ sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); } } @@ -124458,6 +125887,9 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr int mxSqlLen; /* Max length of an SQL string */ +#ifdef SQLITE_ENABLE_API_ARMOR + if( zSql==0 || pzErrMsg==0 ) return SQLITE_MISUSE_BKPT; +#endif mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; if( db->nVdbeActive==0 ){ db->u1.isInterrupted = 0; @@ -124725,6 +126157,13 @@ SQLITE_API int sqlite3_complete(const char *zSql){ }; #endif /* SQLITE_OMIT_TRIGGER */ +#ifdef SQLITE_ENABLE_API_ARMOR + if( zSql==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + while( *zSql ){ switch( *zSql ){ case ';': { /* A semicolon */ @@ -125026,7 +126465,7 @@ SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; } ** I/O active are written using this function. These messages ** are intended for debugging activity only. */ -SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*, ...) = 0; +/* not-private */ void (*sqlite3IoTrace)(const char*, ...) = 0; #endif /* @@ -125235,6 +126674,13 @@ SQLITE_API int sqlite3_initialize(void){ ** when this routine is invoked, then this routine is a harmless no-op. */ SQLITE_API int sqlite3_shutdown(void){ +#ifdef SQLITE_OMIT_WSD + int rc = sqlite3_wsd_init(4096, 24); + if( rc!=SQLITE_OK ){ + return rc; + } +#endif + if( sqlite3GlobalConfig.isInit ){ #ifdef SQLITE_EXTRA_SHUTDOWN void SQLITE_EXTRA_SHUTDOWN(void); @@ -125293,15 +126739,17 @@ SQLITE_API int sqlite3_config(int op, ...){ switch( op ){ /* Mutex configuration options are only available in a threadsafe - ** compile. + ** compile. */ -#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-54466-46756 */ case SQLITE_CONFIG_SINGLETHREAD: { /* Disable all mutexing */ sqlite3GlobalConfig.bCoreMutex = 0; sqlite3GlobalConfig.bFullMutex = 0; break; } +#endif +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-20520-54086 */ case SQLITE_CONFIG_MULTITHREAD: { /* Disable mutexing of database connections */ /* Enable mutexing of core data structures */ @@ -125309,17 +126757,23 @@ SQLITE_API int sqlite3_config(int op, ...){ sqlite3GlobalConfig.bFullMutex = 0; break; } +#endif +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-59593-21810 */ case SQLITE_CONFIG_SERIALIZED: { /* Enable all mutexing */ sqlite3GlobalConfig.bCoreMutex = 1; sqlite3GlobalConfig.bFullMutex = 1; break; } +#endif +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-63666-48755 */ case SQLITE_CONFIG_MUTEX: { /* Specify an alternative mutex implementation */ sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*); break; } +#endif +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-14450-37597 */ case SQLITE_CONFIG_GETMUTEX: { /* Retrieve the current mutex implementation */ *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex; @@ -125327,37 +126781,61 @@ SQLITE_API int sqlite3_config(int op, ...){ } #endif - case SQLITE_CONFIG_MALLOC: { - /* Specify an alternative malloc implementation */ + /* EVIDENCE-OF: R-55594-21030 The SQLITE_CONFIG_MALLOC option takes a + ** single argument which is a pointer to an instance of the + ** sqlite3_mem_methods structure. The argument specifies alternative + ** low-level memory allocation routines to be used in place of the memory + ** allocation routines built into SQLite. */ sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*); break; } case SQLITE_CONFIG_GETMALLOC: { - /* Retrieve the current malloc() implementation */ + /* EVIDENCE-OF: R-51213-46414 The SQLITE_CONFIG_GETMALLOC option takes a + ** single argument which is a pointer to an instance of the + ** sqlite3_mem_methods structure. The sqlite3_mem_methods structure is + ** filled with the currently defined memory allocation routines. */ if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault(); *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m; break; } case SQLITE_CONFIG_MEMSTATUS: { - /* Enable or disable the malloc status collection */ + /* EVIDENCE-OF: R-61275-35157 The SQLITE_CONFIG_MEMSTATUS option takes + ** single argument of type int, interpreted as a boolean, which enables + ** or disables the collection of memory allocation statistics. */ sqlite3GlobalConfig.bMemstat = va_arg(ap, int); break; } case SQLITE_CONFIG_SCRATCH: { - /* Designate a buffer for scratch memory space */ + /* EVIDENCE-OF: R-08404-60887 There are three arguments to + ** SQLITE_CONFIG_SCRATCH: A pointer an 8-byte aligned memory buffer from + ** which the scratch allocations will be drawn, the size of each scratch + ** allocation (sz), and the maximum number of scratch allocations (N). */ sqlite3GlobalConfig.pScratch = va_arg(ap, void*); sqlite3GlobalConfig.szScratch = va_arg(ap, int); sqlite3GlobalConfig.nScratch = va_arg(ap, int); break; } case SQLITE_CONFIG_PAGECACHE: { - /* Designate a buffer for page cache memory space */ + /* EVIDENCE-OF: R-31408-40510 There are three arguments to + ** SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned memory, the size + ** of each page buffer (sz), and the number of pages (N). */ sqlite3GlobalConfig.pPage = va_arg(ap, void*); sqlite3GlobalConfig.szPage = va_arg(ap, int); sqlite3GlobalConfig.nPage = va_arg(ap, int); break; } + case SQLITE_CONFIG_PCACHE_HDRSZ: { + /* EVIDENCE-OF: R-39100-27317 The SQLITE_CONFIG_PCACHE_HDRSZ option takes + ** a single parameter which is a pointer to an integer and writes into + ** that integer the number of extra bytes per page required for each page + ** in SQLITE_CONFIG_PAGECACHE. */ + *va_arg(ap, int*) = + sqlite3HeaderSizeBtree() + + sqlite3HeaderSizePcache() + + sqlite3HeaderSizePcache1(); + break; + } case SQLITE_CONFIG_PCACHE: { /* no-op */ @@ -125370,11 +126848,18 @@ SQLITE_API int sqlite3_config(int op, ...){ } case SQLITE_CONFIG_PCACHE2: { - /* Specify an alternative page cache implementation */ + /* EVIDENCE-OF: R-63325-48378 The SQLITE_CONFIG_PCACHE2 option takes a + ** single argument which is a pointer to an sqlite3_pcache_methods2 + ** object. This object specifies the interface to a custom page cache + ** implementation. */ sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*); break; } case SQLITE_CONFIG_GETPCACHE2: { + /* EVIDENCE-OF: R-22035-46182 The SQLITE_CONFIG_GETPCACHE2 option takes a + ** single argument which is a pointer to an sqlite3_pcache_methods2 + ** object. SQLite copies of the current page cache implementation into + ** that object. */ if( sqlite3GlobalConfig.pcache2.xInit==0 ){ sqlite3PCacheSetDefault(); } @@ -125382,9 +126867,14 @@ SQLITE_API int sqlite3_config(int op, ...){ break; } +/* EVIDENCE-OF: R-06626-12911 The SQLITE_CONFIG_HEAP option is only +** available if SQLite is compiled with either SQLITE_ENABLE_MEMSYS3 or +** SQLITE_ENABLE_MEMSYS5 and returns SQLITE_ERROR if invoked otherwise. */ #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5) case SQLITE_CONFIG_HEAP: { - /* Designate a buffer for heap memory space */ + /* EVIDENCE-OF: R-19854-42126 There are three arguments to + ** SQLITE_CONFIG_HEAP: An 8-byte aligned pointer to the memory, the + ** number of bytes in the memory buffer, and the minimum allocation size. */ sqlite3GlobalConfig.pHeap = va_arg(ap, void*); sqlite3GlobalConfig.nHeap = va_arg(ap, int); sqlite3GlobalConfig.mnReq = va_arg(ap, int); @@ -125397,17 +126887,19 @@ SQLITE_API int sqlite3_config(int op, ...){ } if( sqlite3GlobalConfig.pHeap==0 ){ - /* If the heap pointer is NULL, then restore the malloc implementation - ** back to NULL pointers too. This will cause the malloc to go - ** back to its default implementation when sqlite3_initialize() is - ** run. + /* EVIDENCE-OF: R-49920-60189 If the first pointer (the memory pointer) + ** is NULL, then SQLite reverts to using its default memory allocator + ** (the system malloc() implementation), undoing any prior invocation of + ** SQLITE_CONFIG_MALLOC. + ** + ** Setting sqlite3GlobalConfig.m to all zeros will cause malloc to + ** revert to its default implementation when sqlite3_initialize() is run */ memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m)); }else{ - /* The heap pointer is not NULL, then install one of the - ** mem5.c/mem3.c methods. The enclosing #if guarantees at - ** least one of these methods is currently enabled. - */ + /* EVIDENCE-OF: R-61006-08918 If the memory pointer is not NULL then the + ** alternative memory allocator is engaged to handle all of SQLites + ** memory allocation needs. */ #ifdef SQLITE_ENABLE_MEMSYS3 sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3(); #endif @@ -125446,11 +126938,19 @@ SQLITE_API int sqlite3_config(int op, ...){ ** sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls. */ case SQLITE_CONFIG_URI: { + /* EVIDENCE-OF: R-25451-61125 The SQLITE_CONFIG_URI option takes a single + ** argument of type int. If non-zero, then URI handling is globally + ** enabled. If the parameter is zero, then URI handling is globally + ** disabled. */ sqlite3GlobalConfig.bOpenUri = va_arg(ap, int); break; } case SQLITE_CONFIG_COVERING_INDEX_SCAN: { + /* EVIDENCE-OF: R-36592-02772 The SQLITE_CONFIG_COVERING_INDEX_SCAN + ** option takes a single integer argument which is interpreted as a + ** boolean in order to enable or disable the use of covering indices for + ** full table scans in the query optimizer. */ sqlite3GlobalConfig.bUseCis = va_arg(ap, int); break; } @@ -125465,25 +126965,43 @@ SQLITE_API int sqlite3_config(int op, ...){ #endif case SQLITE_CONFIG_MMAP_SIZE: { + /* EVIDENCE-OF: R-58063-38258 SQLITE_CONFIG_MMAP_SIZE takes two 64-bit + ** integer (sqlite3_int64) values that are the default mmap size limit + ** (the default setting for PRAGMA mmap_size) and the maximum allowed + ** mmap size limit. */ sqlite3_int64 szMmap = va_arg(ap, sqlite3_int64); sqlite3_int64 mxMmap = va_arg(ap, sqlite3_int64); - if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ){ - mxMmap = SQLITE_MAX_MMAP_SIZE; - } - sqlite3GlobalConfig.mxMmap = mxMmap; + /* EVIDENCE-OF: R-53367-43190 If either argument to this option is + ** negative, then that argument is changed to its compile-time default. + ** + ** EVIDENCE-OF: R-34993-45031 The maximum allowed mmap size will be + ** silently truncated if necessary so that it does not exceed the + ** compile-time maximum mmap size set by the SQLITE_MAX_MMAP_SIZE + ** compile-time option. + */ + if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ) mxMmap = SQLITE_MAX_MMAP_SIZE; if( szMmap<0 ) szMmap = SQLITE_DEFAULT_MMAP_SIZE; if( szMmap>mxMmap) szMmap = mxMmap; + sqlite3GlobalConfig.mxMmap = mxMmap; sqlite3GlobalConfig.szMmap = szMmap; break; } -#if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC) +#if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC) /* IMP: R-04780-55815 */ case SQLITE_CONFIG_WIN32_HEAPSIZE: { + /* EVIDENCE-OF: R-34926-03360 SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit + ** unsigned integer value that specifies the maximum size of the created + ** heap. */ sqlite3GlobalConfig.nHeap = va_arg(ap, int); break; } #endif + case SQLITE_CONFIG_PMASZ: { + sqlite3GlobalConfig.szPma = va_arg(ap, unsigned int); + break; + } + default: { rc = SQLITE_ERROR; break; @@ -125562,6 +127080,12 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){ ** Return the mutex associated with a database connection. */ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif return db->mutex; } @@ -125571,6 +127095,10 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){ */ SQLITE_API int sqlite3_db_release_memory(sqlite3 *db){ int i; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); sqlite3BtreeEnterAll(db); for(i=0; inDb; i++){ @@ -125660,13 +127188,20 @@ static int binCollFunc( ){ int rc, n; n = nKey1lastRowid; } @@ -125708,6 +127249,12 @@ SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){ ** Return the number of changes in the most recent call to sqlite3_exec(). */ SQLITE_API int sqlite3_changes(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif return db->nChange; } @@ -125715,6 +127262,12 @@ SQLITE_API int sqlite3_changes(sqlite3 *db){ ** Return the number of changes since the database handle was opened. */ SQLITE_API int sqlite3_total_changes(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif return db->nTotalChange; } @@ -125894,16 +127447,6 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){ for(j=0; jnDb; j++){ struct Db *pDb = &db->aDb[j]; if( pDb->pBt ){ - if( pDb->pSchema ){ - /* Must clear the KeyInfo cache. See ticket [e4a18565a36884b00edf] */ - sqlite3BtreeEnter(pDb->pBt); - for(i=sqliteHashFirst(&pDb->pSchema->idxHash); i; i=sqliteHashNext(i)){ - Index *pIdx = sqliteHashData(i); - sqlite3KeyInfoUnref(pIdx->pKeyInfo); - pIdx->pKeyInfo = 0; - } - sqlite3BtreeLeave(pDb->pBt); - } sqlite3BtreeClose(pDb->pBt); pDb->pBt = 0; if( j!=1 ){ @@ -126210,7 +127753,7 @@ static int sqliteDefaultBusyCallback( void *ptr, /* Database connection */ int count /* Number of times table has been busy */ ){ -#if SQLITE_OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP) +#if SQLITE_OS_WIN || HAVE_USLEEP static const u8 delays[] = { 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100 }; static const u8 totals[] = @@ -126273,6 +127816,9 @@ SQLITE_API int sqlite3_busy_handler( int (*xBusy)(void*,int), void *pArg ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE; +#endif sqlite3_mutex_enter(db->mutex); db->busyHandler.xFunc = xBusy; db->busyHandler.pArg = pArg; @@ -126294,6 +127840,12 @@ SQLITE_API void sqlite3_progress_handler( int (*xProgress)(void*), void *pArg ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return; + } +#endif sqlite3_mutex_enter(db->mutex); if( nOps>0 ){ db->xProgress = xProgress; @@ -126314,6 +127866,9 @@ SQLITE_API void sqlite3_progress_handler( ** specified number of milliseconds before returning 0. */ SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif if( ms>0 ){ sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db); db->busyTimeout = ms; @@ -126327,6 +127882,12 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){ ** Cause any pending operation to stop at its earliest opportunity. */ SQLITE_API void sqlite3_interrupt(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return; + } +#endif db->u1.isInterrupted = 1; } @@ -126464,6 +128025,12 @@ SQLITE_API int sqlite3_create_function_v2( ){ int rc = SQLITE_ERROR; FuncDestructor *pArg = 0; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } +#endif sqlite3_mutex_enter(db->mutex); if( xDestroy ){ pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor)); @@ -126500,6 +128067,10 @@ SQLITE_API int sqlite3_create_function16( ){ int rc; char *zFunc8; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zFunctionName==0 ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); assert( !db->mallocFailed ); zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE); @@ -126531,6 +128102,12 @@ SQLITE_API int sqlite3_overload_function( ){ int nName = sqlite3Strlen30(zName); int rc = SQLITE_OK; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 || nArg<-2 ){ + return SQLITE_MISUSE_BKPT; + } +#endif sqlite3_mutex_enter(db->mutex); if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){ rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8, @@ -126552,6 +128129,13 @@ SQLITE_API int sqlite3_overload_function( */ SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){ void *pOld; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif sqlite3_mutex_enter(db->mutex); pOld = db->pTraceArg; db->xTrace = xTrace; @@ -126573,6 +128157,13 @@ SQLITE_API void *sqlite3_profile( void *pArg ){ void *pOld; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif sqlite3_mutex_enter(db->mutex); pOld = db->pProfileArg; db->xProfile = xProfile; @@ -126593,6 +128184,13 @@ SQLITE_API void *sqlite3_commit_hook( void *pArg /* Argument to the function */ ){ void *pOld; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif sqlite3_mutex_enter(db->mutex); pOld = db->pCommitArg; db->xCommitCallback = xCallback; @@ -126611,6 +128209,13 @@ SQLITE_API void *sqlite3_update_hook( void *pArg /* Argument to the function */ ){ void *pRet; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif sqlite3_mutex_enter(db->mutex); pRet = db->pUpdateArg; db->xUpdateCallback = xCallback; @@ -126629,6 +128234,13 @@ SQLITE_API void *sqlite3_rollback_hook( void *pArg /* Argument to the function */ ){ void *pRet; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif sqlite3_mutex_enter(db->mutex); pRet = db->pRollbackArg; db->xRollbackCallback = xCallback; @@ -126675,6 +128287,9 @@ SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){ UNUSED_PARAMETER(db); UNUSED_PARAMETER(nFrame); #else +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif if( nFrame>0 ){ sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame)); }else{ @@ -126695,6 +128310,12 @@ SQLITE_API void *sqlite3_wal_hook( ){ #ifndef SQLITE_OMIT_WAL void *pRet; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif sqlite3_mutex_enter(db->mutex); pRet = db->pWalArg; db->xWalCallback = xCallback; @@ -126722,14 +128343,21 @@ SQLITE_API int sqlite3_wal_checkpoint_v2( int rc; /* Return code */ int iDb = SQLITE_MAX_ATTACHED; /* sqlite3.aDb[] index of db to checkpoint */ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + /* Initialize the output variables to -1 in case an error occurs. */ if( pnLog ) *pnLog = -1; if( pnCkpt ) *pnCkpt = -1; - assert( SQLITE_CHECKPOINT_FULL>SQLITE_CHECKPOINT_PASSIVE ); - assert( SQLITE_CHECKPOINT_FULLSQLITE_CHECKPOINT_RESTART ){ + assert( SQLITE_CHECKPOINT_PASSIVE==0 ); + assert( SQLITE_CHECKPOINT_FULL==1 ); + assert( SQLITE_CHECKPOINT_RESTART==2 ); + assert( SQLITE_CHECKPOINT_TRUNCATE==3 ); + if( eModeSQLITE_CHECKPOINT_TRUNCATE ){ + /* EVIDENCE-OF: R-03996-12088 The M parameter must be a valid checkpoint + ** mode: */ return SQLITE_MISUSE; } @@ -126757,7 +128385,9 @@ SQLITE_API int sqlite3_wal_checkpoint_v2( ** checkpointed. */ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){ - return sqlite3_wal_checkpoint_v2(db, zDb, SQLITE_CHECKPOINT_PASSIVE, 0, 0); + /* EVIDENCE-OF: R-41613-20553 The sqlite3_wal_checkpoint(D,X) is equivalent to + ** sqlite3_wal_checkpoint_v2(D,X,SQLITE_CHECKPOINT_PASSIVE,0,0). */ + return sqlite3_wal_checkpoint_v2(db,zDb,SQLITE_CHECKPOINT_PASSIVE,0,0); } #ifndef SQLITE_OMIT_WAL @@ -126944,32 +128574,6 @@ SQLITE_API const char *sqlite3_errstr(int rc){ return sqlite3ErrStr(rc); } -/* -** Invalidate all cached KeyInfo objects for database connection "db" -*/ -static void invalidateCachedKeyInfo(sqlite3 *db){ - Db *pDb; /* A single database */ - int iDb; /* The database index number */ - HashElem *k; /* For looping over tables in pDb */ - Table *pTab; /* A table in the database */ - Index *pIdx; /* Each index */ - - for(iDb=0, pDb=db->aDb; iDbnDb; iDb++, pDb++){ - if( pDb->pBt==0 ) continue; - sqlite3BtreeEnter(pDb->pBt); - for(k=sqliteHashFirst(&pDb->pSchema->tblHash); k; k=sqliteHashNext(k)){ - pTab = (Table*)sqliteHashData(k); - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - if( pIdx->pKeyInfo && pIdx->pKeyInfo->db==db ){ - sqlite3KeyInfoUnref(pIdx->pKeyInfo); - pIdx->pKeyInfo = 0; - } - } - } - sqlite3BtreeLeave(pDb->pBt); - } -} - /* ** Create a new collating function for database "db". The name is zName ** and the encoding is enc. @@ -127013,7 +128617,6 @@ static int createCollation( return SQLITE_BUSY; } sqlite3ExpirePreparedStatements(db); - invalidateCachedKeyInfo(db); /* If collation sequence pColl was created directly by a call to ** sqlite3_create_collation, and not generated by synthCollSeq(), @@ -127118,6 +128721,12 @@ static const int aHardLimit[] = { SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){ int oldLimit; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return -1; + } +#endif /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME ** there is a hard upper bound set at compile-time by a C preprocessor @@ -127194,7 +128803,8 @@ SQLITE_PRIVATE int sqlite3ParseUri( assert( *pzErrMsg==0 ); - if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri) + if( ((flags & SQLITE_OPEN_URI) /* IMP: R-48725-32206 */ + || sqlite3GlobalConfig.bOpenUri) /* IMP: R-51689-46548 */ && nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */ ){ char *zOpt; @@ -127403,6 +129013,9 @@ static int openDatabase( char *zOpen = 0; /* Filename argument to pass to BtreeOpen() */ char *zErrMsg = 0; /* Error message from sqlite3ParseUri() */ +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppDb==0 ) return SQLITE_MISUSE_BKPT; +#endif *ppDb = 0; #ifndef SQLITE_OMIT_AUTOINIT rc = sqlite3_initialize(); @@ -127507,6 +129120,9 @@ static int openDatabase( #endif #if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS | SQLITE_ForeignKeys +#endif +#if defined(SQLITE_REVERSE_UNORDERED_SELECTS) + | SQLITE_ReverseOrder #endif ; sqlite3HashInit(&db->aCollSeq); @@ -127517,20 +129133,24 @@ static int openDatabase( /* Add the default collation sequence BINARY. BINARY works for both UTF-8 ** and UTF-16, so add a version for each to avoid any unnecessary ** conversions. The only error that can occur here is a malloc() failure. + ** + ** EVIDENCE-OF: R-52786-44878 SQLite defines three built-in collating + ** functions: */ createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0); createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0); createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0); + createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0); createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0); if( db->mallocFailed ){ goto opendb_out; } + /* EVIDENCE-OF: R-08308-17224 The default collating function for all + ** strings is BINARY. + */ db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0); assert( db->pDfltColl!=0 ); - /* Also add a UTF-8 case-insensitive collation sequence. */ - createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0); - /* Parse the filename/URI argument. */ db->openFlags = flags; rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg); @@ -127553,6 +129173,7 @@ static int openDatabase( } sqlite3BtreeEnter(db->aDb[0].pBt); db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt); + if( !db->mallocFailed ) ENC(db) = SCHEMA_ENC(db); sqlite3BtreeLeave(db->aDb[0].pBt); db->aDb[1].pSchema = sqlite3SchemaGet(db, 0); @@ -127694,13 +129315,15 @@ SQLITE_API int sqlite3_open16( sqlite3_value *pVal; int rc; - assert( zFilename ); - assert( ppDb ); +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppDb==0 ) return SQLITE_MISUSE_BKPT; +#endif *ppDb = 0; #ifndef SQLITE_OMIT_AUTOINIT rc = sqlite3_initialize(); if( rc ) return rc; #endif + if( zFilename==0 ) zFilename = "\000\000"; pVal = sqlite3ValueNew(0); sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC); zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8); @@ -127709,7 +129332,7 @@ SQLITE_API int sqlite3_open16( SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); assert( *ppDb || rc==SQLITE_NOMEM ); if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){ - ENC(*ppDb) = SQLITE_UTF16NATIVE; + SCHEMA_ENC(*ppDb) = ENC(*ppDb) = SQLITE_UTF16NATIVE; } }else{ rc = SQLITE_NOMEM; @@ -127730,13 +129353,7 @@ SQLITE_API int sqlite3_create_collation( void* pCtx, int(*xCompare)(void*,int,const void*,int,const void*) ){ - int rc; - sqlite3_mutex_enter(db->mutex); - assert( !db->mallocFailed ); - rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, 0); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; + return sqlite3_create_collation_v2(db, zName, enc, pCtx, xCompare, 0); } /* @@ -127751,6 +129368,10 @@ SQLITE_API int sqlite3_create_collation_v2( void(*xDel)(void*) ){ int rc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); assert( !db->mallocFailed ); rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel); @@ -127772,6 +129393,10 @@ SQLITE_API int sqlite3_create_collation16( ){ int rc = SQLITE_OK; char *zName8; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); assert( !db->mallocFailed ); zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE); @@ -127794,6 +129419,9 @@ SQLITE_API int sqlite3_collation_needed( void *pCollNeededArg, void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*) ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); db->xCollNeeded = xCollNeeded; db->xCollNeeded16 = 0; @@ -127812,6 +129440,9 @@ SQLITE_API int sqlite3_collation_needed16( void *pCollNeededArg, void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*) ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); db->xCollNeeded = 0; db->xCollNeeded16 = xCollNeeded16; @@ -127838,6 +129469,12 @@ SQLITE_API int sqlite3_global_recover(void){ ** by the next COMMIT or ROLLBACK. */ SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif return db->autoCommit; } @@ -127891,7 +129528,6 @@ SQLITE_API void sqlite3_thread_cleanup(void){ ** Return meta information about a specific column of a database table. ** See comment in sqlite3.h (sqlite.h.in) for details. */ -#ifdef SQLITE_ENABLE_COLUMN_METADATA SQLITE_API int sqlite3_table_column_metadata( sqlite3 *db, /* Connection handle */ const char *zDbName, /* Database name or NULL */ @@ -127907,7 +129543,7 @@ SQLITE_API int sqlite3_table_column_metadata( char *zErrMsg = 0; Table *pTab = 0; Column *pCol = 0; - int iCol; + int iCol = 0; char const *zDataType = 0; char const *zCollSeq = 0; @@ -127931,11 +129567,8 @@ SQLITE_API int sqlite3_table_column_metadata( } /* Find the column for which info is requested */ - if( sqlite3IsRowid(zColumnName) ){ - iCol = pTab->iPKey; - if( iCol>=0 ){ - pCol = &pTab->aCol[iCol]; - } + if( zColumnName==0 ){ + /* Query for existance of table only */ }else{ for(iCol=0; iColnCol; iCol++){ pCol = &pTab->aCol[iCol]; @@ -127944,8 +129577,13 @@ SQLITE_API int sqlite3_table_column_metadata( } } if( iCol==pTab->nCol ){ - pTab = 0; - goto error_out; + if( HasRowid(pTab) && sqlite3IsRowid(zColumnName) ){ + iCol = pTab->iPKey; + pCol = iCol>=0 ? &pTab->aCol[iCol] : 0; + }else{ + pTab = 0; + goto error_out; + } } } @@ -127998,7 +129636,6 @@ error_out: sqlite3_mutex_leave(db->mutex); return rc; } -#endif /* ** Sleep for a little while. Return the amount of time slept. @@ -128020,6 +129657,9 @@ SQLITE_API int sqlite3_sleep(int ms){ ** Enable or disable the extended result codes. */ SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); db->errMask = onoff ? 0xffffffff : 0xff; sqlite3_mutex_leave(db->mutex); @@ -128033,6 +129673,9 @@ SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, vo int rc = SQLITE_ERROR; Btree *pBtree; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); pBtree = sqlite3DbNameToBtree(db, zDbName); if( pBtree ){ @@ -128375,7 +130018,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){ ** returns a NULL pointer. */ SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){ - if( zFilename==0 ) return 0; + if( zFilename==0 || zParam==0 ) return 0; zFilename += sqlite3Strlen30(zFilename) + 1; while( zFilename[0] ){ int x = strcmp(zFilename, zParam); @@ -128431,7 +130074,14 @@ SQLITE_PRIVATE Btree *sqlite3DbNameToBtree(sqlite3 *db, const char *zDbName){ ** connection. */ SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){ - Btree *pBt = sqlite3DbNameToBtree(db, zDbName); + Btree *pBt; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + pBt = sqlite3DbNameToBtree(db, zDbName); return pBt ? sqlite3BtreeGetFilename(pBt) : 0; } @@ -128440,7 +130090,14 @@ SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){ ** no such database exists. */ SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName){ - Btree *pBt = sqlite3DbNameToBtree(db, zDbName); + Btree *pBt; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return -1; + } +#endif + pBt = sqlite3DbNameToBtree(db, zDbName); return pBt ? sqlite3BtreeIsReadonly(pBt) : -1; } @@ -131509,7 +133166,7 @@ static int fts3SelectLeaf( sqlite3_int64 *piLeaf, /* Selected leaf node */ sqlite3_int64 *piLeaf2 /* Selected leaf node */ ){ - int rc; /* Return code */ + int rc = SQLITE_OK; /* Return code */ int iHeight; /* Height of this node in tree */ assert( piLeaf || piLeaf2 ); @@ -131520,7 +133177,7 @@ static int fts3SelectLeaf( if( rc==SQLITE_OK && iHeight>1 ){ char *zBlob = 0; /* Blob read from %_segments table */ - int nBlob; /* Size of zBlob in bytes */ + int nBlob = 0; /* Size of zBlob in bytes */ if( piLeaf && piLeaf2 && (*piLeaf!=*piLeaf2) ){ rc = sqlite3Fts3ReadBlock(p, *piLeaf, &zBlob, &nBlob, 0); @@ -132742,7 +134399,7 @@ static int fts3FilterMethod( int nVal, /* Number of elements in apVal */ sqlite3_value **apVal /* Arguments for the indexing scheme */ ){ - int rc; + int rc = SQLITE_OK; char *zSql; /* SQL statement used to access %_content */ int eSearch; Fts3Table *p = (Fts3Table *)pCursor->pVtab; @@ -137861,7 +139518,7 @@ static int isVowel(const char *z){ ** by a consonant. ** ** In this routine z[] is in reverse order. So we are really looking -** for an instance of of a consonant followed by a vowel. +** for an instance of a consonant followed by a vowel. */ static int m_gt_0(const char *z){ while( isVowel(z) ){ z++; } @@ -139230,7 +140887,7 @@ static int fts3tokConnectMethod( sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */ char **pzErr /* OUT: sqlite3_malloc'd error message */ ){ - Fts3tokTable *pTab; + Fts3tokTable *pTab = 0; const sqlite3_tokenizer_module *pMod = 0; sqlite3_tokenizer *pTok = 0; int rc; @@ -142605,8 +144262,8 @@ static int fts3PromoteSegments( if( bOk ){ int iIdx = 0; - sqlite3_stmt *pUpdate1; - sqlite3_stmt *pUpdate2; + sqlite3_stmt *pUpdate1 = 0; + sqlite3_stmt *pUpdate2 = 0; if( rc==SQLITE_OK ){ rc = fts3SqlStmt(p, SQL_UPDATE_LEVEL_IDX, &pUpdate1, 0); @@ -147838,13 +149495,12 @@ static int readInt16(u8 *p){ return (p[0]<<8) + p[1]; } static void readCoord(u8 *p, RtreeCoord *pCoord){ - u32 i = ( + pCoord->u = ( (((u32)p[0]) << 24) + (((u32)p[1]) << 16) + (((u32)p[2]) << 8) + (((u32)p[3]) << 0) ); - *(u32 *)pCoord = i; } static i64 readInt64(u8 *p){ return ( @@ -147873,7 +149529,7 @@ static int writeCoord(u8 *p, RtreeCoord *pCoord){ u32 i; assert( sizeof(RtreeCoord)==4 ); assert( sizeof(u32)==4 ); - i = *(u32 *)pCoord; + i = pCoord->u; p[0] = (i>>24)&0xFF; p[1] = (i>>16)&0xFF; p[2] = (i>> 8)&0xFF; @@ -148204,14 +149860,13 @@ static void nodeGetCell( RtreeCell *pCell /* OUT: Write the cell contents here */ ){ u8 *pData; - u8 *pEnd; RtreeCoord *pCoord; + int ii; pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell); pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell); - pEnd = pData + pRtree->nDim*8; pCoord = pCell->aCoord; - for(; pDatanDim*2; ii++){ + readCoord(&pData[ii*4], &pCoord[ii]); } } @@ -148651,7 +150306,7 @@ static RtreeSearchPoint *rtreeEnqueue( pNew = pCur->aPoint + i; pNew->rScore = rScore; pNew->iLevel = iLevel; - assert( iLevel>=0 && iLevel<=RTREE_MAX_DEPTH ); + assert( iLevel<=RTREE_MAX_DEPTH ); while( i>0 ){ RtreeSearchPoint *pParent; j = (i-1)/2; @@ -150275,6 +151930,8 @@ static int rtreeUpdate( rtreeReference(pRtree); assert(nData>=1); + cell.iRowid = 0; /* Used only to suppress a compiler warning */ + /* Constraint handling. A write operation on an r-tree table may return ** SQLITE_CONSTRAINT for two reasons: ** diff --git a/TMessagesProj/jni/sqlite/sqlite3.h b/TMessagesProj/jni/sqlite/sqlite3.h index c31f126db..07406477d 100644 --- a/TMessagesProj/jni/sqlite/sqlite3.h +++ b/TMessagesProj/jni/sqlite/sqlite3.h @@ -57,7 +57,7 @@ extern "C" { /* ** These no-op macros are used in front of interfaces to mark those ** interfaces as either deprecated or experimental. New applications -** should not use deprecated interfaces - they are support for backwards +** should not use deprecated interfaces - they are supported for backwards ** compatibility only. Application writers should be aware that ** experimental interfaces are subject to change in point releases. ** @@ -107,9 +107,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.8.7.4" -#define SQLITE_VERSION_NUMBER 3008007 -#define SQLITE_SOURCE_ID "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e" +#define SQLITE_VERSION "3.8.8.1" +#define SQLITE_VERSION_NUMBER 3008008 +#define SQLITE_SOURCE_ID "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -201,7 +201,7 @@ SQLITE_API const char *sqlite3_compileoption_get(int N); ** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but ** can be fully or partially disabled using a call to [sqlite3_config()] ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD], -** or [SQLITE_CONFIG_MUTEX]. ^(The return value of the +** or [SQLITE_CONFIG_SERIALIZED]. ^(The return value of the ** sqlite3_threadsafe() function shows only the compile-time setting of ** thread safety, not any run-time changes to that setting made by ** sqlite3_config(). In other words, the return value from sqlite3_threadsafe() @@ -1221,7 +1221,7 @@ struct sqlite3_vfs { ** ** ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as -** was given no the corresponding lock. +** was given on the corresponding lock. ** ** The xShmLock method can transition between unlocked and SHARED or ** between unlocked and EXCLUSIVE. It cannot transition between SHARED @@ -1504,26 +1504,28 @@ struct sqlite3_mem_methods { ** SQLITE_CONFIG_SERIALIZED configuration option.
  • ** ** [[SQLITE_CONFIG_MALLOC]]
    SQLITE_CONFIG_MALLOC
    -**
    ^(This option takes a single argument which is a pointer to an -** instance of the [sqlite3_mem_methods] structure. The argument specifies +**
    ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is +** a pointer to an instance of the [sqlite3_mem_methods] structure. +** The argument specifies ** alternative low-level memory allocation routines to be used in place of ** the memory allocation routines built into SQLite.)^ ^SQLite makes ** its own private copy of the content of the [sqlite3_mem_methods] structure ** before the [sqlite3_config()] call returns.
    ** ** [[SQLITE_CONFIG_GETMALLOC]]
    SQLITE_CONFIG_GETMALLOC
    -**
    ^(This option takes a single argument which is a pointer to an -** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods] +**
    ^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which +** is a pointer to an instance of the [sqlite3_mem_methods] structure. +** The [sqlite3_mem_methods] ** structure is filled with the currently defined memory allocation routines.)^ ** This option can be used to overload the default memory allocation ** routines with a wrapper that simulations memory allocation failure or ** tracks memory usage, for example.
    ** ** [[SQLITE_CONFIG_MEMSTATUS]]
    SQLITE_CONFIG_MEMSTATUS
    -**
    ^This option takes single argument of type int, interpreted as a -** boolean, which enables or disables the collection of memory allocation -** statistics. ^(When memory allocation statistics are disabled, the -** following SQLite interfaces become non-operational: +**
    ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int, +** interpreted as a boolean, which enables or disables the collection of +** memory allocation statistics. ^(When memory allocation statistics are +** disabled, the following SQLite interfaces become non-operational: **
      **
    • [sqlite3_memory_used()] **
    • [sqlite3_memory_highwater()] @@ -1536,53 +1538,67 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_CONFIG_SCRATCH]]
    SQLITE_CONFIG_SCRATCH
    -**
    ^This option specifies a static memory buffer that SQLite can use for -** scratch memory. There are three arguments: A pointer an 8-byte +**
    ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer +** that SQLite can use for scratch memory. ^(There are three arguments +** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte ** aligned memory buffer from which the scratch allocations will be ** drawn, the size of each scratch allocation (sz), -** and the maximum number of scratch allocations (N). The sz -** argument must be a multiple of 16. +** and the maximum number of scratch allocations (N).)^ ** The first argument must be a pointer to an 8-byte aligned buffer ** of at least sz*N bytes of memory. -** ^SQLite will use no more than two scratch buffers per thread. So -** N should be set to twice the expected maximum number of threads. -** ^SQLite will never require a scratch buffer that is more than 6 -** times the database page size. ^If SQLite needs needs additional +** ^SQLite will not use more than one scratch buffers per thread. +** ^SQLite will never request a scratch buffer that is more than 6 +** times the database page size. +** ^If SQLite needs needs additional ** scratch memory beyond what is provided by this configuration option, then -** [sqlite3_malloc()] will be used to obtain the memory needed.
    +** [sqlite3_malloc()] will be used to obtain the memory needed.

    +** ^When the application provides any amount of scratch memory using +** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large +** [sqlite3_malloc|heap allocations]. +** This can help [Robson proof|prevent memory allocation failures] due to heap +** fragmentation in low-memory embedded systems. +** ** ** [[SQLITE_CONFIG_PAGECACHE]]

    SQLITE_CONFIG_PAGECACHE
    -**
    ^This option specifies a static memory buffer that SQLite can use for -** the database page cache with the default page cache implementation. +**
    ^The SQLITE_CONFIG_PAGECACHE option specifies a static memory buffer +** that SQLite can use for the database page cache with the default page +** cache implementation. ** This configuration should not be used if an application-define page -** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option. -** There are three arguments to this option: A pointer to 8-byte aligned +** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2] +** configuration option. +** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to +** 8-byte aligned ** memory, the size of each page buffer (sz), and the number of pages (N). ** The sz argument should be the size of the largest database page -** (a power of two between 512 and 32768) plus a little extra for each -** page header. ^The page header size is 20 to 40 bytes depending on -** the host architecture. ^It is harmless, apart from the wasted memory, -** to make sz a little too large. The first -** argument should point to an allocation of at least sz*N bytes of memory. +** (a power of two between 512 and 65536) plus some extra bytes for each +** page header. ^The number of extra bytes needed by the page header +** can be determined using the [SQLITE_CONFIG_PCACHE_HDRSZ] option +** to [sqlite3_config()]. +** ^It is harmless, apart from the wasted memory, +** for the sz parameter to be larger than necessary. The first +** argument should pointer to an 8-byte aligned block of memory that +** is at least sz*N bytes of memory, otherwise subsequent behavior is +** undefined. ** ^SQLite will use the memory provided by the first argument to satisfy its ** memory needs for the first N pages that it adds to cache. ^If additional ** page cache memory is needed beyond what is provided by this option, then -** SQLite goes to [sqlite3_malloc()] for the additional storage space. -** The pointer in the first argument must -** be aligned to an 8-byte boundary or subsequent behavior of SQLite -** will be undefined.
    +** SQLite goes to [sqlite3_malloc()] for the additional storage space. ** ** [[SQLITE_CONFIG_HEAP]]
    SQLITE_CONFIG_HEAP
    -**
    ^This option specifies a static memory buffer that SQLite will use -** for all of its dynamic memory allocation needs beyond those provided -** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE]. -** There are three arguments: An 8-byte aligned pointer to the memory, +**
    ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer +** that SQLite will use for all of its dynamic memory allocation needs +** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and +** [SQLITE_CONFIG_PAGECACHE]. +** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled +** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns +** [SQLITE_ERROR] if invoked otherwise. +** ^There are three arguments to SQLITE_CONFIG_HEAP: +** An 8-byte aligned pointer to the memory, ** the number of bytes in the memory buffer, and the minimum allocation size. ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts ** to using its default memory allocator (the system malloc() implementation), ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the -** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or -** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory +** memory pointer is not NULL then the alternative memory ** allocator is engaged to handle all of SQLites memory allocation needs. ** The first pointer (the memory pointer) must be aligned to an 8-byte ** boundary or subsequent behavior of SQLite will be undefined. @@ -1590,11 +1606,11 @@ struct sqlite3_mem_methods { ** for the minimum allocation size are 2**5 through 2**8.
    ** ** [[SQLITE_CONFIG_MUTEX]]
    SQLITE_CONFIG_MUTEX
    -**
    ^(This option takes a single argument which is a pointer to an -** instance of the [sqlite3_mutex_methods] structure. The argument specifies -** alternative low-level mutex routines to be used in place -** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the -** content of the [sqlite3_mutex_methods] structure before the call to +**
    ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a +** pointer to an instance of the [sqlite3_mutex_methods] structure. +** The argument specifies alternative low-level mutex routines to be used +** in place the mutex routines built into SQLite.)^ ^SQLite makes a copy of +** the content of the [sqlite3_mutex_methods] structure before the call to ** [sqlite3_config()] returns. ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then ** the entire mutexing subsystem is omitted from the build and hence calls to @@ -1602,8 +1618,8 @@ struct sqlite3_mem_methods { ** return [SQLITE_ERROR].
    ** ** [[SQLITE_CONFIG_GETMUTEX]]
    SQLITE_CONFIG_GETMUTEX
    -**
    ^(This option takes a single argument which is a pointer to an -** instance of the [sqlite3_mutex_methods] structure. The +**
    ^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which +** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The ** [sqlite3_mutex_methods] ** structure is filled with the currently defined mutex routines.)^ ** This option can be used to overload the default mutex allocation @@ -1615,25 +1631,25 @@ struct sqlite3_mem_methods { ** return [SQLITE_ERROR].
    ** ** [[SQLITE_CONFIG_LOOKASIDE]]
    SQLITE_CONFIG_LOOKASIDE
    -**
    ^(This option takes two arguments that determine the default -** memory allocation for the lookaside memory allocator on each -** [database connection]. The first argument is the +**
    ^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine +** the default size of lookaside memory on each [database connection]. +** The first argument is the ** size of each lookaside buffer slot and the second is the number of -** slots allocated to each database connection.)^ ^(This option sets the -** default lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE] -** verb to [sqlite3_db_config()] can be used to change the lookaside +** slots allocated to each database connection.)^ ^(SQLITE_CONFIG_LOOKASIDE +** sets the default lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE] +** option to [sqlite3_db_config()] can be used to change the lookaside ** configuration on individual connections.)^
    ** ** [[SQLITE_CONFIG_PCACHE2]]
    SQLITE_CONFIG_PCACHE2
    -**
    ^(This option takes a single argument which is a pointer to -** an [sqlite3_pcache_methods2] object. This object specifies the interface -** to a custom page cache implementation.)^ ^SQLite makes a copy of the -** object and uses it for page cache memory allocations.
    +**
    ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is +** a pointer to an [sqlite3_pcache_methods2] object. This object specifies +** the interface to a custom page cache implementation.)^ +** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.
    ** ** [[SQLITE_CONFIG_GETPCACHE2]]
    SQLITE_CONFIG_GETPCACHE2
    -**
    ^(This option takes a single argument which is a pointer to an -** [sqlite3_pcache_methods2] object. SQLite copies of the current -** page cache implementation into that object.)^
    +**
    ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which +** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of +** the current page cache implementation into that object.)^
    ** ** [[SQLITE_CONFIG_LOG]]
    SQLITE_CONFIG_LOG
    **
    The SQLITE_CONFIG_LOG option is used to configure the SQLite @@ -1656,10 +1672,11 @@ struct sqlite3_mem_methods { ** function must be threadsafe.
    ** ** [[SQLITE_CONFIG_URI]]
    SQLITE_CONFIG_URI -**
    ^(This option takes a single argument of type int. If non-zero, then -** URI handling is globally enabled. If the parameter is zero, then URI handling -** is globally disabled.)^ ^If URI handling is globally enabled, all filenames -** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or +**
    ^(The SQLITE_CONFIG_URI option takes a single argument of type int. +** If non-zero, then URI handling is globally enabled. If the parameter is zero, +** then URI handling is globally disabled.)^ ^If URI handling is globally +** enabled, all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], +** [sqlite3_open16()] or ** specified as part of [ATTACH] commands are interpreted as URIs, regardless ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database ** connection is opened. ^If it is globally disabled, filenames are @@ -1669,9 +1686,10 @@ struct sqlite3_mem_methods { ** [SQLITE_USE_URI] symbol defined.)^ ** ** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]]
    SQLITE_CONFIG_COVERING_INDEX_SCAN -**
    ^This option takes a single integer argument which is interpreted as -** a boolean in order to enable or disable the use of covering indices for -** full table scans in the query optimizer. ^The default setting is determined +**
    ^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer +** argument which is interpreted as a boolean in order to enable or disable +** the use of covering indices for full table scans in the query optimizer. +** ^The default setting is determined ** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on" ** if that compile-time option is omitted. ** The ability to disable the use of covering indices for full table scans @@ -1711,19 +1729,39 @@ struct sqlite3_mem_methods { ** ^The default setting can be overridden by each database connection using ** either the [PRAGMA mmap_size] command, or by using the ** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size -** cannot be changed at run-time. Nor may the maximum allowed mmap size -** exceed the compile-time maximum mmap size set by the +** will be silently truncated if necessary so that it does not exceed the +** compile-time maximum mmap size set by the ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^ ** ^If either argument to this option is negative, then that argument is ** changed to its compile-time default. ** ** [[SQLITE_CONFIG_WIN32_HEAPSIZE]] **
    SQLITE_CONFIG_WIN32_HEAPSIZE -**
    ^This option is only available if SQLite is compiled for Windows -** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined. -** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value +**
    ^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is +** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro +** defined. ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value ** that specifies the maximum size of the created heap. ** +** +** [[SQLITE_CONFIG_PCACHE_HDRSZ]] +**
    SQLITE_CONFIG_PCACHE_HDRSZ +**
    ^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which +** is a pointer to an integer and writes into that integer the number of extra +** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. +** The amount of extra space required can change depending on the compiler, +** target platform, and SQLite version. +** +** [[SQLITE_CONFIG_PMASZ]] +**
    SQLITE_CONFIG_PMASZ +**
    ^The SQLITE_CONFIG_PMASZ option takes a single parameter which +** is an unsigned integer and sets the "Minimum PMA Size" for the multithreaded +** sorter to that integer. The default minimum PMA Size is set by the +** [SQLITE_SORTER_PMASZ] compile-time option. New threads are launched +** to help with sort operations when multithreaded sorting +** is enabled (using the [PRAGMA threads] command) and the amount of content +** to be sorted exceeds the page size times the minimum of the +** [PRAGMA cache_size] setting and this value. +** */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ @@ -1748,6 +1786,8 @@ struct sqlite3_mem_methods { #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ +#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */ +#define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */ /* ** CAPI3REF: Database Connection Configuration Options @@ -1875,47 +1915,45 @@ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); /* ** CAPI3REF: Count The Number Of Rows Modified ** -** ^This function returns the number of database rows that were changed -** or inserted or deleted by the most recently completed SQL statement -** on the [database connection] specified by the first parameter. -** ^(Only changes that are directly specified by the [INSERT], [UPDATE], -** or [DELETE] statement are counted. Auxiliary changes caused by -** triggers or [foreign key actions] are not counted.)^ Use the -** [sqlite3_total_changes()] function to find the total number of changes -** including changes caused by triggers and foreign key actions. +** ^This function returns the number of rows modified, inserted or +** deleted by the most recently completed INSERT, UPDATE or DELETE +** statement on the database connection specified by the only parameter. +** ^Executing any other type of SQL statement does not modify the value +** returned by this function. ** -** ^Changes to a view that are simulated by an [INSTEAD OF trigger] -** are not counted. Only real table changes are counted. +** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are +** considered - auxiliary changes caused by [CREATE TRIGGER | triggers], +** [foreign key actions] or [REPLACE] constraint resolution are not counted. +** +** Changes to a view that are intercepted by +** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value +** returned by sqlite3_changes() immediately after an INSERT, UPDATE or +** DELETE statement run on a view is always zero. Only changes made to real +** tables are counted. ** -** ^(A "row change" is a change to a single row of a single table -** caused by an INSERT, DELETE, or UPDATE statement. Rows that -** are changed as side effects of [REPLACE] constraint resolution, -** rollback, ABORT processing, [DROP TABLE], or by any other -** mechanisms do not count as direct row changes.)^ -** -** A "trigger context" is a scope of execution that begins and -** ends with the script of a [CREATE TRIGGER | trigger]. -** Most SQL statements are -** evaluated outside of any trigger. This is the "top level" -** trigger context. If a trigger fires from the top level, a -** new trigger context is entered for the duration of that one -** trigger. Subtriggers create subcontexts for their duration. -** -** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does -** not create a new trigger context. -** -** ^This function returns the number of direct row changes in the -** most recent INSERT, UPDATE, or DELETE statement within the same -** trigger context. -** -** ^Thus, when called from the top level, this function returns the -** number of changes in the most recent INSERT, UPDATE, or DELETE -** that also occurred at the top level. ^(Within the body of a trigger, -** the sqlite3_changes() interface can be called to find the number of -** changes in the most recently completed INSERT, UPDATE, or DELETE -** statement within the body of the same trigger. -** However, the number returned does not include changes -** caused by subtriggers since those have their own context.)^ +** Things are more complicated if the sqlite3_changes() function is +** executed while a trigger program is running. This may happen if the +** program uses the [changes() SQL function], or if some other callback +** function invokes sqlite3_changes() directly. Essentially: +** +**
      +**
    • ^(Before entering a trigger program the value returned by +** sqlite3_changes() function is saved. After the trigger program +** has finished, the original value is restored.)^ +** +**
    • ^(Within a trigger program each INSERT, UPDATE and DELETE +** statement sets the value returned by sqlite3_changes() +** upon completion as normal. Of course, this value will not include +** any changes performed by sub-triggers, as the sqlite3_changes() +** value will be saved and restored after each sub-trigger has run.)^ +**
    +** +** ^This means that if the changes() SQL function (or similar) is used +** by the first INSERT, UPDATE or DELETE statement within a trigger, it +** returns the value as set when the calling statement began executing. +** ^If it is used by the second or subsequent such statement within a trigger +** program, the value returned reflects the number of rows modified by the +** previous INSERT, UPDATE or DELETE statement within the same trigger. ** ** See also the [sqlite3_total_changes()] interface, the ** [count_changes pragma], and the [changes() SQL function]. @@ -1929,20 +1967,17 @@ SQLITE_API int sqlite3_changes(sqlite3*); /* ** CAPI3REF: Total Number Of Rows Modified ** -** ^This function returns the number of row changes caused by [INSERT], -** [UPDATE] or [DELETE] statements since the [database connection] was opened. -** ^(The count returned by sqlite3_total_changes() includes all changes -** from all [CREATE TRIGGER | trigger] contexts and changes made by -** [foreign key actions]. However, -** the count does not include changes used to implement [REPLACE] constraints, -** do rollbacks or ABORT processing, or [DROP TABLE] processing. The -** count does not include rows of views that fire an [INSTEAD OF trigger], -** though if the INSTEAD OF trigger makes changes of its own, those changes -** are counted.)^ -** ^The sqlite3_total_changes() function counts the changes as soon as -** the statement that makes them is completed (when the statement handle -** is passed to [sqlite3_reset()] or [sqlite3_finalize()]). -** +** ^This function returns the total number of rows inserted, modified or +** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed +** since the database connection was opened, including those executed as +** part of trigger programs. ^Executing any other type of SQL statement +** does not affect the value returned by sqlite3_total_changes(). +** +** ^Changes made as part of [foreign key actions] are included in the +** count, but those made as part of REPLACE constraint resolution are +** not. ^Changes to a view that are intercepted by INSTEAD OF triggers +** are not counted. +** ** See also the [sqlite3_changes()] interface, the ** [count_changes pragma], and the [total_changes() SQL function]. ** @@ -2029,6 +2064,7 @@ SQLITE_API int sqlite3_complete16(const void *sql); /* ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors +** KEYWORDS: {busy-handler callback} {busy handler} ** ** ^The sqlite3_busy_handler(D,X,P) routine sets a callback function X ** that might be invoked with argument P whenever @@ -2045,7 +2081,7 @@ SQLITE_API int sqlite3_complete16(const void *sql); ** ^The first argument to the busy handler is a copy of the void* pointer which ** is the third argument to sqlite3_busy_handler(). ^The second argument to ** the busy handler callback is the number of times that the busy handler has -** been invoked for the same locking event. ^If the +** been invoked previously for the same locking event. ^If the ** busy callback returns 0, then no additional attempts are made to ** access the database and [SQLITE_BUSY] is returned ** to the application. @@ -2420,13 +2456,14 @@ SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag); ** applications to access the same PRNG for other purposes. ** ** ^A call to this routine stores N bytes of randomness into buffer P. -** ^If N is less than one, then P can be a NULL pointer. +** ^The P parameter can be a NULL pointer. ** ** ^If this routine has not been previously called or if the previous -** call had N less than one, then the PRNG is seeded using randomness -** obtained from the xRandomness method of the default [sqlite3_vfs] object. -** ^If the previous call to this routine had an N of 1 or more then -** the pseudo-randomness is generated +** call had N less than one or a NULL pointer for P, then the PRNG is +** seeded using randomness obtained from the xRandomness method of +** the default [sqlite3_vfs] object. +** ^If the previous call to this routine had an N of 1 or more and a +** non-NULL P then the pseudo-randomness is generated ** internally and without recourse to the [sqlite3_vfs] xRandomness ** method. */ @@ -4148,9 +4185,9 @@ SQLITE_API int sqlite3_create_function_v2( ** These constant define integer codes that represent the various ** text encodings supported by SQLite. */ -#define SQLITE_UTF8 1 -#define SQLITE_UTF16LE 2 -#define SQLITE_UTF16BE 3 +#define SQLITE_UTF8 1 /* IMP: R-37514-35566 */ +#define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */ +#define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */ #define SQLITE_UTF16 4 /* Use native byte order */ #define SQLITE_ANY 5 /* Deprecated */ #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */ @@ -4499,7 +4536,8 @@ typedef void (*sqlite3_destructor_type)(void*); ** the [sqlite3_context] pointer, the results are undefined. */ SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); -SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*,sqlite3_uint64,void(*)(void*)); +SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*, + sqlite3_uint64,void(*)(void*)); SQLITE_API void sqlite3_result_double(sqlite3_context*, double); SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int); SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int); @@ -5131,20 +5169,27 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); /* ** CAPI3REF: Extract Metadata About A Column Of A Table ** -** ^This routine returns metadata about a specific column of a specific -** database table accessible using the [database connection] handle -** passed as the first function argument. +** ^(The sqlite3_table_column_metadata(X,D,T,C,....) routine returns +** information about column C of table T in database D +** on [database connection] X.)^ ^The sqlite3_table_column_metadata() +** interface returns SQLITE_OK and fills in the non-NULL pointers in +** the final five arguments with appropriate values if the specified +** column exists. ^The sqlite3_table_column_metadata() interface returns +** SQLITE_ERROR and if the specified column does not exist. +** ^If the column-name parameter to sqlite3_table_column_metadata() is a +** NULL pointer, then this routine simply checks for the existance of the +** table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it +** does not. ** ** ^The column is identified by the second, third and fourth parameters to -** this function. ^The second parameter is either the name of the database +** this function. ^(The second parameter is either the name of the database ** (i.e. "main", "temp", or an attached database) containing the specified -** table or NULL. ^If it is NULL, then all attached databases are searched +** table or NULL.)^ ^If it is NULL, then all attached databases are searched ** for the table using the same algorithm used by the database engine to ** resolve unqualified table references. ** ** ^The third and fourth parameters to this function are the table and column -** name of the desired column, respectively. Neither of these parameters -** may be NULL. +** name of the desired column, respectively. ** ** ^Metadata is returned by writing to the memory locations passed as the 5th ** and subsequent parameters to this function. ^Any of these arguments may be @@ -5163,16 +5208,17 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); ** )^ ** ** ^The memory pointed to by the character pointers returned for the -** declaration type and collation sequence is valid only until the next +** declaration type and collation sequence is valid until the next ** call to any SQLite API function. ** ** ^If the specified table is actually a view, an [error code] is returned. ** -** ^If the specified column is "rowid", "oid" or "_rowid_" and an +** ^If the specified column is "rowid", "oid" or "_rowid_" and the table +** is not a [WITHOUT ROWID] table and an ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output ** parameters are set for the explicitly declared column. ^(If there is no -** explicitly declared [INTEGER PRIMARY KEY] column, then the output -** parameters are set as follows: +** [INTEGER PRIMARY KEY] column, then the outputs +** for the [rowid] are set as follows: ** **
     **     data type: "INTEGER"
    @@ -5182,13 +5228,9 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
     **     auto increment: 0
     ** 
    )^ ** -** ^(This function may load one or more schemas from database files. If an -** error occurs during this process, or if the requested table or column -** cannot be found, an [error code] is returned and an error message left -** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^ -** -** ^This API is only available if the library was compiled with the -** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. +** ^This function causes all database schemas to be read from disk and +** parsed, if that has not already been done, and returns an error if +** any errors are encountered while loading the schema. */ SQLITE_API int sqlite3_table_column_metadata( sqlite3 *db, /* Connection handle */ @@ -5641,26 +5683,42 @@ typedef struct sqlite3_blob sqlite3_blob; ** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow; ** )^ ** +** ^(Parameter zDb is not the filename that contains the database, but +** rather the symbolic name of the database. For attached databases, this is +** the name that appears after the AS keyword in the [ATTACH] statement. +** For the main database file, the database name is "main". For TEMP +** tables, the database name is "temp".)^ +** ** ^If the flags parameter is non-zero, then the BLOB is opened for read -** and write access. ^If it is zero, the BLOB is opened for read access. -** ^It is not possible to open a column that is part of an index or primary -** key for writing. ^If [foreign key constraints] are enabled, it is -** not possible to open a column that is part of a [child key] for writing. +** and write access. ^If the flags parameter is zero, the BLOB is opened for +** read-only access. ** -** ^Note that the database name is not the filename that contains -** the database but rather the symbolic name of the database that -** appears after the AS keyword when the database is connected using [ATTACH]. -** ^For the main database file, the database name is "main". -** ^For TEMP tables, the database name is "temp". +** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored +** in *ppBlob. Otherwise an [error code] is returned and, unless the error +** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided +** the API is not misused, it is always safe to call [sqlite3_blob_close()] +** on *ppBlob after this function it returns. +** +** This function fails with SQLITE_ERROR if any of the following are true: +**
      +**
    • ^(Database zDb does not exist)^, +**
    • ^(Table zTable does not exist within database zDb)^, +**
    • ^(Table zTable is a WITHOUT ROWID table)^, +**
    • ^(Column zColumn does not exist)^, +**
    • ^(Row iRow is not present in the table)^, +**
    • ^(The specified column of row iRow contains a value that is not +** a TEXT or BLOB value)^, +**
    • ^(Column zColumn is part of an index, PRIMARY KEY or UNIQUE +** constraint and the blob is being opened for read/write access)^, +**
    • ^([foreign key constraints | Foreign key constraints] are enabled, +** column zColumn is part of a [child key] definition and the blob is +** being opened for read/write access)^. +**
    +** +** ^Unless it returns SQLITE_MISUSE, this function sets the +** [database connection] error code and message accessible via +** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. ** -** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written -** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set -** to be a null pointer.)^ -** ^This function sets the [database connection] error code and message -** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related -** functions. ^Note that the *ppBlob variable is always initialized in a -** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob -** regardless of the success or failure of this routine. ** ** ^(If the row that a BLOB handle points to is modified by an ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects @@ -5678,13 +5736,9 @@ typedef struct sqlite3_blob sqlite3_blob; ** interface. Use the [UPDATE] SQL command to change the size of a ** blob. ** -** ^The [sqlite3_blob_open()] interface will fail for a [WITHOUT ROWID] -** table. Incremental BLOB I/O is not possible on [WITHOUT ROWID] tables. -** ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces -** and the built-in [zeroblob] SQL function can be used, if desired, -** to create an empty, zero-filled blob in which to read or write using -** this interface. +** and the built-in [zeroblob] SQL function may be used to create a +** zero-filled blob to read or write using the incremental-blob interface. ** ** To avoid a resource leak, every open [BLOB handle] should eventually ** be released by a call to [sqlite3_blob_close()]. @@ -5726,24 +5780,22 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_i /* ** CAPI3REF: Close A BLOB Handle ** -** ^Closes an open [BLOB handle]. +** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed +** unconditionally. Even if this routine returns an error code, the +** handle is still closed.)^ ** -** ^Closing a BLOB shall cause the current transaction to commit -** if there are no other BLOBs, no pending prepared statements, and the -** database connection is in [autocommit mode]. -** ^If any writes were made to the BLOB, they might be held in cache -** until the close operation if they will fit. +** ^If the blob handle being closed was opened for read-write access, and if +** the database is in auto-commit mode and there are no other open read-write +** blob handles or active write statements, the current transaction is +** committed. ^If an error occurs while committing the transaction, an error +** code is returned and the transaction rolled back. ** -** ^(Closing the BLOB often forces the changes -** out to disk and so if any I/O errors occur, they will likely occur -** at the time when the BLOB is closed. Any errors that occur during -** closing are reported as a non-zero return value.)^ -** -** ^(The BLOB is closed unconditionally. Even if this routine returns -** an error code, the BLOB is still closed.)^ -** -** ^Calling this routine with a null pointer (such as would be returned -** by a failed call to [sqlite3_blob_open()]) is a harmless no-op. +** Calling this function with an argument that is not a NULL pointer or an +** open blob handle results in undefined behaviour. ^Calling this routine +** with a null pointer (such as would be returned by a failed call to +** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function +** is passed a valid open blob handle, the values returned by the +** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning. */ SQLITE_API int sqlite3_blob_close(sqlite3_blob *); @@ -5793,21 +5845,27 @@ SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); /* ** CAPI3REF: Write Data Into A BLOB Incrementally ** -** ^This function is used to write data into an open [BLOB handle] from a -** caller-supplied buffer. ^N bytes of data are copied from the buffer Z -** into the open BLOB, starting at offset iOffset. +** ^(This function is used to write data into an open [BLOB handle] from a +** caller-supplied buffer. N bytes of data are copied from the buffer Z +** into the open BLOB, starting at offset iOffset.)^ +** +** ^(On success, sqlite3_blob_write() returns SQLITE_OK. +** Otherwise, an [error code] or an [extended error code] is returned.)^ +** ^Unless SQLITE_MISUSE is returned, this function sets the +** [database connection] error code and message accessible via +** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. ** ** ^If the [BLOB handle] passed as the first argument was not opened for ** writing (the flags parameter to [sqlite3_blob_open()] was zero), ** this function returns [SQLITE_READONLY]. ** -** ^This function may only modify the contents of the BLOB; it is +** This function may only modify the contents of the BLOB; it is ** not possible to increase the size of a BLOB using this API. ** ^If offset iOffset is less than N bytes from the end of the BLOB, -** [SQLITE_ERROR] is returned and no data is written. ^If N is -** less than zero [SQLITE_ERROR] is returned and no data is written. -** The size of the BLOB (and hence the maximum value of N+iOffset) -** can be determined using the [sqlite3_blob_bytes()] interface. +** [SQLITE_ERROR] is returned and no data is written. The size of the +** BLOB (and hence the maximum value of N+iOffset) can be determined +** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less +** than zero [SQLITE_ERROR] is returned and no data is written. ** ** ^An attempt to write to an expired [BLOB handle] fails with an ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred @@ -5816,9 +5874,6 @@ SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); ** have been overwritten by the statement that expired the BLOB handle ** or by other independent statements. ** -** ^(On success, sqlite3_blob_write() returns SQLITE_OK. -** Otherwise, an [error code] or an [extended error code] is returned.)^ -** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not ** been closed by [sqlite3_blob_close()]. Passing any other pointer in @@ -5871,34 +5926,34 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** ** The SQLite source code contains multiple implementations ** of these mutex routines. An appropriate implementation -** is selected automatically at compile-time. ^(The following +** is selected automatically at compile-time. The following ** implementations are available in the SQLite core: ** **
      **
    • SQLITE_MUTEX_PTHREADS **
    • SQLITE_MUTEX_W32 **
    • SQLITE_MUTEX_NOOP -**
    )^ +** ** -** ^The SQLITE_MUTEX_NOOP implementation is a set of routines +** The SQLITE_MUTEX_NOOP implementation is a set of routines ** that does no real locking and is appropriate for use in -** a single-threaded application. ^The SQLITE_MUTEX_PTHREADS and +** a single-threaded application. The SQLITE_MUTEX_PTHREADS and ** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix ** and Windows. ** -** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor +** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex ** implementation is included with the library. In this case the ** application must supply a custom mutex implementation using the ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function ** before calling sqlite3_initialize() or any other public sqlite3_ -** function that calls sqlite3_initialize().)^ +** function that calls sqlite3_initialize(). ** ** ^The sqlite3_mutex_alloc() routine allocates a new -** mutex and returns a pointer to it. ^If it returns NULL -** that means that a mutex could not be allocated. ^SQLite -** will unwind its stack and return an error. ^(The argument -** to sqlite3_mutex_alloc() is one of these integer constants: +** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc() +** routine returns NULL if it is unable to allocate the requested +** mutex. The argument to sqlite3_mutex_alloc() must one of these +** integer constants: ** **
      **
    • SQLITE_MUTEX_FAST @@ -5911,7 +5966,8 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); **
    • SQLITE_MUTEX_STATIC_PMEM **
    • SQLITE_MUTEX_STATIC_APP1 **
    • SQLITE_MUTEX_STATIC_APP2 -**
    )^ +**
  • SQLITE_MUTEX_STATIC_APP3 +** ** ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) ** cause sqlite3_mutex_alloc() to create @@ -5919,14 +5975,14 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** is used but not necessarily so when SQLITE_MUTEX_FAST is used. ** The mutex implementation does not need to make a distinction ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does -** not want to. ^SQLite will only request a recursive mutex in -** cases where it really needs one. ^If a faster non-recursive mutex +** not want to. SQLite will only request a recursive mutex in +** cases where it really needs one. If a faster non-recursive mutex ** implementation is available on the host platform, the mutex subsystem ** might return such a mutex in response to SQLITE_MUTEX_FAST. ** ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return -** a pointer to a static preexisting mutex. ^Six static mutexes are +** a pointer to a static preexisting mutex. ^Nine static mutexes are ** used by the current version of SQLite. Future versions of SQLite ** may add additional static mutexes. Static mutexes are for internal ** use by SQLite only. Applications that use SQLite mutexes should @@ -5935,16 +5991,13 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() -** returns a different mutex on every call. ^But for the static +** returns a different mutex on every call. ^For the static ** mutex types, the same mutex is returned on every call that has ** the same type number. ** ** ^The sqlite3_mutex_free() routine deallocates a previously -** allocated dynamic mutex. ^SQLite is careful to deallocate every -** dynamic mutex that it allocates. The dynamic mutexes must not be in -** use when they are deallocated. Attempting to deallocate a static -** mutex results in undefined behavior. ^SQLite never deallocates -** a static mutex. +** allocated dynamic mutex. Attempting to deallocate a static +** mutex results in undefined behavior. ** ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt ** to enter a mutex. ^If another thread is already within the mutex, @@ -5952,23 +6005,21 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK] ** upon successful entry. ^(Mutexes created using ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. -** In such cases the, +** In such cases, the ** mutex must be exited an equal number of times before another thread -** can enter.)^ ^(If the same thread tries to enter any other -** kind of mutex more than once, the behavior is undefined. -** SQLite will never exhibit -** such behavior in its own use of mutexes.)^ +** can enter.)^ If the same thread tries to enter any mutex other +** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined. ** ** ^(Some systems (for example, Windows 95) do not support the operation ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() -** will always return SQLITE_BUSY. The SQLite core only ever uses -** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^ +** will always return SQLITE_BUSY. The SQLite core only ever uses +** sqlite3_mutex_try() as an optimization so this is acceptable +** behavior.)^ ** ** ^The sqlite3_mutex_leave() routine exits a mutex that was -** previously entered by the same thread. ^(The behavior +** previously entered by the same thread. The behavior ** is undefined if the mutex is not currently entered by the -** calling thread or is not currently allocated. SQLite will -** never do either.)^ +** calling thread or is not currently allocated. ** ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or ** sqlite3_mutex_leave() is a NULL pointer, then all three routines @@ -5989,9 +6040,9 @@ SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); ** used to allocate and use mutexes. ** ** Usually, the default mutex implementations provided by SQLite are -** sufficient, however the user has the option of substituting a custom +** sufficient, however the application has the option of substituting a custom ** implementation for specialized deployments or systems for which SQLite -** does not provide a suitable implementation. In this case, the user +** does not provide a suitable implementation. In this case, the application ** creates and populates an instance of this structure to pass ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option. ** Additionally, an instance of this structure can be used as an @@ -6032,13 +6083,13 @@ SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); ** (i.e. it is acceptable to provide an implementation that segfaults if ** it is passed a NULL pointer). ** -** The xMutexInit() method must be threadsafe. ^It must be harmless to +** The xMutexInit() method must be threadsafe. It must be harmless to ** invoke xMutexInit() multiple times within the same process and without ** intervening calls to xMutexEnd(). Second and subsequent calls to ** xMutexInit() must be no-ops. ** -** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] -** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory +** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] +** and its associates). Similarly, xMutexAlloc() must not use SQLite memory ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite ** memory allocation for a fast or recursive mutex. ** @@ -6064,29 +6115,29 @@ struct sqlite3_mutex_methods { ** CAPI3REF: Mutex Verification Routines ** ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines -** are intended for use inside assert() statements. ^The SQLite core +** are intended for use inside assert() statements. The SQLite core ** never uses these routines except inside an assert() and applications -** are advised to follow the lead of the core. ^The SQLite core only +** are advised to follow the lead of the core. The SQLite core only ** provides implementations for these routines when it is compiled -** with the SQLITE_DEBUG flag. ^External mutex implementations +** with the SQLITE_DEBUG flag. External mutex implementations ** are only required to provide these routines if SQLITE_DEBUG is ** defined and if NDEBUG is not defined. ** -** ^These routines should return true if the mutex in their argument +** These routines should return true if the mutex in their argument ** is held or not held, respectively, by the calling thread. ** -** ^The implementation is not required to provide versions of these +** The implementation is not required to provide versions of these ** routines that actually work. If the implementation does not provide working ** versions of these routines, it should at least provide stubs that always ** return true so that one does not get spurious assertion failures. ** -** ^If the argument to sqlite3_mutex_held() is a NULL pointer then +** If the argument to sqlite3_mutex_held() is a NULL pointer then ** the routine should return 1. This seems counter-intuitive since ** clearly the mutex cannot be held if it does not exist. But ** the reason the mutex does not exist is because the build is not ** using mutexes. And we do not want the assert() containing the ** call to sqlite3_mutex_held() to fail, so a non-zero return is -** the appropriate thing to do. ^The sqlite3_mutex_notheld() +** the appropriate thing to do. The sqlite3_mutex_notheld() ** interface should also return 1 when given a NULL pointer. */ #ifndef NDEBUG @@ -6819,6 +6870,10 @@ typedef struct sqlite3_backup sqlite3_backup; ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with ** an error. ** +** ^A call to sqlite3_backup_init() will fail, returning SQLITE_ERROR, if +** there is already a read or read-write transaction open on the +** destination database. +** ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is ** returned and an error code and error message are stored in the ** destination [database connection] D. @@ -7142,12 +7197,10 @@ SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); ** CAPI3REF: Write-Ahead Log Commit Hook ** ** ^The [sqlite3_wal_hook()] function is used to register a callback that -** will be invoked each time a database connection commits data to a -** [write-ahead log] (i.e. whenever a transaction is committed in -** [journal_mode | journal_mode=WAL mode]). +** is invoked each time data is committed to a database in wal mode. ** -** ^The callback is invoked by SQLite after the commit has taken place and -** the associated write-lock on the database released, so the implementation +** ^(The callback is invoked by SQLite after the commit has taken place and +** the associated write-lock on the database released)^, so the implementation ** may read, write or [checkpoint] the database as required. ** ** ^The first parameter passed to the callback function when it is invoked @@ -7212,97 +7265,114 @@ SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); /* ** CAPI3REF: Checkpoint a database ** -** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X -** on [database connection] D to be [checkpointed]. ^If X is NULL or an -** empty string, then a checkpoint is run on all databases of -** connection D. ^If the database connection D is not in -** [WAL | write-ahead log mode] then this interface is a harmless no-op. -** ^The [sqlite3_wal_checkpoint(D,X)] interface initiates a -** [sqlite3_wal_checkpoint_v2|PASSIVE] checkpoint. -** Use the [sqlite3_wal_checkpoint_v2()] interface to get a FULL -** or RESET checkpoint. +** ^(The sqlite3_wal_checkpoint(D,X) is equivalent to +** [sqlite3_wal_checkpoint_v2](D,X,[SQLITE_CHECKPOINT_PASSIVE],0,0).)^ ** -** ^The [wal_checkpoint pragma] can be used to invoke this interface -** from SQL. ^The [sqlite3_wal_autocheckpoint()] interface and the -** [wal_autocheckpoint pragma] can be used to cause this interface to be -** run whenever the WAL reaches a certain size threshold. +** In brief, sqlite3_wal_checkpoint(D,X) causes the content in the +** [write-ahead log] for database X on [database connection] D to be +** transferred into the database file and for the write-ahead log to +** be reset. See the [checkpointing] documentation for addition +** information. ** -** See also: [sqlite3_wal_checkpoint_v2()] +** This interface used to be the only way to cause a checkpoint to +** occur. But then the newer and more powerful [sqlite3_wal_checkpoint_v2()] +** interface was added. This interface is retained for backwards +** compatibility and as a convenience for applications that need to manually +** start a callback but which do not need the full power (and corresponding +** complication) of [sqlite3_wal_checkpoint_v2()]. */ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); /* ** CAPI3REF: Checkpoint a database ** -** Run a checkpoint operation on WAL database zDb attached to database -** handle db. The specific operation is determined by the value of the -** eMode parameter: +** ^(The sqlite3_wal_checkpoint_v2(D,X,M,L,C) interface runs a checkpoint +** operation on database X of [database connection] D in mode M. Status +** information is written back into integers pointed to by L and C.)^ +** ^(The M parameter must be a valid [checkpoint mode]:)^ ** **
    **
    SQLITE_CHECKPOINT_PASSIVE
    -** Checkpoint as many frames as possible without waiting for any database -** readers or writers to finish. Sync the db file if all frames in the log -** are checkpointed. This mode is the same as calling -** sqlite3_wal_checkpoint(). The [sqlite3_busy_handler|busy-handler callback] -** is never invoked. +** ^Checkpoint as many frames as possible without waiting for any database +** readers or writers to finish, then sync the database file if all frames +** in the log were checkpointed. ^The [busy-handler callback] +** is never invoked in the SQLITE_CHECKPOINT_PASSIVE mode. +** ^On the other hand, passive mode might leave the checkpoint unfinished +** if there are concurrent readers or writers. ** **
    SQLITE_CHECKPOINT_FULL
    -** This mode blocks (it invokes the +** ^This mode blocks (it invokes the ** [sqlite3_busy_handler|busy-handler callback]) until there is no ** database writer and all readers are reading from the most recent database -** snapshot. It then checkpoints all frames in the log file and syncs the -** database file. This call blocks database writers while it is running, -** but not database readers. +** snapshot. ^It then checkpoints all frames in the log file and syncs the +** database file. ^This mode blocks new database writers while it is pending, +** but new database readers are allowed to continue unimpeded. ** **
    SQLITE_CHECKPOINT_RESTART
    -** This mode works the same way as SQLITE_CHECKPOINT_FULL, except after -** checkpointing the log file it blocks (calls the -** [sqlite3_busy_handler|busy-handler callback]) -** until all readers are reading from the database file only. This ensures -** that the next client to write to the database file restarts the log file -** from the beginning. This call blocks database writers while it is running, -** but not database readers. +** ^This mode works the same way as SQLITE_CHECKPOINT_FULL with the addition +** that after checkpointing the log file it blocks (calls the +** [busy-handler callback]) +** until all readers are reading from the database file only. ^This ensures +** that the next writer will restart the log file from the beginning. +** ^Like SQLITE_CHECKPOINT_FULL, this mode blocks new +** database writer attempts while it is pending, but does not impede readers. +** +**
    SQLITE_CHECKPOINT_TRUNCATE
    +** ^This mode works the same way as SQLITE_CHECKPOINT_RESTART with the +** addition that it also truncates the log file to zero bytes just prior +** to a successful return. **
    ** -** If pnLog is not NULL, then *pnLog is set to the total number of frames in -** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to -** the total number of checkpointed frames (including any that were already -** checkpointed when this function is called). *pnLog and *pnCkpt may be -** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK. -** If no values are available because of an error, they are both set to -1 -** before returning to communicate this to the caller. +** ^If pnLog is not NULL, then *pnLog is set to the total number of frames in +** the log file or to -1 if the checkpoint could not run because +** of an error or because the database is not in [WAL mode]. ^If pnCkpt is not +** NULL,then *pnCkpt is set to the total number of checkpointed frames in the +** log file (including any that were already checkpointed before the function +** was called) or to -1 if the checkpoint could not run due to an error or +** because the database is not in WAL mode. ^Note that upon successful +** completion of an SQLITE_CHECKPOINT_TRUNCATE, the log file will have been +** truncated to zero bytes and so both *pnLog and *pnCkpt will be set to zero. ** -** All calls obtain an exclusive "checkpoint" lock on the database file. If +** ^All calls obtain an exclusive "checkpoint" lock on the database file. ^If ** any other process is running a checkpoint operation at the same time, the -** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a +** lock cannot be obtained and SQLITE_BUSY is returned. ^Even if there is a ** busy-handler configured, it will not be invoked in this case. ** -** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive -** "writer" lock on the database file. If the writer lock cannot be obtained -** immediately, and a busy-handler is configured, it is invoked and the writer -** lock retried until either the busy-handler returns 0 or the lock is -** successfully obtained. The busy-handler is also invoked while waiting for -** database readers as described above. If the busy-handler returns 0 before +** ^The SQLITE_CHECKPOINT_FULL, RESTART and TRUNCATE modes also obtain the +** exclusive "writer" lock on the database file. ^If the writer lock cannot be +** obtained immediately, and a busy-handler is configured, it is invoked and +** the writer lock retried until either the busy-handler returns 0 or the lock +** is successfully obtained. ^The busy-handler is also invoked while waiting for +** database readers as described above. ^If the busy-handler returns 0 before ** the writer lock is obtained or while waiting for database readers, the ** checkpoint operation proceeds from that point in the same way as ** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible -** without blocking any further. SQLITE_BUSY is returned in this case. +** without blocking any further. ^SQLITE_BUSY is returned in this case. ** -** If parameter zDb is NULL or points to a zero length string, then the -** specified operation is attempted on all WAL databases. In this case the -** values written to output parameters *pnLog and *pnCkpt are undefined. If +** ^If parameter zDb is NULL or points to a zero length string, then the +** specified operation is attempted on all WAL databases [attached] to +** [database connection] db. In this case the +** values written to output parameters *pnLog and *pnCkpt are undefined. ^If ** an SQLITE_BUSY error is encountered when processing one or more of the ** attached WAL databases, the operation is still attempted on any remaining -** attached databases and SQLITE_BUSY is returned to the caller. If any other +** attached databases and SQLITE_BUSY is returned at the end. ^If any other ** error occurs while processing an attached database, processing is abandoned -** and the error code returned to the caller immediately. If no error +** and the error code is returned to the caller immediately. ^If no error ** (SQLITE_BUSY or otherwise) is encountered while processing the attached ** databases, SQLITE_OK is returned. ** -** If database zDb is the name of an attached database that is not in WAL -** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If +** ^If database zDb is the name of an attached database that is not in WAL +** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. ^If ** zDb is not NULL (or a zero length string) and is not the name of any ** attached database, SQLITE_ERROR is returned to the caller. +** +** ^Unless it returns SQLITE_MISUSE, +** the sqlite3_wal_checkpoint_v2() interface +** sets the error information that is queried by +** [sqlite3_errcode()] and [sqlite3_errmsg()]. +** +** ^The [PRAGMA wal_checkpoint] command can be used to invoke this interface +** from SQL. */ SQLITE_API int sqlite3_wal_checkpoint_v2( sqlite3 *db, /* Database handle */ @@ -7313,16 +7383,18 @@ SQLITE_API int sqlite3_wal_checkpoint_v2( ); /* -** CAPI3REF: Checkpoint operation parameters +** CAPI3REF: Checkpoint Mode Values +** KEYWORDS: {checkpoint mode} ** -** These constants can be used as the 3rd parameter to -** [sqlite3_wal_checkpoint_v2()]. See the [sqlite3_wal_checkpoint_v2()] -** documentation for additional information about the meaning and use of -** each of these values. +** These constants define all valid values for the "checkpoint mode" passed +** as the third parameter to the [sqlite3_wal_checkpoint_v2()] interface. +** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the +** meaning of each of these checkpoint modes. */ -#define SQLITE_CHECKPOINT_PASSIVE 0 -#define SQLITE_CHECKPOINT_FULL 1 -#define SQLITE_CHECKPOINT_RESTART 2 +#define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ +#define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ +#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */ +#define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ /* ** CAPI3REF: Virtual Table Interface Configuration @@ -7411,6 +7483,106 @@ SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); /* #define SQLITE_ABORT 4 // Also an error code */ #define SQLITE_REPLACE 5 +/* +** CAPI3REF: Prepared Statement Scan Status Opcodes +** KEYWORDS: {scanstatus options} +** +** The following constants can be used for the T parameter to the +** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a +** different metric for sqlite3_stmt_scanstatus() to return. +** +** When the value returned to V is a string, space to hold that string is +** managed by the prepared statement S and will be automatically freed when +** S is finalized. +** +**
    +** [[SQLITE_SCANSTAT_NLOOP]]
    SQLITE_SCANSTAT_NLOOP
    +**
    ^The [sqlite3_int64] variable pointed to by the T parameter will be +** set to the total number of times that the X-th loop has run.
    +** +** [[SQLITE_SCANSTAT_NVISIT]]
    SQLITE_SCANSTAT_NVISIT
    +**
    ^The [sqlite3_int64] variable pointed to by the T parameter will be set +** to the total number of rows examined by all iterations of the X-th loop.
    +** +** [[SQLITE_SCANSTAT_EST]]
    SQLITE_SCANSTAT_EST
    +**
    ^The "double" variable pointed to by the T parameter will be set to the +** query planner's estimate for the average number of rows output from each +** iteration of the X-th loop. If the query planner's estimates was accurate, +** then this value will approximate the quotient NVISIT/NLOOP and the +** product of this value for all prior loops with the same SELECTID will +** be the NLOOP value for the current loop. +** +** [[SQLITE_SCANSTAT_NAME]]
    SQLITE_SCANSTAT_NAME
    +**
    ^The "const char *" variable pointed to by the T parameter will be set +** to a zero-terminated UTF-8 string containing the name of the index or table +** used for the X-th loop. +** +** [[SQLITE_SCANSTAT_EXPLAIN]]
    SQLITE_SCANSTAT_EXPLAIN
    +**
    ^The "const char *" variable pointed to by the T parameter will be set +** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] +** description for the X-th loop. +** +** [[SQLITE_SCANSTAT_SELECTID]]
    SQLITE_SCANSTAT_SELECT
    +**
    ^The "int" variable pointed to by the T parameter will be set to the +** "select-id" for the X-th loop. The select-id identifies which query or +** subquery the loop is part of. The main query has a select-id of zero. +** The select-id is the same value as is output in the first column +** of an [EXPLAIN QUERY PLAN] query. +**
    +*/ +#define SQLITE_SCANSTAT_NLOOP 0 +#define SQLITE_SCANSTAT_NVISIT 1 +#define SQLITE_SCANSTAT_EST 2 +#define SQLITE_SCANSTAT_NAME 3 +#define SQLITE_SCANSTAT_EXPLAIN 4 +#define SQLITE_SCANSTAT_SELECTID 5 + +/* +** CAPI3REF: Prepared Statement Scan Status +** +** This interface returns information about the predicted and measured +** performance for pStmt. Advanced applications can use this +** interface to compare the predicted and the measured performance and +** issue warnings and/or rerun [ANALYZE] if discrepancies are found. +** +** Since this interface is expected to be rarely used, it is only +** available if SQLite is compiled using the [SQLITE_ENABLE_STMT_SCANSTATUS] +** compile-time option. +** +** The "iScanStatusOp" parameter determines which status information to return. +** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior +** of this interface is undefined. +** ^The requested measurement is written into a variable pointed to by +** the "pOut" parameter. +** Parameter "idx" identifies the specific loop to retrieve statistics for. +** Loops are numbered starting from zero. ^If idx is out of range - less than +** zero or greater than or equal to the total number of loops used to implement +** the statement - a non-zero value is returned and the variable that pOut +** points to is unchanged. +** +** ^Statistics might not be available for all loops in all statements. ^In cases +** where there exist loops with no available statistics, this function behaves +** as if the loop did not exist - it returns non-zero and leave the variable +** that pOut points to unchanged. +** +** See also: [sqlite3_stmt_scanstatus_reset()] +*/ +SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_scanstatus( + sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ + int idx, /* Index of loop to report on */ + int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ + void *pOut /* Result written here */ +); + +/* +** CAPI3REF: Zero Scan-Status Counters +** +** ^Zero all [sqlite3_stmt_scanstatus()] related event counters. +** +** This API is only available if the library is built with pre-processor +** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined. +*/ +SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*); /* diff --git a/TMessagesProj/libs/armeabi-v7a/libtmessages.5.so b/TMessagesProj/libs/armeabi-v7a/libtmessages.5.so index 46e200f5b551e78095bd997878986b9340ffc5cb..132154abf38191fc4c62b72fa970432035348ec9 100755 GIT binary patch delta 278944 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

    5|F(Xn+A8wsxE%>i{cZ_>WEMtu3hNsL5h zR^7Evkuc!&{vn;2`D`OfSkgWID|2~qFuZ@=p{KPEwSKQ9W5DHNMSit6#BzO$&^)c% zlIz~uqP-oh9nzP+#+3S0e_4v1`j1k)te^I}b`C!gT>CmyrLUKCkN(-~+5~Nx9`}ak z(q_~>`i3@M(?awQwzJ;-c0><-lO@2bPkIxhFZKK0BMe%J^16^ZZMsEk)vx#uiJ$3@OR-1)@;~HwU5|SkdRo8yZOE;!m7+rb_-*pvs>i&; zV4S5t_zq+5dHtVv=l4yhVJm8txiqcl$o=|{A9ELEb{{?T z6V4a;ed{mW);c--G#GrpM_(nQYRKlF&hG`UMZ>#%lC+>w3$%+jJSsfYBt4s(ld zab(@whxtXy@^M7nMJ?Jr+Ms<+qBB?3C=KOrQx=EE%5o6Dr>?bC`$@B~tN*-B`>(cG zf2y6co$?w_7AAd5(n1|>q zr0A=^+`;?}ult~b!DE>grjI+ST{L>*SG0ZUK-S{{t($sJMg|rnS-|6@J?D#o$5-H^ z`cp?4zxU~_N42DwJ4uyRa@v>aA)SoZ^Yqg?wL4>f4h@kzyH>dv91pE~rBmytS+<7i zA9iVXTULkalaFcRv^;&qF>ONP|MoI=_(|;dzfZn+y!YhMEEb9d`hjEG`KQ%=DLS`P zc%=%`8*sHcmR)0URJ6RJk3O#HebZEp{+m11-qg^#ua0XAt(Hqd^b3E{E=g>7K0)l| zEB9*MIGr3f(A!wI=@)IJX6dl$AO5O6$4`<=y0wcf|9-B&-p$f>LEWF-%unqF{jA?L zSK?it`xdAvEK(nde@{+c)Xv{L>mUEFy<^#Xr0)Jd`0-Ket^2J<`_!UMt=sdrc8jJR z)5re9>^oF<*FRKrT1CUj&d|b&mcT+;`I+e4GQrwrwO9WT&Q4eEk9zcv|7BT9)U}gL z_3QLGC$-LqGz>ZSwqB%b|7!97kF4*2kE+=IzcY9DZpq!fn~)yL5<=(@LXVWtks5jv z3(#u4iARzDn0YRh+n8H%BfPjjWl>c{<@SeZ--_K`0vs3QW zGiS~@bLPy7c%H=H{d6dkKVv*KS^Ug-rYR)$l0*`z8Gq#Ed#&Mv(xAFz-nYd!*#WPK;Q2f% zPi%AYJZ5GW^1aQ(b{GGV^PC(SSB&@PSvhpO7+>i;ngdb~Q*K8Kj^v1`{yc{9p*iA6 z03W6D#qX$U2*1s{zax7nzsF0xqwG*#+uHwJzBlJ=fI{izcwLGQ<2QNRks_uzN0+Q4 z$XSYme4u%y(Eb|4+#Hf=>gndanMQ})e5mzuT7YsqBR`+g-Ml7!RGRC2R+>mC%`cgN z=IcfBFt&=iM)FVCZ1HU*Utq!tYF>#q0-m2;i4V0{NBofQZM72(SU1w++xw`^kK7Ug_Q$bzT18wvy6w z@L$C+nCK~zL-S7Ld*31|swnw&QS$2(RI(lq41J08SBNWLl>TQ?`jZpXz8-JL?ubS8 z_-K{q9~Zmvoi!S^ucPfJ?yGMK?bt#}RYEKUJR@mBsy<8e5iy;4q=}6b{kroXRGt_uB75@$&Q6OZeK1I@ zvAEI~L(d|`hw*$PW5?)mKfXuPYxpaZtJ8-5JdjsFjZ&8#VOpvv@v`0yl%s$o zUX4|x=1DwXtK2g{N$Vk6Pv;L*^WEL~-dIsBZ=;r)ze94U%RL+{;2*j9p$5pMbsYkfq;{y&>Q8G|^6G4YxVVxBalY|a z@n9A2uktgusr5QOg73IZN7nIhwCL_S{wq(oEsm_`ofr?eEu0(qb*uJW;{at?ZIS&I z->tH)w0b8W$?6H)H~ep2df1kHZ@e-mQ}PlYMJQQ=5tjdpmu6XO9rH5>Q0YA!7v!kc z9>89d@a*BGR33CqXb1Qpra8aN_pYi!wP*8^lyZ=#0r7o!h+8zR>!y6~{qmyQzxX&a zbBl||`9sDlU7^D#d0%b7#(eMbU=jKQ-_7};%k=Db-j)K-@HxEtWwGH5w`=Cgfgt+D zt_ysRjcuVm*ZDHgZ7;54WG4y74c^oQ^1S1(+^e(7qQN8nDQ8P*Yc^obB`#+34vd9U zi6?vyf3ut}J>hFuh8Xgc&*c2>X<6GPzWuZ~_MC@XnMxV2`LxmxmgIZ8q=b3Q`g}~$ z>W3!x>WAhM(=!X9d4BpmG5rm1!?p2G{gn$|@$);rjk5(}LLQ&QdEOU?Ua3yTyPpsm zS65oGU#_>SL+zg~0?l>XUx{B!em?3eIq15I?PuXJigu{mc>iPKwnMGWxc@QoGt@!+ z?NKq&P`8;d(53y=8!GQ{j@|~TkytdPgVm<|`+tc+!Rld^UpYc0i>s~qu_KgFTwTo9 z9HF6yNJ7G)k!AaM2KD$k&$;eEF!C-YBreKRZ}}?O=jhLpYIZztEqW5c2#Vu zr#3S2`2CdGK)uJy?-wTxliOZR^O`H&Z+s{vl}R{xjK%2uvd(0q1w&9uXmfg zDc#-a;1wR;M5QiT(gp+4P<-1){gr8_Cg*$87Kt_OFjl2oArPg^D>wv`kl74ji7X^! zrYN&AV`*OpHHgKCa~;%T8c+U0-0P}7D8@hiip~sCH}i&HQ9^>6!0%5L*Avv2jBnc} z&JR<6)-ky2C#b^2n{F1}rmB$v{LMNsb(z|W+3S{u*%Y`Q9Yp4G^_VF%aV->Hq&&lw zx(R&O0c9@~VyvlI32W)dYPALLv6lE6wJLABmZI0F4SD^wGzvaT68qMuD&yWY;_zBE zlH2b$@mK2m6;r-*(S!ABd$yZuZBT1~02#7D4GUQ_7zcaME|PK_&DB4BhC4N5x@&g& zaJK)yhpO*ZOPN;;$oKk-uDjJr z+-}4F;7YL7UP;W~tCr+iVve6uH%IK=uePx8QxWv)TQ!;=bW_D6>e7;f-Tuk|xVCUs z_eQBQ09tF~!=J_}**T@?_7U|Z_be5c{-tux2P_poA5~9s9v>!F9#>;H2K35F^(#BO zOA{`tZP-O|`l4!ZC|h0oN&TFa7ws;qqZwGU6Iayl*;+CEXSF2*qC9t1{TJh(FBEgG zsrOh&|6ciCe!fknoZzT{;+_HK;vUxu-SZJmxuK5ccNU13H`H(z`l@HX*SC0^%m`QG z%qVjRbYvPAeDl1gsCr9n!L)_Qa7q^wZ>wB2pYH)M64URhJ}N&nPb^MX+jCxep17B( z<}to0neN?JZ}Ws?I^t3L@=nPj^ntomWtVB!WA!&)Ypz(Ftp+mIRBZLCGnw{Vmwa!^ zbE^7O&E}ovQ0Oyt2CqJcHat_Yy@*A>s}{~j&lW3RsJofgqjSD@@)Obe54EbwV`kCB zSLz1tH%o;6jb^ekqTg$^x5^*SpkwdU^N>2t%TbA^%n;$ZYG20d&Y;%$Y9l(4r_SZt z41qv2XKlq4W-7&a_35;Mo7R}^(@oy7bmE=r7JXDx9mWqNiIpa3`0?IJ^vY~H#w#U> z!mXqe1@h5oBHxilf=DX z6Bw#A;RrQtD8P(+V1RkYbV zRR?`BpqMhCwiq=-zbG)WF95FhNn@Kahusk||a#kO}vrQ8P?= zJSUz;%``pZ$Kyr+S*AgZ4~iG(XPefT_}7)hp!ufg0RE^Et=WjSpYJJRQcVrbd}0qV zajVJBc%2?JXPapaclDs~uS{q7z3$lJP2()Z?rVNZoY_xV#r$A3$`3Yl{KV)zrtO?} z>?%s`H`yJ0Zv|2DdjJWu(7fZOfAj28qSFaewCwNfQzp4ZJ)_;HP1^z|vtr84$G-m& zz?ICemhsDDk#NRz-f6oNn(uW(gC~|6Tr&v}i+^3iw+BUu>!t;ab)@Y#OkaV_>Uh&s zhLxtVH%&D_yl%f~3S$m&`ljgsGcO3iX{wlV+w?CxpWjNvcmQy`VJngFz|@U9-vs1) zE9d(uAJz9$dej$}9+^6E?rJH*y{2O>y}B=!;uAmR)O|mNl7^W559gSAFg~LR^~%Mt z^ll^gJJG^vzGvb_0})xw{2+)2)FEdjb2!)Qi0De@ii{^d6n!h3o0xfGEwQ<} zIb7opYlt&-%uWaYGf!M^W`4lIQXXw-{*|#aV)ciR6LC{D(W#C3t&PvFOzpdxPqHKA z+sz!t4u~q<%)eS7xU%&%cVJya&%Wj|K9GV;8Dg&FBZqAaayjVq81u*ciwKGwYo6o0 zFuJhavd!g}i6djp;dY);THKpv9%SJbw`eif{ERv8Jk9g!OY!UmvgLdsn#?orXFRMF zy_#?C4>?iK1!!O?QEQ=jEpz&R;HQ}2y2SV?ZDYi}MdtS0{=6PW8E#lTQ9H%lg!#29 zQONs6D6>3nNQ;}5p!rM8wR!Cl;^Y$Z9F=z|E?TcJACdhxuQHcnkQ$aZ+Lx?}@Kn=&WIX0C+FxC3 z4-T0{YyV;k>1ebT2FmVMv{uG1;fFl$N8k7=3;lhSN5y=VVSd6{L%U?sE;|7_PLWwh zi&XjRRAK)>du!oAFND@qTf_L?=VEg+ZHI}^{#~^HP}|Myt2X%JT}WTNpe3|6TBMnk zq$+XRRle$};2pI<&i$T>(9UQFzxjtq=%PK)%w4~gJ?Pq73scRD((=4*#n`^uzcgF= z;XE(XQ?oLt-au_FpOsG62Wp*o&2*|bNNW;6NS5LPiIx3NG^F%J1K$8AG&ZAXh$1(8{pYv?4+4%yfF3pp`5AXr!<56C~Y< zl8uW6*B1xkDE_|{#8dU5+Hd^$ZQ(aeyUw}$rpO+l#h9yCIDoka*hp?0!WDa2gz?`F?D*MUjPK`r|J#}381~_mJ5?(MXe%)d+56GhX<8ldSG%TZH6Y8(n5O-km7(oP z+E@I|9_ln*o6m01-RW969vdaJ8Co}N-@B>rY%LHH=drT^sXM9h9Bl!Zk&AP*-YlT} z?*G>3E}G^N)F2sk)}}tmn&fyFC2K+2^71g-Se|wyYb9A2ol6FE`xm58PO@gz>LNL! zJlW@Ip@9!}6%Luy$1%AJ&nKVmqL_JF3!c4;X3W#V(VDIEv^MODcri~ahRH5R+Cr@% zhNbyJO)wy~+(lZMfKA`zc~jfL++u_acZo4SXyHbxwOFfGb~TciGA2u&{NawcX9dD0 z_{-qy@Dl;ADKu{}`ns3`zR-SibVG`qXekKqOe_UmEJvkN&_!%IDd>-zhNoyv5!#oc zea>uDVTo3W=k26!OSBp6uDG>C`+!yd1y*2XQ_7<$19s+R7f2;yWvMBiK|5s|mU|HI zm55HRnSRuK8Rlv%O;`qSX(Uc8(<(9k=MH+d9P9P%4$@X=?E`M_K-+L)a{@XkHjwfb z3>%ox6__xH6l#&Smi447qal2v^*Br?(017 z_ma_zOU-&Bef-9JBQ9;!&X{q`v0|%MD&WyEG&Zh4-|C25cu8SCSzpq*t=dlk3%BKY zFIVSSbSodeU$5n9*Ea0~+ju0E$Ha^iFSY^lZ~)QnYt75Gm6<;eKs{nZ2O9LYu^nQqMHZ_EMUVhADK?p)_q~K>nseDE$EdBtb$7T~~;9 z-)awS+~*3_{y~dm14N%6w2h4CgEc*cwRKU6`4Q^^)`){lB zy!RP)m75fOOPdjJ5@9JV--x9rp|oxpo^^!I-O@(0RBCWrdx(RqvcCezyV8(fu}@W? zvUjw1JbM*|-_^G9Cs*nGT`hqp75F8o%RQ|NBq`hP0h><~7w>6%f=f(Xn&&-U3ILyU z^brTBDLC{Qzceq~3cTKyR{sr*A4^aF29)=tkk%?m;ykM6h% z1$wc-#29^9l2kc~DM;pf@6henS}1>sTS2dZ7s^wuH`-|a*AlVgjfV4}6l(BJ>tLU} zB+t7WPl$&$&REEbo{mT<-vix-;Z2NoE;82Aww zg+a?^ELs$SmgO#@^H$4)@IMyic~u2zN@}s&NRwy8DmXA4eq_|eB?a#y`q^fA21&sQ zJ8J%lGVGR}Y_eG7W0}iBBk{EaQmLfh3Rv#(!opE`xR9zkEU(ygD(l2omqc@?<=;Hu z$%4X>hAx6#4xWn2s=-!;r4H~(PhaHxg(mn~!W^Ss#PYw6C|7vhZ{Mj8-R z!QV0yM^(H0Ep_;-`SifwQj))&Pg(%{2lFX1z|sQiYj^<4`-v6>ScbBL^d`Xa0TzF) zK+Nb;8WM;S#?aG1WEoG6AWIkO5eO7^mSe-{_=Zp(P6H;G#{EH`}ky?wO5ktLj8 z+b6C!vOra#*FF*2*wVL{7V#F=(%;h5E|zRQ{u@f@YH7#^ehYz&` zvF2j-PzyHU8=}E*%Uo4^IXcgKaF{rsXlZTLx(skB-}M)v6D-?Yp}n9c?*@*NN@XlD z)mI+CH%pxD>9Ub-&qD)4Hi|RzE$yu=Q3NcrbOt+?MhPn{(R}DSv0;T}rI{B$AZo9* z07cfK(;F?{GqaeTYWdWkr&bcr4qE1z`S`M8+!6Wb>JpLny+vbu$r92|pp1tfiq zzs?lL{tY}N%@&HRXFV3Mw{Zb>#5Imtp0*4C#!@qO z(wlnLk#Zr&Sj#|VXHkqbh|LsRW2_dHe>{qIH?T(XuA}IB1M6l!bQDc&Xzj#Jsf)1UuP^L7?l$ya= zBgL_n*4mtR9VuRYXl(&u@Ca(y-a4PVM~L(7tt)k$LiX!z9W7z1w-x6|PwM7*&nAh? zkF3{qerl{ZGQ`?T)$Y~I^Tv%3p~J1?9BhVIGSOO&`@W7sr0)t(k{fq<^f{TTI5*k) zyOqaZ5=UlRtJ?VTGa`Gj^?`04&;$=5h-+)DIP|J3`fae{TqB9LZnlF^v0(MF0;DQn!VPNep`?x;dG&LzTkpYYFBZ7FXoVy z6rUZke$T+hRTtJEtyzvkNqj5X3#*+$x1?v9wKMBPyV9)PD>e$x^IpLIFK?C>-NFt1 z1sa6%UhJ=>^Sr;f@iauZp`3b6Rll`{!`Jt;L_s3x7N@IYx)?x$urui(87Dx zF5;tm)`e!it(C~mvL0i+b}O;NBcX0_OKSZHgFUn*U4Mi*O>QYFKDI`i`S1SJ_n9@E zKlY~?&#X(!*1zsh(yuubNl^6j&&!s6|02Ink>8i<{cgR=e`-$7=P2t)bL#&bMeJ)X z<~+AnwDZWOwEryt=ze$6?VVNQd{PtYn`=G8KWsvgdDhmvb`vow&)N+uvx_*NZ*@Af zr+S_@<%+nc+ZJ26s81vOZ6*1h`m|X3U)2}8{cUS_D4yH#N}8#VBxsze#Lh~W+gf7_Y!L9&YYW4R>6_L6K`y=dM6t0P|3t?ALI0|7MVLVM(kiRm* zR)noZ;qnNZ@ZW?uSzZJ+54M%VIr;ElTPcU19ixO;Nh>O1b+E0wt-_!f)f?>7_=#+s zJb&zuaIr}np9Ub#?34V=GSvMn(5K^*Ln0*H_J0Wi0udjVz-7M%$V3U%oe8d z<0GkW3`%k(+Ez8=`I%zJK^yLvPZFmO+vZwXH_`5U+a%78h;t`wf0xH;>4|JxJ_p-* z;;GHcrixw9Wbg#-dSUbOnOAA|Gh0J(^QG-L=VyMV-7jpRbnq|RWuAANG?DtR{l=|Tu-Vn~V%w-*zZ*|W}vY#5&_71J|j0956o1`V098gcU=%kr5U z$}fK+^2YnLFwnH-$v!@2o-s^xTI3TL$U2B2U;4abID#Cw)#nGsJ{A?e@(~ zzngh-1M%}7pWP;A6Vng+eASnqn@San>CybVsiJQ&eGT{PGMRhLuDR(h1-D^vm=`x$ z*aP*7CcoyBWWt>PBs88RT7>Fg|E5k9ol59$RX%NkXkS{ds6zW}2(5{dd++l&+yK*&Q$Jt%PV zVD5$Pl4p6XT<^{Biy4x2Tt8Tp9Ht*(z8){`*?~op^T|p_h>oaG91&>ygH1RD?pg-o)=!1y-<^fun*H0IK&nyW14&}yTn;EpC#jZgQcXNh_s-`StE&-6jsp9wz7&CWFHGrezk-OhF; z4z35B3GoFIP&8Ebn8)FKN2Qma>EY1*2pENFUe=x#kJ4L!q_{RpuT=KV;G!>(v*3%^ z)Qq|JSOFG+wF|54PCF_)S}*6Dd-wlFH=;hH_3j~luEJ;rB0%=;Id&oWRT;WCTK||E zE~+{PW06Y($LQ63+ZN@1U-nb#H&!o3X=C)_z9s)B?QUV(Ynk@e_`j83EKI9ARuA?q z^*`SolWEoL3!Ru1G~}b2P?FbU_(vV+`dGbJ{r6x_=_k~fvJY6bb8iFi#( zN=MTkts5x1jl=rn<74RMcs;U0iRpRX`05)yYAo*lBeP^tIk0S2KVaM_6av|=JTZp= zbOHeAI`y0Y;Ihz!3Hn?xY;2-lEMQahT<`Lz!ddmJDw$$>xQ;4J#M(_BKockGa{$(C zlHR$*5kI-DF7k}S7p|zJOeG0TjKUpF)XHWh{J z6YZv=5D1HhOw)T;7&Wbs6Awm19zcv$7viyR`yt$DOVyL~Vz@NM zlCZkQQ-vfwEMz`1N+@`Wy(Ji`rNQphFa7aGHfsXu4WoPOi13%23 zsaNBkcse{&f53F8`d$anap!lEGcvrFU^N}ky| zq`XteZ;sxOJ)@3u^sur@wZdLkMz2dcFqpV(HLq$e2rFEyas!RTre-XmC37&SQ)ufP zy=B1fy>oG|qwqri2;>aMmnLF!^%|P1iCqb9N-=ZwQ0;OA630YKkiMjTb`AhIQUtLJ?Pmogca1qun^=TS-KJ}hs4T;RV)SGlj(7?{y}&r zR3@jecvl}~7REjqZXsL>oU6WFY1V*R%+sMNO~dEuHJ~QBX`UVw(r`tdw=Mu(-nLPr zHe$id#DZDw8B15@>7{&AJNYQfKd>w5C?F31fzs#eH9{&tL|Gu!jk=Nvpf~`8azx(7 zDnsq&>yy|8IyWD1-=BOJ=ry9xSIPBeqG5@h3mdk)sA13R*_AFR+luOC)t8kYGNeRg zZ=4vnK$^XKBeIbm(N| z!d31cH3w&mEB~|lLD3-@_akmC0;v2*^%m>psxL3fTr+C6M-J`Ojd=xR*6Y}#j}}$V z&A#xlkJ2m(H_K(Mz(0p@;Y0U=^PKX9{&|U^@@pU$dA#9b8$nrv=XV1runi0#-xO3g zj4GsHU00GhQ?Q;B=Rt`{mNhrC1g)1jtaJ!DwC`$T1=Oa{C3-YVr*=#9N+De~6b^D} z6fey|$Xi|=u$cX5$r6liCAzf)uFD!o)6>f0C{kWG?#f5n*Zp!G|UcL8~p z>W$>RhGj5=x{i)61G?{VT9jO_Yn*)}%C6L*_}i!=Fvi~AnersXKNk02QNZyYK8oC! z>_fZtX6AU00yTBQ#);cPf$y$373F|p>-Z?oBY=X?F(ozydP~baH2`_DpdTiuxtQp)S)auFwnCo! zF+R#FKx}3FUniFm{8ackWdOPOzXku3O52rR5dIqfzk&Y^{ABoh;SYd64DO)J2S2SS zZg3f@y%o!`8}-==O0X#%+6pXRoow6mp=_ZTyG?Id9Ax6rllsm8NVA9B)EBTs`s*f^ zt{+vng}(QruDA4=Q0lsMOaGhahtSWr^@?np$i1ysW0Aojx!&nXNgw=z7jWWl+LYJ8 znUkN|fEv)|CpIMs&i{$%bVmV3)Qqj!RN_8Jy*kwRzW!y16S-RXVVxBf z@}7pXiroA9GRD57B@eI^*3!NQdYzC(fw|r;uKz#xTw)LPu*QQQ+LW4bcOKZ3G|&Um zNlm)F_if78aQ?XbdIvc68@MeJ*P>a#PE0NWdAQs`^m(W+FhjTE@e>T4M&_q_ZwMkp z|EKyT#wJnq-_i0>)b)3LGzjH$zhmNBQSR?p@=YkcdvTz4yFmN8Qj9#m^!!taI0?FloYr)xK?oYZ=lIHM8ZpbvDvr0U#?dk zNy;IVZH*w?YZUE6!(U_B1k=&iXss{ZLL`6fD;mDhe`Zkf_kD+YCsM6<`ZS#CA9@G) z>OdLq(Ap2hn|C@im#vhWqtE3JTr?+FZy1?=8Dj%CSo)VRMsUe+2QMNFmvX_TxGzvP z@&e&h$V27ZX+j<<-%Km=^xj}fUgYU@REXs(aK~IZYuph8BIz7=l!4mBQ|?#>A=7jf zk^RJK6_=j)ODAN!L$)hf5#4sB<{i-(u~QiFh>}xOMitqMrskDY1W;Ej;#Z?LwC`d z;*R}1u0FLd;TQyY`=JsJFV_~v*p<55#WuI2m&ziEMWCZ@3W;#saE_@1-13!8IbO@I zL~Ip#5f0pun0#2oL^`T6?fxNPltW@fIY&4%UpQ!2YKj%*9mS-kSPF5E#}>*d6#%w&C$uq6Ss)=bsa~XetS3Dl?x>?Byf6)U71{x zLR+H69jR+e$ESQb^b}h<8fx`tV8P80ypqWm_jt)>Xo=N-rI=bP~ob6-B_krmZIAm(D+K`BSXm24oEEJS!yT2d3i}OrbcY_}x5FJ4hHdS{2*;NyE<+9+<(L#Y^p70x;E{Hv{O@QXT;emp zT!9mBM>+CvS?DFb9ph-tu8HPjQ4Eev*N=1j!59}y#ycu;_PIDZ(eXF;8yL>Lazf<3 zC@;mV3KwUlI7(_q`#F5304UC^{D|)3kGBs?T4ao5^z;ivJOEu}73>Bves}S-PT~`5K_^M_! ze>H&VU$kqrqXWp%+|`cGAaXjcL8iGhWep-n)5SH2>`SHBI!5x8#c5zcLnzGfa*M~v9%c&jo+4B6u_ zRQ_ibF>$}cPvgH-6pPawqfGo}gy2UVBN!j%7Nd?~+4B1(#fI-4p=LffR2(_w7~$dr zR)~t%9QFXdr2UkG{jLy|vP!90 z2WM{d91s_o^Lvgv0E5F4R!8hbLeQOvja8=N0{@=s%=jJg7U#I!MWhZ!%c?!?jvAQxFq}!hO^>- zT5oYL%-Mo##rN2hoa3TmNoQ+rzwn(+ISY62J2BPmJkvz0Jkh2+nLw>Sakhpo^@>lN zs!2=28j1B28$NY9dBFKYIo?)s(?$21xz~H9>|K<3nobOHR`T76qheW>4PXF0!SNcv~}u?Hw`h;vl+XvF`s0aX$HX9L0zmhFB2ZIEa%#<`QTA>#2k zr=e=g``Z*(zQ~*4j8+35@0A}H_J06+vmX7wzn5A}aaQy_kF@uN$O6yM^eGsCG(^k# z6Y-h+V)X`wkSJYj=z5optL_l)!9ys2Mpewmpj_mZp{D_}4`EpWQEw@ISj>LX=H*KIAN(91EN+c}hpo zZGp37ApiOUF>aIdCDR~@SJLZ=5nno=abEnY=)27s$b3KCR#=QAA7Zf$HW#zMa(=~p zf8Cnn)f}@jWjw2#nstL3YyR?y+-!^&TwwMK~?uVCzdY%Kj{$&ukhjNKZB@ODq$0$bNiiT zaG8jn?RV|~NwfNZvon8Go}L|Wwg~y=ON6zQ9-9cw5+ZH5C z{&p*kJ?Ly%GNmZE1pZBwFIgSgJ;*?^o^Phx2c4nyCd(4RAxKj}uoncLd$}h`ekbFQ z*NP+DX+`A}#3S8=Yg$QE<&d)!8$#`*H-Ls8a)t$TFDgu$?LhP9%ffoodL)7R{`Qcw z9FBi74mpDy&A!aZe&6;F$b8sY%2B(h5~&wao2nmn)~MqCzs0S2|3!&^#J?#}j9cz0 zNlOkpKPVd}OK}w_Z54DyHZ?@XL8KsCBe_|fUL1CY@mHG(dbgoX>@pejuRJ|xagszw z51}#na&u0B*iPQAmrlk%MV$0s6#26F7n>l=VU+KB=XXnxDPjua*sHtv6^Daznr~!NULL3B@M17Tq;~X zCPKxe?GP`HLZ#NX#Ks)xhGKDHXO;Xyh^TeS`GeV+R0>qWIjfR>!m5lvC$#go)k(Wf^1!qIE1obOU2-F+XimO2FAyn%ZXH$Og z0!{n{0Gz)@Z1}}Fhw%?Dh{)?eG1|q|IbK|2?t2TV7hckgTh4AE5pUgcwlu9W+mw~J zo&Hq!wiBmeW@>TUSDesy3goZTGh?GJ1GE>Wzt1N%e^}JZf^t>F z{|QiI?kgOE#wGWhVR$FKBVa1Mm??JseJR?393|^-xs2UcJi*}2BrC|>(^1~fp67^9 z-fmR}!&Qd+^J|n2pi5M$Jg!yLk2(c@r!3}fl8L_ER?r@~EZvAdOYApi8TK`m{muC) zlnNL9<}B4*Q9emeRE|E9mA`My`|$h5q@tqna4xu;Xp{xuA|>;(aY}4zhM-%&IlJS| zRrPe|2Ox`vr#tKV!Y0RfxVB$emA3F*Ux~x%&W0+#eU4sbVM=~JCj##~-?EBv+W@3+ zQCqEw70&ggRe7@6swBY;fK%YgZ$exu#XNAn<%iEv?T5~ap*znpY0*j=Da&F>t#C>V zu@PW#>p7bE(Al1Q&eHjZ&NcklSsL`n*`IGk_>r@9;L@|q>s+w$X&?@1tqUTb#e#8J zbe1YUcGl*mjiUc!XA{+aaJ^Mo1?S43-A|mav>nTHys1ybj;GEuoR1+I_1xKu&pl0- zo;#yiZDKD#*F0KDwO=?ZYNg)7K<%@_|K;%i^;25;!ug}^tySsq6i>yzrG%FN(KmGc zrL$qh=Qq)932lJ1E`l?|4}8Y5X~&;f=h;;8FEpm%DSG*rv#%et zdkgSwM6ATa%RGO)rv9&-kAm^|Kr>Iqz`AbZA#Kjy)Z)i-xO4Si^<4Fs^QlD;g=U+}%JUCl|%BqByx>4)~wAi-_xT zi_WOV;ef8Na3xJn>ILY0xw&TCihu#M#AJNHUeQI95eEJ4$0nouw1U+T5A_(x%7S5R z^R@e8#;K3xDO4Anz+OvNrTACcr*tpFWn?T*y!I6go>Csq1iN8!6ISO6wCr6{E)k9` z2FiVqq~pviOUm8kx9`mw;BYQW<}ZkMAwFvThcLicX!Af?Ra6QV1$^|fnQMusx-0-0 zUB{)dH4IkKqEU|HwrWxO`^HeL*@yteFwks_1o?i=Yz*a({-P$DAq8i{HRAv?P;NmP zT#@%3eh~k*8eJLB_=8H?jcESp59(w$df{Atm)$4>^`|R#qc`>gc*Q8z#~2(k1%{m@ zsMy>n2ly)(*QCwBlf~(T53-sIvqtI0SuiDUbQH3eN;r(p+UJ1f?>LQf814D1Kj@6Z zIL34TpgB(CC666X6Ae_W&^5!T6#Cao%pCS>sXPz?LQtNoO5XAJmlWzU`ukp&=}<0! zB)34h;AdLoGCD)llHoF%;>@Y6uQ4(tMP@>0aRQPpsY(epu($1*PrH1L4?-p(*`mZ{ zKzq=R*AH+OrG%Q1Z7eZAqZnk70e;5!(8s(6FVI!gpf9ljR7ZKsKesBTv9zNYmQ?C! z`ni}f1472G{>H~(;}7{8br^s8oSp?>{XKk6-2#o;_8!=kd)&azd|j*zG)i**WIr7a zHeLlb2a@M*xlzqXAI-0NBnsIwT$~Is-m+;&VD>+4)a8sLcm^P?|CJ0&Z2xra_$S!W zx@2Id+aZ;a!tomGpQSHn{8_#5iGWDNv$*b=5Uj^ozW6jf3SiArT4Y-G!F>iP{dAl& zKq<$z2^Ny~fqsZ>mT8Tem2Nq{4Cf;sWkD^>&XfuAeSm59DEAVNJ!Tf=s^cur6S$A5V+0m+6B-*~ zRDuTWCWHd2BJ($(l=p%okss}a#(4v3T-GQRP#Q@Gk(5@Hl!heO<&#PNNIH(B?~0PX zLsFT7Bpg%sD~r_^SeWtc6WpFf##2QZPa&hNASv)El72zb&7!26NXmIa_sSaWP38Mp zq0taw1P5M3F4?X-iL*TSks}>n+<8KMBQb*C)AUHAnBx+%$aODuq8rhsNNfvx>1d=8 z1VQ7qNTUNpwq?s1U+_zF>2Nut2~gCVaz-isdNzfYH&*hWXVd=jMpgdiC1sX3I6 zzDRG2Jw_TpG66mli{hFU?H7^ z<86Naj%f0YGQzljcd8m?jN(UU(&i{*>NJ0Bwc7E^9(6Bp5VlJt31)d+DIRmw!pypH zDIT7P9R|Ccc6?!GEN~cJ>GY`XYY(ORfgW}3VMP2A&)F2@iqq;NzY|c9PSlj<{4%; znI6~1dRs*1I>y`*4`$?e?d=t?1Sv2LJli7$7A7z)X$P%J0&TBjG~z$apzJ!>JkQS{ zdtGB3j$EeKHNu>m@umDK8(-8sNIU8p3HqnY`9P>K|jY z$AQGY7$Yd8%#56D>`VY3XbJuIe^wdFh%rWE*>?TF=*}9_t`9(7R1vJc@h|4LCP_|t zYL?uxnr*NuiEZdo1C0MJVhs&1t~otzXy8rb*vvY#sFCpl-*tdG#TuRXsspqw*67ct z?jw6+&|07EqlS%*P@b@ldNno{bISpd-PmXd0qcHIv8e$ADBJf_|7OM zi;gXfX&mV8N-LupJoX__70g~e#jijw+5n{tp^j~_4d^tmtoYSwo&q#dfZ()M=7FsPdawl~5nEG^0iySjF%%_cAV z&YTPhBe128{Xt@1SJEtxmHM?eI#&pqQV8{bfIgH+)U~8&5CPJrjvGDZI6NN(rsX)@ zZ4Xcp)Ukt6%CRT2aEeYr`>!!gK@_fVt?yveh@_$v$ut}U)GUXKPq8Yo@FU<9{6D^) zUUk6!5Kn#LjA;PByK&fuV(70pqiJM=%>3;5FM!Fx*w%$#7rqYnXq{F0dNHO4dan#)>`m+a60}6ucbAejKl0p z>e$)%k}amcI%ANpQi(2Dp?*}a3qmKUUl+q&Vj)@$@G1^>VS!cI3wM0ARapmDe>H9B zg4OrSL}Bj=0u~A>=I;3NI92J6u56>`-HpyAx29vxfG%V^POY>mlasM2!5;t@u~HoF zZp1JE{fiy|%cfMiCt6UR8uY|cjHDGkK|z#Ehu!5OWFj>jq(sh4=XwHIEacnEIN;Z= z+6;h1=L{^;P>^QXbw8u)z0e?{E4__RSOV4h2pe+h4odjQXlj;oy97^H0Hsu+3Vnbt zYEZvEMqTp^3{nbh=ws9_xoLb3G~gtw4^bRorCp<$nF`R9+?9hz(91qxmM78hzQ7b# zaiXvBF}F`{t16evp-&w}#eQISSPSv^6BO>(>g%E%HmUF$&4{l>^gsjG4xUkiK}MMG z7vms#1dPgER!Y1l(~v>NMx0>TKE>MHFRFYBL<8m|WC%d-BrO_Z)ZzZ6VByDDitAuK z6O2mQsIfWTx+BH>1n_=ZY;mjdI!qiHYOImxs9lE}?{Eg)aReB)p|lGgf4!CLBaID_ zm$x#g*)Q@)septt!N4oQbZI1N8bSRMjix+jG;K>XS^#A{O*B$) z%0Bfo<5PGKJ~RGZVIn@8fXd}$Vdb#+#!}fJ`?oFsm&7n{71u{$YeRGV#uzXCnrwrB z0@cgsf}ST>m2VO#aIA3zr(jpc8s&pP_4WY1AK;c#k2k6CaKQkeA9DBh4YeZt!UQ2kR)XMnfS$v2ah%b+>Vf}>-h;5T2UQ#l zpAL6$Fwp5Zz&c$0an$W|v}pqQj>kIhL)FI{9c(ROQB-cJRcYRM0RDd3H{O_uEw0uC zqa5%0CH0+PYzs^ti^UI@G6o%iYX&!9G=)wyLY;SR6c$h(On>n&smVm6p=0ko$;(P@ zuVtRwv}hu*_kOxN(P-%i|64Al6$RJ8_fhppMp)UEC_o+&fMfv~32YTL%To;5q)1yX zl)AA;A8mr_CKk(M@h!e!Fywb_vN5x&H7PY~Fl3iXVrteXNmz^DbL6=)u3spEh7rEtYdHQa{MaPVHRa}jlC-Mp|ZNe zigma2s~)}b43HXbj|tzqk1z8$BW8ek19yt~8|(sMi>G9y9JU9v^t!u$@PzBB8G~Ij zJ>kK4$N}_EctmPOS3LBfqF3FJ-V86NY{yO#A2%xu-A&ILj4lpCcN5{pz!kn-M-!(R z{hZUK;ND2FG|8CCAUyD$0mLwk#?CPIgpB{A5Iol2EyU*q zFVI1S0A|%@8V^~8Vahy6iqX2`^E`>Jd8lk&L1j|SU@**cNqN1zO0byP%{IP_x{BiD zK*&$(qK#J}M7b<+76cC^u^-(-CtPu-AWf6p9OlerJS%l8ICSjEIm)u*SMPh5fY;VJ;*D&!;pqWVeT zEPzVtg6yv;0dkHYHCEssf<$DjI5^&>^x5+$2R~8!&`TC7?P4RkUE!9$dr zVjOUm+6bfgzUy&A2;>^ve`J2X zd|ERC<<~7Lwc$F1}q82oV@&L-q@lQ zij67sePdvFHFPh!EHi$CF3Zev`2N32Q!repw0I&aK3+Hq4*^;4%lzpdWnRGl0YzoT z|EJ7>pgGaHfA&NH=8=U;?pOBaDhfOb$csXcWP>EBBEPwacsXLHkk)J}6gkai<KUFFgW~@UxWUcd6q)XwOggcHjf4qAp(@o&+nc^z2 zb0YDZ%m?+>_VZ0RP2hEkWx`4a-pxA+hPkl7fha&0u0)+ED4;lm;lWW@=it^Md<&Hn zOq^>Y2Is$LT@}f^&L|Zf4*SCrDsWb3FODn)=)?thM?6y!Gf`{}3D*(TARU8yT~%~j z2l2GOe9~osE(fAy;AaXZ?bPuH|sbEg_ewu?MD^g#&E%$V2WuH~M6_%Fw?IJP=ThPp9^iS%Nd5!9@1-1JNq3p|2R zQR1a47-Se|Z7M#IbdTituVKZ>&sBG7Rup!nwCGbA5h&`r@KXhJ5pDU}NQ0VtpY2AN z_WGVh*>X=z-EOpInhSwn?utu0jFYzL`?oDh5?p<_C$}uh*KombU2a;GSvM@o-s={{ z1y}Q$MY;2fMLB+zP98K~!nE_DLm-Ct(bGdl)4(Rn3y!2R1g7nI9jkH*ZhQsN;xO=| zJ^eC7ns7ZX(|iFI85;NkG-eW2Pcxu&><@P5Z#+HxH}y>eL+$pbiD^c!kiTx{d!^`7 zLWvw6Nft6UjuGf7K7$O?_gkZwtHrN{81W=z-#)6VtE;Q4 zs=Hwn}xA`seOG>eA=#&d%RY)Kmp? zRHwb}H}qa#sPFc=pUdlfilbpglH(38X8kI0t7&o$2>gZNhV+m04IJ@g zxpUfFnrEwCR6d!lvXi4)`IP7|ari{qDavyo5@iuzaG$ z&7CwE$~gI4QO&6-YR-Q5wb^f5#t)R9v`C2Qb>3kX5qY0@K^@!A5^mW%)%^?ivXcCw z*g}}`lx5(Vlj4~l_HnZZCSQDE%A(nvw=IK-oikj*82jcm@RNyu&y0URDC3v>#{c9` zi+}%&@5ggL$Ko~@W}vy|bB2M$^-6^ z*+0PL~)!H?qT1-e8{^bHqJ9ZRh>0z~I8M#iF`$#NDa=JIso##FFDnkIf-l{}vwK)Y$^|smdKGO$p^S(WSqhBasn(K4zi0P`wBro!tkO@C zwHAbgG%v8)3;m%TCpJ9&73&>6?<>{zYj=VE*k<*_*Y0!roYQLfHz0KCY4tMyB_qD4 z0c>oMX`rInk&xrTDM1g7n^Zd4@<#mQ-pkbzpA>Jfr+8v?yocSt#3!MpmqrPDlQidv zlRGdQqnVL$Y1LL=p+YJQn^&Jnf(Ip9yd0Ki?AsoR8U7Qvx|ZJ ztf$tE$XFGDS=wln9%5F)L=_jJ)78)4y6dLPtRkX-B*$~a_3~kr{hd3nB`V=6Lz@(q zZ|_PK4B-c)xKf!^hDILcxubVcw4-|RJ9m>iJ0gzDp1v`Nlme)TrWpWh`DZanI!KKJsqNITqTizWUC6S5As$L>Lcu7>@yZJeU6+4|%mkQ7=nQ!O?y9 zsy^SNH+Vul`@Q?_>=rBrgkl)%WhKTmLEihuV63WJc!1eHKoV zM=OQEHBO&HaXeD;@~yLHYItM&-65}MYEuw<>vspPDi6$4%4%RB?8LVS(w0O15qf6o(4Dl$-DhnEwe3IvT?rarqX7fx8 z%RsVu51o`aM4>DX<)E7?!Kdi2j}pm8kUTJgF(6}BwMmCD9RW!}Ot39{_k{IJ|< zEMkas^K?|4NpPxdXdiXb7wr_2`_7O|4l>b5{-@%=0;t31onY_a&E4q`Esyl7%#fni zmS@>y)Z(I3Yfb2QQ594%-`V%7F;(Dpe?U#Ia_6BXd%wzEw`qsK5jZ24x}`Iyy-aA8 z+fFl0L^}j_L}fkysESsh0tM7?W6$Jp#rA!nyOBLAI(!@2)P9%f=&BsDl*G%W&R*5E z8dcd_0d=L?ozwRB%QF9d8_ke0$l^MQxj6Ccc?V(QUkDeBdkeS6RKK&V!ERG?&ax7^ zW~LhdBaH2aZ`F4{y7Tp=LzU|s?~{kBk>{vl@phH>6XdmGhI;xZ_n4ef+iNUObwNfh zTk8a)I-X-pOjT(^apwJ9>E~g4t%ji)+)IQ`QhF{?@jlt@jk z?L*Yq|F{e69ujQ$kGp@PL(x}GLJm-yo2 z?AZagR|YQVW%Oxy$8ip0L)a*0EQr9N`C-be|B`eoxckllI9hBZk>rY$FxT4Xxd zOAVd9lcTK(X;=p2y#W+(@OyQN+b*&XM2MreZ;?q42=SbViODdlR|2ZaX-v+Zzn7I; zDJwTW(@m+rgP-)m@oc63$egd#tYl-Wvm%HpXG;Z&`zv_g7bH8GRmnkF;I9NOvBQHwH#l@}7!J(uF}Jrdzr6 z_9^0g@X%C4;s!*<^4^&=J}XcE$T;42^SyKY`*hyL+if@B?^bWSjE4&>(Wl*Fs|voI z5Jk!Qjypof&Bf8bdpG93Ea8c7I(9fCID2ljmHX@l3LwTkza1{@j{p zBm^toYuM*UZ&G(|bvJ9d#wNGI-5s$NTSqEdtX|5gMI#gSa(H3ZCADHZPI&KZb$j$n zU#k6E-PtYWPGG%uU8~U(|BO zyO=R61CCvmna<{;k3nfJE1lQlXflA|Ez);TO#|+_87t#iWulW+$+9mo-*o)Q-MQ;* zzVyBds7Vyi^D3aG@ZA@GZvZh&;5|VsrC+MmAGxzq|4C_5GTtav>b0HjqUO6R@p>gj z#HYa)wqiR~?8M0gE1MARQvCyH8Ln3!1>CK4@0aRSfC=N;FO{p(-L{}3$V*J)26n(P z-29h#&j1ElDaZ-|(LYP3b&=bPDYed*>gh@*>aOauO7}lXUW@CZGFX}kd8H!m3tlI9 zCIoe^t?GG~sE{VHRuN}4)+&6H;yynXQ{-eIG>v9p{wv=VS)JbpO()edkmm-*2PXt3 z1T)}nsd{N}C1n|&N!-lza4=DJ_Fb2|b2IjW=vwg7m`Npo;27OhQ{BVu;~H9DxT4*s zp#a}(S_5lhkcy>^Z?MeHD4rymrAR=1wGAwdQ{A?^n{*q;mj-mLkjI-m3#lcBf^H1xsEz)wT?e0XrS#ewf`e`!LSeLP@xexbyjy| zFe$4s=|wXq&mNvx*RU#H5WC=(xb!%t#*o)p2(`8sA;D6XW*O4?JkM1RZgRJ3I30c` zRZ3BP0KsA>WSOR3-{ii#`Iz`;P4h>jq&D#+xIAPTg^H2}b1rw&kKJ_(UW`+wB&7l< zX+b^1GohXUI}HE@Q293bDq!V(*HJa*V|Ui=9*P#?(F_&cd^AD1D*93UIhA;u#~&$W z1taMi@P3r%E?&SOz6)2>i#flE+V`>hy8bATtMWWk!qTuL4x6|l3!ixLiz!l`GblpE zpA*I3A5SO6f53ABcPG^Co88yxKp{O!4;HC3q|Y2g5lNSRx&DcI<# zDXe6r;Xh#0ENrV12)hU5T@Bjqt3VrZ6=)Cs4`?m^0xd225-&m*n4Ys8+*;F zx!*bb-68e#PIvo;oe>&^KZ}#U@M>H82{^aSi*8jPono(1jrJiRVOoGvZnh3J7_G_5>-b6CsDdJ?&K;G_9BQf#rTxJ^=$jRa-(ELTf@R z0{(RqZ7I0G4Y(oE|$b|e~2yd z{4+P`%Cig&%~%rc{og#8XRk`P_`mUUqv<@0LB;AZI#Uex!V?gRRHNPQYcMn1xZB-C z<<>F!;;i;m9peVu&Fbws#={ud>ZBRs?*Dii(wnB1rWp^L-AX@=ie6ZVN@R?PGTp{a z9A6p0_D#u-NahPNL0 z|Ns1`dfzZc;Rbb$X*^)-tzI$#=O*>OX*9d0Jyl3CZ!v_gi$A}^^CgOHrG7Sz>+r#C znr=L5`%XL!l9DUej^>T*M7PsbiGmI~! zs(Qx1oJ03wwfJ1M%``@Gp3s6!Ff>%{%QR+ynql<~*%|j+edBL9raj&OIPXwL8yFAQ z%Ke;45%IX2>ekS>mNVHOZ)iNA|NfrZ)6jSWpq|Py-fY;-6NqA+u9l^rSR7>GA?CAg zs$C=FZrd_7tr5t5LG6^k(aP4?xTE3BQOR0QLTiGo@0fK%C?%?gsz(|dt@MW9s=1A6 zOWkkP`o_lnoNrR^8pCdLq<&OWU97IjHX1pScpRy2&Nl9GoZZOOr;!u!+HK zzhnLrL#fQiqj(;Ky-`p+QPu+(O=VH^0{&FzyKOns;z#5rZ*1P~&G%ffCwbt)#A(H` zcww8TDaT?%=uJg;D(WctKe-w;9%f>36G;-vH2mt0rpADh^1|?O-?osLj}H`W3)%dX zSBk@L1!Wga4mpaaAoc_iIfJ1~+P;vF89k%ucvLTPhHHv4!;JE*_3aK>Q=L#BHr8-P zaar_u_ua&49G7nk+5+Vv2CC~g`88is&{pUme!fWcStT0>917Wt!C^*tfurP+pqIOS z9sQ+2r9s&>Ar753n3@)t5_ANXoR(#+bX=-7lzTGJ?!@;d%nZyFb;>4O25-QB&p{KYXSUMh7b3!&vtUQ0bp-NgUQ>{?N-?>qV^KgPPMb|DG8Cd_|w#tN3#X6Q517VT@ zKdEhs%z@I7XB2e0R?3i#)7nfiiM!#~HSX^S)H-o^$;zX=dHsytOxv)-op-)AvW z6+6ua8@kN*XdIuN1gmM;Ir7X16 zyG%L+7ximzv(pSf6>*MF`m8OQVb8IW#Gl)c8eM z@zM!3?%OPVcrv>vlD*p_-}|-)<^OmMhAmu4Id-@w2}xyk%@ zIH>#l@7oLg?{_i53sA{^+e@t~L+9_PED4Q}ie%jI!2{@;<)Ab>h)f;5F98JKQo8Z2 za9%XYH#_(kixRi?A(ZhN;lne3zp9LrsQwaVq*6v-z8#6%9*g5x6O+}BLIFnQw>7d$ zta{=wEV?Rxko=v|Ab!dH+gaTck1jQDgd*0?Fei?oSi zrE1Ch=-MihwMB&I2|j{{kVH8C9($GEOTJHA!oz4nPeLvsl`wM+afCub3qk|JWi~V& zAovy&M>yZD%@0Yp0uV?!>5Z*^U|0}o%og~-)|zV7!fP}xIsP^qh!{jRSeek}dC$D) zSqM-BdAPo-q9@VHEQ165njl!6g)QUsC2}*2maYt+|TGOTIoqN%%PlrJxV_j}_FzDo83~8aN@}w((84Tg=QT=C*;6lN8iA zm;UmyaZ%N2XWZmO@~AVao`KBzb0@6zqEf6QbKmy5s5P><@-$XxJGr zDi(-!-Iqs?6tkiO+rplk-ZwG)UH8k?sdxg4Tq1F~41kjLf~Y|uS>{YsEjt)ZN}jnY z>fQlta3|@|@i7nmh5aUlQ%d2U#>DUwq?2#2WKRk|8h;){{0N?Z!QLu3e*olo0L4X% z1v~-g7eKthQqmPh2J=1rQ?7hPktcQ?)&cgcU)rfX9heAas_Q!%*Ogd@v(ns+#S@}K z<7`Qqe^SP!HP&Oqc!u|;prgxGaeIk7KsZ7e&NtD}30x`6tI`v)Z8#Bk8O-a%%iOEU zst_89+x`Egm7*^%>HJE1>*Q8n*mbV%wxYt;DeMlZeSirUlN$Z>T8E3!VR|Cai9ccZO- z+gmEHhf$FB+8eMc49t%a?p>$G^f3B(T2LNhPb5(ubKi-nn`MHIT?wQ1_AnY`X3FxK z7#wFU{v&QNe&68rWX5D)`Cf=I);%9dR`^0m6Tr*UoO#1HV9 zdL5kdpQ!ZbKh@ZtSXN%#rWW@!p3@)hrqXW(@b|WO!J6!tYn>NVRp zjPGl3k#ng}&Aro@&LZfVen$Ov`!UT*(?uAy7^MdZ%^Op4p4$dLk-Ihh#r#u9v0EK1c>D}!Vz)s;-=J*iowwqm>SOT;kfRfTM|quE{|?QQj{(J zdp}u)Luz@{<(V6-?Olbmezz=R?AF%*z|kOU`%N|qGCY%`QkbZWg@^ns-Af35?5@xU*css%ezsW9%*QM+73nD2=9+J``-ojww0+B9VwQ zV?(vQM}sbpe+5d=)eFEzEn2D5a)ZJfVt|ruZqfj$MAllA`KQ2eMr<1#~i+aIC*(k}ITe`82~c$X{*Vx-^!!nXrJN1++w zy#^}9-(BKg+^)tBKsfi^qTU!_%+-5ePz3{xH}r5<6&`4G(hWBI4>AVmz5cDn3^Kaw z`R}QIiw;Fi%{I4o)FlBOGLcw5$&Ah{E_+W+$ zimvIrr@fBiOByHS-u9^t>jxW7?qBb^Ve1fd0Q!ADZ#Z|ivD%hB;pWTLi^0kH^Ymc( zq-X{~dR49fdbd)o9|lW#@@92qn9)9SI%x#aLXs36d5C;T^Hi_lMjiv@$>9bY?bMdx zMx$2ySgCMgfn|Yt^%DSL?3_XCFNPty)Foc8Vyr*EB3aG2-?)a|EJmrme~VgqkI^sv z9azurYzGpie!#vjbX&2~?=|xCysK)eMW^>KU~bGzA~Q|uIGKxwips|&L+7SdYQVj4 ziQH9cjr@54- zg3#)gGa_>c_Y!#Q0$UMxp^$zkgG&ZSLJW6WB01zp|9!JrCwR8`CgU`_BLW8qNn7$MFWECOJRYN{HQ-A9p|q{)LXk0`Q+wL9*B$eDm$jLO zAxXy6W(K2dI}tbb1Q!>)y+`@)tWa$qGBVZW2aQy{=epR7=OJEhuwL@?Z@7i=A!AI_ zU;c@*gRp~efUuWfm1aNzKK7lc=tGRo?Y}AK!$w~7!yrXES~{*Ch$)};mzG5U6Yeow z^?#U^)j;{H?~s_jYTCo7wz{gyhmE?n8g=wxbWZuo9Kl<)YCeJrM*gOHjWCAj_Ak`3 z5ytP%&Q!E+idy!Fk%PEX`3S>*n2J7P+@K%*SY?ki{;jY1QDr`gZ@|c{8@fJfJeTC` zdmYn#Yqe>VG1C0ycf5YueT#mhZUmm0h1P2{tfT0x>Nnb0*>oZ2?fg<*Q_Wck&{cW# zEB>t+O!Mfs)@RFjPXfV*H1OoNSBCrLKyzgALnACxlETZ$A|!z zm}YDEc6HkG=T!H<83pY`#i7q=^W$a+W63b2VECSFInezOR^jr~a)P?Iunf_DL3ADQ zjn(^qGwPPK=CPx}Yk+GJ3zybw9a!qn0!!*86;4WTTv%4GOQ6g_sHb^PP$Yh0jPH&u zDZauV@luV5|FSQ2dE4>f75kBVaf(c3_k3Tf>WrSi7buH1CtqV-%*4~fdMT`sG@AFg z#Fs=Uv@Y$*YM_bp4YP;miQu)Dzy%4U!tbfj#PEk(&E)~-@*Vo5NU&Y|)wot+Ots4IAuQ)uj-LsZ^9>;aQ*8ZX+G#Q-*t z@B`rt;WXhZ!g~ZNtLnqmcX@!v|3d zj9x1}Mg<>$!4KP#AFS0C4Wsm?lsB55^wMMO#hQv}#vwI%n;hj9r@ynm`ll-yvzW;K6WhJIYxs&B7gKto7TdG}NM^ z%+V_7uiGM6rq`RTn*N>T&}cN+8|y8{>z?}IC_+!eh!X=Gya5kTeBpr;7xd_Z5>HR0 zdN5rQFJs5Wc(_yIEjS0GD~tJ#JovE)UyLDtYz#4nWO>QE&O>{=OQPapekDmO$=b{; zqR-fJR@@$~t_@6Lq>2@CV8oHc%pPCRqqB7gCiQ^d#hXZZ5OK%K|tW4sVI^Wk6 zI4Dxv%aw9Ie_i@J>%Alh+jEh4IDl{s*6y{`HP0KKl455twa6J92k9q3*$dH#(^CUL zOM+n~c^iYv1u#O!H1VRFlZ|KotH6h1EsCfAE&ZG}W8RM`=xBt`3WTGCH_4j7>p#rI zyge`@CY0RS#^dkNd&c|ypuAgIyYvxa5JIqsfF`zpXso8cu>M?B8@lIac8 z21OnRakq}DILCtVzs(@w0zJ!4+kgEKnq>hW{`+3hw)QM@0qyRxCJ`r3*dgl3XGr zd7$<8$SEaAoLmg}4DW)bT*yn(NW7$bo%kj+M9|gRyA-xKAaX4z%qf&XKQNLe4GRKI za8@{}C_CDtaZozvxiB1|gA7Oq6-(xgxL(&Lv$$GUJh;3b|LCHJMa~JC#a+#Q;@K9w zUA_6NQQ#sE+Sf37RQ0n)R;{4_a7wW3=r_7bd(Oz_KvR2H}^7o!Vm<=l4E@475})?9AIY z-L4G_*~|U!-vkCx@$DI{m4$EhB0~jf6Fndpw=?C*RbMhiv#qBd>0G&j1AjNR-cnw% zKhm?5J%!AIwjxgH!IINEKwgHIWt7uOVnVeOIzjams(OqQ9YHdD*AliR&gSnE)`MT4 zmNZ&$cQiyA;k&|f9iI7eCl8(`@X-o?sCNKb3lgu53id2r8m(p7u?i#D;ZJzL&_fJ{ zriL%9`9=ks7?lyPdUmYw$t^9&F37YM-ciq1aYuSa{2lUf$rR#nS5oLfh zp=yAS4DHY)Y6SV_6$SBxpwo+Inb9wNw&kJd*&Eqd?diuv+b?<>qr_g=7l|>}n3*3m ziQ0-=hwVPA9197xD^SnIM^%D>ynKZQ9K2`wkB)ot&h3nIy*G7j)BWuI9m{`|IOc;YiC?LPy<{}H{u7v`b5!$l35Kbz$_l64ztpDfk!&B5J&|>hdiy1# zRlPFXU$s2YPCE?KIl-YqFB#XGivcJBj6>6g&sR-fHg3CSCMkqu+R$5hAk$d8Jlcw9 zX&C48zHHo5B5h8zO*&ujaWw(dfdDMw!-r!RMaeKtbh;&W!8ve!tLnlxjlQ5;CEZXILm?Q8Fx+?K- zjFJhW5UJ+k<(k#H%{ukT{*_2dKAfQoL*X_Id8C@?lsMH&MItHpN#ys%M&k?r{eDAP zw39c&o{TAhu2CGa^FX8)l^ULgUG8^k5^{X-O^8w0mz=}- zZ*`DLO8)c0@^=w0RwmDAfymuI(vCss@yb{j7%2x8GPrl#vLlq_hdFs9ds(z6eP;Jg zV~h5L;0>f3T~T%jj(-@Af3yL8C0xX%A%atm!!se&f`6HhSS@Xr@~p)VeaKN?C8shd z5Efj|7Mzg|2eXx4uZ1+v=lB2($B58xrOTM*Pa3s$&7Y_uWDsLD-RAZ95AVL`&;8}Y z>+O%euyOxwGdk~g&SzTBTLU-9b5hl2Sp$l+Gn=w7C`9%Vq70d`q<@ZP0dO3{C zTUpO$l#D|n86N2YfAeT#fpB`bHvqk4(^h|fojX!<-CYr#Wt=B?d$@^bTf|lPU@)!d zAu$t$3rowQwSxZ8AczcrBF<9SFU02w_6zIh5C58?-H$lXBie*uFZ749<-ce~@EZO- zh+19vzezng9<8p!GcxD}AvW*MlR7J_%fQ_mMA^Kz<2La`(7}>H5O|}F!`DWwJy(nA z#KHyZ^Z$d7s{h5uEDImjRy|L*C=Lc$8Bj`3%651(gtBx|bE!us80|`a792nv!Ug;D zEbLsPU3OTz#(5z&qd9IAW~em+s<3zg^lBDwi&O76xKIh_wa9T@d@NKHhU-C1G9a@U z6A7WW*JZ|lcShLm@v9y?%*@{1wnc6xf6M=2h};*q2}XGCMaWwGND?BHaOkJe3_6P$ z^qjM@LR`5#awLDdi4gY}j0};2?EzNfjN21`;0l3cY%?Zc7n>Bd+vc7YFnfvCJb(m^ z8tz7lxSHsN*hMQOyMGe$ipFo^m#W){bc{BGkx?w79u#R{G>K}y5o?n?M@1Y;W5yU4 zY-RXY*^KS4UsC%f8bdjkDsK|@V;r%o>^{Uys%eS4JyI{|b1)+6LN)a;{HEIqdpPja(UVAHQ58#W>WPR%p32C8iV(;CM^ZQg zFrqdVW?u`SvO$zR{%+$vi}yrfR~7XClyi)7C?mwt4ppwASmQqAIfn^RNGfSm-nkKf z-cwU0>xyS+ku0O6Qg)eQFxVN@D4+qvVZ~L7t)6OhDiCFuG)D&yKQFDReziRYIxi=*(`OmD zk|hK}(N5tLR4uByi%Z#T(MRRaKvsW4-97`w<9;=1hVeK3*-Pr*GmMk&q zX8hiPPAxD%wVi47%1qy7xj33S-^3V_Vw8rr?Nrle8eQ$vch;!C{gzQr1!o$*wB0-Z zQjFfcQ?)I_prBQ%@ny!4^s^|ooEoG2LDtm$7er_Oq^io$=%4pquAcaCvi9PAf7#(a zd0VxgW#s5@6{;b#j9zK=Ty|{3OHYcg!&}8_^(CRA`-Yk>W)S z$^0VH=ml48Vf~TUM7ap$Qg`8LwQM$q3Qei4v(boGzpqZn|4gs?H}P3ZQ5I-MA>RL@ zc!NWeNA@7q-l*D^8-4UG3)R?iH0L`Osx{?Cre4pjc9k31t}6D4i%zqSTb(O6*6Lq) z)yg@>bD4`qCu=9~bZRO6;`(IzE%26VJJ-m`P9pw1eJQ6i>crcNg(E?3MQm~Psxfo1 z7<|{(sqOCT)Yi9EyXG40T{x&()`!q_N}p%UZJVhjM^?~2IaQ;M#~;e{CNpi#4!%X4 zz%%_iC~hcr;2uuxn>#jan`f|__xFx!!{vN=Em0SIstlX&Ru9JNwm z{rzDr%IlHI+VdmTe%|%(=c^0K=#+VYJi=UZ*?^XWsUbAKrh3I<)pZdFeRHuIvIzTE z=SS4SMaF=B`&v39IPZ`?$Z~5U+Z5+VUnRc~Ih`6QgyG!KHn#6jY{A+i2_h<#qjFLt zO&YG;0&Ce?)#()o&O>@Th!H;s`3@rt4YH}1UjfE1+NzbL(F^j`u~&@j{Ku`b7t+2- zQPKeKBx``BqAWU3eQ!~prPIUM7Q)d^)_z;ceweylL$!!_6w7|kldq_UUNyR= z1+BD&qN8;6ZL8M2Y7}JdkH@7J?s7Pa{kENa>)cjddDX~rb{xXs8mzLHfZsuFRi`D! zfNO7|Y=JS!SQ@?4lN|Xc23F?vDmU>xAtsM!e)JY^vU+ccakI1UgAhs&bzun|^JL*-d9=l z%kgHfMm^;-qIVIO>sQh4!1+u%t}zZaczEwDRf1=vFh6m(E zSycNA!vZMe7+MCB#Jaley_)J(s-~I)zN%brYNBnfN|i%MXow8mJhmZ7Cx{(&CY|R3 z2`=3hY1tvxfup38Dfb7+J4D`w_TNHjJfvAo!q_FlOX0iC4ag$|q8}h}n-& z!G3@Mn-Ni_4!R$H#6)q(@USyJpIB0xbD5<4Vr`|R0&zcmcnnu7Q<3+4e zk|uOn-M_}j@0Sm(;;@rS!*nmq8|FK->9{Dn(5iY;b8J0*fG%$-!jfXjJx|*|eQe zTc9uY(}}@#l{;~&Uc?T1E*$ku4sJDehJ3zB7$PPIy96dhWuKbbTVd>IV^69RxzuCJ znVx|6u|4+Ojb~RpzAMjrZ~NHLHu(&6@4E!(b>veYxK|?{h)@dHI`+L zvZY4O!auAtd*b+U{GePPK!vZhRQVqmll2{E)Y=b>ttC~?)JPd=I|~0q(QXHqHV6tr zu^g3k|G1#sd0{I?$YWyEN)dF*!Fy48biH|)MI|aSJhF2u=0#a@WH}8q``pJ=?5jB? z=t(L(cG~7SYzdW3Ee^rGO{nQ=dHl9(IAA}^Q8+H_42%mqDvq5_^&dN3`?cwKm<$gU zF`S)-KXh#pM-y{4bdnZ2ox`)OxH6g?ICa{F6kzx4VwmlUR6Lkz4A94oJ;n^{8KN~+nO;(#g7P1GJ%@D;+v?WP} zoZ8|)8nqW5jk*R+!hSh1X!lRz0E)YDw$}DI`0s76^MRY$HW}ylq+-+_fk%SLo)N*C zKx#M%%suU?Ih9O99W>CzjRF1abtWLvOm~$8Mh6{%U8lEz?!ol41^HcD&a{*v1_P8K zP}SmcHPT>J632DhwR=Kddz}uDbAeqfm@JV2c$|h-7SF@!j=&Q^JJ@?M@YAWAs04m6 z-R_wjw9^fG#i6L(j|~qyo?zMKpAal@bQ~XYc^(Z)KMIu0VO4Fe0wftg1QTC^83aBS zH`gWaO8mAc%pknd|v_YPZn6gt@U^qD@qjULubh}5Q zDgK$^+|u$AAetUbDd&C*|FmFA>9inf@e@d0k#Y2WQc-v7h$RQz0nvmU6>^87Y$3vc z2YuWPlVHzzD33i0NqkS1ZlgloQa=uk?Mv{jN0TuKg@nHYfO;iB zV=`qAis*lY*zCo9!=1s3tiXk4lF8><blPtWf;}V2pCi-@gUMJE8l&5%D zM#DulZ9Lua*Y_mjL1?MJ94E3T8FhiH#B=!cO|ssmzf!%j_Ku$pSUMrfsTWn^BcJ3e z4T?8Uw_N`U)M~G5#%Hf18g8-~r9sx_6!=#K6`pya3eQf4^x@N@xo~;5pO&dl%9c}b zmH=SJRRER{~hIFm<{KkCn5FXouLk<8%J7)p$Z5*Smg+M(FXNYudy91$IwmHZ_l~Q?9pnJGM z2`_R7!~`#=2NfL%JzepWlhZ;$kKdLn-=J1*M~V*EaXR@yFeBPJXX(tKv+x^cvExzE zYRF7h3jk1?ud-F(;=nVEY`dt?pJ2+h^!J{rVY_EM{6X%7m}#ACYWL0zme|?(Eha5d zNYRf`!@o2tn>Qs>4Baxn&kWuJ7Bn)8mD*O?3oJn!+K^BIK-mh1AZr~v83SfQ3>YuK zc;mo$CjiXA$ZY_VL4M)1Tyhaa7gQ3mLo7cngk93dE?-elE0(!_7>sCAaL~Hbr=LLs zhM=%V?tjA3Bg7hGleija6}#mfh3oFZrP!EmPjFOo_O`8=IqhK?kOi4g19mdR{U_++mI~g*qMWA3>zKu0d?Eu^l zpk+uU`5q7E8suTZs-;Z`CPARK-~@KnF5HMCG*v+kByfd=MY*srem{FUmto>ARb&Q=3`o{rzJ%{ zY@s@BHO}c3>r~z+#^UU0sIi45+yzQJ%sm|u&AqfuP84@FSKobtuA%FPN)O<=chiR| zKR|o3K2*;I(6jKqH2@rctWy^Pw0C{3YFlY!rvGS_8H~uv5L%9e*Qp_uMqaJ&XAdZ&vVBx&TQdTvS9c6Y_cou!gmGRo}TC=d~-YW1XfW3%<~ zjKySJM+Oc(4a;gRxiG+dHYt3pnU%1i@;_;2xL3wg%ld3;wo`3?(rnXe9+8Q5X0Z6G z2i&swD!VFv2}R#ahDKw|rn+;w>N>{E@7_a>0;AVtQ-11njzc2zTWCZQ1w2Usce%BQ z?9dfNEx}FmHs0k~;uc*{tH+qx>DG~Al+%#$DrH@qrcR78bJ8y!!&9X6(~yi?ap=uD zq0;_lcC~i|kh}h7wybq6WMlcbt8srbTj_;SwdQYTCb~JzwbA<(c{mjjSGlhE-P?&1 z$*H609eh&Wf~e>*LSKP+tNaDg3p`ujaAy)Y-k7E`i_Pv_xiqZUyd`rD1f^31L?v=- zdvRlYxVla)N@apd3w?`wd`p# zN7v`6ZBLscx$djw-_0*?$OdWR&Apv-uo`;5jgEj-$X&YVd>ujn!oi^UtkJ@dA+2k3 zE?0NVNme&JV?NR$lf$e;67%{XZT{sHfQhdGCIasn_L`u4&yuFBLH{U1QJ~os^~E#h zr1TH$vGJ8)^VR3o$Y;%ddgVuI{j+A*%=bTvwY6!yYvs73zkjm9^_=;T%|5f9Q~m89 zX7jAIQ>3aP5opCFSil+1(#?E~*ZDup`_s;U$@fB;Ho2d8ipqN4%+`0jr3#)mH>D3J zuMnT)(>%e*FQ=9BpJvyractO;Rj|Y_zbgNrDO{vr-mkZqqPG6i%+A@ck+K8W91Opi zO#L!v{6o_Fq(1EQQ`D7zn!QS9cCcx3`do@OpswYl%Xe$J23)psD6SMqtXM|B=-UzB zz`b7Np97&UzAw&IR^lL>5P10(agtu@6F6n@EK=K};g8xH%3(Gtam|lA z@PW##q<}c{-5YU`XlU@8s3$lpGBmh1nz-gpJaLn7^-aMSC>b%Yi3JoD#w(Ia@05zX zm?rtw8DdHCC50tEiT&~^2+^{DmJOj@_?A@Mc00%KPKeeK%xHft$ri;o{L=&2if0Gg zqY$Bxh%)X@&nOw?o)nf@6;U{R_e`k{O+$coLRKji<@K}*zb(o5I*KeFPV$_95%gzr zm+SQgMlx7X%Je5wso_Ci2kxc0Dd_Ix=q0(|t370@F;rzkZfanLbyMyR6I%o$2$hSP z@v?c1K6|oS{j!mEjW?se^vIsDuI+lMKjH?z4x_Qtyhpg5 zYW75PlD?!yWll1)8_nlqeULAS#r7bkuS;ndWYXZ$lgt})=B=dU;uy%XW_WfkYX)gX zX)Mn1rdmA-=JRBYI>djIhbho!5o8cKazfbWofH+`H;6)g6k30>IavQ*J;gv&jJVSnk=|t~C1Rb!m~! z53=OOn@uYQe-w8hC|>W*;NHOU=;o$7LW!FTWCi@+v;KW$QE^aD++MJ5oqA)c`OqEK z!3gls&fs5gzZej0P<{FYjn{7*2 zrm;+f+3+t45P9Y(3ReS}0BESpqEB!@snf%9&`Xzs9~lP{-^M!9b&#y8U2LF4CXC&9 zA<8iZ;)xbl5m+jX6pFq?!-bDnYaFfIh}IFZrqHvra$+r~8a2agne{3)%EClyv{;)z zMo0^`t2Hy2H#e$%GY|((9aX>2F!M`VNXM0uw0O>GJ7q~{>tq!goM#Q2!tf9Qk}Ja& z(?I+%T(W@HxNGJ%-dphAmj(-$r~}}Ag(J}0J-Nj}hNJMNTzXa(<;oM581%rr;oS^HFenK``2P(O$OQCuSuksESkAG5$~)$@8y zb&EKG%DWUH=h=>BN1rep)>~B*yIfJ9mYL1DcJIeB^A<$aHnYr!ZTF}-v&`%C)_jHjGV24itlVU?=Vf(>|HpeLF;>u5ECJo?y$3@cg9USiJ^Vt2T!e8?Qt3 zRMat?7pHo1uG#YLDfOPG22#~~9{6OLUJ4Xb2{Q>V5;w89ELvVv7XAEvIWSN~&(4`* zm57EsOGL$PXvKx{#5+i8a9D-^FxTu@g4<>avl<&S_PD&zGqBl#@m>$gA&)=u7^SYe zb|2&>?GcXAKaxXx7*FWr88U_b(9lx6`B5xr-dEuE14Ep~a3aa`ibb9_(bpPtPs`PM zIdS|Tpt*D?X9;wu{PWDDYh>uVG_IUnD_lD!Qy|X8U{{s%%=$K``f8qeQ#~zS25J}! z@42-057lzM*$OfpJl||)u7C|l&+Pbb{%P~gfwr4Bd^_J9Wz*|(!0ke_lfG+@8o$t7 z?!_q9NN8Tne?TDI(j-pc%OqaruO{uFgmwd$|Tp0?lBLIwGLbVzOE-|_b0n(A)q zXJyvcN9<9qMM%Hzysz3WGM~7nCl->Pf$f%-TojpKQ@Ci!M90umeYnVcKtH)nWxitG zM4?>wo-dO~!sWmk<=j~4IB;mjnhjuR^@TWt2@v=jE=MRULa(Tn9SIp;Z z`inC*bbZytj`dT8>b1lit83%bwk76p{fAPOz0@3|?<-ZamYRL^O{MC@Qgfv~r&PVX z%zQ|HzEp*mnfq<^HoU*w#1=G0*85}`esHy`c$o7X?|+^k9v8P*_B&;x2!TB8}Of+ zY7C%N#{qsXA?L6|JMfD`>qzKAC?aHBbZC7M(w@Hnner2UVDmw0-Z{}h@P!8DjC;r~ z$*3FFie6Fwc+G6uZ7UT03KV`l|6}>z#lMfOxIzi^WnE@k)-nsD-Moj1lgY?mH_@m@ zq<=$w^_qE2$ye<0dIc?3-N+X*boi&BESVbRe6UXMA|6BJBC*0?>)|L^7Y1AJJ6a@# z&xse#Y?Y<4zeWbVFkY7@Mp)BmeFO4~K+*s^w3M4_ERDWJxxz{ZmBi637dvSd^c-&H zl^J1PJqX6pwctzk5HND^fVl{XhiML4(}TdU}Wc2LM#@9|J-#Uf5ts*7a=r&HDR z4YO{^J{}v$*%CDRSumP?J-eW;_uJ*h7N&15Bqs~S$weB1geJsI0Rhq@j{&z7D+jy^ zBJ~?$h!hsT9{8kv>`93zs}0*Nv2b&{&qCfp?mYrwU5d*}!b8E@2z*sE?n~(CR>oma?KfdH0rbJ$*Tw*;??@njmC>ldOf^+u(hTOPA6^UsC~>;d*E# zhvwVz^)UaT&FwxXNb3-MtoP4CG9Xgualw)XP=d82Us<#agLr~QC6AD0cQ7YCe@iY* zbO}sLGA+va>x>k3-&A*|Ktl>t2j4WksT3*2{Y{Efb>1=?bsIo}7V*rvS7rW!%ow<; zGUDHitG?~#n?P|b-&?E4-!hw(NCVgLdccgqu@_-R7^ny{ACg>1_-4LujDKHu)%SPf z#YujD{CfirBt!l;_;&R;*-e^K()`bODhV$6pM)j}rBb0~p=%*$u0LSF1tTx4iP7F4 zS8&()e+vsv`=7En2gtImXdZEVnFpPtt-0lnNCs9bxhd*=Gd1gNvzO^L%EBVXKJ_x? zkJ@l9RYl)6ud6TpB5fJ=e~VSER+~B9G=I0oaJSu?uGE}4=g=i(3_ zqwlEwtIf=kHC&n?le#oTL+D5X#?wgHDNLeC+7#>kUrWVxaKR7qP4_$)6y;FnE2N2k zmwe*Z@G9lgnZn$we~)PS|-LnWp7ZG&NyGg{WOh)Wm%UC;3^ywis|;u)T0gmm^SugAa9ku{7R ztO*92{ZdmUYZ`g>@a!SIq!s;rgZML^3{@jeAp{WKB8(>VjEB*c%d?^~VTx3{^5vP~ zRcmI3J2GjaGzq7wgKNzV`ga%A^bgD|z32t?#s}afPkr`*d5gaFqH?W6k=j$?LrHPJ zzzi1=P>2?+qhID-RO{E#ZxhjM3-=QBZ%@9TIjQsyLG!Nps^5oZ0oS7+gHsK(jxlPl z7JO*lt*f!>+=ukctg$M6y}8hQZE>uKgh8)^`e?oRx!!K9n!Ld*&<|Wt+cucpo$s84 z+{4PX(adwML+#rltU7Hphv<1@)vS$XPS$)>!vcvQ-vI*UzsuJSEfCtUXQMg5roTFW zL-r=Kt3SNEYm{^)UM4)KhOQF^0%Oz^{OYgn2*}L8;))!XchhtCX5~CqxyyC)c76d8+wxBSYD9XO+C5Otnc`7p~%G3cABj+Lp+KZ zlOsadBM83$FW)Rwdv>B7=A49G<^=ve++{XvG;up!PPmsa;!ET~Lhs4wP$oIm#a*au z3g@UkpPE}qUu(Ci($ZC2HwG4(;V8V@?9}!vz!Sb8SWl;B`4^$VZ9x%pt4_qZ7OM2m z=*6SYszaZd`}Gyis+D`pyv&oIFt!dkG|yHCTaf5=!r6oByFEy)=-^Rlm>8 z)x7@px!Fk1KCCkLnqz8pogjUqI4ZSluh~SubV#k)Ypx;HefxObaY((q&&;mVsT{b9 z;gm4IZtCrQi2dEv!F{My-Z-TGO^Sxg4%JkPT82ZJ**;2NlS5;EWHG)UW&5l{YRG=G zedduvf7T=&fW>~{&?~Pd=>r!knfzovqp)Ko_0&wVHLnoUGedsLX>9+HWUR_k&~@ zykE^dh$?L3EOqE0tBuMs)%K8?-93*0%BXq)%`S(8E-vD=}(JZ!e? z_TUf9V$e@wIP?K1L8CB#L81JM%5(Rppk4HOKGGKA2L+qei)2`IJ7PYZnYcpJ0Wd&%07(0P+X{dB}^s1H4?Tu05dInQG~N{o;N9J-rA1LWQ5k@>+N zX?B>)(#)K?|KuBryQ(&|FIT^|3!TYMhpKzbd?|b8PKPET;S9OadjMaUx|RZM+g`Ob zWaedmbtq=*(F*~bSq`5IOFt$K;w_ddJ#2ob|5m2LVS4(^ag`P^pU%waYO78Li1QpU z+kjpb1noMm7Dmh`3Vz%lyOG4w1R)wU;uNmdI~Xtw;tGJX>`Fd=s5{4F-6wTXuZRg9 zDpkQr;K`+@^my+Hzmo5Q@Hx#R!GG*mFP}8KI*P`A87)$kC(Y~ny-#&EiW7U!=wc3% z+4*0EdRQmkR!*}@{h>ai2cd57a%1`|q?n^pQ5CWkHu zHw-^xZnD`s08RZW^G=;oMpl`DBUVJYlTZkK4Jb;wXMp`OKaK1A}dQG&FiB6 zU1g56f0lAtJy2~nwFh{ZP;EBXU;bRJt~Pt!vm}5aJK)fkjK-gQ3tEEB3?sszj~(o! zU}pef^P{Bs2#JW`A)MXF-2I4C(?&S87V8oFK6Gd&*D;r~8*DxZmmZu&MR%Mv8)mke zDq^KSe}Kz+|19)bO9owt9Gqn*I}l$Gi%4PU62TQ0>o~i}maG zsQu>|Zq6y{_w&TxQlYy33`6~HvReGJnLWIHGCn$(WZ7Ao)rTIabw`SY{r3uN)dxJg zLpq0^*o_sz^V;r^EP|vFpV8xgvWVGTuSwLwyCqXfIZ#0|gwvM>gsBaz8f)HZTyX{z8i3=#XuV{TZMn4x%bUcwJv+o>OCT5vV~8~J^rWq z_bjD@0$iisk5ji^_S~Z9%u&-Xd%Aa>dIVZx+zERS^R<}Zx9uVPl$Xf{>8olH`F(iw zMW(%u6ufYAyf)yyI8|}k^Uu_~{~rY`+@rex;Ym+=4+!lkmrQ#%#cSI($EmHqdnTo3 z{68{{j%B);OtR16WZboKgG>gQ9{&T77j{w`|3K+V|2XP`?E@TH|6Vk!vRp*?s`lo; zw6v#4>@I>T$r91H*{iKdPx?6?WkT?J#b`R}Z!dzCMtB0MHW4A!+h0>q*{APcT`JikwmZ_|ubt zv2M|yp4v$#&Ns&GeIVa!5D@4nKwnfp{OP&3K%A$D23GbV*LJS|;o8Qvl?(e#*#}&r z*uTfMnTz1TWhLBmxQhqGJF(}txNqPRA87VbmA%1*jk@gL+}Cow&c(_}*=yYK6f0ZJ z{Z)o1tiD!i59l?HFA@WO5 zi{_Kg859}Gx4pNrpiz(?h$NISL%qEECkf+P&er=Z3Ru!xx8q3N(d&+gmv_j;-i4Xq z+jZW70w_Mv)qN+k=0moy#iKuB)ExmZfvTvS!n))8FO@o@HODkEmA(-d*R#FR?~`Ahc0=Dm+P} z>&b6FN)dLegwmP8(mvH9qi(;;R=1@n7i==lW|RAD_nLGhnPZ3pQjCy)4SX}9Rku`; z;5%v~$_b(zzJ=i$e%1XUM{0qq6m=q3{5U5BojrGoPe_^6>7*<%a3vTsgWV9@L~YkW z`gY1MpqH!CERCh{|1HfX(mW|?s29!`k(gWw{#n6Jq!CH$P5w(5B1{S%cNJhqVt}fW zh^J0L6r^!BNGSWk(SNHlIaX!wzg1aGkwZum9}I+K>FXwK#|5M+5x#Kec$+ZXJ1$Is zhN91}5>8c~7hcF?&YYjS&#F7Kvi#t!vM>~g)NT<_ORjk`3NAYKA=woNr4YgM`i_or zA-G`>l?L7lV<0=&lJhX;45YwF0?|sG;7RZ`4xpL=RPxkSKYjVw$3Iu$Ow1;NSHY*G zV;A1fBS@Q0TA4G1hc*~FuAuApm3R8jzKayF5ixi*;?vtqB3#GcLQ>$mwgICCmyaup zYwd>XmD-!EIZ&Y>zwgxdf6n$cw2_YtXcLZffP{SPJGErLHnr%duCdO5FZ`!3#@h|k zS6R`{5LP3_2~EtD;%K9+9#zpq6N)HjYL;l1?{Nzf0k#&v)rL;S4Tu zF!lwV*=-u8U>i5wT6AuedG;0}R+!`wD`0bBMY*|Q7_z&HWv$_#u&McIz4Ba~3oB!A zymF&5zRbzMJga`a0d*4iO6WnxU>Y=$;Dykretpk|Rx0l@{)CZL;Y{!)eO;q;Y|ur! zynwrOz~^>Mi@gT|p>eLhma{pr4F9Z<&bLL*s9e!OCRp*k zkO?(eE3%TFpe=wWI>3YIQd*vf)Jv_g@*EJEf2no<*J@oQvQfpVW$|XZ{@bc$P0Y-+ z@yz!!y)qrSmpqE4L5q6KzW?a5v1W%R{jiRSXsuBZ1Qa?mA7!$TiI;crG?H&8<}ce} zHgD2_q<){QPX{BiCLy|pSae=zF-?+5F}vogS`IUS>>|VVVPccy;9|Q%;dC_jVSth=syIL(wMNmE3Z&yC==ktn28-v~r@;G7|(R`o4qih9;*c1iu>GrrTb z5duJ7wEO&f)E=jqHgY>!r!@P{*gtu0C(mA6)Nx;c9^PIXMO(MOk%FMkFX>qBdWue! z@|*Bp2h>R!oe}h0W?E)_Ns}8Tjn?uE%s$dQNFE`Vtt?GZT+0i`naA5q4ra?WJ7+?YUT%hIz-+ruUnyo{cw~)Y|d~ zaFal6DRaJ38-=b<>{9#V%^Z#-awM3wxz$ZDyQbFqBB}}f&Y56d)QCwc<-*Nu+rCe=6(N9(73AY@1K&4kRGYjfE zu9XiC#A|=C+rQnKc&)}_CV>}G4Veh4>><+IKf~0d_Y5fR!oxfR8#7VJz_|0|wwP_i zFIZY^b*3%S>p}@Z@`*>Az@vGi21beaaN+<_LgvObv`=q{qBlAkk4Qy@Q8N8-w>nb| zbl2R)L8<0l&2w2BInoc~2ms5e4^eWC=G*wUe9LyLC*9;bzf&!Dn?uvH$=8j1D^~w+ zn1jR^2bjHExvQJ$wTd75-$uE&sSed4%SpS{=<4Rs{_$8MV80<9da3DSxM^834Tl`R zN7ruZz-r?@f&AePbU>(zGf9V>XVs;p&?l-)-&NODWp%S|lQ0$w8NUxR4%ovOnQV`t zmDVY-WE2bLR$7aes_r$+RK4wPHM9o69LeAMd=0Y?@ey{aFKU_{G9HN)f()Mavrsdc zHo`HY*js6Rs~XfYYwMn+szWVvvR<-NZK!4bTuYBxOI(_=Dj!$tZZgx`^ptFNk14A= z&o0)&UD{x06v4{MM28x8nKXWZO<7~q?>CtZ^|^Q=8s^BH54Tj7wIG|LkSQvbq^T5{ z9|)ZUvi~?q$2e~3<7$mTlTyD_dkk}Ys|Dm27IKyWB!ne+6C#<#cY@f-UPF7p$hQx+ zsL>v?cIP}M(8r@#w0+3PeonHN$`{b+5lTm#xR%|fD%|&BJfCv z!p5U#h2NMsn}C4)e_W*|na$I$PmgX@7k{}#FZ9fEs$CX*s^;fvbQ0X{%^PZYlG#UB zH`JLVvzIM>499YRp=Xr=FgMH+o7=#2D}zr|*>GIcIs0K$)@e88iW{+8@Y3lOa76<@ z7zguVGell4a3VqqoM>kpOvRbB{IhWjE%w&rKPzfHcZ)u&)yZZxz2O&XL$aA((14{w zp@|=awBQJ5i!lz(LL8hKwXQk%C!LKiZ`AZlBcy87v1FcvY6T>+k<}aO9tP zuL35TCO4b}p!+fB(%6EClh&?}LHTAac2`iSwBpHF3#E0^Q*&vlwDJvlK_cx*nrVM) z>4aDrZ%~Fyc4<(~1=1X|&8oJ`zFT^l%95&zY9 zmF1EbM=2XQKau{G9z=iO8qRfbMx5rP;V;l|LBPUYDm|4R-ZW2*Pc_r4Z7U=nc7zO7 zlxj9g9nDM;v^{PIMZ{%W@X@hQeL>QKk6G-zQid=qX;Pt>5veW_RIY#vi>zS(^D~RUkvE)<)*Sc4E41A%F z7yYO3*klbM?-c$rNOYi)O%|zj%q|6@yV-{}ui)%?BRI=m{GsvLG4)ai`IWV{N z9s{0Y>u^R8y>eirns@kEmKFW00c=S7YjbG^c@0D7>G*sabtkYdMD z@DmY340r-4dQ_V1@qLSq)U<$XTD~x0VRY(D#DwvMDynPNzBNdw8O?i-y+O!^k2c|5 z<;KeoW^&llYj|wmBls+GINxY%#9S-H^esWG?v$=^s*`J_;;*e$lXcoXs;UvHMc}Tmtfye+K&a2*;K{=(^OZw?; zQ0Ay8m+$R(pGrr3lyf}fBcGo}wxn^gyHfIJ<D3)-PlnlqBiMe;Fnip2O+ONP(qDPbz?D$b^MY5+Z$j_3bd)=YvNb@% z9UU9PB;%8F8yNy|HES~@0v;sXG=nXL@_jwuvjIaU!QLF`XErr^zbB*RCEOlyc;$2U zt7=Q8**v49?J*2~14HZB!e56hj@&20w7Bh-NxMVhRN6>68qx7{RozCW*O#|6^eprP zpAn%W!irp37MaAa?+WxMeV9wr#i>h<+lf<;G%}msBY^-VSr)87k~;EdLt+CPeuZO5QF@ zKX9jhU||~_aW{~8^W+pniOVrGG9~Ymb21b~Lsu=c%sPqfVil|GEVKSU1rk@zXU7oRtl-SI<1 z&b+{DPv%vg+cIW%XrS7ZW!5WbM~kv@>xJ7;bY}jX2)==q6GrL{K(t_|r64y?z#7WY zUzOXpj5!{P&m$N^-h;uaqPmbqIzs4eFlpnlksNCbBzp+`DC`py&11T{(#>aXPx0^7kC#74nkZ%%Mp#8)baPmFr zHT7a+vvvV=oKn5bttL*0xS1BkIWrd5<~fcie<{CV^(bu^2n8SH6sz3Ia}qho@$8I< z3@FUJHVKsREuYgVCEYR7Ww0!mPaueQ_%5W-62N!lKnl6Di99kSw1?d~!bRG$f5ERM z6-00dPfNt?Q!g9 zm(b83l)e($oI5lWS2`j1TxsPw+23A^=PjS^4hf}n1;Nr)!e9LqC`ycU)%JnALtA?8 z4rS%dwR+O>D$4#z_Jjw8@(evaZOienwx!69%~L0^GVeG8Nv4*dqT1VQKCAxFn`nU z7^hmbG)Fobt9dQWMm0woxjz2{2RBnN9&y%wYeRdV8gNMWIOYi zzILJ7+}_O53!hf!WH17!6Ry7N6a}{>a~t$Q{DB3 z+SAcYyHC2{kF`-pmUlt5oNg&ng2c}d>3KO(#;U5w_?PIKguo}A1gMjA;uR_B7Lrc> zVf-$08i?-obfHAJVC}A+#2o2KkPN1aI-5^9GPaKBVkS5^u6s;Zb9k@J=v2eJk>*3tiOX1gesjj*&~yYKiGefR$0nMn zpJvi<<_C#eAO?EjR+pGyXrjU_Dl4l0m;A}Mwv zI`i>9*t$xIdjn4;HW3Gjy>p9sE2nS&dW+eJ*!?NpA;hoMGu_P=y8m9at~;1J0gyaQ1X3pE~0= zAJvB}RQ-CIliO4^K_rPhDc=`Z;_$hqOH*ZAPagG(bpAH~WeuUX`l+Ycv_SJB)}gD3 zO<#r&>%Q(okc5C(KX;jpH39o74v%e#U@up1WQLOQAW@&! z`e-)ks<8b9`5k^|I2&|Kr~FYG8!3!cYEdtsr36D~T?=VO6w@p8@w*J{D)vup9wARlD*_;4G zql{J7Gf%6H{a|7XRI~o(V~%{atiRdRId^oN`lP?vMsGSrUFvUc(Vtdo!vOQi^y_b6 zp<_%qnn(A;Ug6z^cef0~Gh0>nJK=1{x2mCcnyuXbem!bQ(t!kuQ0dwJ}A>FZnf z+-W}QXy{tZiO*m@k=`JbP2@ZscF?siln4R*Gt;qk(B0-Oj?~69#_uf(i?vqF1Bu## z;QANUx?FRpezuFck!vp3KS@>6u))qNU>B+`bU)4XK9RRIw{TI_nWQt_Y2kb`_1&5Gz^ept`!4($(`}){QYKQea}QyD-Szu zq8gHC-kbU)79VzGGGFIPL`D0I3w8v5k!Oyq*Aq`%i2!4x$UBXl{i`H+Puax*@msr& zF^A~-zPW1g0}#~KxvJ~|GgIFpN7Vhs`0)HZtX6$`g!5!ybxt_}m25eT(^-e&tc6Z#7@g%~#dpt>!?zQ>8k$)$Egy-Hr9? zZgHyZHnY8cYL$9)n>jwcb}j`G=*Bg5RRfp7BnqgULzwQGTGXJ~W9sK^<{5oQj@th} z=KP#vVTxC9lP~X`v$kP34=se~R=j zW8h^_e*xwy4DLrwWGtpvjc{u(Tt~bofvnER0Fg;T28e|oBL& z=aN~DLXZ}C3$X|VkoNO?g|qXpuoklB<)@rH1bDyLGB9~EPr!UHhh z%jBC(qH#j`RCxX0GW=FqXZhzX#8?CXVlZjx$1KISx!&mZFkF2K$_isIBl+=k9%>tX zD!SMjtD-#6E?!&O0k3GTx4G7H`M6wM!S?JZPl) z?71EHmRx6B$7u%l#CB$!R@w;fidKB&8V-9`b3Zft>XQiV@R`}Xaa#;sRlSYFLRvPq zOc^{fizR{&Ex*Xxr7}KeNv7=u)!}oNjefsI^Mx=v(oXXsM_c9CWhOOfOROYkuogpNbVTe5 z$%H+XRT4p1iE6V88_3OS)-JQDqmg=tTZ6hp5fms~#;kC>7igd+8)fXn7`^q^U6`2l zLsOOeOY^R@Z53!`0zE>hQ7ADRNKX$m!1?=21p0{&sf}Nvk5*SlzckzGpY&Jm-DX*hGsf4AAJ?j-7v1aZJI0gPz5QEB-xRkYiz z=NPy3&E2At=U}p z_L=R{+Ebelt?*V?3~1RG^goN(+hsPXd+ADLdEZiD%t#)2M7f7k2qAG+_C9lge(j3t zx8Jf`+^-XBoc_ft{h6)Nq3ndbOZwLf6?cWhMC4uG{c)T#rdQR?&o zOagZi@aq6pFOKK6`MPi)5%VfvP~#7p>8bzVyR5gs6x`BhBJ%BgMy))ElsZhEK8Q|y zx4JI3+f{=@W>%I;G}b28 zw}OcCYSm$&466S*OsBMcMx8l~fZX*3_FBhgg){QmGhlBvaxU~VHaKF)otIK2b#3Sy}U2Y6Mp0L%5*$1vVgTZ zS(PXmL?=hcHjv-NG+d=iX2gwv3h_6Z;VHVE1Ii)8K!)rC6hz#`lL zIhr&(GEdmw|z|hxkR}`ba!{vGejqLRQH9< z+Nn2i+KK15au)>*&ar84Go*U>RzCHJ0n0EG+;oi0b#W%Y%XzptZs{#x9gE{>V*h4{I#T> z@PEL4ZL!)B0l$mYuMwKIfF$|v0un~WSz7pzT6LBxdZ{+@v75TX z;$wUDpoJmum1xQ=^`?AmASqj@i#PSoaF zas0kET2#@wmaqz$dU6qNWb*7iT8%D;_r@x!laT*LLxPcZ$e| zz8hv}k=QnT7}eCJtkx)sa+fKr@`32HMC=v8`O192)bL?Iaww&(?{jUd9;crA(QM$D zreq`5vTCaFuV%vz|GKZT ze2!x_&ejwZn}d-YY((rF1+bVYU`BQjOJN0K=-xV3J^QQKFTLx@3N{Nz^J2=lP$Pq* z2#lrHbOwXhoe|L3*O{j_TsCv=X+1T% zQZ_(b5A&i%eZ3ehrX&#R8>?G7N5ruF0855*PKS=)8*L|>bKGJ(m!OX#^J}>?ttM*O zzNFg=dWvKQ`PN}N5L68iRH2m%*ix))psMK)gl+@G(;}02qu@zZbx}cNPS*Iwv3b_d z7!5=Z617DBSJB-%0i!q&I?VT)q~#!F&}j>zwL%b2lHh(Ro*ie@#|M%+>IYV+KMo}I zYV>BFpm4Cgi(MF=aI3X^le@UTzLr<1?md`vi_ zM`3Qb2`CT5)P_WDxpksDvMYBZf4P;Mx7_-nJFPmL)GWSMkIHhzveMzCG^gI9Qk~~x zy$Vu`*8+mM#vBfm)+*rj$L8V2^Gnc{Qts%WZabLLdc=6X%JI`p zfubWCp3q+HSZ?uJbbF)nov3!=41~6HR~wI{q@~PYjuN>Q_YQ|14}B(4vFx7WYt2O)MWw#l*I> zih-^XlhBi-bHLxSdB^=iXg4xR0O9#@?&5G6Z}baSr)gE?upy>=uusaFVLeYiIyyHr zj>I*nObQvpa{`t2=bl(egqG_rtz;dph1bxQue!8tS6tdfuHn3|P`!=;}3E~SCyD! z8#7;SAkvs0ky9xd4LOY2{vj+e0rLE(#JBaM9l{!$Q*NWvDR(*>Ev-~jPN)3KS?88Y z_1o!`kaN$HO7-oTl*Y~}uUD$dGbz)YtNAkH`;=zR+xhbD_bE3!$B(E~-+!M{*ZKIc zN>%ZFN`sr?k5<@=DC8uq_w?e8n7c}A;?O(Sr1pJl~zixjy1bQ=iMO`d(bPp;{u`n2ri=O3afKzi>*gvCF1Gj zmKY56DKY6>O6Nv%De>iaN4f6FkfkR(_yX#02vEqve6iWM;rEB7Dq9J zV`rLJIfWs(3YUPD;S#3Op0(UvB+W2}*3cxrom{(kb*62%%ikpXRqthYjOL!)=7d%J z8Dpq;PEcYJO;V1IM(um2WE{dG`^z~(q6Ot3RA+EuaLQ|EtSPU3YE8-5Z%y$WvRI1` zPWJwIZc2t6Z1m;XYMjO-mUl;9ADn=hul+NFliTdICiUEF{n?o|W-ugu%hZ&PMn(rQ zSX{*XCka7aL>iEv@ws)5gyQI2o$r%3ePvDJ>ir^_{YBy0uWsGg(dh1|HIx1i8Vi}D z7X@qYS64f6w%cTt(%EPlH^p<z*uUKizevH3sCA^kk2Pe^HQVy7P>B)wbR>CoFc) z|4}{X8IL*34p*pm=NTi?Lrj@691c+l!RdlpNg#BS2J@tIf4HHV%r}}lE~4IuVcUoJVy z*WP0m2!s~OhN(QxYh#XdusirNb0qfK|LoXBq$@*P?OXOJ4?l7J$OU!S?>}&Vf@><* zIWBNeHj@j=DO<#aw1$*ZS?1+1=tP{_r;V;ui;g7SR;THsg--am;5NkrHO@3%%@c1YgdZ z6D&^g1{3lNgZR3$Iq5`@qkA_D&s}BBDrF>ig-x!g6WrA!5Zc@D&0tkwe`V|o&5v`a zf}=@|vyuzvuX&DK+{2}t(NBtraY0RTp1I6x&OjifwjE9KWqfzHIL+iner15WleCEN z8clow4JIC6q4m0|b}Xr0dp5Lhclkbdx(F-DucXawN<*@t-Q_E`vUJSWI2j2^eu5oF zvT7(Fi_{3R-pRh1?FLzmzh#xZ>ykB5TVf57@r;TAKX71Hcf0V)65b&Hjxe2R{@FG( z;>f;UeR?b@qhODXV$FLfe9`|!s28gi2ebBICcP)5Yq^f@kZ()>O5hnB=?X(Q*l17a zqH7Og+(4w8Z^F1IZSPB$NjHh_XE(-TCnMU0HQL0wkZ~#VY+wI;qUr4k{l#Sq)55?C zumdEosVr{{aUc;y&BS0-WL+oNJx*7+=u@Y*m`rRX5Dn2g)TR?orLvdR9HsO~A(joJ z=)xnhJ}81-q#;#+ZU=J$ywDG0la-Bcf*;@vS&$8iMA8EKlLFO2D!llbjrmX$=|Dyx zy%1`|GZTL#gS(^=Le(8$!S_v=1;Y*Ut@Bj!feG9f+)Wvd5|`WSU1^<*ogpjx4BYWr zB)N3HH8om?H&l}XcV3RuwroX0_?oGbar?xjIPJ3!Tw4A&F6CTjJkvE@c*5;bHZr)4 zh|-*e1v={ReXwIDEr>$N*~u|QC14-q+VW6^+Pcm-r2p}hn*WB8>8!(tci%AD>l^>A z&b?twuXXMqVs43jbYiIcBK72Yj#0Vrs#>|;Xp%ajX+mV5z=;-z37EiTkkb%#jDPyU zZtBK*j#L>wN#(q0IIFg>ux+uw~ll1zug4$9=nD-0Wsm#lh~np*U`(fEN65;a?|W7kt!JH*13 zSYkxaL!-B?1|ssh=|eF!UeO%o?GV;Q0+R2tHY`#{7OIW#kYD+qP2Xoxj?URo;>-NP zz6w?Q596Os@3A`38arCj8^rz7uThGUT8udJc zws8AdSm|9VE9#>nD~Oh2JXG*K{4u+jRoYw@P6DiCfWCvT?F${8E-Z%w)bd15jjop_ zdzT|75NWhM2|itX}+PP`DCP31zYwqD0Ch@^YcFI{Aw%(datS zTqkunsn1b3SAG4LQBx1EQ78X0S~=MQqN-mp8tD7isODFU(Rz;)oxxznbs*GQ4T8IOQmM=%s!fJCPQjtdCkMS;oiTE-<2i`<_6kWbO5kQPZ zgwQ{9)o81Sx~TXHV`ViILUP|5sioemFd7oj`>P70N3{jwjqA+~k5`^+M(d2Rps)?j z2hzs5JSU>9$oOsvT=MO8HRc+bSF35$p#A1jU?XF^C+@^|A*UI8eAlTMJUvAl!(yElK)B2EXSsW zCC>Hvk(K4M;6hH){Ym~>{L?{9eeOt}#K1t1fWaK2Uc47{i*p}t7zK?lvfeAb+?pd6 zMWmMABbGthHp=Q`VAKbue(LlMqep{}C|0(@ueWhMByxgeRiNxtohyyDj{DU=DvjFJ zM^I_!uPe%r?}KP7ja&4-oz?zI;|1q?*R*B#6Gm(Auw`;PjK?|_^j#;mejHNjAwYd`tDMn&|4ZTMrWu-&rpE{*0 zZD8WPj76U-B0C(VVMUS#3h8^7Py%C~I%M7!_7tx@KyW-s2#IK%+#XLs-AT9(Oh=_Q z!BiAOghsNDph+x_Dms$qudE+Jei@JXfr!L>NeI9T^I#MxIqa$mCj*>U{dCBvSNAD8 zO@_3%$H=1YQa?!3rbK$HjKfA!HPQd1-&&|!4jZ+H{N>p99|@2ya3A-}do-$1Bi^M1 zX-OZubwlm-azSl1CXa+%xE$P0T!(!CCnr1#vuL39QFOrwkwO9F63Bg!`(SF8HpJ1x z(grOLWO?UW1AKF>Pr$?Rtlgo%S5E*vTPtm6tg<4vM$0-x8N&PPkVkwGr7X&^aU*5E z!?zWsvW+r;ZOh0gIC+hU#RsAwWATz-;ay?b-m;L<@t*ra5(dSkjfy~m_odL5>jl$^_s9`GYU9X3HV4@r7kjlMTkOwS>$gnb4j zfh55KJTtAeI&s8kSda-~T%>)KJPCeyi=A%>TEM+Y?i?+u@=F6_*+mk>$2tu@Mi9}J z*72-;2sP8f**1S!9Q?H5>*zJbC`qq{+xCkhOolIII}cHpxWmiP&`RyL6fjAzvZoiJ zu#1>7yfiow|AZ=%W>}>4<(sTC>HfXvkK<-6T92p@tx*T$d=BvkmWE3}rD~-dUhFFj zwge!pm~l+o>o9$Z2dp=bi=iV!NNnwzw?-h+%~uq*E6Y=N9WzpE-YrxXi;Z=cnsm&l zS0Hvp-A7=iHlIfv__hlya&)vbzM3{6m{nX9^}hu<&eB7{Q%L`^o$db~g8w}Ng`d<% zArN>3DfZ|DUfcW!tg)d!)LsdNoI;LHT6C<#55z@K;=_vwQU@gF-ww9DVs=7H$g@X< z+jd*yzkOnqVBI^D|3hI+T3Q`7=367FKwvn%J8DDS0&!+r;CwxkbqP@Ao>tV91b2ZV!~ znqa?R9C!PQi^33Uq>jItWiSIC%vF|nKE(llw6j=&_2I37GrEWk(#Ai8XHpmir^(8& zR3;nVW%jj(RFpkWHhHS7_pD|;=zS%WY`%TR4T(uWHo_U*vMMa_zo7? zTfe2yItHP)I)G>@m%ONAcDPw#x(3s(xLZ|~FWxnh$6>HN9abew{46e2X&wNO)l^P2 zSy?LvOfnV8cR2&>PIN=2rbvIF_WO`2n0lmFr^j0Mt`x?&cjX0$97z~(OkFie&o0I! zmJpoTd2`|bChjYM`Rwt4%ra$Cjsps);cZZaq)nj#3Jt6bI|8x|a%5z53`K8@0!1x> z#wZqij)?q|A2ni75}qinw)a~bnmWZrdKT}}H`2_)iA#z8H7&yCEZ(;ucu zQmKeiXNQ6gzHby_$cyd}5Mq-5b$re2!P8fOBMk(TCWA#hQ%^=)Y}F6IP9Z$lXv6?T z97VDDz)hy|-{+}OAfkd;#2(h>gyrYeFQY?c8^Bdzg-IZ78vx-X81|xbN4W`MmiQ)K zCo)3c1_Poz;C~n8HUP7qeBy^Ejb*}hFD3mBDWC3)#1L@XEgRb&j6dA}#SzkLqKe^pKQ*;0nI)n;RXnK(9{{u_x6p%VihG-bOQ%$x3; z0cp2tGx4U{PDo$9d%ve%0hNMfDWR$%(qQRI8AflnuPlE8n~#|64#s5no|Gi%d&C;3 zlkScfN&H4_=lL!TLsd)@vJf6BPzq_txfpdou=I}KtE_GXA|KH;%;D}@+-bPy3o^2W zzpPpy5c-_Lq!7s5!Qp#&KpiHs?JE>H{A2l-8O+Rq!&@6GWIBD(x{(FFm2X z8vU53m9YjUdxU=u{>j3F8tn9p(%l2pW~XPU{^=dc?eZ+vQ^u=TU7iJk9hw zTdO_^o>%ojSJk-$&u7jVqd~0Iujlm z`kB2uFp@IkQ#?~k<5a^FM&m}Z7@Hc9(_BY}9<;~Ou*ky~#|< z!m-5a^@pZzJ!xdreTdoQ74kV*(0D|Y5O_D7-Ce5wb<$`ZcOToei`Ax+MpI}0&I{c14j3tg@^}#9Q0lnG~m3G=lt9E*96m#9wEvJnZ zO=zm7dF_gK)`{olY1}2UYdA6|4(hgP|DT!69PMOo!y9Y>KUVf<4yI*8KZ|<@r&`a z-Y-{~7meon-8a-85~4<792khBA>x~5?Dk)&r2((^5g4STV1dEeCrvVc8N5C z69x!24pt&TvrNUEud5y3a{R!aEvnCP&lh^X8>-d`jveT?Mcs9RI=XLB&!6z*nQ-wWgAFp65y$!FSXmR*Y_F%oE#Jy8^K$MY6d@rt zl9Az)F?@8>R#;Q|NYg}znQLKJC=+o>hM-7)C?RPV)lXhef9JSMn(CTC@bq5S)%*<4 z__Q9_?Pb%Wh`WN01Sn1Gl<--9rIQ@7mAad?}rsi8M}GHb1J)x>Q0 z@r9?BRhE6fOwHz-{{A(!;bzbB)TTGpjPzL+r7IugQIGdt%eD?}#nCN#T5mPGHD{iz z<)e66A79F*bQaAUTvPErPapTYvG1QP-8$6gxyzw{P@&ef@ibLmo#1G_(0i)+Nl&Y^ z{0gA;=CV43@PoUMOekV^dhtCq`6O}AmoHW8PI~q@J6+V&lFY7(k z4iB+Gpf?p@{zAX?Fe#W%b%On$slJ?|FTJ44MHWMO)4kkY1Q}W zCSWLKp@Y0LUvX&@xCU?y=gQ|QT!@+qN2IsM`KhJtXji~8qm?}qwi;zg$c1+6igum;>Vd|GLoOC)&wH`|t{{byjzp+$O|+o_XdJzmZ{uNdp;TsxaEY<<1UFq_N_w}cz?Wg!F! zSM`6uQ?J&@NM~T6?#PymqapRg1D?M6xS!OH2R!|54`AdGimKvf&-0$hCKRz-j)Psu zNKVKLIBa>$)+v@*7d=a?0eUJ>JY#*Ly0pNhsJ@eI@*HpC}Tm`#Q?FkSCmIZ zvD}EW5Y<#0UJ&^gP*p}N448t?FWbB%j6#I5NqR@IO zNTC7=v*9G~zF6Kl1S3=KQYJ)w5Usac3>?Pzy#3vy8uRh>W%oxL|VJVAD*rULUIc5woSWGIE$7kP=xFEB0rW3fVxYSg#lDHL z!%aDtd6&U$c=hmPuN+}KFmexNibIQ-L0#Sq>xNx!Z@gLPxB6a@(g}DWV+1Tnf8tGO zQ_E9y-e{nYPplcac~P`NX~{k+DSXkzK0bBwHx#1t<;s28=$_mJsajTc#Roo)XHl=! z+mCo!I*zFmk8oh_*DCH&Put{o%cBi8vD_qaVJRz9!A#FmeO9@8vXSS>_)&VT$jdLN zOO4P7yOpbzSuo#r&zTTKDpQf&+p1bsMW$J2E&!cIc+Yq*6L54(v5y%YjI+lEUsn5@F}q&)L6tS* zM3a#~BBQG@=rM|j*MtUZ{H`W9_w0{Cz{yA|l z+p_!u^quF>bCNyx)muv<1LKR=h-#oOiF*th=&Khr^?5RqedkN+T(W1h?*2jbN%8b* z@=u_$_udgV^NLn8(tM%xA>RKYO!Li!l;3!v+L+==O@Di8R3Y&)wd&A3hZ>7D*!J`v z)=z~~Ja?(}_2FgX7pgDnd!E-nu2g**fY`e$)$|64Qtc|$&kZ~yn?Js#qI@$U;dc0r z*uga2+MM8Y?~LFhd>1AqbB6}2s92yTr+b>H!hxQL^$tT+*+5TDdap(-HWIv2c)eI! zWVh@se3SP!jR;6WMUP)1n24u&+QrPua#l2KX-RBj*)grn_*IqhpZGf|gFQ`C@|e5C z3!ryQgOH-WSN9C|G%R=>p;vgqi;R8wyl-gq9lLGXwv6vWGP`0Iu>&-PsZE~yP~1Ac zOEZ3#X_ox5w6U2oM0OKMI%!L--DnJc^mefU3lG9E!JghE&WKE*6K_=4L_pl5cQrct;ol?XqmPr;2A zsO>|r^BnD~`VI9Qi+`K4?w_xk4D)QRmw!$xUyskH7t5JQIm@(aHuXGuPE)@P<4mCY zd1yGCmE(*{YVvSwOf7y@TZVg@r{5$}c1dm+3pEDh{~qSPU)7D_@Qch}RfiFrF;|m9 z9vb0k@2s>mwR!~SeD1rd%0_t7YW;k%vitz>=D1NU=P7d}gEMqdbs34uP;ym`9_dN* z9wLoo`*mIgwrxSyJgA0yYeN!Y{ow()e+yPs3;90;M&IrU_YC)1hqeua8D2j$c_ zr#{QUFm>leHMTA0ufvww-qsUNO`+H-J8#vBlJ<;R{$c1e|W zKv#NC)$QnM*f{}!G=oJ4DiL#)@bgPl-i*p^d6M~{b9Fq$|Mo7j=8vkVy{C481S^!W zZy;@p`=@=pfS>VQh=Bp}({rQC?*3ASN*V;bQRmoZo1%FarXU8V#bYn*RE%Y#bXqvRWLnq=u%SP2;(T@O#QDu_ zj)dH63qw1ClojX~p5c2TC_==ufy#4AHq3dTDWA=PF!3Aq0OG1A;GM0 ziK#J+YEV`cR-N9j&Ns;x%zkY-ykFbc)pDtD*+XX+`y@?i&pe5;E);_?<-_u(r);O^DdhA#ag*Tx+TeNqe$Yx4_g3{hY}3>5O2uUxK$5S?hC)!Y%V)6puqEj-}^U_>00b z`Tn{u5PF*LUX6&18Mtrxiwdj>^lM8S1EV61XuX$09CU@CG}(pk?WZhZaLH(B=U;05 z7Lie#8>!J9L^e_Xg7&+YP7S>pi4;h!BI&U+1?cq@#7 zRtJW<1E}A-(t6*cR(AHJKO*6KB)w3DM2GG93q4#Mh~$+pAjbsk(8=+63xmQkHSMU~ zcn5X}p@_kLzIB^{j!0PX{8>R);S0fWeA7EY=E*Zc?I;fz!><^!6)U5Q=k5ZOY0JTH zk!EYPn-O{iTB)8PX5&PZYBp4PID6hJ{stcV@M)KKY%t4s8Qr%~JlR7}>BLC}6v;0R z7rM4Eh`t-TdlR0?G|T?y=j0tfe8QiA`wSp}Qc2_10<}Ub;Cj`JF~JX+L0(bUyLcMb zJj2W>-5`?S3e~Kur$yYq!E%-w(baQ%fk61VHwvM{zsC}3Eb4Y4da0~3d|}P}iQWdP zkJ_EWQ|i|6NA3288j#N6orRAI0h=^d1an!)W7n(1Q2M>3q8w)?Yk;=OI^M3be7Ikb zJ6P1Hlj6w#QJyWAMqF){7o3-2Q$_xdQc*Ne%aG8YSlI=`vN9qWr5AV7D>MTah7b7u zzxhVR^2I|rIfIWGapI%~z2v)uP z+rW3>9r90h_RHo*dG91^xW+fupN1o>&BkP59L1%08Imhg1@n@_TNupFQ{!*(q*s^p zLMzYtW~)WFFq?yr=U|AU4c9Lwm?VvI`san6{+$soYfLlqL@S#eEYvtLlAe@?$p(LV zH!h(x;9OB!6gLHqJ-n1&CBH}(19*<}p0He-pk4n7D?V>Quo&b>JLZB&332-fLtYM} zdh8-SDiOn<<7H`}$XZCkEUt%37)TVd*+Y~A#1`Qf-Ab7*=uN5Q4(<|V_hBF7_@3V3 zgfYFtQn66StlSw$1p~wJV-^Ox4#@YXWSkpCZBXC5b2 zarOP%%d8CJoxU?L3V^Wr%s*91j<(L zmoZlj2>up~U%)Dubx!7-7~pL=Cv$gnPD-GTYDh3Bvydgx`KiUgX<-`4@|Ob9S$}@k zo+MieY#&C&e1LhxeHlPHpoawnYct!_ZzYb*i_T3|N5L13iaYdtCeKR{`XyuL?JpSv zOTszzyb~wE>#@NPtt5Y;cXVkkQwk2s03hXV}C5>}Z!bIr=<%5>jZx-&srbn6j>ee#NVoEN;P8 zi9Olv5T5M%%4h!@Q ze^ppWg=bRcY44LRW6QcWM7f^lJK0=!+SvI^y&4r|7MBOG$Gsm3DnN;I4=TT=CXE)S5=TPol{!tzVoP2e757 z`Kfx!2OGgiq&tIjN!Hg`mkB02!-A(}0`|{SS|g4Temg&&NY82jZAW_?lWpyBe)ie; z+H{MxmO0kdDPIz4N&zf|jC8Q2-mu+L6$B%tR6Nn!G&_s$RnfoeXl}3L+LRTajZj&f z67O?jQTlW+;Y*UG1ad7b#Ak=_Y&a*1P#_2-4{AX7tI3s;-}>Z{LvM>VK)c2_ zTDIODe|}RY4@}i*RzcYr=)h9xNsD)k{h04qCgNU#LJeG_Z^ObyB0Y!tH`#0H)T~^G ztf>vyF^tdUZR6vc_rJ!+LjInXxjt;U8<-Kc4^b&Y#FF(31Y;Z&CO~P`EE@SKCN_uH zrk@3y9u`sZ9u_I)nJ8NV9rQ`$lwBSB zZNv@haK_h?b|>$Krp!9@+0;anJH5rDbUgpNywft`e1rSQy$C`c71ykUBUYgcD~>xF zOv-wYr8BC*Uhl38Q&D7no)3@wD|j*$;in5vDz7&-W!|2{;yoypw)ZtJ zKoK(K-7;@~Q7l0Y{Jn0$;Dwl26SInR)iE@^z*07U=k2e7hdimDj&GV-^7wsBT;2NF}t|NVc|SKcvre* z)HJ-VjhQ0w!8E;i95@K3mUtpYmPs(OiF8TJU2<_YxTVSY`~Ar!``bU>9Qi~E{`SfS z3!wB0s30E_(WFvb4xl=Tt2k(HW>lx96{r*}D$Pbgu=?APJ}wiJFk-{vP439H=Q48B zI0=h+UkgQOFsfskrjzcnWblUl?ef(M&vCz}kZi1lULjO>cqL>t){{-wgdqVi5==L- zGP&9e)7x>tY7aQIRfniTt46V8dyJBMGrfd zGPFE|l(OUO2%OiV3dID2)oZ_<7+gfpiA}5OTq7+tC7nNbcFIbovYOY7O9pV{TE(}? z{W5sfe$_WW-k1_Kw7fMX{rr}sH&J=Niune^p$SQyJqI@pTD%C$i7~J0+#Pz2q8=l& zQksMnTIJbC!VYV$%iP}8I4*D{TlTAN?@D6vh5pMw&K1 zA8C4^R@g-oDBw>PaG`h2cBMTqxpUF4ip|tidIuki!1qOwRhI!wlDzDoup|zBgIaN8 zyDB-sV-$#qVaek^7}C_r%T_w78`JYJgv&F@I+n6h) z(wp@_X9}5oosKl6$HU0d-iyKlGc?Blo z80G9XKGdv1g%{An7bEYbr4HmVz%93?eOLk-d(bVctqOAz5JF5=wKBIU^6Qkgp_CEA0#K@+dY+&;4+O z0D~3%1yHlF@hT|n0}54{WJjNvR0GFxO-Q8itH4D|Qjf$OjdO95vQ~1pD+L_T6e2|+ z0tR+T!&`IGaSPG<`r@=^r=n0_`Qo&dYI5(v8v7$35=4?Y{zRt!HXHl7kJ6xgFTZbX z9XU0XvvG8y(@Wex$@`i0%vkyL#jedr*NJncF*MBy=55V5y&?<`Ly)7Z$W@yI*eo-X zP415HRC+KmJ0J8$qZ*3I*`usxtKerm+t-LlX3PUI95NAT0zfp*d7!wkc^+pA)8nY) z)+SfDo3Fr6%+x_FoS#^b%BT1K#G+IbOHs745G;<1Apa2_8%0!k_AgRF#&bdB?o>g~ z#i@4@oAX8GjB^w}Kz{s+)GXNOzQ>6cVwMFxc*IytWPrZAi|>l~ZY$sA$K%XG(c~%W zW$q$E)_p$zH94Bf|B~=W`==+7|0R)+_KRXQx0J2H`AMHj=3>xRSt9#ICCJl*>&kk|k2NH(?oS)+2TMCPOD@1pB)Vo)afOLo?;?pPy0)WUt zZ63VW6JkOBzs@)L*gGvazhUc!^bGh~s~KxJ|%4$(VVwZnUC$^!1OednI&&R?d;-IjwAB2Z;xgFD8%gN*Wn= z02F2CTk}$y2o^Hu(=g13%B?L+QdYRhZM5$8bW9;brePAs^BWi^jnQf#lR}x%*!t-x zAly7_Yr5ZDfI=tutgY@;FcfHf#al<1&U=n5^i0VBJGD+j73W9Z+Aq^m_j&wh&ETL^ zvd?Djf}{hh+dM&4hOtu5^YBb8`NYr$&9DL-87C)(cshWSc15hrUD4<;O`e@9Z2WmD zU&17OTE?^Xd(KNW+97vEIOJ+Q=?<*<@0d3Ds95joqZ)f=1L5hJ#(LXTBL(%dQ)~u8 zkR{UH+d3>$ZJjmp!;#=Caj9Ev1f%_koh zBg8d}tvR@bz}WpuQsNl%7-87S9JPDgl4v`0g0ez?VKWNLhW~$uz-VWclWDYsNqzy1 z-9iOom-aDU0NWJYKR-2uck-dl#zu_rJ{E6s@BUYAvK3}>CI7zwk?iQ+l~ir0>y~3k zwZV+w?M5bS>M;KW#NjECrp&hEknN0JAEaE%34cw$WbZ=iU6JzRrtyWZOtlcx-0q!Z z7Uv%iSI8?VH62A~C{Xt4viH)n!NBa~uKl&)d(G(c%Z~3P2zFvLiol@U7mDrKnNBt4 z&hyJU6?yXzgiF+{KfkQ=2-RoBIkK>9Z~8)JgPP|AB3GtlHOX2kjDkHdr&(e?j_g`% z4Ngt-`T1pi8w7hk&G_J4*&j>y=N3oyV(4zlFU^jp(^fspmfUMZ>(~XD2M5a*(X3RQ z`V!$2LQ2c%zouUd@9;GK<2dg$3y>`&VflzCg3%7a%?~jMT3YotCya>^kFoxsc_CKz zlK-l2&21CPdUYBG5Q-0KUju!%q%?b=!EBzuV*4}Snr|i$yRm4WnKH4gSKfh!)#>8t?^U+P@t>)kzAi2~v`FDcU zy`P&AcapBzy(70wEaDTbTLAy{C+504LnC_i{1RdWfg&LG9TqEby=S%NEoY3gX7l_vUD_xQddW+x6v)O=h7EvgF+YoxtKXkuYc3)^^=p10J zY+i}}=Imus2K?nXGco}oobiLXF2TV(od-O(ED>7i^M^k*{U6{Uu9f}G$_Gf_d}Wy# z^4n1V{IynTcJ%G$%HM`IAJdXP+Pd}Qqpg2Ce6%(A`BBsR!O)rhXOA;CK1fZ!tTQVg z$oVYku&{x*J}l_lat#RR8r@nw*T+8G2FzD z&5#y^z}Sz?EiDL%XCE-{wt)4@k4@DkB+hTYFxPEDLSKB?{B9HFu6)3Jx``3|VV5c0 z3@i@~G-Ee&K2XhW^X}%*hiS*k%Q@LqlbRWwAWECq!UO6%N(WB<2(z4(AFRn6I zA5+%7@0agVE=q7t8%0UFKDtkBPRMa{&UM?d7 z%sIh)T1M>WqkEC8NW_xpEcYT{7Q6}?`t4rRJwzm`f1eo1d?h`d;W2o$`VMlfl3<|Jn+{YXm$|&Q6O8-Uy1t5ODV^|JaJvhzd zwV*Y*8krQiIdr}Mj=^Tb%_yT+kD3>54qaE(KutS-5;1zOmFLC${bq+b^%i*G#vSIm zTcFQ$soBW=B^y4-$=^YPTMuFVAMD8QdVb#{X0LQQt;awgo@Qo;RSJ{_MJyMw&>!Z& zCau%NVj05As|vZ7+*J=`OTX}$srhASWYu2k`Qn$kdK9Rx^hZ)K&+IU>e;K;7p|UIK zL#s%j)wVNEdp)Eii6Zg@hT0<_&ufQiQI%)5(#EL2=IRt#?Lww&m=P2QHuGQBOMAY< za(0Z3!@}^znIh5dt{}1-tFf&ebHemcg@0S{x$)COXZifi@0ew`BAy0(V4l4d?k(S8 zKDrgH)wtJub8Bcx-}BnO9z-kUtZtQ{y3gcU2U>5BHsz3;jlV)N>`t4ne#K!Oe-yzJ zOZhSwWRmHzn25JFW-j@4sBf?F?^vGKXzR}~NgC0F%{gxa>BpFJMKhR z7}RP>l>MC4A{SDw7G@gz4$o;<|GoFX_TL|v&~HMQ_nHn<-$1#%7LK;zSA?!)IVJWY zCYOsc<059+Z$caWH-2DFy^W;uUR7 zi{E6r_K%Nq&oqjG6U>O)ImT}v_M=ur)sFhHD`T#^Jycb7>JPcH@X$fopHN`d8}%Q| zhTB6Ux+FVuDo#b7^|x|Fm6PXXM*SNjUu~9du}Ax=&CV^h6FLtXiXiv3nR6O*y5HPt zieI+-mi1)?Z(vdwz`d4CI1w}EWxFe-JW=XVJwfK&aR6%t>2G z)iumqywx7s(SPZGy3ov-H})@mwWi~%_MiCK{;EB+=T)>-OFh06?h*P|O1;xlcrWqM z%s>)Xnx3!OJ@N+A{YrECYxd~ji#oL)nlfCX&&d|z^Z1G$R`TTxYSCBI!z>j5rKTSq zvZHUg+su~N7@(czuT)kspQU!iw9e(1;mZnt8B_LW+u;;|WB+WQee490#X0ntT6Df}UY~d;*aZno;DsEpKA@3# z$k<Si#zN(Qa65@kl(Fl%K*Urh@g1~s zupN&D;Bz3|VlO`$n>q4}KH*t}XC<7G zdut5507we}NE+fkF%Q3CcPabjnj?oM=^+E>qtTUS=Nop{ZoAYL2)c{T+iAv^dMwUs zinpv|GgZ+xGWj0%ZBIk9nQ}8|n|)lvA|TQUygT}FGB2}_Kx$_S5Aa4ol}C#*e?6{8 z>-1wJv@yF*wKgZR<@gZTo5`9Nd!gd2gwo@HMScrr5Z?uG%*4>Du?sS+D4mtJWnRi^ zOl3>95D&o8#tcSxZfc!*M?kQUU|Ibu@ewLk!Pj%eem_28W|br5FP;%u3_VZs0^5AC z(@C6k4y*UKW|<E8Tkp zSeU^37|b5MCF74iox%ta{iL2mxTlnlsWqJ~Ei)$sDj^N;c&n=mM>9xS8>e zU6&W2)M1Mk?e;%B<$%*5Y!Gh=tyV|{-z^LE%*l|71uxQWJJ50T=OYn*xX zBYS9c2Bl?}ORawoz>*625oU(O8m?l+ZHJ}P*j{xPw6-4F5uJwyB!_q3)}JKs_BrR?+P#%Tp!d0NQIoc{^uq{S(S|0~RO_`) zBopSK?ysdUnt{AnmS@>qbNxBvAW+W^A~Psu_c+!j4%kY(=K*5%ApdaUwv2X_TZzQb z1FLcyPdA&JQ})Rf5evM6{7>C+R6&C^JFjSdHUbOV8AG^d%$k?4L&*jyiL5n*D0Nq6 zSPIwl+>AY{rk1z*DAr+(JNeLFcQ?GGV@Zm_b5cdtoc$Jn22(Fnag+N(5A%7(zS>`N zqM4Gl&kB5Lj+ozO?bH1q_b~^v_7eYRea&s3*k^Sel;3(t>j?6Y2wBs@AT6=ZeZU-f z?&DAF3w-`xjW8oVwa52f`{U6=|E#@_1-e{m4e0b<%iZZO&vD0v7rPJtc+}kYseOh2 zrsIu&Kk1F<@!+`q_MnDdP;w*?(*!3^0&itGmmSO%EHnR3iK%iU_uOnXrm1g#S z`^vMvSb5}7GyA{QN_!Ukrx_`g8wn&c+TVrc!kd`w7jDXXnD?5Q58?gPw)fK?Ff|A4 z{(--*JYp_AU=KQeATPD$tbzfm0-&f8vn1H~%1}H42YiK>-VX;^B{9UANr&Z69g5jY-?W@L#4`5zS8(Uvrj(rU{!9qae!Ze{VOQDfR@yHw(VV- zU-7<0PK#@Juj$Fttg8Kt|LxUPn|YtvzpvO2vk3Q=!~}GRJS*;D&OK=VtoXM-ctfQf|R2m3lDYZ3p8qZ*g>`u@iyiKMW0Xng*x|7?0 zJgLg~|3(Jh5uKmw|2I;q_!o{cWB+cS8d`X7jv@zxGn8sNUTK#7-M*xgB3Gonl^9AC zs$PFxZTz3xQ+#iki$Awd>^>&(S{{!B-wHnf&QDF8olE(p$R@3<) zWGv4P@KJr3%9u}knGEce?yqh^Nb?K!(8+SdW|=B%ABrF7c*(Di>|_^nd>q?M)G;P z&Kin?HWV37VIeMcKNy-rDTl%o2U#O1Y}=z$1aDSyZ^JLj5Ni`OC7@sNfM4lu;a5sX zxlP7_Ev+>RAYrVlu*Lu1R;n}PKhZEyM%eb*$HKc53Q{$z=POz86}ZKBsJ4#b1ROY8A_? z1q(!uHQVQuomf5$K+93B`9!NZ4rM-r4@#nJUeKdLOBiAO_vGn>tb8uj z{8z9u$Uv6r|3o?KT(<5O4-CHx?f5gT;ZWwe*4EN0nY5M-G4a9g&HbYtryH>>RdV(z z%SFpAyK#SWPA&38sC&}v9PLci)dUavT1>tOpCmB@3C1rA4c5oneR z#S4d7kfx1O$z|m67~NcmmE;AVF^tT6y#dQ(0ACuiTWh3~lrO$&2y2M47WPxA^riq+ zysCh`^$7@$XCojo?~KbZWCCDTy*z2mS?H`tNZ(v@ueo}RbG7emvwe)y!~gZ8=JPR5 zrd>%@eNpyv)^T%u1)*9ne z-V-?1mqm))kQ&eSE-TX?-G%ld39~5TT~Bnlc5W3y5=SbdOIY z-HA^%60_UrUY{VSn0MDuZWQl=JS%K$bW2(qT{#gSc_bGZ0N`$IcrHn%nSPruS35mA zUT+a}7$%hfD0|U#TjQM2aPC;r6f&MAaE!QHY<3(0QL(5Dipkl>K~p{$%x8?XTFGC##4 z?}nLU*E>A|{lWSf>zzTRB6%f3l{k4Q&&*!$+%zn+HC>W|iW~8RaVeuxd9umN|MS=i zG)t0C0HbFI{5FU!-(X)hW{%z9T-Y(cgLQC}MXV0qh%d}t8=T&K|5j`r%!7EwFuZrJ z%ymHC8Yx2Qh<{p5nG05#cQ-h_I*w_RWsGH2KjXX48PFi?RTB{;42~KyC(U}!LG^ih zORoRILka!&G$0teU_D%wV7wz5?@8G!)fBkV|IT2xCG;0U5@a6C%G_-K>C-d+S9u%( z|1RIbXN@lw8%CK>seehO?)_^jj2vdZD$qHn!f~ zb^kj%lKZ%%V@`SWdg4+bt)B4T?@{{$VINl5{KXa8ZncavxU&Smcs5Ye#Kt;H9kNNhbL`+S+1e81DD;TntG$JC;L9G$OF492~Az%mg4J8z^}p;kRV z?+EMC0OTXOv5pC!JXueH*lVItGCdDNodcN#jR6w1@;Z~omO=Nq+s+3gi4=<=sqEvl zBU|sg2e+r6tC`)9S#jBY?utKhZRa@3*gdJ{b8`nT>e#bzLW1?4)ccUsKG60_xXDc= zk@{33aS*Q8u^nsh0U+Xvoa|kUXdlRF7@d;f6>19`o838AEKb#IY&{eP&_W_D?bu4U zww@{Y;D#0M)G=H%Fo(Fkz>v9KAelmIr&~?#DFs&lAi#+?#pUtF+{usAk*D z`?sf~{GZIVS0nfy*maIP@&cP2o*IOH#BUt)1as)9Z~Yt4@EpVQN0;)U6s2}Fx;RN@?b9{}NSbR;S+`U#Yol>mf@M-V*T1bV3g6+C2 zu`?XL>fMu<-LZiL3&ScT2~EB_G0K zI1@r2|79T!;r}S}#Dh-f2C{N-s9Cuy$t{@54^RGD^TnaZw)t9+R=CGKUJis=%CO5_ z`7%U)&zwQjfGugCBge1CbI%|t(0VF3(g2=uOd?xPnP8GNIv95jLHkc$)_O?sB{O0q z-tL2HkRebTS;SH*l>v933$(zd(W=o;=9 zanCFv#*zYFV5<>(J2o$+C5nFa@DjMPT2{G*q=u`k&uuuuW4t#Ur;$o3u8ZW-*xr|K zUUsx8k4>-LW-k-KToeypc!0llU+tLoZFvX(`Xr;AUuvApG7`M9KxSNOUD+@<@ zhjtA~bzTJmUwjAzqUx-;48}#+7pvXpc&0vx7Z-x4N}jXS3yZvmtJldgq2s)QRj!p( zh)=@L-puWroz5fP=euK*@(xyK#|5ma8Q`f8>LVP9XHIS*=JWS=r^AtG=0tvd%sG55 z9Wqz@&Bot4=U>w@-(M12Y5JtS!=Wz zFGXxm2Hgs*FTo|(%(oF6V|&Z#o^MG8tuJzVrew>~{ZVtpgHCzFQZ~IaN7AInLh@_z zOUJ!!?P7Uzb}Pm4KNhAvlqMnOnd_-0x0i>Qd%Z;#sbbY!$6CB}rSis2OR$j(R+ftP zD9&2pK6MJ}DkhDR6K-Rn(guyrRd`N@Ro>@D(HEj9xiYJ7RAq_mhw`HEJWNP#2;KOg zO%4XS7`Cs<3@KZj4)xAGON5af{aNM+r_zB)Dvd5Y`2JY#2ea#<#UuHw01{xqXeu3V z#J-EA8ko1uO+$L=+X-NwO2uP(1+&i&`E&aD!GBKoVcF@M%)a#df!ETb@qCvi6PrdS z6Tj7}nMb10VCry?z>Qd5iY;h+eE=->6*=TL6D$Iz;`K<``1P4#q@1bfJ3AeYpOYCr z3ijr|6>spTeD#4;L26~XU!0z^ddNoUkTy9JJGU(kc8cPvh^3~1EacD_%Av+5i{}vl8;`Jp&qWFC}SKYDzTD?0L%Fl1OfrnEE zYhBP=w@TlaXRT>@4RPJ9j6kXv-(YFr2_w@q2Bn|2T>!-yfOrw#W*|0S>6Sl9+bOn8*u@+BW zdY9MhuCtk9ONt_0i`YKSjw$vvHmC7YRY?!bhX}0{zWN7Qnu3r;M}>(+>7tgq(}#Js ziG9R&cmuZo26uCF>!Fzu!f(qG4QcHg2&bgfL1nnPqCU*l#PE{++aaLC^h)C>0t(V& z5zSpm&Hw~6MZ}IaCQ$t;S%{ZsIrw0&uv8g`M=2Aw+s3>nV{S9%{A%3WX#}%?$m<3+ z!pED_ccnC|#92hPj2GkDn?8$=*1APk%-Szop`A8F7r4^4RZ>QP93GSdL^6CjLip}!}CYa83vAKEb zj{wO7KmilvDRn%dLC>$Jwb5rFkx9Z;F602V|}Pu4)4dLD6Rhb%D zZ*F?XArl@iwJoPQwiQBP`O&O@$m!9Szr`=HzhqKdWCPB$;t2Y)SoM`H-yaRM9{QXV zdXG5a!qr%*i`=VDGMyfEx;H%An=Z!?^f=h2Zj$y^QqVQ;g<**Z(#RKA7>;#N#^Z7E zt*)>B!i=8F8mf+5>h3=L;n(?SQ!O97A3Zy*V={wbKU*@ekdn(Zm#(txH6GP243l3q zf{4YukJw#Z*l0v?FuBzAp=x1`;`h4~pG2h`W}2;zoUN1&2c^Erz+JUt9EW|5V~HF< zVrJ<^$2ofj)DgkUHy;vyJb__RzbNx~J(d`HN7f4ca3@b#iH*CGeqF%g@7$ODPg}1b z=(cGVuO)Dql^GWATOV~Q8ajY#MW6KxmwT3q7P}GUIJ72Z<=B$8l$jDqmSYl>yYf>U zjw4Cyk+cy=nZ~7GCc=lxrbY+J_O%nTb+S{HfdGKyTeRi{v2+9054!`_cU*_Lk}0-E z?fx)e1>X)>@81}-f?U3m5Fwe0atvk9#TLZ!*L2&kSX@@SE#( zBK!P=-RZ-e?6Enths`fIv6G}nu*))0yD6_8AbrGV&jnB|1Mj9x?u6C`Ywt@;JM-A& zvM*pQl7}d4hjjQ;p3j~aVh6b!u~t;@vBM)mZ5z4VbW+^ELz73oq|UKf=e_ zjaf(jbBVGz&#m|>cSX3#eY>MjoQt8nzqIvGoC;S^p|<@=n#wfBZIdfphR#2}W4zEj<5 z$DvLk97C@mt;Qq=C5j^UIyWylKULbibiY;EbU@w{rI@t;)$Tn(M}#?S3Eq6fVpKuw z$NUHJ&^vv$bNK4T{bO`Y`|T|94cN`g-STiwoc$NemE~cH%2;-fzd`PNP7IYXR>%H}Ii88bg-g{P5P!f2Q)}xgD~H&p$u=Yc|$YM@g1U!<9*- zR)iC5_%;Zz8i<7eqYesC?-_vVeWwN<%;KfQ(6KnU1~Msl48cAQ#Ut;tFEX1*!$t0F z8VDyjwKSHj~o6?diz1W1Hwo@C>l-7ItV6Hd1--yvfj1S$)4Um05g?g-mUt#Iqi zk54#18!K&7*escLarUI|TZ{WOk_4_%lPjh7;M9}0^Ubs=_@yDrlrt%NBmdPIWZ%J; z$bJ5#bE^N)67$iM&dOdYqZ9dv5GgKirqk5Rl0}s!YyGJA^M9F@PdUAYNabr-Cp2l< zCO4#Fddq5NKY1dpciX=F&v4ru1^SdTq+$wt#Sj>t$@ygV!bSt9}kaPzY02w5rsP!}ed@zY~Wm5uhn~`?IpPPRYNc`UJe%(9~%s zfNP#CjWk(18mC+9-3!WKMTC#6n@E=)UXL0XRn15xIq$Y-rPcv`0l(^z*f>aU)zgJt zce-cMyQwx(l7_Cfa=t*V{a?lZRdi4Ta3;VgX-)|~!-4FUmsiv-Me)k0pIa|!KgF2; zc6x?>>W`Fd1kY{zZ>Of)OGDoC__2rh2HUEhn&(H5TsBL7rs4(XxMLp=S_i+fzhbsA zHT|%sJK36zT=^I3LJKYh;rXc|bHxje(|>D%)Kk=`4X-KoI|d^;Ij2-d;}Bbw>RV*J z`)$H(c)_XkU22|t!5Q4}9tM)Q=Sd*<%-DKd_!QOPN^wZG!yOPc%t2L!aHbeoW8jY^ z(*Fpz9{Mv(>@N;wgD9bWTT*EIso5_ug?|o&lB_Sv2#bX>_%L!7115(RTUudTp@!^x za&BM~i#-E3FWbM5dvPCje_25+Q5Im{@D9&D0Xu(Vw?heYrv%tYZ~P ztLfj^FPbvytFq1I1H8{(l47orv$dnFso4|U>%dje>%@RIO2QlXH(LWcA^Rj2rh2Hs z2Y~b+T1BN7a7@jt7g;P`P|i9Y&h#H~FvgIk%PB6{Cq)y12~ng2ZM1*>JMYs=v&up# zderp1s3j37Y)Lq4sPfpBZ5WA*JUYGM2Nt2D_@K}N;=o@pW?HSnAC<1t=}Gi47)gZE z!vS8afG-Z+mG)yz-e3m*5oP(4YpvVm{b11 zYR%MetNGaJrYx)HCFm{Ym#Of@7cskKigb zL~i*9E1Gfr>cDD%f>oUT*k#n(wDTH{?#ONGfMcQnvzec%t@v08`O ztsZIR^&H;k!9cG9K~H)GIc7J1r(H-+w&wd>EVxK{!1t#6vrbL_ttk5TwS?Zh|7OS@ zd>eR-zi-_((B6ZA?8~%bSyz8=e)X)=tKk|(n;xY*!Ukc?E3Fi2huYUT&;-wX;F;Xa zQ34nkQ={wMZ-(sl>O1&->)yM-hFlY)Bbsxqb>%%sK}FInn<9;AAKun5&;6_k`D2ay z6=C;{e~;ve?1>lfDl~W%{N;OwJDSK|Nn_G{640I88%Jsbu_pp3PAP9{U}K=x!1>~u-v(_Ln+^(KH)21 zbR3@U($1(ep&)yfFpBcx&&f*Bo z4(0D(6-N#M&_uqKZVB;yoCfU{<_BPFatn$rxy%7ngEAEb91=KJ)YnOCGcpp zn%vp=J>_L60Ai0m;?q*T==jXso^w;PVb2(BcT*ulh{ZCM@-Jh8>yTCnvmk*EbqsA` zr16u|1xGyBiY7ckfFPG-hAoSGSth?Y=?ofrcj|}vN3i!UO#c&cCrDVwNi=fBk}d_Yoix=3p6Stn{vwui!yzZdt7DNk~82J zXqqtXZf1BixQgtU%lDevcy?rTPcOztSxYWWhoiwvha~3`;SOqzmS;4-`EMGWY;M@< z^yoB{Sl<8yp;c~Km9-4*OJmIgTb-Iv7m5j)&x5F9a8QsiA8mCyH58=gV#Py}^h>tI zKf=q>a`IM2a?T2A&1qb zHXAEW9YiR|r6aPG4_74FPkzf+oxFxCcqsrp9^u9QAqoYNhjntgHoEZDQL%-u&J>{m zs49>wEu)fnn5hSVPT>2>p=;dZ?7gJv1<@!MMdJA|zWf72Bw=B&!%cZ|gjPqE^ZwFo zG}4rJ8uwAHd@5BY6yiV;6{qr0hTb%ssiF+o2U>a209=3`jnd;sc&A!HTM(0r zDyDf2Yp(&Aj-aD$RvU>am5{g;3r5zSfL|Ar`*<~-y8!R&yoj%-+3=cE)v+s`Xp9T< ztKEEaS!<}WpY}E%iT#ZTC9fORORggq<8#rlif{ z^PK9Qx3)FveMzIT%|tbtohA9Q$;{g3obQX8o!gwQ$66K>%odbLqqd{r8BC%_Aer*G zJRwuOBd&*-vNxU1WiMf*>8NdV&mxJ3x6Mg!Is^LGQLkKFnkB^%jOAcQLi`V4MUKlt z-<0crLfy7Zg5KWI$ zZ;bz@>@DZgGPx8)GJzOg!>?mR!d(AEe(1bPuBE zl-m1ZG`NQ3LVg2aC5NR%R#=ka6_%>O(o>XIC-H7pH8WQEtj*^!CJUIoOJ}wlfJ1mM zz86i6FKP9tRZ|@1%MI=i=&--5BEVNeLArE$+i(bo(KI9%qU<#d_`0L5FUTeG{|N#* z@arO%Z z4T`Q|N+6!-7e@otC(^nXHJt&eYEl+xL?|X9JP1+Gguu7RIs8*|PI9h}>IYrTYMj;N zzD6CD(}LE@GAH62V+NNwC-~=1Ggp>56a5df;i1eK$>T4}oUY^s=@@ce@o)axyc=>h z_!gL(9p^ZIhqY#nL&)i6Uzo2P=Mw)%Ys`7&PEGeQZ5x5#VrAevb`BQM@LQ~R%!u@K zqhFgf<<5|?huLD3&vSV}ets2JRWy;^v1z`Cw@;vk&x>;hejVojA^yu+FQa3^QN%WG z(NI%b;q>)CxaPSL6;8fCl+SvgDrjVoRPpll=Dg0%S-m#lZCgwwlFT1ttJI2G!b~?Q zqv(V)n#{AEol{5rV>Ox}42d$=u%h^}EX0eA^PNEDL=@3NgaNz!ve!{xAL^)N>i_%I zrhlbV#c_>R@v{*EiUa?h;Ejx#t4>D27z`XRS7GcX4|8UN>J-jc>6jsv-pP9dk;RbDS@2e$J2o+|_1D zl~d&(zuIi9a=KT2jJ@Ft1nt zFZgBaq3_L?)y{xWS9+n>-p-aV%M&%GrkhhWb^|rBf8t;rpR~W16+Q*1*YezRLvrsy zj|3`07@Ps7I?;$CScKTK@p;dJsBb~Y<}I3pW6 z^6sC>_3qOH|C;`G^f4GVQ`3QnKlSve?OJZ!Hip#xiZPPiy$>*lu|ubQrN02G8kbz@ zdix&f`T+*Rms*@rcgLmXyKgbb{qAl(G?Fg81sZnq-iqqL2m+-njzl)C=KQcz;U6}_ zTpcFDd$q}JYEpwTvg=rnyog4%{v^^}YRu-ab6!;o<+T4>iwQv*R;8+NBOUJP^sP$p zek$)TqEQ(>?eEtZb4gF9<`kX3B3*S2^}d6bNBG-4WC!!dbrAE!^bj0{jS#jp!2~+# zu?f0sG|zu9ul95n^xV$oeGR$#I*?{0*FPvBR)}Zf+HU5CUN}`kW@#_yG=KlKW=}7t z|DXtfsf0q<_2qfo3y?klBKOsQdul3`P0;CDb8T;@w?DqfEa~l3RaH>*|6=v)hntss zJ2ht>2OZS45bN7ah##iDsxN?KqX2h)2ciK8J5YbRFn|dG425_4vGoOs1&Nd~ZFAoN z=A=F}Tlk~7ypPkVEJO5eKGMlSee3gOW?mnnTCbzE(~)rR_xy8O>!#G^EB~=|O^E01 zd|xY4Vc(P>kvw>E){#R)d0)vMP| zD91auC+b_AJl^E>b$XQkichr(P2D`O+6?LI)O7p>&%#11Ox?-c(AODoQU|q+rLx#U zLO}vm#K~LXSmq4n2<99P>4;~eeX&6s|UqvLm{^rPs%ip<7-=*V6xP5$xdt>4{iYL0h0Rb7s9 z7f*?|Mu8Qre~ACq+-ol9efJeq-OhIsm*PY5qslbhYnC1FoLY6;9Jc3Dhn}@B3W}$H zeJ^J_I^F#@-D`^bL-*HEmv~&B)M31D|K`ej&8hvJUfnL%`v__Mc;Eg`Fiqn5WOKy; zr?Xkn-x)Rb6z&V#%IUo{hT1-n=aHmlsyL~_i!;*QM;neDQvOY~D-_y{_Jy_y4RD53 zmBQrh^{5WjrFyF9`vBGfXEvG*1DsBILFyfrYk$W8r`mUg`TGF2*mPQFN(a)tu0u`D zK<9yOPoss)alni4o5 z>Bd-QGs`I=480eAH_bBNsLV#7R=qpc{QpFC)17AIU}s|J!Rj8~Hxh{|J3nhS3}zq1 zBg4g1vCOl8I>u}t?2Pt*)X$U-VW_TNZfb_0^Dka*uH^T;hyT^OQNHj70!<%e)>??Y z&>KX?KGU>z2dXOHwh2j6gKufz25-xTx5;ZBcY-%-Y+ zkq%_cr^B5a8{QfUUZ~Zxfsv=zFh+gs)owu;s)^m@K{n8)WgHJJ!XZ`5UpBA}nt}Ej zugnY7lLt7wPpdcI;x$oOmD7Dc%3U)|g7+@>+3?=)jLjbHEJrrjM*PK-Bo3hMWE;I^8=x2M~HU@F(wP3^$ka&iAOf<3z%iZBYqE7t+xAmm{cS8!VsX|dhIZ*;Hk{qFY^GDl&Ryqc8VY6g#V zdJo!5X{*_|!FnnCi?gF~b`E6~ydSyW<GY_nqj6vJ#hG%7 z5XM{V9T;->FJJd->5SEGy&%N;=&p#Vmu)WlCIXcp*8NQPG zw4bjYRy5RChGezX3LSmkVZ0=IUV%=kA5Q@>n!v6 zD5qEd#|Y&6cOP4t+_T&I_z=%8r7rC(RVVh;n31PAW5*2P*}^tkaUK7kq?~q0Q^rRw zf#N4HO9OnP&Zh0wL$^>yYGi{iM^J~&A5U>QUwRv#b>mfg(RV2t=e`ad8RAz)MK6AL zOb=SGT|l_tqJXu7%i^lLi+Dov1k2hiOflWQAS9%X`DUqH@JaQ&LA ziRX*CF5>xxTvNC%;F`=eiR(p7k%Kt@4}Qb-wMic+>rn-J96W<>9^@jx;ouWok8@QA z%=mH6h_dzkU&pnUYYo>z(=^WM-MyK=_i!!YQnR&G-<97Z{JK8#_Bf~4DUIAWaNWsu z2iJo%bvwVeas7sC23LQ|SM$6JzeBn2#AR`Rx#@Pgb8WX`s4|tvY7t(Y@Nr<#v3z?`e72iM8}b0&NgW0C=G44$mL$CR z>@{BUmv-0pV|1cCvQ$x7nUcn(%F>jPouXq@#Aa5@a?d8TfN>yY#Ija%4*nyB)}eNx z$&gmn)guDp3o>=_xtaL~%tyOp}+QWa9_KuA7i3nC|z>=tau zX+4*Ur3IiSCZ42J0t+Q?1Q^OiHHN3?2iB7npfQoHPA&D|Jltz%T7&-0vcIII5;bF3{drBw$9YEn zFmW~a-~y?01`SuIG_A;^(l3|fD(pvv>uzoaaTjKT2pL~^C+c`&whl(+Ot$Puv#HMM zT6Q<>Yrxf2eO_<=TIY1GQjNW6QqAw8Mwwlj+ zKOkD$F?Z4bfr?4yiZh+wV_pW3ujrvtrum1kLDE|8YFl0qNIa2=MiZt!Vh5-&M7rdI z!N^iq`3|(na=Y1nrc>F_EaiQ1Hr(8l*FpNV@`H7J$PWWQ9NE`NXU; zQ*~&$HWk?PW;WcyIM`e*xj363_eFF_dROS|ats|uFLk4?61*H8V6-a!Z;tFs`%9ec zLDt|Jd?yFIZQ;_WCwMe;Q5I>nR|KZU1I<(zfe7RLkILH$vB&tI#COgA9ss|H@|(jP zd_$Ot0@-|?p>S!oH;omtxwV|dLaj_!16V$F1gOi4`n4vG%H~l~fC}p=9FB-nSheDR zT{F8DA`4UAE?L&b1a*?xO#zixqv?X-X4Ca-r&}~9nA%JVP&JLhfe4Ws@O(0m^Vaq% z&6yoOw$cv=TG>yHR5pqpoA_k5z$uBw{gx2Ml#Qk|ktWtSNX4qeRN|zh5;qaP@ z+)k7^Hj!3@y3O=*DtZjGz0sMxz+d@#_Yx8@(baXThZ&oKPdij3O+;)$GEi6#ci;|wp_Mg$_ z@#{&Yg%GjdUY?oBJg`0Q{cUFFInLl9hW2+R|6He+$I_?JO+n(1N;>T{jm6{8C*JXilyu#Gf3 z&vl%Rs%2eUExXK@=Q=&k+k$;&TT9({s1z~i!O`x0@nEZOa_{03)hMwkOn0M&f6G1I zx68eTCUg0DPN#1AZU*0k8BT2uQv9R<&%a`RB;S;MM^NoUG*?ZtkE&U^FRqz$B-cMF z-Ss>dPWA2z2FL>?3{^2;LRBIEx3~3V8D-0pOK}LZTN~;M*0WEaWd-TC9s)fsaWW-a z9dF9BniJ`+mQ_)l-^gS=)s#8Ldj3E>$>EL^HnrzFVc%cO#pgR0`u=4$o$qwHXpOgE z`}tyQV`!$DUbHI`tDfJ=2Ga1n?wU1-c}WK$ow|1{9V3N6EicbwQh| zHlt%sH(zgaS&Up9eW*j_-lJR*c_Ayo;;lcno>k9+yrf;&T2tZk&F);^hC10F?dTC| zGQcWq?eZSqc-w)Ji4j?$qNI^PcSux+R;f`w zB0*nb(Vs28D*t%t7VzovY;FXdj) zeI|!d+p{8`{faV$(3q9V5ks-LY@*Y-s2rrJ_y^{WiB8wPPkE)5d0 z7))aO*H>v6 zm0`>6Ox(kIl^;V$WbiJF4{y*3&GN*anE9@+S;ulMWDC?>_jf`T$S9y4&vJ*#H4#@j zn`!buC9w}FBLm|KehWd^bo;&rl-WJ0dnf0Hu$M3aeQl(`R8~6lZVB&HX;0qCbe_|O zb#*F;2$V7mTFw8){2y6G5!U}7UvC~5Rdx6O-&wK{LYU0tvV?5{$SzD+6fw#KQBkQ5 zf*2JwR{bm3&|C zI}^+EJpKLtxVe*i&ppfMeD?D>pCh5^qCj}7?Xi-fz{n-#;c%-xpSs^#?6W@kIf>qW zVZ3LB#(K^&)n|o9dmmk8E;uVRc;Ih=H9PIx-07YqW57!F#(;Ypn{)`5Ig3TmwpHfq zvqCpjHc-|d&gn3k)D?86nC|{`m02?vFYv{y%zbl1)4XS{GM~-Gl|Pg6g^?Ua%e^jP zA&#wYPF!UMpUvXw{j4yY9U6Q5Xv(UL$W-rFQMNm69l>)pUb}3l>z(F$5YG+I<@q{( zm3iju&@ZRF1o#97vcZ(-ye5$!C($?}Pa*Db#J%ofFhlddl?$P2i1}q*Xsq|)Ip)4P z`t+MQCR2yY^!Kw(uX94Tadw<}^c}Pv=bj|FGox*e zr=ch_BbnenoDlo1wl}fdJBM#P?aNYD;-Y}o1Bw$r36!?4N|i)bS$)E-Yy%)l1IYT@ zh_2M;HdbE?JP}E?4NhaHdVO~GE%XPsaT5wMM7L7 z=(UqrqMX73tHmui14Am8Q*WtLN?yG{WP`J1g?Z`xP_G^v1tmr(K~!jJUk-)_i|H0e zmP}IaMqW)4z|@aAa!mXAbo$Naqzgl%OzeVC>5(OL$YTXuU96&Hkt54@OHMH**)t8)b1RH(a^$W72Zx^)2o26I=K4=)Iv=wyT17WOZe^-eaG>3 z1Ng2BBL_k$T@*UL*P7)p7{;dlkv{{lq_Q6lGap{WSbnkGjQw%wTkquMX4J(n$>Gb*l^4T+ z2l9=Ck|;o;-i-#;_&Qph-pkDc7c>6y<>r}-SyNp)z*No;J>Z#T{yHBXerc=udOpjB zi)?e$C7}zZ^`t6^4=GEMOG5^L4uDIMCtV!kPHUw(WYhMJ?>K*w;$2D?^D1o`5@lk z)%I1id+{=J)1{$lXP&9H|3kk-r>D97s>_~V0{sd1(Ov|Laoo;Q}N=-y+lNGJ;DUTKaFu7Et5l{+;^<(IZKH7ve?c z$CnWZ_73F)Elp-2em`<$PdD}Nd~bzoSml!c1h;aZXc+g%xKmpj#5$TU*S!D?(GI?JdX&~0I@=O{3BUWk zL3~c}JR6+TT1?rM3~fP+x%A4=rQVJf^U{@}GdUch>ME9$5B}X8e-%s0BdJDY{VY|f z8cEhff%*AWELUCzbgp7Zi(1T~t5}{t(5yvy2-n=*$iGtSDXE2Fcqrb@te%T&`EYrz7GH%w)}ndU>~tsRLjSh#%n{py}xQQo391yKKGf& zt__`T_x=x^K~eg7X!xXmGM-oSLqBb3Zs-@}hwjV&{{qb357gCy#{HeS?&qOFBhPDM z7iS(657ROIR!8ChTB}-Jp!nEq|2dmJKY-5&Jp-!N^b~RuE;YVLFYe(JWpwG; zWDfm2bZJ=+s$7+S_T>_D^)JvVdpDW;et|eBY%-ty0(5?Si8*O8p?MP`Z#mkepkU#4 zvvzUl`m%GxT&Q|Ds8vv9DzAfrYx?>jO;dP;h zyeFN;p**1bM~&v0Uxo$_8_}`h5vv_fMMvu+ORiw0ABnGUJ5OXaTUnZ&KnG`ij5j6M zhmIO}*AjWWI6D!hA{-J6mY69ClaUyTzaI5}$P)9*>q9^F7B4X$UQavUH=5uLaE7xP z>J6cz3f^q&+&A9*_6C%I7x^h=N76`YqOe|6qb7DVnlEoasy)(Z#@`s4R(W^6tX~k0 z=JFgU3G!`?X3dQ-piPbDH#dgH7p|h*6NAnBH--id{0qO;%>vpGFPua7?*sCBw%Thd zZ-Pj|nm8IRL6Jaffx@fnbg-(wzY41H-|!8;MIWVFQ@S(|zHiP^p+G`jFy z9?kQbFPDUlDyt{5xR`xcvLGY7%u!9DDZT#g5o>|nH4w$0Z+W-JENx=@Y~D>N8;_ARQ=1co zD`Gs0wWQt}yo1gtFQmra5%%NlTcdE^tkUnBV>F?QSZQ zlH|>)iU#)jwr_R*_`u5C!d1sgwB($xs1&uPJCj=)duz|+D)U%#Xka(}KMt4_m~=C& zCUUCzwi#vf^*-Pbpb!|x03ONnrS(fw55NormO?-w#myIPOmSce-s&Z6C&n0O_@)1I z$nJOeDj@7PCtfmNP!Fa9Y2CoCsFAWVT zKVxr>NFo+~L2H%M+dQ%~G+|^1pcDud@>Jlr_SNQdg8ErO(Vib2tER5inDS+zi-}jf zc3J4;9t&Bpt#QwKu1kMl{<2<%BYUBh!LZse)6`}CN#i0?Nh5PC6uEgAIec>s#k<&d;VlvR)k)z zdUg=tWO%2!)Y0mCt#$bKUuWofEVJKSyD~H(emPKaF(j75kODBI1spyR;Up|5=)#Zy z8!VYse@CO!9m1Fc^VIw9JkJrv-$WQLmMG=J;dG(YwccYn9hppeqLC3vAkK`IkjyK! z$`q_3)ZJr_S%uNxFVDC%VWQ)SbWiMKAP!m4uA1ymH$=mlIA0PPWk;2Zu>YYe{~KY| zJV!3E(-rb0F;oR-99U#HIfI!S?6J)6R)xOtTwv~9jUQsF*}0nNkOtGOHS~MW3Fh(E z(Dj}H=9o31sl8srYxQEF(uHa%UM-}m^K6M(vj*+0%%s=gLYZpHZ-%43VUD<&DZbNO zadT*NulWN7eav~r2Lh)pRt%3@WgfUWbW@-I0y*V@)vTS)Z+Tp`Il)YC3(cwe5e_{m zf757r8W1^!|Hoj^kHP2amcg z%@L`Fv$OSP;d*$$RVSG>>j@3A?f=WKK1Ye~Vtu0b0zfzGuquu|rZ0wHrbcj@v;@k|&wWj-*f#xPJpyhbJ=2=>)E?uuAA5 zS(qnzO~&FdAT0mAIKo`KdoL+FI@7k)@?m;gXwi8$QR>Y(tJ_(yl{(?p*8 z+M#^}rOSg^j`Xh7vqwgoVH*+r9cI=>D5Rgcb|c!taC65-mazf2{BzzUAyIg&dRh;E z^zg19Wg>|!+RTcZV8VV`{E z@=XWwzrW;nF(!qWn%q63*;28Htrps)bO%e`k7^D5&)$sETgy*(sia>(K0Z1Z)hZ|{ z>+zTR=}-}a@&{gbB4?oWCD`{S6Ua;89+3l;k#>p7^Rk6dZgGMJI}A4GCTB9!eEl!c zlxbZ5FXp$O47HK^4S<^i>v*r}v!WZ_B}Hvk(RnG8JD}r$B+snuM9@K8%sq92j&qpg zZhxHKc-rtzM#a`*S*@=>?z48cSG}6>t7Y~+l|C0}L%0L}ZI7eBE zh#c1WAZ!iZEw5XtwIZc3hW7GT;^_+XK=%OYKocBtwsP!LYL3LQ=3JfIzZa=*ag7f3 zS|hv$FU%M!66oC>6ZJ_SnQ{suxJYjk#55H^O^NcMMAu&=WY&tWJTuxzCdV=vY}sSr z{<9_{sW*f4n%Z+Pk@?k#aX_{_zbHA5$+CBB;9%VgHonurV zos+Glx}ube3)CuD*g-*-$5e2z3eu=t7%EtEScS!^kQGps>yxjr28gNLf}3A>bLHNgmAS(uHCJt_J|z2!(iC%{QN||o4<)9z)*vbQ{Q%LyE!#6!r6C%68>~K zm?G4*FFqZ)L7|CxHaZ@1>C)G4fC+VBc{?0WbEmnV!R3-$8~?-Q{#>3z)|$2!C(8fZ z_&>_;8STdD!8cpmcDfCsHWHdaLeapg%nYKc?`~^#;y!wQ4?n>2^p=jD4)G37k}I6r z64heeOA0$&JO989f2|86AX>mzb3}qA*3%T6oJl<)Z zOY5}=)vDwsnR&dsB|?MzKb_wJ?w{TSa>n^br=^k_rNwGPJ?9`~DXinMr!@E1!dR4! z;7YHx8SrJbzTD~8>;r~Lu zw>&%89{(b`^*S`SyHW?McBIw#&&6JmiYlYV-{SdO9(LfvrnPrZSbWg4qfwoT(zq&B zhxSmh?&_50S&eIOdhh92;WDuIb7kT#f7T22ZYI5dix)y3LB*X%Kt)bgcl54zoQhRp z*EGCHd3~!E9*#QJsk60 z#~uTJ3aX0>G=bcF2suVlxP&>=hWa)-RKP;g-T4s-nG`)YiZb$tS(Fo{XsR?asbNaZ z>|q_QD^TU%jTjcO3*f{%RRIQ0H80iBj zBqd@(l8#pe@=OdWnjBm0JX!swBNa>j3b_(kZ zDwB!$VkSmcIRzGMD8P4N9E9(}zY?n`lgqwdLLHLwW0JW|y6&J-$?Rf)e+&SZ5#VZl zsR8V&V-^MoHv_oc#gW$`xls0dj5c+t8#QRUTo^KxF%dS4Y9AYlO;IB0`-*bHr3&(L zD?XqC#b#nXx<)-^V+;X!PEL^agZBK9{Q4L5#3!QLmHsRjyx=Oa*76UEBexd#BgF+A zg)OOASr|j|B@lG=>||v)#qE%A5?0MK!EIt24Ml-t15&jkm*=i93@6oUDxFaPdFk5K zDJ{IQ-R3dLCqD?mY2IW;h-BEB>Shu{32}$RBxPmYhga+x?)Pw?jvgwtK=U%$ zit~rb)GT|$jTz1ObdEmI0;neYR-&W|D6D09+09r*dmD!OtmRyHPw-hIxa&#{Ar&>( zbe?r^*A?mKv((V!_Vq4Cen+PtO}(1l63ykB5HyP8sWsV0Q%|KQr|>iZGEW4V-@eni zo8C#3zm_)6J^bE6I%*vSt4?j#!e1hm`2`z^MaI$zdJo}%4x@trglFF zv|44+J4L<-5`O;I0=V=B3%&8HPxFclawi<8K%cOZ5Fmiq7vgdgYYPIXskgu+4OxvV z8KOohYpX7>#ObEdQlUos#m{q^cWIakRUc(@_2sz}^?CF4i4VAg)1aA-cut}>F59~z0qDy?>cp5)YN&nY(2Atb0=VFtp!NZBqO;s?d1 zBlliN{50=@cut4t(r)yzjLXM)*;Szw6w#{Q{o$}mUB!gw!Wq45=bg%l_v-&Ho#Z~A zOP|#AF5EsUtaHte71LKf^JP z^G-Tvx~Zxu^-ma%a7OZFdI#r|aTj-;-odU+IAjg~*NQDlaQI=BZeSUA86N_nm{JYk zmxUyJkd~ziXW)|;XWNSHP-BiOA}!O808AGEW?pH2T*Q)2ukP+drL=vpwbjWBx3h#krXSRCD2ARpiKXwD159J-7`q~!@W z{~&n8qlJ8*Qbz&5y9AGg;PEL&Z*rbVxY8u@iaZej>B;n#R4W@7l357~0Yp4poh_ph ztKD5Mc4|`a`Dm-tC1502CIa|D08W@Hq4FA8T7?{fMGe@hIwV3RKxz{47I-TfDqAxq zQ<)kQN=vG!L20b&y@ZF1(QZ^M;7h@hkO(mek#-~z4X8mOpM;A9iw*_p5+tb}SjD^- z^sF$fHB94_@x=K+JXIlanz_4KC6T201s``wn9Bj3eowY?Ib;^_f7fh^ZVwkQLeURD zX1c&?SHRGDO@a8erbdHV#rNv0AQG2}ERgt_zi{d{$RTGas#6jG((c6g)%z}nf7vH_ z{w#*i^Z!47FIM@V_`TbX=3k8eC-g`S{J`*GvCgVhNs0~?O(h!hp%pvBvQaGcA1X?xPg*!J;pX%wt4cEX; zkOwY~wR^awTf@l3gSBbNA0`YIUvM$FP|RzvaHD>jlQeA#I*<2Z1UeI^2ylsw%m)GwDLEQgy6&kV zsR-U`k<=})lttF8j9BIv=G22JWm!4J;1u}Vce(Wt*B{VjL&_&0X}5n-=e~Zt7kd&^ z@187$K#-GCQ=klf zEZqld=roa)1#;i)qA}gY#PqGQS4r!6p664PIUMM~+VAn@oC;*=+l23O=BYL~;#XsCwzN z>br;M61~@OpGm!{(~6!fXMnX^*s4Op?x{dTWN3+D)aP|DdN0uBNKv#cj;Atct08MIqmqP?ny{-zjoThI=VK?iADQxF#aPoyrD6*>v%!U!q9s#kJc7%-YLpVD4|-XV*h?HRJq7Z|sn z-ns8ahAP8F28@`Vra&y9l8;2L4l-Uw!&8(~dJ)mSZs+N4kvo3$u;oRU{o)?(y zJwyGDRTFp7#2=xf{|%(Bu?k3C*xLmt#%ul_2=zVY^J_Zy{fX5j5pyF0*njeoAB%<} zEbv(kpg|i0s&8{*3G(MN6BRLSLOUxv&HVPI(8)(mwdpRy!Dg3D2Mxng>Ck%b`(`f4rFswG{fw^8ZbD@JI`K%O3xz>mZlE z(m~;-;v`LbQ*dVYc@LvEQ0L;$4w<6n;1Ry-o;+m6H3$0+Tl(aoecD++9fN<-;3mZ5 zMrS_H{FIJ!xA;H(q`9&=I4XWCo`o3y=UHcoAGcS`TI#G$Q!bJu?M&`)_}MAyL>@@! z^a*dU`-Ge9KKcLq^M8N-S8qR~Kf0L-ssTZ6v=O#;Txc^kIM>pS_U#Q0gQe5^kq3Mvo2mVAUJ zLjBS7JXVCp(})_|Pwv>l1QF-8um&o^r%|GFqQZe()a#GvXmRY{37Ljv51HRD4PMf_ zR34iKm^FTl<tedM?fENHIanf=7<}E~DXTW5XP!UakBQFCPYQYEh_Uv8wwKlX7%V zvvgVT_;{M~0lKdDkzr4{krSZ^Ch2lZ@N>X?$d$WTwWf#B6vi~7q9*jQzkr@fP27KoCD}u*V|Dmvxj6oZmH{UOF}Aou-J#VyT94XSH$Dk zTZ2;v_T)9kPVM#McbXr*-AO=*iUv^e;t}TRtq}b8!#nrs*vHoICHzp-xP(`8OFQ=w zcDwiSbH3Ym14d_`GLBvA;jI( z!=!%y%OSJ=m*pc*_yw59B)GCj2=FE@JKY7xkCZxrclv1SUviS6tD>TOnNcquGM&FH zKcf3*(4=BWO1t~axa-TW>pQdDZ;jw`v*%EY6>D>*gATQ(Wo2-P_oF&<-^$=%-?4u^ zWL{nwto5F9$OKmfPxZvi`Ky8xydw{pb*qAdLu0@=9j2}Z-B>Z$C^Hsr9 z2&y_}b#QW|A=x;Sk-G5>Acc6x*)tH4)j4qlXWKm^|69U#s<~rza8UIUev13f;;v8J zac!YVDE1PnsUwZ-n$d|j`pt_bxIy{CG*x_LM4UZEIi2rz57V;-ho`Q*^PhQk^eONDqrKMYa% z=))?%GGF=QsvJ%v4mLGR18}hwsx#kt)unphrrz~t`Mahr&ZboD7Slt1Y3LVzByReWA{NZ4isL1v($8J3l6C*ro}#}b$T?Tv4#DfkZ=NBE{S2m zD75^6LAkdi45NeBXj8d|aEWUv7YGyTXfA6DR*kHa-;DUO+1eM0PeqCeOo*T!Jv$L7 ziRk|DF}gup@JP?4CfydC>N&?$tqqPl|G*z|IJu5bE2L2|Vx?J-exlDYa(BD)L%+b) zy&rEtPoY1; z5036}HIK9%yFaU{#U{Nz80sw}MkZ)sK-N=hrdPzDJ@&mrru!|yU&s6BXQu)qni*l# z6vBY{cy~_i&_`drcWB=U^w8=6#QZP(E~VV3JU@=-D*qnk)u!Hy0@bJ>q5oB?Hht4yIl(Oi$K&1{_wXA!JeKA zFQy4qhipr`!^=0Js`Y#U)o zrX%f$6I^4tjjnp}%^q2=|GF zek)brwY_Tc6$sixVE9daJ3kj)Q)|XtT!z2l$3FJ4Ks< zm-IZDypLU_N_cqvreI&+Ki>8lvnhC-_l*+s#-`w~!4Lc?H&x$yVAcm zILSX9GRtlaR>j4G`$XmZzr{)LQDMZSD-x^_Gqs{)wXW&dj+Ljo{(ptv>W#ixmhY{s zKW*sMDR!c7&eeThF{XZ^=-9zo5};8F7Sk=SBe4!#$wGt~zBxEx`Yh(s57&;>FSp+X zorG>{G<;ZR1unTaLCZ|3*VTLXpZxeo-w%QPQsxNZ02Pz)0yA@Sup)pKv#%5#!@qy) z2Nf?K>U5u0KXlmBI#ToGrZblD$Iy!afb4)$c;EyEqXCXJ2Q~-Kh+n61YNp+>u6K^i zk99H%3^tgnQTSIK`KkH)k1~DExSfMs6B#QB8%+SG=69;q!;_uTS~LagFWx1+nqlh-;{ZA%gk(H`(IeE6Mc)*W+B|?&sRiRn7+nsGP?&pKDGJYwzV;KjTVrou+btb1P8V!gV{> z!ZI4+dWt>}(#h^e`sN?+mr zG1oabZg|%5@Lde4c4~2>{=FMlth$ z4nH&nW6C!>^IEKZ4+mPEad4FqxPc7mn+f3PqC_J2E3GyZ!RYc#6awkikW44Ivt4?x zB9dVjgu`xhri1*#^3o`2Q8}@32}IEJ;4<7kl;aGcT|uj41g^~y_2%@iNS`#Ovy~BMs2Cx)uYJq0>Ow|mC(Oh4nC9ZjBb;iOVIn6)F$Wv zDOyRGei&ypTqG9bWHrL{Wl7E@w~)B(l5aUjrA;d3IcCpS73FaqD-$MMe`s{2Ge69! z-h3#(l?4kaB$)Yz2$jH6bb>=YK&fYtYG}@2D#1Jw@4q%o9=E^4gjYTO$^M&>PJvT0 z0%WFua2`5{WRqQx)&g{b>(3*}P1FJPA467~G1l@-tYf*OQE5ctOQo@7dLW~cFJ>kU zE}|hVC@;c`ET{+sOuuFbb20#;k7y&dl6F>l~Fw>`*sDq5yM(6syol4 z*6PgA!0OD1@aoJb^TmQ@BjXdqjK*?WcHig@ceKSFc;eb-W+c%RwEhQF%VIjE=}-r@ zYf3fc9c+YRs+($8r?!P(ODq50hi2A+ia}SLiF-!XP(4-5%!p^JA20NyPqq3zCridp z9c$%0%p??oA;`ih!bkxa_L;i3nfyr}{*PUh5)Yr4S59ByyRNQu1HeBw=>rv`?VISO zz*R>i%BzD@do+)~G*w?$^baQh68w60A5>{vZaRCkwvSc$x5yi)-PdI6%=uqejGnUi zAlN4l8}(Z$wk0zs{ju^2BKWu(UUT{;o_1nk9QF;%vUS#0r(eU<=wfU^|H?f1b;bC& zjJ47{CAeUzUY6Pxd6ku}kih7zp@TX5V|I4uK&w)qYzNVV@sA9|5Dv6C+d#s3%xyce zPAgs8I3I8hJN#noC((AdIouCEiC>d;W&$^yEZMw(o#M=lZ7uLeH`&GY8}Za^D3FAe zbe$1xwOM>Bm|hQ}coLRX)npZ0>k81Lyq>m1rkDBcKP!gEXVHJ<2J?)9(x_ikKb<~$ z${SM}Pve8jQ%&W|Q=-%eyTLf1Wv^s!*Ia0ReGtpTZCcOQ9))w#b9-BxT^&Av?48Cp z_!AF-i;6`P)rwm8lg^qspZ0&qc9J&R(%41caFB70MdfFu-(gdySb^{~n#h>)* zybsNl-@xPU$hR~dEYG#l0!F-+_8jx?#Fsw2RYUBY=cG9BhSMA-JcBKzZ!)+56RG;7 zh^(Qm(gt`d2rP_>H4tCV>;!oBZMobjb=eu##*h0Cuy)UnilFCsv;Q=nZ!01J2I)G& z&`IR#`-iFhwqmrmY=OD*+ltB)J1p^!xmj8%pfylpMX)2f)rPZ&ILh3%qVxH`)jo?J zbTGHdG30OC_{c0yG2sOFg3`8)_UUHlx4>uOKVd6ju_yFMrrcZJv}c<6{#&rCcR7iF zc;&JBV7_l~{&jrM?8bO&rgQ2UXu3&XCrh()Jv*IPd8_k#ATIZpun&YyB|OVhb)Hs7 zxqXzsbRsi+>dUP#D5=@WtUZvpaPkRjw)MX_;pO*%ZHZXs)>4aX%5&oGi%J|f3iugO z4d)8UB{(~KbfxteJif9PmNc;v)CAx?80t&`k;?p_gPv&;Cx=NKRJ(3Z-^kM}moXWh zCOX%W`Wc&Bgq4*%-|u@mO}wbfx+NS1kLd|^$xMciYX-fw>-UV9g{rx5SxO5Z%N8zA z6=PiJbiabW*6wQpoge;dY|m@~ZpY4XXJj`r(z=DrHV`OCaJDqdwhu*Cr@fpnT|~#n zp|5P@>}WYaMli*Hh}_1~=j`;z0DFZz5?G1Uw!V4L{R8IaV!2?=@3s6ZY*$r0S-t% z5V_?@?S*ukz{<4feHWT})9d%VHTWfZu`Xi;?#dkWzLee{ej(jLS(Oo&oUAsh*T?r* z_3N2`xq$H9gse)4FKtCZ8s=$#^o8`}4Do4pAJ*LJvyv7$$?58@e|fF>|b<$KhdGCD+kg!k@`39xsTFBPfN&g+M|k zjlL4oIo3e7y6Tpc1XfJ4yyF(94(c9metW25&_({==6C9-uMqij-E*R&23*vssM101 z1$cdN_Gw(-2CT|{{Pr^~NA@Pl4yJVKpjLN})6FcMY1dB}wP4$s@1|$swHslM?5ybL z`MEiTTf7|s4LN2@t6S*=oeUJiR+_0fnSIprH0$nBD2bqkDyD&!_uAIVXaK6<_a1&1 zaIZ^jZJB8`w@l~aKxO*V5itQ;PCVaBOSlwQ#G+c2<=4 zeK&sF%rzCOrZ|Gt7n{-bSP7o!ZS(457h`7Qq3#|c4MbQA;=~g|c z+eYcgR;M?ricGQahV$*-y*?=U+lJC|N(2(AQuqw+s&wCe8&=w*M!pHATL7=6XqG+z8=h zx`SQUp1=WTgccGgr)`G9-3QHa9((x7|3zSjKf$Ixp((Hyauhc%Pl>>!N(W*aowFO> zbe1=+b_K8&FqTv;PmPdb0D>&0Z%q%bHvjFh`^Go@hql}kUWMMUCh^9Gh7&XUkJy>M zf5ITg-+`VC^a|>cd~L*Wpm{C;s?sLg+F5-`0_6Z{c{y>x15ienNk+N%l3l}}O+R%8 z2lG9$x$g^`)B}i9*I!T^-VCdymr5%OM1dmlStvdo=pGbQfFbL^Ft|| zCE=FT2dCz|T?J?jyXcpXGoq)^PD8|)yS(-VF;cL5+g79s$uT^l;pEI;I51ngpirOF zH=*&iwQr@LoO9Z?)%mW>+WjKD!wq8$B(rz=2tCM>?zS`m(l%zwVr}U%Gs|Zm!6|pY z@Y%!IV1Jv>KHZ+#BX^WUU0|!TFo4iN9ZMUJ-yT%GqnEYPiav|*OlCjYF~~W1LCEvEg&z|aPHOM&4%<{ZC0I)4A#c>b-=KlDUS%~;W9x{pIIwJi0=fVHv+ zAL90aIO8TqjNOj{SP)p9l5(QtAaKrfL3lOVYok-ru_AR=&(_Qb&%ev^5p0op7nATt zUfL5wf>|hxLniXPrYT)j!9qARYXuSk2PR)R0%=fKPe8wQo(UD$wMX1f;EH&WkfBr< z2SLfTsw8qx{3AE+7IR&JJ;bxw5GL90#N#p9gp=YbLT`kF3Uwyw~0NzYR9{kAZ-yx%~&FIv2U@$={4|fy>&@IE`^WJpUL7p}5hzyDaLgbSuA5US z;>p^4-jo$?Cgs9rW@8=9X`RX`4*0?K;ipnTFLqj9!vmP>&a{ zPngrt5wp?oZuC=@k(ndO`#Bw(olOlwxAi2dg~ve06;#kO_NsFl7C~(EAg60Ryu>2R zZn5PqCHpv9e9+(%9ts3DKVmf`??N*E+8b&_Krn@lPqMS*h=Rzf)nb%1(lhKH6eVE`%u_@-xnYm&;0~) zlya#9z=66u~e3Co)rTT)HiH|z;VIj0=~9SbvRWW0-L zG2_bi1+i9V7^(w$TK4%~nlg6Hh1XiNA_?ws;Os;DZO zX~dZGR;@|J0*yqgCo=xPo$4e>#2Ygt`+we*Ndbgvf|1dgy6~G$pz0}z7@tA-SttRz zPqjMX*d}KZ#`(+u8wq57DOEC;9p@L{uD9;%d=7XA(q*;R7YAmAr#@15PRp35oS~`=5$uJss|xL3*}W9 zad!4OxE7=@Q*>{i23#ku@I5>Gq@ELoF2DYZ51W!wyYjdtcm(>Omgjju2=&Vz&$IoQ zwO%UrMdznH(dn5el;9@XNdN_qS6sNexv10*c?!+7rSSYG+j1Oq8cr9LWEH?QGXHHH z&v99qXsn#>s>Pl?w0wJJc3P!XxdocivqaE(UN)}>I_nKx%3%H@2WBsde*U4JPmMnB zOoRm%fch={b4P%G`}(0ES$gD2V3!wG+a*Lo+;1lJu!kJih^*0k9l195ji#cyuiB4g z2Nkm_0T!#>Fqq%vJ-KT_ds+(xQw{poY28LX#jL?`*O-rc*n`R>>{O$A*e7LrmDvMN ze&n0Z5=j9`CGDH=VwQ+Gi$6ZVJJl>28WS+iHRShrnzUQ`UkwA%70Ss#?4+?h z?Ot(L?(%_)F=54{Hj9IVun6rX%#$obndmdy(EdB*3SEI}I5Ts3m_{Mk%ZXZEtU)li zoC!myGi`Bj)n3=4#08)Mx*P={NNp@-kWJOgQ-dulUQ*11qK4YcWwy0@k+lQ`11sMV{#y%d-TP4lSA;>}6JbmfR??wI-KC1X2j;STZY(b>qz#^U;(mOUI;9 zkSs9ElfXV+or<8umo~IH1r5tmr40#pgr}m}JRDn|Zny*OdLc^GO=#O|*#gg0)^J6u zcRC|@9*ErLu1nWQ<59X2Un1%GX-}&%YIX+fsov^drmWoVb?jZB%|8!z?%g;Q#{ltH z0!&>M!NyfXoVlO3W@5Fu5J0QOj&wK%H{5n2ZT)=8k3tlU+N9VK0Zgw zC#K*kG3@|p?c(J827|-RnG-vZjbOYOc%i}wVc>hZTT@CF=Yv_k!XOo~2gnE|Xnfv1 z=Vp~}aw=Xi2~2z&sI5ugT*%`_Qyv0-r%J}c-O7P!zwqnMz=>8?9taD*0;Od8g?BjW zV@X)lh8vhYntti4%$YyZl6mqWzK1Qv;BY?t4E-SY;_#UnWPNBI!lxg;p7X&6$!R%~ zx~R$*eM8hVCnef1j*0y#2-P?RvszN}ssg7WETo~J^cPt%cDfvW;048W#KonLtZQrz~2{Y8wwmP#d@MPL_*!E;klljKBhj>%( zn}NOT3kC=wQbCVuOk^k*?Y~cz3kz$ONdm_q)219ef$nrTWIAFMp1;0 zj1qeUE=)c_@bvL9!UCFOs3MpgC9xNrXgji=GxV%SUrw~7-n%jraX-oayCIYK==|J zDh$)9cJtZGzJ6r5e5SWO$XmbE?CEVE+4r9Z=o9@`vt1_8mwINtINt6ZZzQRW$MqY( zkp76r8or8)<;XoK5UVHNs`Y!CYnP|`=EFf)F)YyvOZ`MIOV?f)a*homd3^YwJ(d5= zIiI1^Y~uSv`+5P!|6yYwVfr?_b|iCqwu^&*JwO7*fU=}YIUr2f)Gz} zY|95`e;<3YeHFowB6*V1mPnvUm~}VD^|eRDJJ#bNcrq=^H>ojNfH4JFnGb1l(&8)$ z0BLX?On>UdbYlC)J@Um1ch>702Cli*H#raaQp`ve&tA#t90yR5m%L-(sS? zmmcUepZ~aL-vZ6r1?IX+EYY*ghDv)#{PY9LX9iQHs%uce{_##OT%{-g%`nDO|CsCN z;^^nSrU4<9>qe7>&~`I)F4&e(cEpg|-Jtj}tij33x#1X+hk=q2*0*xJz)e+3tYl6N z91j11KU8Y6yhqZBVk`|Swhk=Gi5#Dq)z9u%JzANyVpBZL-EHjiL zcKJ``9grNYi7j_2tO@jl^Q&RTd8pXX)$?S3Wi5PKpE)E;Zr^hfJD^${UqEPDmKUYp9qqJAnb3fnN% z_X16a?CfZ(bHbFIT<8w?wO!7o74*>}#w*oN|NB89^;3P+J_gmXN+3d>d=F_H{#^k^ z!?M{GeND{(J6yOIJVF=z@c{d%lV-aaJL|G<^F^#&(vtO2OUzu_N26;cYGci>Kg$7s zD$HK`W0>q=FH(&ObU!6f4yyBByLD{R9fGxW7Q~F*_!74wC4ARD#()k(JJm%;R*bcF^;=8Bjv9 zBfv*_kYswf3j)HTswJ+Ea!J*))IDMRlBhg#X5UvXwdbttZ%p4o_PC305jmpmgwa@M zSbm3-)-yNrY&ySV{9euPD8Co;dj-F1_?_hUQhrb7_jCMi;`c;;@8@@d-w}SF)N@(p zMt;lN_1}Z+YVTF=n)e6U{U*~j(Z@Xrx)@ouM~Z?F+iF0?m&;1t2)fw~-9?TA7dh&; zI47CvupPQ0c99mHTB%~AGY64726k1yP@;BDdVV>&BRb^*?w4~la4q8c4!peE1Iq*O z%U{Sr4P7*?1*~!~;PUZ&pa5$kd(AvOtmtNZm4c`Hjh3b ztLo=l$?WPXyxx%Oa;owKVD-E&V&0l5zqWR#(^j=J=ayhp;S@)tBwlrf5P~+e<5j0@ z%#!qQo)wQ+l0JgxrJt-x59awWMqd2Unsn*VC28NpHNo_Iq(4`{#^qEx6s5J^Tv25Y z_tcvWRrb-RY~Zb2$(J|kKoO`e(AVw43uMBxQan%7H6~X{OB^U`K^xopw+pcIvP;OO zS1&Cd3XB_jusz|3T}hH_v|$`1aTfyU;}Y>st>1; zD{B6X;O%<$`ByL)s7wv+3hzjt{a0|){B4LGI??x4PBu%W@uzaCLOT}c82FJir9c3_ zRE^HgGQ6+4*+o%bWQ|K*O*ljbW9NKnMh><6^<@)phQ4 zeaBR)s(?ukwL_KXAO^LzC7)MLY*W-~NzH!8lpTS5sed)KKl<#059T}2We+t~v(-6P!YJbP0me&cw(Hqg#Ih@+ zz<$XbsjUe-McV+Y{3K@=S@%g@Quh)IL9g(e=_nC3Jy<{y028y!9!--(dqW#p_&QoL zi>O1>whbpZY;F{>AT5qh!Z6GoS{hp4;>@GK^bUe7d8TCtIj(1zFNWC@;|-Dllx|p# z$iKyTj%sFTdGG_@m8<}SeB z6(9?iYw(28R06He>+FNH5^!sTL`mcYXP|n)P=zdtVvuj9Yh@LtR;dMBq2ZSpxf3Dq zjaRj14i02lXwVsCkAvW2D6sIsvQ$gTN4?BS+7n)iFKJB>++OujAq{jXpE2|42z1T+ zOt+EtRJP!pGSVIt$G;Zrxs||PU?Wbc-u?Z{oDWTaorj$O4y5L36*gby%`ZE53r-@S zCS=bph@~rhWk0`N5T>7UB2YB-*Ku6=rr8BR0&vqmTjeSInE$>fG4Zq7Urfg^$ah zt9no0d1&9-*z;~1C$OEQ2%{zOWoKoV2X=t^25zZrTcy5d+1LyiZ4Vjn^e)77zM4XE z35ln6=|3D7IT{1+kzMAd(P*M~11-(JcD+@=9Odnl0QfucxD`;pm;c{`*Ge{O_PVso z`3L^5YUKscuCI_;QxJum5$d6$1)y|Ww)1pmP1sLRnB6j~c`(@pn}W)zJ1?@_c0CYS zLT6ymOpeNpJtzCJnKZ^8QAqQ?jB|Ns& zyfnrh8?QO>I}i?K8KfFY%-g@{n#kbP3v(2&c$8SI)lodkWWHDAj*BA+yj^tPs$ILs zjlzK>l;~cuD&pjG@n1Y-ElU>w^x{;G@^g!hnBfW5?9*#fYtpNyr|QzJ&R!R@bkIEK zNaytg44X=Q+$WjCIyG8D)WU1|4vKDbFuTS4s)%W$n@q>j8f(iZN7oHhXC`xuZ6upk2o$X)7c7}Qr6W(MHfAKaN6a}P6MoZY)%;TN6H zUu}*VXOBCpYJVrW26Otze&p5UShI6V>}jXpeu$z0h6}rM9c59{D-f5|rOq!~*qmD8 z!8P(=vn!Ak?*nBZ!8ya(JU-4IRPLv0F z1{A%SciRH5r{&U6tK@u3OYC`I>tbVK^%iqAoy?h9OR^HBDSx6kvpAvT)OFdPn)4&} zkl;DQP~S-ec{5j#>yY29i`Y|Y7x{=`=@!i1hrpJj;4bbWm0&oO*$m&7lBVBl`CVGi zZV+auP9$Hi-5hh%ou)^%-Mia!exQluT5FE1wucWKHeDo=17X1W6<;YwR3a4!upT?z zTwQICuUz|iUWNfq`Ezos2%K_ryLqD8zS8rsIdZ&xbo>K!HFZKz1Z=_cKbLj|A_E(3 z3J@rtd{d@FiY1a%dcXBTdXB1wg`URvC7c9TIRi=)8*Qzqt0`bvfDu}b=czm&wP`h$ z6Nl|ddWuN;u`ArDkmU*Qps}hq%x`rgx3}{G<1F# zh>`FlwYH!$X1gf&YISN)Y3vr;-S5}1)`oQwUIM{K@XV$N2cb$GAg>L(`)&t_3{8=7 zqFa&VPuaAwE2aaB&(cu6JwMMa<%?ey=s|b$_yoI8{F0sN7jgUs14&=+0O^hp5c}(Q zrnS^~=rc*t928uPss5j_w&;BJfvz%)GFL`A`w#KB?%Mh%Dg&0v0oR48QfP&(@#b18 zZ2(O>UP~7daOVkxGJ?$}(DLMnFEfq)zFcf=E{hap(BQJ!EPL&o=BG8i^LT~kSFG14o4W)_dl5ffGL0kY_3)02kQfGn%gGXy(+sgYDJFq z!=EI#T>;GX;AaGTzHDBagg3liuikK9jY5bjrbf=`1?@SWruZ5;spm&Qs(N@^J84|o zKrF1mE}_sDq2P(m$$Ww^h9_s`jjOz>6W-aH@vTh}|GCw9-D*q&itItpP82<5-rdO_ zcV8-A9QLL*-VX4F@05;&7`rQTAiM%;P0G@G8e#_SkX8ukXK?K+q|8d7GqmBYVIApU zp4rz$K`U!b$`7!;d7xK@!E#mveF1bC{8WV~d`%FpSgfbo$^umL`B8S2XS^vt+V1Tc zX+|E6a`DOmbL!FdsB`;*jiPbaQsEQPx4eT|l@P!0iuf;1VBg0S*?(4cCtfs#_z4Dq zygH@>1WSn`fbdXGmS@I0=B1k`XjV#_nnjdcUT-7Ox$SS~i@%W95A z11u679;UIPn`nboA3WX?>k{dz<3Tg)7`WG#Pya29PDbV0^l9hbzOmO`NYUfqEuVH) zK8Lz4wOuN^C`BU`0?RKgft`9CDGWxw1=4nYeumajGGUwtlCUcG1dEm;S*aeHnHfmt zC=z*evU9xKw{MjZ)FTk?auQHLF$;_561^jyz=HqgiB!h#G{K3_Pc~Ik>`(#Ghy^>$ zF;iHvZ$6GAsrXvDvq~~SsSl=TX{{-R=9#w2tx-BsL&KY2VqvaFv)GmLwaA?msuH zIK8*O=-gZyJvDQ8lr87f(>bolg_Mtk;7-;oL+C&e z@An5p6QuVe+rf6_U1HWA=Pn#9Wvm`hO|v1{xuu)6TL^&yo&`DLX;yKvb0g0=NSVE2 z?fR&h(`gTV!gkv{_B37y6XE@f?Fhu=R$Nk=y^VyKZgpP7nO4fxb^68A{c>l4Yzs3t z*ePFNr!2O%IuGGwRk-zII}Ytzkk?+P_LyK*&ad6-TmZM0c3z2TAXI)jj!}mr$6pVJ z28|VbSi;b6l%KM1L=69yZ_9FxQiTTdaYzZz6BH zB*yT(kA2cvA{23lO3mTo&V7$CTw!k`rcoHLvVB2LgD-SXB6`C)0bID-J!t|B9@qsx z(|hzaFkSz_L~Af=ALSnV+8ntZ+|4D?T8;vLDDp-xGIS zjJa~vSt#^K6f!L>-D?_;w+D^7me`OZ_nI#U=W;rfNi z^e}V8RC~gJM`7zjWsoIc!>QRRD{@n&Eb@DI(fWY7cB(z-lp9cAz09aWl;Z@|DAAXE zR|@<-Sg?~F6omKiyBG^dWu{(Zxn->D*L~Wnd+jIBT>tQAfp5R~Y^r&0Dun8DC%V-U zyL$@_&JSx7dpng0*Z=#6>_DK#GVgrWS+Ynmj3Au=q;;cQc+RuV=ld9pkcD207$Z!+ zYfR&yoPtZVi{6T%$xErDE9&WpLTj)~wIy_-c{m&78WeD_JX1hHt(OgmbnbJ^)+j7~ z7j4Ki-8J&*beD_og?*is-kQ93v*F)vza5kngOO?48xYk+H#?HwioBJ<_A~&07l)*L z#=g|+DbJzK$Gl9$(=Zna#fTfBMQT>MqI}>mrK7Wt;&ga%Snezz_18lmKOfh*?+*-C z0h*YmmF

    H@4V)hzJlReBm`WP3+mvwAR|)J$uZpwYX>5Bd~iSj79HR;?a70b{pJJ z7LIoER2iq%KFxE`R8O;e&+RieCwn>9wM091it3Z;`AHV^+pud9kOKMrY+smYH9H-H zlIc`OZs}nJ|6fdxig!nfh{8*CMRZodFPHbdYjo z5Zy-v4l15Q3XtrvK-5oa#*I#Av?8zFWW43xb!czP{9(}ZJ2pdLbf&Ra81B%9Z#nn zbK`XT1kX6LeY)LyZgRS+fajbyW4m??%AC1JvL#cH_*RftAF3Wo4C?qN#aKf==%(iyBKz;+6#OAv7 z1w48Y+gvXH*aYB;VfWbNPk>}zRJ$)D5Wb_?#cGf;?-Hs;mvE;?aOA zP@?x7Z4`q#U7V6aMr+g#bQKK9S-{+c1?M;nwZb{p0rq6IeSn|TZr8G*hXQC%8E{I# zT_UKrGCfgP&ftcW1i#-ZP{$$s)u}*f5M>(;ST4gv$;HC*zF(ebJgPiV5oCW79KMEf zW{~Dd(j2cWPo0RAr+zVKT;y$5RJPwSaw@pBJarCsGaet<+YdKnMqcFgg`*$ExF=%k zfsl5p%M%`mpg@F5Nu$Ka=}syk=an2Rs=o)vzXTbjk#iY6UL;QCU9(cH~sb_2n-@BWm{ zUPvqK*5+n-`%iEipB4Q&2##_R-R_6rm68{<|00=^rEKYJ|3 zFiJ0@<*C1AzVGB$;|D~?2eNcjiI0gF!Y&xih86MJzjZ|yBy?)WD&t7bPIKJ|Z_CD9 z&{pgUaperaBV=CZuV(cK@14Iq}vm#?c;0>Eln z+Hn|6YF6Ak-7FsIZE@BdDjLx%eQd&V&50d$%lIUi^l(9IKI2tO-+P<=BfWiceuf#} zXX=k)v&l!*`PQET>fC>ys=kKm;rkrkvC_YXTYvY*v!W~=(yCPWMX#&kg2sz<(vrLn zVss|(_>|EV@0{mLi=6<%#Jd`1;qYE}grO&|>}t|0g7>O1yHYCN|ISb=QI z70j{lvy*?R^F7yv5aE(zH&=**Uz#cg*eczh7yy_k*(c6<$y2RWs;RR(pM1H?10O244USzNbL(mDUuVeZ03Ze%0u!I z`zA3&iv8KG7hWiY0e6Z%Q-3b6Q-mF# zg$`#dB=Xl7Xm(_svX5i$ z;ft;SrJiu4#&R!Wl&$TgUydL6$(7&OaVaBcX$45C z2b+)76f6E4daFZ-nxL_26rlPPI(WHJ(0;}=OCvFdZ*-I}q1e)W%6et|Av`TYz#H`cURe z^C9k196eJ{u5W)Tm%92g#d)w;J$|ogP_?fsAP4_p`9Df@G3A#+Y83>>8q4zRh)Jv< z8qMZMG2d^13|Jr|GXt--wj?;{%s>TkA1$K@uF5(cy%jpoEm)dhHo#td&9RwZ%(Tt zUNZeAp#B>DH3!ugOTf1ADBiWC^E_O=2$;5~4HubN6TpvyzOJcyr)x{ck&cA2T7^Nl zV@>r?Fo7ey`7wYcjp8NA*9vY>k>s7EJC}3=>bV?E>gNs9(^<-JYa>*u@CB}=u^nI? znY%2wb=46mx?em}v-_(CE-v3i{i;g#l2HXiM&b|3Y7<^w1Yrb%#{{m8(E<1g{yp=k zbPnUXg5C6a>~pM&P>~LL>jGYF7G?Qn#~xSZ$O*mvgIdFCD&XT7f79e;AZcC9BgEf@ zxB@F&nCz6X{T7mS0R%$Cuc7c$VM4}jVTE=6zy956Xukt%)!L1eW>635LX=PFek|SRw@D)6AmFF{)W} z_Qq9Eyb5r6#aA6aT%|=h0LotdhNFd4&zJ)>#Vi$lw_0M*= zNVR@E&GA6kguWu^8`R{+QiKGdRW#G>nU~n|E29z$CQ4XI9&1fFmE(gzF)Z#8bCYlM zJIV1ulpJM92^=QL3GF=M{08U5T%k9qa8LYR)|ntI!YSBV&FLPdO2gKTanjUJ`aws5wm#VGtDx_{kSHPzQqfheUo>%|lx_rID$?c|<8 z1trMH>TN#SH-84!9%Ca`upu{-15TJv{^ITE9<|rFCwbdn`WBUmnHfmA$1|5;4@CzR zK>REKrnDZx=>1Q}sW%|%$|+Qyb$jx0_!r0gokJwzwVQl@s`|bf^B{gCF2a0PrnK#R z8S`08Y279F#k1zlc3AYG4$+_B5ce9Y5E{FhJ#IUMLDnQ*1ITl?EFA-;|RzDu#G1RE^(+C{#!&ig}O?1(HE-?hxZE4&@M zFUrRCE%CGPSc+8^nAvU(JhOhK*T_STzjS9uG)ACkPqCM2EMHsew03_-#%+;I5iRqzZnj> zt(a3Xk5vwx%t<4)n9$9vHst&jj%?_3(?f?{NOA}*H|$s%7qFG(wG6~tUt zFhK-dZltgi1vaCSceMOKufqJAtu1iR$C5Qw*Fia6Cww@XosnCq5Y+nSS2gVDf`qVT zI6qsSO<7VtgJHcaGdY}&)}eqi%kW zk7>^;kJDs1Xvpf0CqjQAtDM8$evWjpiBT7>MdJfC1&KuBLpahPZMfcjr7Oazwvg;6 zNqhwnQ%lk(l*K0s%1T%-u`whZ8+^HP_Pfo;g&dj zp%)Ik;SRav@E#nyh%q*kk)YabNa4sE^+EA0LQ-)%2^D_9fIV^y1 zfp9|ZXv@KM(zG>oMhAdk@*PK|%hS>M`8{xNClkEyd9t4YF^BW&cof^yo9dA z48ph;09``XoiS|=c(}>RvmU)ZH(c@Cli$Al7MXJ=!wfd#^Bq2Ies}TPm)|Y^^*K8+ zQ7iM%56@2L_-kGy%PA5k2aXxGOt8121F>Sb^!3x1Qm!VU-x3rYTjm(|5NbZk*d2g2 zX_B9-Vy9Mm8W8p{5H>3j<25k&B{07Q7}scNjxbl_xFgJVZIy^-KUS=|yr&(&l>sc_ zH=PPA>A;o6=mTzN6-y$_4x)5;mpVhtK`AzXEL0KbAGE{3aGlPcODAm2cMM*|zR z_`QnNFuB*pOC4K+MiMM&tQfUg;i4VO$xDGder976$84^^LictWAPVI!g?O?FDk928 zZk3Et%E=YttAThj33v^vuG>hENONe)2$n+}iE!`1`~&1<9G(?(#*FOZ00+ zk|XI^Zj^h;96?-10nq+EDgk<7Y80HR(zL3s!SC&my$A>^;|D>}`>xv?*H(oNYstq5 zm)^K+NQ1Ula(!tUGUg_Zmr$6H<)a`n!TCMgPgM_bFztMp!7=f2}Sr4U1O z5xahJn(_hsiTL1`SWBxvX#1z_P?kLY(1SD+y#9!oU;)>PNXKGQj7 z#dSjA=F%EsK=)Ya@j;i`G?)Sx7Pxk!W2!sg_Km6B(6Si9MQTQfO~TS;vCebYvf9Zr z7Q2$NWw8>{%6U;v5Qk45PPvl4qBOln@MKgQ@#O59e_U{ zVjm~La_;f*O~&_;IfX*rICiQ!!kSpv2=)eOa8$Zjl+0t~))DSv^f&~?%3P3;VN%CK zm~Ma~UL@|r(0%c7tu}IK4npZ$7L#G*7Rp_!d~z=t&e+OI1?u)ccti=Gqyf*7Xby?? zL1}56vp;p*hqVBOsh}r_zngfe%zX5`0MJ{@ce+z?F*D+ zD~*aRfSm_SKn|TV!*29?!uLB}ov6#ki}w-hbdj#Ep_Gd#2HZx3!X|jAt^>E}m^X2d;Bln|bcw33UFwW<{*h^!1vt&m2LJb^=fd4Rx3Ee| zNd(x6FZH15yOE6A&QLG+FghQ^wJd@#Q<1_wc;O8EQe$qO>g{#q9!k%P!M&A2r~>S5 z``4!$K=5_vp_U{2ut*v!IO)%1K$wb3=cEp{*#WW}!$GQ@v0r#U2hWB&8|U%|SkB|P zV)niSnz5~&XPHw|+4lH_2C8wNz}=}g=Ws+10iR5X|D!#k3Q+`l`t2XO`!u#fJ`wv~K4~wiC3oXv2GnZ#^7K14^A?q+{(#Z1j8P zIvCUii5CJ$t0u}5(rmPQ_f)rPd3$v?f)!VOCk4TNT_X<1N@3q z$ z`oT!@7evkrkO3r&l)lcg2aolnvBQyY#5RhJIo_tF!#+y4R;zz|x-FNGGe=f5v++v) zYnhuYD>6C$K9y*T_%-OLi1qEy0dCRs_NGSg9t^~@(Po^Xy_3+zV#|rHjIZH5)t|(F zJm`Cz>oO+$4APD#E!fzR3mfyUQ56Gl?G09S5oS~GfO3QZV0x0LZl_FcC z5!7+&B7U>VmdBTvJ8#97`tLA>wQb!cM-8-TOkCH99B`D68qDm{m1w8d)2_4zd-Ypd z+aPKBbhG2WAg#Q9mhh`7zLt5U>g0EnCI48W)dI((-4>^+P_PC4LSCriThJFd%i^kc zv}cP`?E%Bb^6MvOIcB<%cpFy!bAQE-_OF*D2WGgf+|aa`RAE_V`(x8%|NeU0e{`8n zX~Ocv6WWaH$wc%FA(Qz-32%@2@q_gHAW)!XZk2wV@PV{?McGm85ndQS3|uKeLv}L) zRtS^DSh6riW?vvt*!sTsH>`(mJdiS9C~-7ap6bzhmJ@bxB&IRbVD$oX8RU8KU-ZrM zFtd1NLvRDVf194lcvF}%n+C~fGs;2~v-1wtx37fho$$2~jTXpjm@U<+UAOCG4ROPy zdjVD(u*pz+kkEyW5t*vd2QlfmSEkw`N92%JWjyVaaln!IpQ4P~>Bt4cXu$ zqGDkxEW1`IJbpZs@$Ln<)M1`$oq=5!WCIrhGL@C5%=9X*j5^qKLncfW1lfYAEmURd zl!IXB5z1;-lG&u-O!7P3(=>*w5Ar#&5GK)>WGnEOj(=$R4<@ltf;b7&rlz`cH0|Si zVo}SKPLAqSm5gRZ-`C)l0?fBdo_^NsTc5lb^w!wEbAe(CJT?Z2WdQ zBEddJQd78ysS<2mi+W3NIFB~e^?aOK<6FgfUrsPX1YbovBEDpwKix^Cf8!yciHUfA zB!dE^2|0UeP4z9vgtY?dVr-pVA($FQ!xe}mxh4-ptev#6$vIH1j7DJn;a;3_0`O*t$iYvWIEDG}=oe<^Oh!Rr7qL(9F!7wqKe>1mCM~mL% zmzu3Nipa%;EdmL<$9?g`AcMm`7ChLaXOG#=x9vwbR5(r7JiLyEOz2E{(%YBdqnEzR z1>~-bDsR}Yr>Y-dERS?Q>99envY)n4ExPJ~DCX+uNW}d0PH(U9G0<0g8ewH3SI{pR zHcL##fE->zrDYw|8;@?@arc5%+v8k02(HP**eEa0g1WYgA}z_H2J z{EB0-DCdBO4U&Q73174#oEo5e5t!NUF=TOeOBj3(T@=?sz}4{HrK~d@M9ihqHW^-8 zHs^A?+~}{&zBth`m`RuJBd4O^pIYLBqD73>;EW%@PpRh!Z5uUUKM|i0 zK?@y&b}{qi_%*3zb5*#mGxGt$f)FZnNobP3yAF*gn3Wa~KE+~1WECq=C0E9K>i8 zJU~On>w3##AB$e#b`P7vwGBKw)415QbmP<*t&?BaCspU3p`pzW<_OEATdS7J7PB|4 zRKW+#XZL!?)-Az6gwJ@1=`|D6px6HOC$wZS(CW7gwuKB?WsV#uBdW2iE?GZFHILEa zALCX#W)YgDc%coE8a1sBV?T#*XUuumn4^)(uT}BEW`*OrVZ_;~XCl;ZXENAtq~KzW zL95foKx~61Xr9Jkw9<}GBDH0<5Hst6#(&d_W7}{6@+u{qmsJY)>RO(fcCA%imxkn2 zfI_I(RhCl*M>@gW5XMc*q-)K(u(y9$j{Z`AquFJV_;iLrt-@G8c@8J|Yi9$I*lEe> zvoI_(GdGgQu`cpUH=I7FBh8%_om}wT!sch~+R%_#u|Gkt&onHM3*ze9mB}_RAEJm2 zqUkM?^%R_E%|#12H_;xGX2E$ktW3Uu^ykqXjjJfCn0hT5k>`%UW^G&t-i0CMPplu@ zsD|$;hP3wlUnSd2AKBqUfY4}Z5H^X*MTK`faD~9wdSEO9gDrejtBf8!DXomYFUhvT z|HKW?#4R9h-~Ys2kclfJ?&#@pVJ2)qCi3q@T5bRD3VUVZZX>Sff8x4k;%+9+Pn;U5 z#tI0mOx$GRDg#Ij>^1L!n(BfEtMouhot3b7y%@|{^wfnIt<7nD3%_VLJS4aPKTQTY z-+|J(VaMtqwCd_+>GY9~nYusq`hN#c?O|H#;ybi9TujpKJI%DayiLw!xwz%tRD!h5 zdFgPX&Urb@h@Y zXaC1q6~P3D#q!57GHDkgI+6tHuj#upSupMnE%^A<)D03OhIHBvQT~@OH*)*lNWRo+XS`>otnM0C;zne|m{=lQ zQ>=j84794kgc32q(lmj-;|j}$SoyF*xmcA_(T7x|<8f~PwK0jOSsb2hz~L!L+O<{! z!mb|$md4Nhid(Ybmb6^7EFC76&i;z^L+5Z{VZshZlK+Kb3Rv7AjL(Opkw{l4thf?Y zC_b%shTBk@hi>HRN!G93;ZM5}LF;s1P4&Ov2S=20`A%T6WB|wCuGVx1aQ6S|eZtKt z)DIsugkP=K*$4-<3)|&i;2z;$m@^p`yy#yw`89`Ysv0mNwNNF*9gJgr3rnS`5LOZg z3@rVDhu2{qT#L18@$f0qO9*Gm!^s@xyks;g273P{V5)f*C7BMRqv6VmribhbzC|r{ zEAU9}@6)I}T0q5tV4^$1wpF<%)dMV5G;?F>kt?jE2W<7j6&Iu2d%)2l+bppXM)9@P z7;;>(5#yhOsS|s{9M?pNeEgP;sg*d6`{v%XV%bk(DV003$fbb341uC21@@%?`NOuO zQqkkz42agcyybH>WKC*NM&AsVlP}>@LP`#!D(U|uOq3OXoYA048j(%d$nclt3Ej9g z!ncO=`&#T{bQd36*oDcfRd@*95OF1u)rle>{;CMeCnLAVCZA7AiY1&TgcSOc_NX?mdY-MqV9vn|UNaph7Ddzn??>?j394&GS^WBBS&xae~h4O5Rh`xd6S+p;P`Bh?TWHh&TS+?1C& zSC}{keNU#x>dZD8tWi>VFY|tX1|~MsG0Bb!f1dD=hYo}hogcvrXdjnC?z?_(Jn%+# zvSBok+*|<*61o%?O{^cxvWER(3bZp7q1HWQ0sXl&05l60 zMB_nY<*I(4PZBQ{bJ0j)L1ekNAUfOYjznDF!}Ep@MAgzsNdbf|hh=C#Vz_o@t`=|( zngEDSMY@GVc6&>lD}cG}XE_|U54*oo@rDzUXvp*Ha+FRz{DOBiU@Mh;&ge}FV1yKs z-5iZ1TqJh!*(bwXRfUZ|fm#mp&pzqgS*mXh^=!U-(!-uWuhLBdrS{}(dQYasPne%L zKi_`7pXB>VzMtg#NxmRj1i-j@ax=hq%wlRveb#sYH)_a{FkA4Q0qzj zSe}2*BP4vR4lR~3E*vob$0VE4o0Sy48TmuKJMN#Gqi`+9`!j0uExZdhRssvESTLlm z!1ex>IfT2{lZWse?X#@$uk;eucum+p*E<3L)7sCX(nbKEi{&N2>&Ewo4OB=Vc^>n!g(C4)6i?dlu;`x& zl}HwGbt^CgKtqzvrhJ{!MKL)h_klEB7y{z?e5*E!n?+&!TtgB*&43GM7QxDt&fQ=l zm&gvTf)vb(;Z2F#67cI!dJW8=;Lg->Xq&H8yI|MG&})X_J1WRHHV%;OhK|6)z34>N zhO_H`NSE_!3N?F67+s$yt&Q=~h%~w%{RajwKUH%`U{MPOcR4E+OGM6qIyepm$BEwQ z-LoPO7k#N^I=z1lSMt0o$_uQO;f`TCYHlrrK~(6*pt-W|?)ZMJG#6H^OBDkA4OtvA zrR~i%sTR+F>1hvsq0r9NsgRedmb}|MU3l^`;YxQF?|1M!Wf*^;Eg-Q-va-ip@idIR z6?gZyl3RMc6%W!12taa@XMXB( zZfckjnV(RT8)G5Y4-_iwcQbh32V&4+OO2~`Pr5TkV8gi3D(k!|+xJiAWOTeU;kpRD z05>~wjpd3iO<2CwiMHe~xE1=~ixi6Yk6}NqR_Pc`aa$%ux2DS`F}Ky6BU}83;{~Nl z`PL15d*V$QPpxG!3Psorh;cyclsXCzD2M+(E0P?H$%RgT3#W_MoA}$Q>V=rfWpPR2 z=T5gH$q_U{N8X)uP(?Z(PWo7n6H5H%#Bt&(Pc+?tcQ`q!f{W;c8gM*%I4&({?@U8DPgdnAO{a}y(z<~+$r-U%UgpUCbiy#hea0Hn|IUfT);*ZD;5aJ_kDQ8#W{PG+Xbko=XArKk=LycKdF`((8?+*zBTG0c0dO8;$DR(#0t)PYslC zWjmH+#9FLbPM(!n=*Q$ z@9^y6d2}d$N_l1s#Bu>kg26*@4Sj>#3i0@OBG+T#FbZWTzxQ0{woY6^y7PIzmO=u! zj3#a+zb1IUx9zClZ?R_AN5zo7M7 zuBMgzh6cLLRcpPi+|lJ`_FAk&m)4j~{Elda0f2bm0?&rjSN}v3WIXikMxax{@~!vs z^0b6#??XW3`ufiG-3}u-oN=xV3-zMAyY8`lU0dYQBw;6zsSp=rHNU`Gn_5CCI%H}A zt0?jl;*j1?n8x?oqguBbijWlI7BbdyPb-bx{DBQQT>FDdx$@Lg>&@(Y?cQ1CCu_{B z_uB2;i#{=ld+kfzfBUEDKhrKQp85%Q+R}7Ya0}hY&Acy3m}xWZ-tJz@&Eqre*6y

    oEKHQ-Xh-GmR$e2?Kfi|;_@dlcW< zd=JQc59d3F@4lJu3;E9FyJzP6e7@`Oorki`p9wp6{VDTl*d7_WnTvTfV%gTCDdZMs z1Vpu$ars*g;qp--3@|waiw1g>J&_uj&G#|%S?aVpEUeJeU!M9YeyZA8e1xYu*HoM1 z?|HkK7t8F1=bisFc2rRYI6!hH$C;48(v%I{?Imd)pEE%YtPSXNvRaDZ+`4(rbocr7 zl*yW9_iMb9@-HP~+kf0vB~NZMGisLI)!pz3Gjo>Rz4ej}X>P-XrL>oVOFd~vR0TdT z8A#*5#pc6VOv;=WO#W=UMUz47NP2*+QebQIUszr|PY*EzXWPZC#cLOQg(hU~#*|!6 z$mDM4clRYaSCl8LD0>HE&CJU=s9+qvtDIa40lUNdfL@Dnue<5iH)h_v(weSN|ma*z-*Xf zw{%@)UgIZgp#Ok5GRJOJY;e|aZ`Vjx5Nl%DU8#tmXGQA2+f3`Zc30QcX7pUUP1tUX zWg3&BLC9^r{KzH6HPy{#A;y6jo3)zDuUw~t$TG%bES0zwNw56eQ%Xx3l$Ynxk-lYV zYY~4xKu}ooni^CI2k7kBWRBCTNaJ{&GNh!#a-E8fJ%!-Fyy2)RkEBH=R| zWl)4dm({nY+v?jH7JQ=Hs+i!mjt}Z`Ox1a!SSZu8`~A_BtBhF-p#3YY02nZz4pro( zMsjX#pg(Go^X)-R-eWF>?u6bnHaT>;|J2@aerIa)* zW1oWdE@ZJP(rW(m0%pu&yQ8~jz|351H|gG$JOdH0@ z^ZsIc%;oio*N`}9k-4~3-!x0Q3f*c^hq&S7&&q_W{Mztlg#UhCI{n4GJ8_Y8p8uR@ z?pk7ZAQta*NkUD)D-486Mu%zYkXS3AB!rF9-Ki6wUXoO?;r&(vRPb5{sCBd)nA zRC5lX3i$aWV+d3AwM}XIfbc^w*|Da^JhIeo)Nc&!X+WaMFez=v!>pVKxbr(>jNAHZG+-U* za;#wA$b_pDP9Q|3K?kJc&zWzR+Go07TW9ji?epE8^USDnyM2?^6vrj0RgaSOX`Xj_ z@Y};IF1KF-9}l|E?sVfA;6rE7f}j;?1uD-2hS(jFj3jwR>I~h~G$M-L1PhpE)&>j> zH>CQ|bU*QVNVa*tW~sr%iKzIaW;hDnuEW6rqWZh3A$ zoGx0vU_ub0;}@Ojo9+Rg1|4O+z`V^vT-uO&5A>>jOH2Q6`C4bn2ADhVx7*Ym#F1BZ zyPJ9Fe)}rd6UMdNZqq!Ac9xblBW6O<;{E5=2cha*IS`unhB1Sd+vm7%ecjAlZg(H^ z2~+fQ_k)V##C8$V_u@~Qop{(Cih}%-8W+=qi?ov3a4t-DNdkf!k-lK21I(gc>w$g5T#u_KtZ3#Dy+r;N6 zx|Ha-=G&Ea%f{X5f|^;E;ZswgZY@^Xv)%u7nTJ=|Hvx(DSKCM2W4D{1SKBSz_12mu z#vb1IDeCGCUdx-t!ErPvup131)K>!DW)5CMKtu#~uK>R-63~ z*iBtS%&`aTtHKK@psh~@r0?A5i&I@e^hs9VU^J?l9KghDH(u|}_RRL$t(SUtblc-y zNMTIi?onX_wAj8GX+zx`%uERcL?tO@5Zqn9{yoOQ~aeQ`7ZngdJ!qoL< z)q1-}zkkt5)%|Ks&8E^QZ7Pc-13>Ix!Y5Nk7DJ~gkeQnXpg#lPshpR(*tj;pwRE6* zfnA=3I|{15gLh>=o9r4RH&xE?G)uh%HPyEk^F*5G02f{OkZoWsScl86SW4G}Nk3N3 zoe8t>ryGJhaS*Q+`KaS>HHV@w>S~Uf(l{G44uMHq#-)HUlpaOete>dB?TN%A8fO*6 zQaeiH)Bqu)3y4=CAsXPKKcDbD^|XS2!&6BE@(S{ACEqyW07(ZasNxgE=MsP5Z-alW zIT%E;=BeNb@%TqTsCbTFjLWcYNaMrZmd&#e9__?n2pLlNqdWx{xUD>XHxDwGKWG;> z-gc6a^q_|c2=-T}dVOr>KL`?7o^2j~&>jwM`2In=Y5NOcbVN)$)Ald8GfnRz!XXAy z@1jUOKQdi6+IJO;SuTijbu;n9n3NG#nnhUH#k{c*>E^A5=GTq(8}5f5HQOV6cWz^T zj@Z+=F8!8=?2Fz0Y_s(tdz5?VVw3-{J=5JJ%PfA_{=vQMJ~Q(XFz5}&Y<oqjsXpk~eFr-?7RQYRQF+l(rU!vgO>F9eo}1k!vzvSyrN^tSHgP%z6xL zb$vhc;A3`sclQeO)?<`BvY&B3ZnthcxSyb-8q-7GnP^?-{BK%LseMoeEyAD2n-u6h0myJ`JqkgJ86pnB$GGPMeIJPC=C=?)T0uq?hXSf2Wp?G+_+ zS@$GgH_e~4&pBhv08z3};#!O9aSvlYMH2WOL1*!`PZffnb9W-n>Hvz z#jhx_Dt*5;i#ORFn~Z3(F*Ud{y;8)LWrKp>w9M{Jz|{6JFIR1{+q+tyXuB~bBq~{5 zqECNJ!o?q_5wJ-$ywG%inu#d+3}zT8sttEvXs&t4UjVUJnO-kQmhWvYf59$x zpL)Ygf59Huu_Xm9^`Ut5b5Ka*37}|#&LF&m_RO_1E3uXN;sv{X{rFPW38?QL!VjB9 z|Fmy#FY0IR`lmhc(%f@vsyBjcO6Z>8cMQycVE-|^5DTVN%~YzmhpMDN?n@D>YTs$` z`W{C7b!rM}-tA=?Y_{8<`x|LKqwG+o>`-t+P8{qj7c=5++uE3HkFmjHm8Hm3JWcJIdBXb~-_(jY0%7aPq?!mqnO(;J0NqYU-h=`Fn~ zBCa>HrpZ?;WnVVrDFzfkNRzr61H z75gLGkIf)us#fqfj_k)(tFWYCkoAxrhU$(Dz|D~_#z6E~f<(}r!E%fNQ zo@Tm!Z)jsyZ?VVZEbm#vjc?y>vD@Ul$?HnveFeao+0*oY#cq)^ouCSH#VZWuU&;6i z1x;^j*6H__wr2Y)VCNmJ%+IgbT?d|Oce465D3+Q(p%n-T!zP`mQyXuEB3w>;1uXjR z%kba<(3x~`kUe{vYqr|+>$cd)x((nIzq zukTm9YES4$lKgG(L-i=wV#h$F@GjXDd7Pay2RRg28&cgrG+(@Gw-|peZq+3`SY<#T z1YzCp=~}?%g`Q}+Hw!_l)|A9!m3wzmzL1Q{KmHzqMj6yFCdU^OlX;M_q8LVWX7o0@ zN9#6lPSZfb!^tw0-=0oZ_U4#!Q9+cik8iWPHvY;WB=cR5Vucr0zh@HL7}Lc)OzvxT z`|tq>hN{db%@PD{<+m{&alocBt?4-eu2p{GoOChEs+K0GHs8JE%Oj8SiqTYkK~DEH zQ&=$l{rF?}f7)>NnM zlHU@h*}JCYe9pd9q^^I&GK<&r9~~0#q4GQ|gBH)$RLkbV?!mADI|amj zhIA>R-Pg|CMPAo4=Bd~1p+z642%o{gJ?6}g0Hy;?Go`OI_L}BVyU-o)Zn{V9$KCZd zn?q5%_sCEgLN<@i1Uqn2COzTAWC52|t;r#V0W%SdTceVDphfh_n*Jc3L zVgtc z^RspmaMe!xmc~7>dCJOM^MU`f;_YvkFLolEy^iFpSq)@L?AqM)--QG;Z=tzqm%Yi| zvX^P{CQMYT_2&9FfxOSUnZ<9~#SKE_^E2F5StL0RhTu(mzI)WI zaR1kD&VSp!?To|t!j_OB%6~SV#KgzSf^?AC`!+b_&==;1w;_rjZ!<04u?M;j_|292 zeb{dvd3yLS7Imr?vn%)Z;lHXUOr1A+woO!Cvi{_uE9CEthfGM_tfo3G|;h4=K8=SYX` zkAOe}!a?JbX9>wrrdCn$3C5r@nD7xc*uy;{DC`%R@AukmT=R|hef#3N%{VMBZC7h^ zm7wRr|&^=@Fe1%&xI#%j9r$} zN_xxo(Kt|Z-^hlXiT=TdaxmV=n&{u1gAOe*f?;(*1}2e_9wb~5jO{#&vN@{Y z(&RX%Mx#)Vf>h`$Yt8l#>@oFwD?D@LsE2934=$|4T(r-=-MwI)loj=)`O`KZk*(W=F|` z?-++ESazx=KM*A^Gdq#=lQQq4NgtrhCZ32Hd%$kgDY)l)6BTRcoN2w+`mdKYuo z0sGSWgR`xzO00^1HUBz*l((ph`SpNZ++sG_98EbEH)4=aAHBP~nC>6Lkx%JjW`1m6 z?iy)6``Es!$(4vmN_I8_r9so+_UvLteFEz66`A`!L6JAX?EeJz$-H5z2yXW~dxgPh zx);y5|7^_P)T2zpW}1Ah8qUeoCbei$1y(#)~d5vcL)ZxPG{r(99itwPNw(g zcKdb@(kusL0EHc}zgoOnu-m!JW_>p;Y_vjV*5`K9%j39b)v${a^yIjzqjnVmV#`R$ zo*_$?2bg9BWdXSnV=~A5^r6LUuKuixqlBj1bd^3uk-o+;i}dP>7^)JQ+?HnDy@{h&0ApHT6ijwNW1%jI zYgYNujWtu9S+5IX1$8B@NX$``1tVY$*m3nwE9MD?((axfzDF6C!Hko}=po*vtrt3b zsnNmI+u9mqnjav%c15mH8jb{T8qZwvFT445_Yu%6qa9qrd)rK5Xb_A2nfH0Tmt@{& z^FAQ+9_GDg=KUVtU&4q^)<}QnUEG6QMz|nbcbfhGvJ0;$C0K4l)mgaqu9(Y>7lp*8cl!N_6>QQ_q4%u zZ?pFcyMwngMJbu0_7oy&^4`JJ{nB32`~`qTpP1w4OMesyrd0x%qs5;!&wmNyl(o@( z@+Hj3+a1lRFYVT0dEpl2`IbsWVWbe!xrJkV-&2&)gd((Y5>xa1!9HmyW+w*wI4uMyX{c4EQ1 zde7V%w+qiWD)E-`V{}%SeJ;7D^1NU+#M!*QjLgF2KKP2c5u&W})D!02xP4~MNTPl- z$KrOMoPoSfH|-MkSoho(=B@-BU$*`d!fw+)Pi09`WgTgpLaebm zw5A@d*~Ty2cyg`?0P8THco`Q6v;TUQ>7GO}cI2#@>iuR`((Z6p0udraQkSnRVU?!$ z4c!=Eezqb_v!29XvG$mnnEgrn)8;XTMQoaC{R!uc@E6I>rJtt)^yoqJ=2r;e+c$6w z*nIny-KlOF^=u}`L=!(?H_e&B=Mr;n%I?(bK@w>+EX@6UzI6`5bK#mu3z~zi#k$wm zbng+H4un`JA)BFuyxp+P(x<*$TB`c%o1Cn^!o*XE*+VJ#U(~a$d)o4Hf~o&CU^t2H zevO6+q3vtC2Xt)j*LDZj9`n=JcFX!D70Y2%Mmx5%J4~x1cFT)OXq0B~R%#IV6j7vy zZ3F4a_ruFPFRxj2Se+fl^P|3_d`J1_`8VIgz`!q9~`y4jh~}7O`wKmoM%Jo-}jiGkFo|sD@==H5dLr{bJH=l z>Hbn;o;?Owp{m<`%)Y!h2nll7BM59A@=E0;Wlo?8fH(YB-Ud9ZZ97AjiQDrvEq8GpvKT{2RNtx16v&Nf|kw zbbE@pSyuVQ8up>A5}-)sZX``D)HWR?w|@uI{X6@@9C@!BZtnfgzQG(=?k#C-O;4*Dn)%Yq zWWD94!3uA&`(%abxWe1j^{%;Wg}03>&)mDh+oAWJ4Y^vC8l6=iS&CafFfHt-zI!q% zPd|iUVj)B@Vm^A*mfmzcVh*kF4(xtCjw*#&wFY$#$H_zf?{rE`;j|#zw}fLaX=TN; z51HXBy~Wr6>lG<7(sh18+MblDGU%OaSKEzV^xqzpu|r&!dgxBGd!@IvyW79bchuRaBW-;HEMHK$Ar<9!kU3+O_h$DM z)6M)<-udqBZqs13_d@r``^}}Ry|djHwKs=WdpkC03AR&}(qyD&n#RUE#(m)~bG`9i z@9ws z{mD)AXnffJ|gwCbEc=H9f8L zz}`;PJCUuY&SN+02bXo?dzbYnPqQ5^Yw2;9Rl#%c8<(|Y`*=TsbIdrhFbvXBaSt-aX=E_vP+gK;jd9f1KhGtuZw?#lI1g`6iS=Cg~)yxls z;c?61{YckF^@M^6=LmjgmTzV-G)m3*p2B;ra_L}8Eb4t}&7el_-QQ0&bSlSu!BHFU znPC=xR@nc{Y(QFDVa*{M3#m|zIRtMqEU?ym`B|a2i!jx&z#>{5iT@q%QTi5_dif4A zf_ZD1?UwX7&$K#J*fjiKd@e0ywtu9H8Z~ zeOPyavb4>EuMB3tl3nBqzAM!)3a-FXClHDIBXCKj<*5N7W+=EQrhdK|jKt@aLe@PC zVy;F@VwXNUD>3=H`%~GR2as0e)jJpiI4pI@6&Uh@t76{6nA%^aBjJanqbZ{iz>Fh7 z%jT|UC5tl(GNBU14+vqbL!|*4Hn;)-GQgf+>4p?WsJnBpT+v0;pK?W(pPujHKF*vd z=a>9gQzBAK>Ge^njSvMVb!cr>EZeHuz|$ej71W0bu=(A_^A<;PesWt?pAz;wzpRU@ zNjzC3Zo=`=QsTSvR1p6%-t#XbPj8<0R0iM2c%Q;=gf!O>mf(8?zlZqt@+?5>eFx9w zJOg=*|8Su(cRZ2JYs{53g)O{?P$+4YlrfAJ zJJpjA1nZjL4;OZ5aStdzhgoVC6>LsIUo4|*B`r@p^sG7mUxn?%=grV7qlLaqM6hJzM8VCz&y2OjcAaztFiD}r*$=y{sy$&%=`HbtaXu#vEm49Jfd@1 z4TT)khD=(EgNC1?@hGdeF^m&qp`>N8GPYwZHbVBFR!O_sNHdFz4X7nY z6mZ2;U~MXZDQhmEhfROJ8u@KT9tnhY<-C4cIopVr^@qku^_>w;!**M%Zh7iOBJ+Y3 zX5%Y`XM}s8q&i*atYK$0V4IHVHbXB;q-j)b=grU*{W+bVF`Wu;%S_zc1jQ*`{<-_% zcy=Hyj;`j6TiI6Z8Y&{mq3loB4WVhPTo#iO19+<9%vQd$ajh;bF^#?~v?p;f1JYEn z*bM1!aybIxq8VzI^uRB+N!x;4O`JOuuCx+whQ@3RFvG<{ZDBQaTZ9%~+n9 z^<`nxx{ZnI;TxCAGY|3UT|e{pcpjJHMB=xRMZ+dVQY{3#sDCQqwZp?H;Xk123X0Oj0czi5 zaKm9lKnB~Oel7a3$q8KAB9TSISdU(SoZ<`Vy;@wxns9m%NKa24 zDpDFDq;legh@2i1t}r1WO`pQ8U>a%3-Bi2UaCVz&^IUdHJ;?#GNco_uxm4(N%oHZ1oKDcQ{Yal^0^uLI>HGsZ(P#EPZSLbL!e?*Y#!m7yVeYm(kQHUn3QId@&<4U6&0Erm;8#=JWWjs>NdIY z$<_c~4tcU^-cNWIVVDJ|UH`x`mIJA){@_K9(^d_IjL1EuoM1x)zubJBEbP?v7uBWd z38lB%WV5U`lo9@``v7>HVexT%9u4Yut4!Cg3Y#>!lephp|94z+l{rOR@l7f(Q&w%C z)V|5B&El^LyEfUayp$`DaLT6Kw^o_=m3Jg@c`$>DJ8pfHuABI+nX(7{f0TVrYtuDV zSRDQxNxOFDU!=>razWRB;8=|nry6!+mj6Z=VzrWtW0ROE6hF!q zyw*=MtrrS^x$0E)#~EdVu*&hfG6W7H`y7p3!(tTi*1|0Ew@NL07FZ2vJ&sG#s7-Fy zIM&JJ#_mC}tlD*{HG120)|n4L@t>K7E>V6hR4vlu><|gM>Y1y*E-V~zxxOg`Bn7lxbfU*?R(5LM;Ca_anFf*^UbCCneF*d|lWQX)(o5uQ#ChoAB}Vjt<1h7h1vB~t$4%rADl8@9)SZpNnrvl+Jp-G&t*4nvG%T)V6q=_S@M)#`4U$AU%D(0OQ&~ut;^~e!+!2CG9%9np2<9c%yaN_m$m*g zw8A`-c_N>3%7rtJN1x^#;}p(0{)2Ok2V7PO&$vxEeB*b|WGuIEBV6{e%X%6dbNpJ; z?V}+dxU2#EMqlBQ*O1#P;=Ri@0^i};lX+tNp5T$-P|QeZ6lzDHy=h)mc((gHpBYtE z*reW3A0w(MkFGI)ttxEp4z@D)RTcKGb3SvQZCz&Gt14`fQ-Q?O%6!MG+uzDGs3xd{ z_$N)b>cTeTTkxuxQaPHvHq4&D>2b=op+VXox*GV*E?bk?p5T%!4jZ(MviA;aNPtCdEJZcI_?CoZLuOT#fc2#cEFpg#21r*Zuc^mWLsez&DWp1; z#_EO?X>juC=uq}F>M~erywnQhGmm^*=ym_2rP=yzVX?Q@Pp7JT)4m)Mi)GTte{PO_ zTi7zUE*8)j#>5AUtka!W}J3*yv%F``h@lE9ZoJ zi5Y@X;vDVhxD(Nh2omPt*nUED~>jv~F~JWQHxgrHOK9DhMzb}v_^ zqOV@ftQn6sNJl5fG7VNV<}`w(9ryXuuzNqIDkJD&?blOMXxZiWyfBI~bv0h-u9}x9s1W*j(P4EY@MsuwDC3+A)Uz7%wI`kn%gMlX?1xy!; zp1FAc-x%W3GZfw&`tA)y!bU&!WH~oqk*;EjdHMw#ZD>Eep$;@(b|?NIq8rKwh!-{kB^;Yu{x{< z&0k&sIh&`$wD}1Szg8KDJy@O^pE_kO{=TqX*2TPREU?>!2jSHT^y_T62`kObJ1I6V zS$Rg<1Ei)pOxP5ftCF8y%ZXdwYf*m9ZD0!4nn+0ucgNzOq_))DYJKTy%K&x(rJ(KG zS$|HK=|vgP$J#WVek`o-w*O)J|5(`KntF_(#%c}Y1T!DMi*d3@ESM9xD$XH?gxyYD z>@<-Z%~<|D#jFO>sL?k}OD};MhOl$zlzTrF0`4fEm?$M;AXVY($A62U~&{va96SGP)&(Jvx0L8g8Gv1u=6wZv* z^|Bz`Hz)~%GeygkuhY)<&mS+@`@EWOmx&b~ znvVY6#80+&tE^{j~*fR!hYvB`!2telJO%TqP@gvX-$ zm;b}pnFmHya}EE_(v<=Oy|gz1cbS)k;mNmqB=H` zv<2p!Tv?t4#wzM627ofD9BXB@pN6hN^Zaa*gw(%}YXQ2fnE`2Xttj9S61fW`(*CRY zt9x#^+WdPyFISIVNUnEJ4_47rOhku=@AdjRk39M_~AiRzO*8wM_yP>KozmS}k8SlrG%Z=0m ze#3wrOPYyAD3S{qR0sj1z{SR)%TdJ3gTfP>s^1^UEz*8@u%c`M_y|o1H4A<+gdVD= z7XOi)X1}kVTK`9Kzt&?!nkisl=LtQn2)AO{=Z@GOJ&BQ3Ji>$s62jt|sq~An7!pUG|PztmMf z|4E&W)K!=H-?7^}oESu3>59}No_fe~UGkJZ5+)Z1UOTxCBtA>>8y0%rp~hW8Cf-t4 zO}~`fwck48;$%EU(lsWX^y^E6U(EQ{8ZQO@U5-NkuDC4!4vfmBKlY79H!f@_mFYl? zH%Hl&{jcP%_6)b`{uj7DURT}!S8`gNDdZ#eLU}HT-YqYGEj!*{TOF=OBfk7sa(dc# z07#=STUraW2qL#q*}sxg>W?N~Dk1}2HbwZ?=yEEx>a#OYU_vECm z&%SC692=uiM&gawa>;WeVgQ|mpUQFBEII=^K=`W=Wq#b1vXd9p!1Kv$)4ib{IZtmZ zrQSS`1o$*tq@95mI7t)LhhI;c-P}tbonCm|E3xtdvc61R>^*%*czi_aEnzT=s>(q< zdT#xnO348Q!iu@OEMnue$e~qXNVD>dBVSQCPosWf z3)72yr96=o?CyDiqFslAPW)Z#m~?Bun5G`F>ltacnzaGWwLU5X^Izluc^F0dY6ftk0TURD-&xX&jT;z+e&Zw`%5-|ji!vn-X=kwq(};^J zILoBWHMC6e1=ba$>f=X~tEz%ny{^64lWK7+7HX18Mnsry{Yng@Mge~NM zQjLWHTl&mEyl19)v27~xa_j0S{*Mw2;pCIB*y-Tsu5q3*n7x@JJw;0bN14UN*6B;W zG9qPx6*$6{j$6{?h0_11uqPI(c5zq;6;u9wf2$#JdXteKqGBsUd*vx)OO^E9isjrJ zj|!uKnG~xPpt?XM(um3TLgx20-OwNxJ0b3aqTfm_7IilRn-oz&tWoFUxg0|Z z&Ldb_U+6;q3vD=%2b%C-7W{pP&&4maBuGWG>?uV<9~P}z^d{-MMe=jH*o1J4u4zcn zo<7rKuQ9_D@0oF(^dRM3M=yHKZmbUO(v|Ur=>3XU(XCumMYmP)^IW7{P3^YoaHk+d zof=U9do`s_>U|$wmFS~o=&G#^*O-Lp08Rv;uUH!=p$+JW4S-Zo1S$6OSR z`sKeDMbF!@Pa;2q)wjJ}z+AknjXb?1)f5XeY1nc&u3Q7i%pntLFuG=mk68F^!Lm%F z@v^ZE6luTJC3!u`YINx&k%p1{y@8F_0A>KVzY?Hq7|DwIGzPI^+{o&~N3 z6mczLK42yO>Ho^dJ0$el#fr4MDrFSGEHLlC0EdKD1D8_?E{fO_z^#y1G9#oX+dasX zp?gv*%6@>$=ryjICXByJww6T3&0}rEa$WtCtXE061XJpXUZTFLp)=B|qBBXM{VP{N z1eUEHs|sUG%n(o_ZF>iMBYxrprc&Dm244d=7Px7Z;G#9?4cu@BhuA~G|GYt2qKP>2 zkmE|(-(2*5WFI=}Pf=*^wQ2LW+cYc+wY}TWCl5f^{1N}L?L5Z+{10uKXSGe6!gm<% zEXwhzq9A`CJ@!^!UB&OmzaRGz|F`m8iJOA!yaid2@2Ra`BGH(y!{rfpgm0hsY+5}2 zL-=RomgA=2@^Bq+Ti2q;-el7@;kt1>)L6cqajCdV?~(`ZBU~}AKdu?hgLC1|zJq2S zSAc)&Jg(&PvH~dT$r$H*X%25Bz6H>mHf=251IxL)fNx#?SMDAe8izdS+n}%uVis44 z^u4@vbBZ{DsoXuK*T6jtoU2`fa7q*~+CKpR@Bdv*uc^22ZUAUljRvOVC|xuuP+s;F zT{Mv}VJ#B&!JU@yZN~s+Agp9srMPz^aSq~o6Q{vLmx9>e81xjU^ZP% z?+v^h&74Rr-=F+4iLY&mKs&1?UcaV>2YF585^>QAMu*xO;Px?8Tth4kg*0J_7Zf43>PK5fKGA^@-6rjq@D-SlATRsuEdcaMr1Q%^x-!*W_z|F4&7iBDu z2%J~;kRll-0JxzNpfkdO?z<*Ko-oL6{h8Gxz0 zkQl8osxXuF4FvEQyxNm|l@>Zj`%?OwHw61sifb3`O5(DJyLP|yLk`KxekoT1ggX6M z@g%NM>1-ZTktUHolzFXcD^5-@b7rySAaf%#rkZsITSU~@A_B<9>q}%5i6gTS<`T%% zICm5^dSzAk@Zi_yDq0X1S{hSH;q0;$&O9|~DxBj{IPc|+EL)yG)Q?^KSZ4RF*U*e9 zuk`6)5u(j(!mG1U8lxzmxN8aVPu^vzJak>a&8`F&rJ3KZfr|xhT_rdg$ZK{<=o&z{ zY1;lufKi(H{u;RRz@4oG7p0l6fa4ap{~8@qiPY8y z%gkK>N&&5;fGnsOp+_>4u)S=+#EX3@6Pnl|$=U24wku_OK`Ov&Hc0_^3w8_wD=i{M z>tfFQLSuHu8nZW~)nz*10Rgu^xgF``(R-n_4=XO0)#Zss^7a0gDybPjZvzxXpc_D9 z%^?Wnu`U$^8UV8nm|?_8!C7vMjGFXz+i~#z&q1CxPzUg$!@#Msp#GC}qluyfMwWn5GpwnP){Z zg@4Dh$&sLD)Z&!SuiBNe2h{3XT(@&f1qn$=uQ#Kln)~zj_9|Pdp4@yMiy<)|c4&ns zTIF*WTGs0DS}#i(_oDE|bS;FTK~UBiN$Q4F4tW1#)AmhiyCyu}XY~ZLLEvk$xRmvE zaD+A`^al#nQMaxMAGuu%4I>*_mUI9$$%3_2X)mU4xVvyCafK*Qm*5uTxZt_;R@^w;Ex5k8KDhR{xx~-G zwZPvHR~I*f|JC@$;HKlhn1~TH?s5E^leE%xxT*LH`95OPGD{!k4>q%C|DmbKU@~BBQ72{ zg7`1_4&!?{K`R}?cQEc({J-FSzq7V}zAJDua8KhF;ilu(;nw1YVd*V?u?X*u|8)vqfqNMD zAg(v=GVwk6UP|<8rLFMXi%Y|OgIV}jxCSJykDG$OF5iB9yW`xrcWBJFaVdn`NOOv? zpKvw#UrvF);kMzb@&7g8#Pob3j_rxkA-KM{UbtA|V_1%qz5vi3ntUhD#(xdB8UJgz zmAJnl<3)Tg^OYwm-opPU-wtH*2j8*$AA!rmb;t3rL1}B^GVtrTSRB?7r3Z0e;6B40 z2j*42*&p+>1@{ha9j*-H_z)+x~+% zg`0+Zg|L;lr*P*e{vBY?@Ga6HqdUNz2g6IBAhH3#u{b;Kb;8!+%8Ae7zr?NO{|z*H zFJQ5{DD8l2iA%@T!f~>^)Pd^&jEv7rTsxcx*A~|X*BbXF9mUPdrJva#qfhv=11F~y zShbe2LM>%sS-Jp#`M7zwm-xQ|CrqIp8O-K8gYap5W&94ub;C8r={TVVd936l?kf;F z#@7YOEhD@&6`9QcMfeMlM@k>S6$5mHuD4O!#<*u_o-c5B6Lu%@ci=`rt3qDea1;1H z9=DcEZ{@pz?;E)FxH0^fBN3xdTv@*=l2by=k&*HkzTrC!s3z+{i_%j#Q}Q_4Vrp zW=CF3p5kJos}P%0_&)MUFc!c+XIZcDNrI&ugOD&WSK3Zy;urPN3BpgblL>HW=vJ4y zr-7b1J_if)856XSSRKh^IxlZV;O@9@!*?~6g8=yf&GS@P8EdcMI?^-?nNaF zNwgL#hK~*`GH>0<&01b^<)4av&ZeT8V~%sp3`}V-IGl?e2NyJ^&1QbA(Yj~JN3J2k zi>zLx9pbZ|7d_(#QgEW!k4KLAU9PAYyIu<9=9AJH?m7P^lm}myQ?Mk61F3f{U0i56 zbM#{TBBzO8Ui?7}3MIL6xSJJm42`YyXcxq>wLg`sW$E0@K2_~V*K0YJ^8W|^XYkBK zspfkITQ8^r@kZWN7a>Cz+kWi0zH+G+8G8MW*x;FPlgO;DJEtTHcV7f94r-G0l9okk zP>>qGNlnktQ>xa33YH^eNKLcUiy3-@>|v2)8z3y%ipQAKOj7(F#x#X4D zs=)s$Su!RBGr99%Dt67%WYYg5f3W&S-r$;8DSU7w{2$CT92kLm@>i!JKg~TM39|r{ z#C;+_7t|LGIdgnkg&XQE>xD?-bT1D}Z;6#hD~6|}l0ByWs&ym1)_~jRAx?tLp$MoP zd0kFNt|SSzrlof7TbJbf@wcP4;+NN$8bthi@HdS3cd4fval=^$j&;aVJX0NP#6{WF zIPsweWJ_XPXlPaKsLRC}xyX&ngQ_ZfW4(LK-%R&5wWu*SMD9OjA+(r`ZR%};5_Uy` z=BNdYxt9Ec$lqydqx^k4^7kQi5a5*8BY*EDeSCqif{~%+)l_+7J?)l+npdwP|Lq>D zxyJ&h6+RPo=F7J1_u;I3x`$zt1cSRD<3N$IvlxyCIPoqGl?QxM4MkRQ;T(2AXMB%IbFYpPK;9cbvYD`nT z_6^OW$md%b4~Zg=7~PY$5agt=KQMM%PMheA7^&2sP+vE-gZkh4JIrI)Y;McPt-6(~ z#kpda9BJq;hS7fA`>5U!V z(T<_WV&sscQ0?0x^ zhC&1(DRer8MSE_JTGU*xQ}Zhh^};FPkgy9t3$RgbuBX*{@cHtxL%jGbZ7HP-OSc^_ zS7puhbldG#+P5NUr9&lcUL@^c(&lCSciP~uk+i+kq856cTjbojtlB=GW1-YlP^D3& zEQjDjqq5l)8YbMM643^*flmrp4ew-qiee;aZ#grh2WEv?y@wkC-^%Q7n_H!~q)~3G zr#iOO>(^{gOe|YiT7gADA68L!wA5QP{+dQv?qTDLoP;?F29mSnDmh*{3LjQCwB>b; zWcuX0mU`>f$JsZK7L%T}d8GBM`Q;{Q#cMF`quRC78#oV;jq27`cgL6Eld+?Uo9J~1 z?3AposraL0^CM7|E6!5s|E%~16HOs>+d5@y&BV6zXu0~Tjb3{USI$`Mxj?q}=ABUd zujU$t?#CLqW{qWkhW;obn)kpZ4c->!1QbgAKjNUfc2x!;zjB`9D?YrS6b6OjlZ zWQmwV#K*1m^c%Qj#%w2(;-L_EFwY$Nw6##oIQ}P9qW*$N(+EX6)r-yaI*!N4>-si& z>)Hd!OC}ka*yQe4!OEd6JkdwZXhUr$L~2{-df?3RXw=oxA5fAYH9P{4(I$daln1#% zqVkZeTVEx%)$3R59_az;tL6!+V_Ut6qaB&t+E%Y^OH}`93w90puiEO@HT)avL}|0% zG0ZnJrt|@oO0NpwnYN6bW2%OSg#UbBuG)I^>k^L9uafW!HOZqlt-dQ>+ZRji1>^m| zyzJ2%C$O;MGLGlNo76!``vu`=Jmkf&Z^uPjr(aNQ+UZROFQaVp*b~g#!7H++whFa< zLwID3>RKWdDM6(goJR{{CR;K|THDXYEOU&A!N>`T@t7g9bHx9=(AVmfc08^z2Zr;} zgVuCaPgCdH>6vxrRF{K9%a4mdBA^%9%y&aRpZ z!^!7AEhiJ-Hcy4X4*LF0<^LTqbz02RI)TD+|Td8#&YWx$~N+bSpO`M1k zha+*P)wk_=73YaK?WnV^rKJ@Sru}!893PeD=D%uX^#fTYc_Pfn#h{^>VaXQnJw%+A z|4g`5fzGXoTrO0wD4bnz7!wYe#7Bl^icw%8@Gw}B#d670zN{(g2VX%Z9Ls1;EtqSL z#2tb&qf$hi?ds_cyeDyyrX zLHMhftVD8rp7<;`eNGKz^F^^ao9#P{e^h8W{$o!+6VA~@a>@(c7^nJOhe=O%oVw>a z{T_RdyVc?AFkbodu*JdlSAlxvJ~UGe8!s7%-|5~#KdlzPQ#c_QHI*{--a25;5n<^tm0Yie8oIfs~+vB53pC% zReL(>ZL0b!RW3u>I_d4J7FG(Xsj@riZM|aEBO<+!9Q@rRJJuWFFot-7MmgIprWTWq zzUZqej;(u=Hr;D~kmqY&1W zU&?Elg@mOLSVxp;Vss}{a@vsy5?sw=%23hxeO7$J=aKl&)h(U%mbG5tZvX|Q44ovJ zPG<0dA(W?`_1X#7e{J>kJ8B28-i5#loJdiU?bf4K^otZF+)PC7DE+OHun1gK99M)z z-D+` zU4ODVI$r3Yp;~yot|zpJgk4gvUk{tD@m;z4^m@IXH{m-tl*b$xArW|@FLy{a?Ziow zXtb~3d#DmFKd=)tg*GP66frM6hlo)L_OnW`2Y{8jNFLHmJBgDijebzKb<=AbJGhBQ zWKuaEqRAS{^Lz{(v76p7`zJl4Xj6D9X&E>$GvxVf0noF#{Z`p2l;8}vK8KRs$KwBx19 zG>fdp7C=IBSVF?&zbveih?^y(3lq{|e?w6_tX6Y>w zmr5GK=Q`C){(H9wEJ#WnHiUB3kQvC`VT!e8+K9MldSS1y}wrP%R4zFe*X9(BYEe8uA z73?X3M=-n=v_`3VJ@q;R2S>7!EC%8~_Mp^2gn^Nvepo~ZrEi|_ok_tPq|bfWZ9#!I z5+{8wLSL1OgwsN|R#9_%a?iE#xLV(ni^dUQ=~lxCRn;S@+*v37RM$>} z?2J@Z??$~&z0p5e$Wcg3`MkH}lX6=(~S2^XWw zH7uC(z?da#LLNgxr?G+GT=VPTgT){JDyFcd>f0Oj21W^BQkpQEMUm2eQVBUIi8@D0 z`$F~2(d!KVMz=B+gL{q9ki)nX+=}@xViQU))*(wzh~5i>do$N7W{%KY=A5t-C-9qy zi_-7g>irzOW#d=>4f-PdGX6xf%fATw|Mf2luT}}Y^g086M*ndP?qChmp&5=fEgnKeD-K6;>KUtD-tFUQ< z`pefAA^pr%xbX}nh{_w<&XPm0m5ieLTh`~HlL;0AJ;?AFPdWZ?8GatgaR1c|Lq(>} z1bZR!kisSJ!;!pNkylie*c`v+?Kvm<9NU*f!Of4WY(3K=-9Tg1OAUXAO`qbe)d?~rRJ40*P ztXYnm`WOa$PuR3$Gq4IAjTPa4Y+51C&2Fqtd@(z<^1Wc^>^{4t6Zv1vZfOB9ogcJm z(xyAxeG-;co6zlg%8T-%*Z!zbU-i*zXB4`z*rUE8RC*!}{t8#<#>0(djWEKl68rKP z+acAuuU@NWJDMX7t|1Ib4sq%e)Ci)RH;VMZW0WC-R(Pp2^&@}$_n@7uUhK=B`@t#Y zWhpLsTz+o23W9*4?J-fjo#dwenW7A+_9L0lH9+5}#LMP(X&VD?DP+y(v$Mv_hRm@F{sT!)Wd=gYIJ}qpZCPP5v!kVHf zqJ{s)UP8iz2Um@R{dqwxzKM0R>zi`*#!Y&?+JB2S0^nZ(j%OZ__m7y<5`8Lo6N>0I z2d(I%%GRH;-4ruiftIm-Ks6_*_Dorr(!SBTsz9`Nfb3GEiB5PpvTprAJ<(sUl|Gi& z`6~BVkMTS#hcqHD^_}OXp62Sk{(9T$v-PWMwKE4ybx>{Z3Q!!DW!+1e#LOI3JlExt z@~0!0`=X#QPx~_y2Kyk-CHiLt}3@ipx@A7Fi^#Yg|>Mm zHv}Myd?A2URH4T}-RL-VFYN~vJj}t}92X}uJwlj+L+PwfbxqhVI*(X(3{VuxQ)CXd z($2@KCkN{NyiYzv$*fg|lUCL-vP+od<{_C07Dm6awkS-o5Mc5TO5t}OC@l8C zXAY4HjKuy1SfnjUaCoGJObiUkEu2<}g~h@jz={8NzCvbIWwVRQ-xZl_u$Vq77w!%H zyJCGGjFki#$*&6th=wjk^ZJ7??y<06h{#dC zk0%=-+Zqm<*3KTc-0301CM8C-8G@+f9;t@#&HQML)df6N$Ndr3P1?N9k|bEW<~fes|b_kWLU@~_xB4tye(op178HI z{S11!`q;%#E?!h6bau(0&<&k#EJ?Wj#*)3j**%zT@hyIWIPaj)c4$iQNrBkzMG6;Im?Sho%v$o8uunLliLaqsr0fOig zl!E$Darv5xMQ+u~nO#v<#K4fUB>k+(a(x~n;|)ev0@zCC-Cc*xC09pb9CV7@H5kq0 zRW=v|Mlw8&Fe@iaKH?a;#0%k$`HD0k9480^Be2JSdlWdC7i0++;QuS^T%DD4V&W-W zOA_}du{3K3WY_+1DD#SQ&!^!pX$@EYJagoo!){Qxmek-J;a?+Tq|*HMxa3f65RKk> zl7e4Is0!a`VK7!ycL!v z(+75ac(oP&2bPVgs3=5UdHGK+!;kp=_$?`&(=+(H5iU~q$#bgOBt6A`_bAn5lHRrY zlm=J(xZ#)O>VZjmy~Ky|Mba1%s{fD5y@i(#YhpPe-1FIo)%08R`ZwAhl;gB>kH@lI zCgDeFJQI%PUUcc0H5;vtOvE_#Baty_xFfbX;aK-=0f)^OumczV?Xvpi7QM0UI~6mI zSLar8RC=7=b;J>Pjm{$W22q4Ff`sxJMQN#oO^SqZD@vL>OIB6GLZ5RjmB7foH-DqV zjHZ$I!)5B1jy>|XDj%n(dCj2=@qf9hyle=QZUw~iMx@Lz7UR-hNN&kC@YC`kAmHRB5UcZ*mr=;EIWpK4 zNpyrnQ9+ektrBH43$TrZ{YG<2k*TK-83-~=J;z%B^G3M$*(?gTI^dM@p%>i z&A-gdBq?8+&3YFFn8=X1V4jzcZX%L7r|x53Cu2Ep<8nV6?sPrNoF0QhNgym!NFNY( z_?I4+siYD4NY_aoQg~|Gny^=}ji+YPR2gLYA3=bo#ds|3@7i3a%-|LnVFChE8yFGy zYVZ#E{U)q6%?Q2R3%yhmF|U}Z0(jmJFV(db+yn$eMH+DA`)kB9_g=@LFDIhsH20!7 z4jKANu8dOm=j$2un?dMN+lx;0tJ#z^t04HvDD@^VElxfFM+$H&xG92+&v!9alfJ%HopX{wON))pq6c6R5L8~2w%;&IfxPpwdHpLpa zQce%p~uZYJR12gV$eJMkH*c#{}ypF zX-Rk2VB&cGj9NNg@7Xfvx;5cV0XaszB(T=KC|txKDm!d-)#Ni3Y0?BTnf?7~g{l~@ zH@@Xk#OzAU4h8iCpO=?SpjyWw;j)z|;S&EDabt*+g5|=p@9A@)fnjGX;Zo$S+vKhr zPhQD=zSTyanlXWQDc%^VUY)=r-eV(K%5?>jLvpALQ+Q7I>k9R3TjQJARs1 zFCeCN=={EhHk_1WwyIlrtksA&k>)4hPSw0htht0`LD;f!o#mMm{+4)=ma9?K8=4|1 zx9nMR1Va2s^jQe7QkNU3@2-h@jkJda2?*~83Y6AwM0*HdEu5rIPt;RVK0Gbj)%m6z z<6>DER|q4&U!~oy52<$u-LV*rCTUi@A1>m;e`3a*@N;Ux?RvwSJtB4Ftt4adX-*QQ ztL?Y5)0#>6a@1jhi?jh|k%?aLj?b7CmMU&{ei;wTh^ssccV$OL4r<6eBwcF* z?du3@OZyA42$O2hs&+X4{cK|J zR>*#`2e|-tk%69Qughw236oh*h-J&Zt9;*yK)pMnCxdP5N+<~ILPprp8wE^!CNfXE zWyiZkmZUr!l*VcP()m3xckYa>|3`TkZgIRI3)c$&--EDdz%9oWO+rJ4^PxFw#Mg~G zHh^=qlWp24v|k6Vw`-@ma`5+V&e-CdxKzykPuy;~4R;}C;8xvf(|+vDA>Ul`#GSf> zGq&Tp^D}`=Nze+HG@jciQLS|&tPieHDJO}?U|DuED!CJ=+;H*NqmIKBjkRfN{!qPh z)pquZGO4@h0=K9yhO!F%&ZbI-@>+^+R~?6O>xgoyH;3`E#}hWSZ!)(RBT7 zYVmMhNXaGMPFhnSsZ?H;O>LL>u90#D4=G#96!mBan>syQA7>xjL_S72mNMEdbK1w7+4#`X+bB6amhKD(x|xq*YJw6pIM*DG9k{# zq|4gvM~-~Tc#q4n7ME2DEGlyp@$~Cw)~#2PJ_U(db|_`I3ayJ2l0DX>VsEG>N7N+~ zjj_5<*fWD`9MYqN32DRTmgJTTyoQ9BHWP>53$W9_NiTot; z(n(pGbJc-ahMU{5Xd^*jE%2I_ifu)tFv0ZJ->t&BpI5(*)NgLlSKiU`s1iwR%2zDl zcEaL7}bwS+KIqRIl`d|3QVNE<|pKmPci!hq@se3G17A$_non3GWvPpGLUEKgRb6M-OeBmlSqtUT@d#8}w$$ zp~%;tZ`%tW&c~<`?j^NK0vSPq7aB{N(xo|AEr=G8 zQxVu5v!%?OMn-56W&6_7B0i$B$LJ&PUE7I!%6wM^giU@+NciC!OOGNfTIwYYG8A0) zuu6}zZtiL`JLG4@TQQMi3qufvo{soo-DyI-g4z@3F{&D)4{kViDwPh*3fS_$IWA|^ zV)N$(vc?~V3{vEFxx}e=HBb+Y)knv^#hSj>Id%C~mUh)5^skYd2u}Uk<`WHLU374A zy+_@J63c?C-cd334>fL#=XTgI=VO?jc zHy>oTXM{TUAa6VNRN0gDTJ^e}gp3)aT7h)?&=6-})(ei`-z(1nJv><-Y2SIT`f@UQ zndvLl`N?{dlrp3~oAwCX?G8-e#@2RWlIScuFWKX3jdREqXUb~6C-!6QtwPb$MF`7^(c(DO-4E+M8i%m;u)#oO zvSD}xyNE23XH7nriIa=WZc$%6%pO`tp*2*e=9)KaZg^e0x#8O|J90qi37#jh0T@a* z4GoPGcH~*k=ttJoMh91Luto;9aGB3AFIgcNaY!>6=uFj=v!tn)|l@xNn< zM8;Bq!orHOU-7p>psh)Tg$sWc$y5Gs1UczeK}0KBft9%R9P^_*4Wt(?Qd_3#HH^#6 z5pY^*w46K^nO6h)b7ZTZrXowl{zqM&3hfVHsWSef5An9_T~UVGsx&@pb@)cXAZJcPhcU$^{>mwV2@RvyV7~)N-IWQ%IAisJnoMu zwAM#j7ANhC5Pgg1gtPps!%xZkPM{^PLo$W7H(JFpl2!5ZhRe1@9emz+ z$R4{><*qVXc*h*OTqfO@?`H6leINeEGnf(x6LyJ>yxC>)R^3ncTHPmcNAU~13_eNQ zmvl9`aZ~Pgs|g!rQCpfx*wz+y>$$Z&IzcN8+x;jT3)X}?K#zXk8g*usaYM}^a>|}o zhnR!0Zh!E#5vu!YV_-GAWYFBMU1HgEX|Q^3wK2{y@JhM5vf7x`WbxzW>{M9#Cl+y~ zc~{89;}3p;e{BoaJglwyv`~v*FrTM;{RN|r?KSnu3&t{gaF@Dyjd6dM*^JvN)IlVZ zjY}~RjF4pxPg2XAZ{3zSt0c$sd3el+6=f1G^~+HAHy-8ofnPTDf=HMl|Qc}2Fj4u zlva-!r24&R%yfKynL`pU8jY*(xNIryq=hNxqawBb)uc8N{F2mrYmN4frNEV~HPRg&z_a=*#&~<$PBr-zV??cK zl4~(Lh2)sZ(;Kd0-hl!7msgDRuKkI06|W9UivUp1QYnZd_?!%nsSRpT+^J#>&3(=2nYMDGRadvRD2!HwDkw+N&ql88urhS9KUCWa<8Jv)xKBCGal^czM4`}R!r*c&`}>D;MSyusU! zJ9?}78;nQnLjr2W2BTj>d-vg(W$C-(+N+ZrjFtkPvXL?=tK&vvM9TKeBSCr8LEamN zvF($}#f()iZ8RQn?6?WSebcDz=HHf1x`dNR(^Y+5njmAI{0HqDLmM83yR4i)13H;}dl&uDU}{w|!z z5v>jkP~U8Vj_>ZJroU$_cJu|S>YI&THQMtOw`{)I;S)lQ?bYp@jovkUJ~7~O|{r!EV5?EjdqD!|7fA>gdq=Y&Q}$)P%#+N9hd!|H3yQEIWd0cX zjp)V194t?hn|PyWXMm<@ug#^JVjSwBy03z+6zl;B2SY`W65Und1z8W7$R>sg0ou)G z*KSqseWO-RXZ}h)vMQGsekE=H!bK&>siE2JxJ@S?T(fv}o;*Cj$-O~>yW73Wz_>D5 z(yA%%8=c#~%btf^avI~YCTht^O3x>yKxO4g%Hg4Ql(>1q(V(;VITd=}XwJE^svj6F zSwalwalVBmr{O8GDAha%&60-k^y~*l{pNNop6!9ffp(&L;0l|GpREZe6>~L>bacco z_kIskt3NQBHfhY}yj&M0i<}#zlFgZPX;hJ=>H;RhdFgsp`hk(@?N39A;37&dX?ThM z8Xf*E_MM4m`#a$=783g)x#)P%A zKm6fnH$PBZON_S$hwhPtZfTn#Ay(q!IvWkV*}I@He^Bxli=tHSk=3+0fyqB!E)yJW z+|DET3pI*vmg`>M`wUaKtgO{M_blx)J|K?_3!c(0PlBru8`EvbIROHt)14X1j(Zt5 z(>hsVm0Y9GNxiVI#tUJ!=_5nW9>wNd5-lf>*a+9IMnzl@1UjX%Mqnl_{~Z&RIY#i$ zyCf&JkFtlHj53IkrmAi;c<@G)gJc!eKuXfq%-5hmAY`xZa{AAvh&cZi{drxrcG|bXk3m4K=KjJB4}#x zt0zVEoRwEH5#deXU_mBIv*cBnyyf9pHI_nrs~q9?$Eoexjg(quzXX^J5sJB;f3u3G8Nk$vhiniqoMENu1-y1l+@-ltL;$ zIm)FiiBjnHcfO_STpCSbPS#*g6=Ir-mO;z%hdPtq?#nJoD4rj1_~!-U0@j-Jy!LYd zwPK&r^X}hC%zegWCbEriT)D70Q5zRIRWU3ylDMMw-v+C=X9vU#7j@{q&OX|`*m^1Q zqb#L*6dP^5E1-&J!VBF?k5@^bb=<~yw8PrsxeZHX%kB1WO}qq0AB`bO1ACS~SO!V@ zcU@&`DiN{yYXz7+<=~wIQN@U+ zV*6yo98@*MG>|Re4^=CsfwESBDDN-$a5U~adCQ>{fAC?AcR9)Myz6VW<^~5vrDM)o zh)I9JqviTATVQd?*1Xw4GhZqgM+Hk^EO$;1RQxKL2{~*p*%Q2n8Wz3#NiaH{%>kJl z|LX8&2vd6QA@|3>Ceffbfml(pAUPyRukU-vBUVL2L#zI&IJ&$<_AQyBfR_g{KwRCr z!)W^eD(E1MO!>m#M0@LCHO;#3gV{9DzoK3HJ;BdGBTKVb(FHkh$DBSyq%R0Z2qj81 z4+AGcfe=$J^_Hz~Xk8GiiY&)}L2bl`K$7~D3!opHvL0mt`#hwdM)tgd4 zXg*5dZp3M>RS{#%!J)IZRpC~}t78a@vAOaCTeHi{s?wGo?aA;o@{|?CR@y}dQ@4M- zFi-#La1#nY zRh#w#li;aNtoHwbCjQX0{3Ol^bmZIsF7Gb{MqB%y{%Y}VBh%6J91FVLM!M}S z6(&4p5pNyEtJ8~5+*G3qqQJVyhv_4FFckKxq6_yYAnyYVA9Yxwhi zXRX{?mFzKEI3Dd)p{jps40mj1IezD-v0qbvYL~bHeP1a z>}@C70CneHqf2@-77FgBG{TJ$g<+mG8`?oy%P$PCRXg??O*3vBD>zvSHPM|k?$5HA zuU2S4>+h%X)jOZD zPS+xEp8_Xq$SCaEn^d)ZsB@O7=KG8WjzQ#q(>|k~ZI-%wpV8LwE{c)o_ZfrjYxknOlwpBuwlr=LZIA-O2AiGMUD>}d zn%HODtXlA`-To{yHbuq5-{kz2u+bPQm#yyp!f0P}AD1+Vy41)UE2xFN~B4 zGiPF>T?2g^al;l^nx#+XS+F9(O}`Z);Vbd07K3)4pt3wXxVr_LBsKSKJ7FLo_=uOd ze#9-UT7?BqRw(eQYVxHquDkOX)#=^(q?_u<+$TiStq=K8r6j83!pYlDlE1u${^S~~ ziDZ**9;WSw(OvdXpB*+Drm%~eXmc};KuMC@GyK6Dm9l>a*(~@@HTlkH!rv!;s`hMYTxdv0p)vYbx6~hf>)5D{4R$Gc4Ez*$U{c|B*v*$_MdBr{_ou4+5hFAG z_U?2UWr`Mh*%&#t@=Q1x8C)!SbSwwfs;7^@W~$z-b{?Upe|b!m9x*b!FVju3tknzW zgdd@|1w9ck*#k)HUz3d%w^bb}D!vjLFM)<<0@cmuqAdK)W&-P55|DiYsiu=n-@myC zPN+zBX5+YbS`5_to2&VuA=&aC;6BhT+#Thvc`Av36ATkcY>U+U6nkP)XQ%&J_R)`; zWS9?NSbl^v^YI zGHz8Bj>DbPwD@#udXlXi)?EKG2wT2T)1nhnAE&2r_>*qdNPdxmWi-nueqI`eRdQPz zO#=yA5thh>bcPQ{`osc(!x(rAiA0PRPNEgeGP*_m`Lm3uiInD>W#mM|3uhVfqKpae zpT$CKcu3=VUz@uMg5{75bqy)L@n=E9LTntt3EmtuglkS5`Lo!zTy|XE@_OI~R6S-!90Q^NfvqRa zi5%XHug(P|7iv_hF7bqj>lElM|4uT?p*9LVF48R_ftT{^mupC0#>FPgnTq ze=6j~uoU$Vtst@y9O8u3Qi#r$=MVk<2{rYYeI0&-1g$s)>gHWhXqrXv>ToT#EM;KK zqa`jZl^Tx@Ey!QsXHodd-0?I0hbk)8cgSagqd-r=8W6%%+K))$V}^x2#1*ty5|~cL zu|+gBfD-r^|5JZrmO?kb3H{*_5-);p2gY@?2vfDyu$bd*%dP5A zL__9SHL`_dA)n8mxHPO$FJvQ6U}05N+`Qor?eb#mMbf=&Cm($gH35bVufp_A!uDrrG+LO)lV zrrif&hRlDPYd&UT{@@J6P3cA%xLN_*s>fZDPS1iY3)RtIkp==?l>NAIv;CH(YTR)nBjHdNi!okO4|ZgO zchzwtsb-_!SRq|ug>adb5b5_WQ6C&Pnp9f{tTSs#U^c?l+L7w?aU-SmyIsmT879XU z{h{_1ZG%E!=w?fEPO*1NdKc+av$<-ObjMV?6GpP_g6eg`XqkS2yXTHTRnk^xS+WXy zt;V3*8woq5o<6}I-6{3{3F9W)Srv2AXxpzVvLc!_Q~o>VnH?6Ria;3)Ih-H29OuK0 z!W}zd(>%v9Z^iHVi;X}~i5IaL6h|&m(@z>Hxxsq@UwK(U))|hvVoESq9X)9@G<EudPrpFCtu`AcB6jGx1Gz&*778~ajUma2k0{2 zAIe#4F>Pt{)S~6#+4-}f*FdO8;ciYSFA3b}-W^WZ{8Z>bm0dx5Fc3=Jy~ebfm>-xO z&MSI~Gcij7m+ZTPsYSERV=bF7i;@kEBEEvv2EIu}NGyE2;X30wjGyfdXW{81g%u;? zhsS_|2$gJj{GG3LKGyGuR+LRpcmHNIO|Q~L=7z|2e>V-C-e40& z7SN9A^UKRVR&W1iBztd&P|raQl*)wyHu_&`EC{%;`QqeP%mDY-G2Pv}W1QNuaBbPz zhSa4*SHbe|F4CRd!T2QX6q+OHd(|ikZi;ZH~(o`^;~=tC(4OdD!Ki zfm=Q(oSMHgoXuUL{TZjS&{$zg8UEl9aP%YpOW#Ui(jA``S>!DLv-5Yy+_TYYz8W;2 zg!P)Qrk^&_8ozYEMgEr?U?}wfd%!diBR}{lD`r1D@Hc2f1vAa#5?Tn#y6v`9Y)EK&kZ$+nJXQFtpOREl*A8jP|Y zYV{eE@Qvsvd5($Mxb)CTwl#4RahD2h+I?`FRj5Ee%KfXt$+cEnxj%dZDkg2ere#&b zDF16#vZ$L1!f+>4E~$Kv90hmOO-Q5WTH*mzRrlk}nHqFVZsnN~wq-#Cc?fr}EVA%{ zB5EM{$!=Jv5ltjBXJY&+^Gp;86li9h zVQ;)yMHz1T6t0xy$z2xSp7RZBHeFT@HSEw^ch}CC0j^y!!Us>X2$V*%X8LU>lJXE4 z@|FZX8OQ7Ad2>oc%;c;WXU@sv%}Cd|)SY{28=;;{ z+b+H5%#F{jM(FvI>bY}9XYbyVTCb2eSn%bdAW z-%jZJAN=uUj@;C@o8_+T9h0jCVshO;UMg*t+j(2(ZSp*s57+wS+3eU{S8h^nEn?T6 z?2zNj_2j0fbTX%< z;M}^2=`Yps0PX|5)Q_FHYwP6KrJ5&Wa{Ij9E;oaiJ}1?}^G1ujwI^fi*ZRTsme$yl z+a-6<1>fXN7wt4l49(&zm1c1qJa^o7ASUPZamjJ+$!58>fHX(;a}Do$uBYw5ri-Ue z+*ovWThAXLxA#=+??ykn>!cd;yKzV2;uA*Ewi9QU96qXc{%&-(Pvz#+-;IgRO&2GZ zs)-kj4tCE8_1p!cqg_9tzUF_6X(wWHZJwBen=Vc`DW(5@z#Y)q)c+xyMu^YYbn(#1 z?79*=4#i!M>ws&4Yk)IwRd53m~ykjer%sQT{Y!?`{(=AxN0fo_NVr38CN}} zqs`uD$CeeYl(`9s-+qeuAd=cQpKfWAmNKHceQK30)0?O4bf|(BDM>1;b;@jYpmj>V z>eeR3qfWF=NmYeyQdU*n@Q!UpQPEp;o2I3x)@@U2#l7W}pz5ke+mzAX_{1{r>+x^< z`tvPXXY;L-Z_#?+DZU#CpH{{CKP-vwTTWm9s(fF!`wqx=qtn;9n*4YAeDZxG)|cnv z3tUzW`Bw8CO0oWTPL*%0Z)}=;<9$==%QwaAYnEXlP{@}6UtzN{?^_hys=54cH zZ<5d7UcPRhmR-h9x~6sGTlAXEx3U-Cq9WgJ`BLza{(M0wet-q1@s;r1eBbK*yl>Ub z{HLO4<@<)$?n@e5=6!<#_w)VnQiXT+twfOF{Cr8+$mhRJ62$n9@a3)y??)4@c<1f% zUGK{=zeT=0zJgev$p0hqrQm6IS`|FOx9GL1z76-6d0+B<=4(|@=AG>&!?6#QdFS&z zG93Ug^LQnp-M4TC-=Yn^yJnVorx0H}SN^}`+c1wWO+9wLz`1-mi>#W(Z!PnV0&f2M zgufZ*>-IsJcNqT{?viv=h_4{%i~KL#UFIdi@4JLYBF^%a|9PLt_hsKo^Sj=czsKs5 ztbJwPH)nk2+sjv)a@tPq4&Oq) zd;hHP?muB7P~_W-M-V9HD>ckJDc`leL*{qAuUn}_j76si-{A1g|EWRq1)a?!=YBJZitD9I>MFsayGbVnT7(a=RDMa4u#r9`8m!oor$WtCi9 z`MAI5>z<+I+qci}^Z0%qpYiebd0y}H_nvd^x#!-wvv>vPLp5-G@syiMfq93bne7=7 z8y|$}_(u=7dKl^~%gLl1dM&Zgsz6lIQ20bKLMqC zHdq~l@tvzp@Jy>ypc<5Qw$%|B-+7`bDzdr&#^c?_&HbcxWJ7hGv?^|dsv!88M1fH8 z(rR!?nT;>5vGIja4VbC5dI~Ck>}ytcLY>yZ8*DlGkRfuNT+gx1)LMsAEzS8pYHY?~ zs3A!CmeoF}f^+Y*IvYxtKW23)lpc9b6>T%Y=WWF^FQ8*dX6_}MZU)A8xUJ34d59@~-ReRZ-?7S6zhQMH)ag6(rqxqW4I6sP z>H!#ccPuf^ZtIwxR))Jwb3!-59UB&#-aR%x4pm|NeXFBT1&;du?oG;JsHL@Mnbk4q z4cT(5Q=ks4c!kx4(3_P_2}c7|fte{PXpw0M+JyBmzVmd`^N~csQ0I3%$Lc7I?^tH) zPqexgswZ+!wmKVXDB2Rb+0%EK;ZtaU&eK5xDzNHQo1p@#?%c4*1kc9Ll0E(jcyGi+i)?%c+_@psv|MO)6O8X%VNyQhT8Hm5ax5~LWmacE zjh*@2-@U8gV7c}8L-o+WrB?UBczlPctFXETYF!vh=n<&&%~#p@Mkw9$C97jD0UdeK zW@U_Bc-A zGc{k4KW^N50*a`WgA7w&vw8xm!t}3O9f0v2$)@uLtJ|Tj6}gEX%!XRPa=$62nzBZl zt_13=alT`ZJa)VFcS3r?HJx`P3WRFWsJJuN`0uiQ2dc}m?y))orE_;$oeibuhOC}} znv4@KT7SWa_2)q~uwvBeG8m6@C2mhRTIATV#?*}21XWN4m;J%&5-43aWpxeQxq%(g z+g2As&4s3Es~e!MhQkRx2zRc2zzi&Y%j@wz$oZdU%6-;R3U%6~FR?lRRblzziFl|n zj~t9afJ$sB}>id;IUiY51q)?=VHK7l@jA zs04$a-e&TPl^|w@pn77!)7wqMx$;NNh{w1IoM+S3dE90OJ;u#sLg$~a_)gQ~vCE{C zNN+XGQ1!XJo+D=RF0>Wpz#SV{%dZfZoA}qQKMGY){D!yP+PC((o%Ea<)(*WR_t;^| zjjf>mn_`Da|CSgtqfqIGp?Wy)c2B!b4gnPqwGO94ddG6pcn4(iO#eiBt!cZmPkndXX9Vo9H)%e-~3s%iF~J-TO^s+D4S_hKz0J zJGP*9sFwCFoAz2Bhnl3NeyFiuF8a(!^0b$3bglGKGo5bZYcg!UDySiA^B6b%9_gur z@e^Z=0wm}ZxwT3;RGQO6>`F3C5v$vwPS3u>rrE46GQM@z?|AGonF$^7xYbN}Y_Zf)`5Im&J0w#;*UvpnK~#v;_0ZF{+Mfza5CYDoo*9MK^;li z2HWM$XTS|BOzh(-C~o2&yUd(;ug{bf!fr0hXF=x1n8>UzJlmGn2sL#6PfU9YQWcag za*LEOZi+odO_jLwKr?coZP*ahQk;2_)frF)50;ACP5;HV0^g?-1%5{P1E%4#*53oQ z&oB9$%@-+$?1CFa&IY%+f&lksxf>xHi@YyD=E97qC32H3c;xbFxBbn1?$}lMnUodP zkRu-Y(zM%*Kjq6xztp6B6;eTM{j}SFzvpJ#kd&rrw|m1!OzroGr^klGohw`uZ6-j0 z{vSYQf3b*;d79hjAKC)?peEU{N6wC0rMH?MkxA9kBFz#E)78*~uDDJ9nCbTzHNM-? zls_x(bn{H}-8N%~s7>KLR;PRHG7Smc0d?B-d3viEO6VzRZrg)hc8F4-8aCjOn_JlO z#y)pAp+{gddQ6(8nCyF%ftJO@m??ug?MkHSkwK_OF&*7#8rb{*ymyi5?19}$Ch!m> ze}Q=4A~UoLlCP)N#t-&E(#L-eIr8$yAUzd@1UgLK<8nkzO219e{)D*L6g?^bR%1jm z7C&VhRtQx<1=LwG<7x5_;Abe>exdjdGwd;D8lJJ~rlIO79<)0Ctk-}pQ}CQEI1g&l z^}Z;EO!=>@zZ9y%%7iX^J#l*e#riuvcA1RHM8Qz!d-@yGZtmnhHxsJj4yc}OgIWjj z-{k!Fj_hwXW6hLJ(EOGyctoVjd#A;Ksee~YHJR@zo}t?V>GJGZn=cdUEXaQ!vPG-e zt8{mp84+DDC(Vj0vYXCzo!vO%CI_lT)r)s~Ev$s<%J`DqEIeEjmhE=y{>n3;e&itOMP}gO-EIjwc9?XEnOX~kmA}i>o-THqo-=H| z7*x5zGk3eSYM!-Z&0n~byQN-~r|RXABhSE8%V zQTi@3_(?Hl#?G}BjzFc0oM#)Bd!gdH%~+`|xAfC!de-+@=rT6(&)JB0xgvbV`Mk#5 zZ?Y<-{U&-P3Qu)E(FD z=KN>P4_=Rh>-oS}Mcw0x%T4h&AZvNcHz5UgG}r>$pb8v=YDn-##b=oGMmyFm-;rKq z@|$e>T&TH|_dT0Wl%D;*8bB8|G%F%%dVXLt#Gn%N{LuPGZnYIvwxG2T-3F;3y%olm znT$4@KK%}xt`Vxd+#lKUvY~VdRD(M`-DR@wbgiTLPMfe1>d0E466Uo_cNqiKpxhrP z3WQ#lLd})zpQ2eGI<|?cP5Ir{pRz+knPSGf<=ij9vz^-K(w{&}C9^;_v~)Al>%TV!U& zY!A%+UOLqTUK3ZF=GT?3%QXJQ>rvM@f0ZL@@;t^(fw;KS7`T|L*i6FjOxlcb=xs_p z9XCTz4bOVR&hD(g*@`1mO5bg2-xlK@HH33$?<|u4K9_GUrU~eDnNd&pOdr(gQSiPk zFz|uR;D;(OZy#h`7)^Qy9W(hpG0tuLJKk7V`_Y^&`D@?t=FAAx9O((kztl9Oi>xaL zL3R#iPyq_cK3MEFa~`86`_Om1mS#frP_f6j$&S3^9dX7wTR}^v)!9c_U3ZMlR|C~B z1Jy%)(mWX{&lZ=P+~eQT`JZN5a^y%hlP8L4W@5d##>7sA?A3ZtgEVj=-xfRuHHI}G zgB(eF0qkC4qGzZFR-1~mH9OQD8#7y!sMuwy?h!ffq0W2fUbI%g zo$t7lf7s^^_MmsVOHJE@3LIhr4~wa$`sX%-?{Qo3++**!17z@{)k7H`<0b;tl^Ol= zb8`yS)!CljVMd>jf4d1hW&M7r9;<#vr)~}*!$c&ZZ-b+FkK1j zerXG+fjTP&MAD`IPF!T_#^qmZ>Rz*Y_8lAF{GQd5AK3ik&>Om?@4^(*lkzU-KV3Pr zMvg_MHUufCT|@^nMY{Ybt7AvM>m6Yy^zt1erkJ8^NWH!g5{)E*r zsL9nSO#}T;TJ1m`K>gDq`-mZ>=OGrgNCi_Lyz9;S!F|%)$1j@ko_brOx0yH1CZa*P%;>vTr34+$1hBeT`O^Hd&o_ zi`6|p5Et{r1Ja<8+r>^3Xp?`5>20_113$64e!IBbM0Z$!M;GJ(C-0T!2}^87*Z;+Q zm7<6pCOw{rc+~2gpIhDcnAP?DVkiF|ul1KbW&QqNNG~z7zY#e*#;hLsgVkk!7L!cf z>sAl`)yCJn?KNPz>72nqmp8s=Bcih+51HnyZgc)YeBAVUyxWv6Mibw(O#U4vce&VU zQj)E|I8A!1nG7U!P)s)22gtv}%pNGsX?UaTxr@jD?x`D^T>1l8k=rPdYlhu{qft2rddI45Ekqj9(i%gm(CAiDfe9!u8Z;{?%hQDw9IX{p;$&}qHz1`&9 zCUzSC?bct|CViL5xI;SGINNP}U8gjA#kF0XeQpcXwmUyn zex8(w+&4^nnlHCS7I{;dW(z2X%3z?@?op`C=|I57_dyjDStWLvdXcwba#vg3E>eMi zjr`oUi==DhH5W}j16BTLLJva{bQs@So3KD+zdsV@NJ-ds0Gh5Vh=_iZdE|TEP}D#* zq{$;M7J2MqpYWdB#V&Ue>YCA>rF7k9=4df)oMS`|*dyC@=oJ`GIAS74kaetWaRlnt zsR61-2B7A`K(;M#NTi2~KLWW57M&>i&B*%q+=^HBxg{stbR8afcAU^7P~~Rkxk}J& z@=vvniPNNcSoG2N+-wTSg=%@TNA6(qZG45ur;oQhRH&~Ep z_?h(VXCE+yUw+S>#y{jca$#EG=1Od<{#MjeyAR7`ymG!e83E~s2raErQfCuAv5+PT9*2N>D{IX z?p!);#T8KJapW$gV=s8mdu|~u&w(mn6l!t}OLN+d#Km+TU?{%JOnQu&^ha$E=ltAG z!dl3Ix~5qHmdctZY(Z5}=X3j$B5yD}W%c9$q`<56|LrkJL|LXGQ#_CLhs29RKjReze5UGENY}SP9Z|D18R!0F{bJe69QmIUrzuqW z;DjC9L8yYAzlrI_ylvw-%?jIZT`qFZ*O(3|ckU3#x-fO9)kBBv zv9I3@5Kve3t+NG`94@`X%y{IMDih6GpK*lz-KGj^eHidGUnm~A$Lp~&sJWAMwAf|J zJ$9J5*cmX5$H>3kOnAJ@R2@qL^zGIR0aY0Ph`7y^=2%^Pg2=*h;vTOHv!Jv|=uS^> zGvgjROv*_%z89*?#}c|O*Xnkt{CVre?PhkpOMoMrJz3;&TAsMv)So6UGo$(9D$Zju zY)Z}&lTG0{)?Zv~{iPR*%gw;2#bqYDOk8YAE)jW>QVtoS@z2|y8ig9d5jWu&N;t|c zRRphIRP1r*hIxVTGHEs_o5UR^<#L;`%p*(p6?@!q(p6XE@8k~XYQ=9e4V(A4Blyd& z+2fAFhAn&CG1zpSOP3J z?3-+Q^KJ2NGwrd{R5nVpVtVW_Lms!9^6yyxxW}!g;JfG@%UsiNvjR&@tVs!&Y`5%j zD``;r_xHF}a2Qs@jyv|aHLy9Vba$J|dmy)1Rrf#~sB~kV=E38s@^hL&o&O!D&3dzc0IEj{J}PpV_IS6c%9q|@sy;Sr&;JSnIxSi} z@(c*7g3g2<@W?lrP?yb&(@B3{gm1?oOLW(X$P33%4Jd;;j~f#H%umg_u@_l_p_i}N#`l~n&7?X{jGH2; z{8o3HsOOKF;Q2N_02S{)-`(#}fjLURwV>t#o1hA6$sN4N>VBvS21NX$mx_Kfu+hf% zK{a?Xp~sut`{i^E-~H5A*#c|f&JD+#{;RF- zg=#>_X7~c}zJ-4$`>=1UdxY;>>WG5src=z8zPhQMv?3PO|xz(=?h>P ztb)7);+ouV+l0j)qoz5bJ7GQvV+lRpsB}?N_#K2K=I-oa}(rijwZn5cRM22ek2avha z_CsmDPWRYh3U0L(7PiRGJ0Q2&_{rO?E^oEEsEzVnT2@0q1sIRKMw8HUVi(T??y&Jw zP^X`Br}S1+3e`ZT9nBuFR-~N1AB$ba{}aeqPyW<4DBfYyr*F0K)zIsjiG*Wz8xhRv z$PQMf=NT)gg(v48n<2N$#;3%j<0cQPK~o9s+=ri8Ue>L6UO@7=!wl_|=6PQnQeO2# z(!7WWy(1V*I7U74&BrdAAO~vfVhJ7h*k#6hZG7Zm8{Y_3U=vi2^d|hpkIcG34#dE8 z*alVJG*knN9@Y8J%jMa9;!>0Ib9i5tnG-26@R%(y3UyKGcpN`R*w(N3m>GBib}lvb zPeR_9$axB~oin6#QB&!Wn^BSbi;9=*P{oH8A2-ubL+4KZ3dfoT zlm3d$SR_(VKU7y`|62YoGYyrYanz=pgo-cvjqRa6sI#c{w>EwH@2o!$szGH59fQi( zHs+;sO~vo6BMy}?l&zZnSZvr4C-2v{<>{& z-d}9IfvPz8SE~b)BG;*W0xGE4bHq%>8&;P?WtdFpk~eL}Stx)0-_UHQdqw6#^zSy` z3>+Wa=lb5l&(K6g4y@N>+@!p1b&=>YN#>^I;0>kSA{Q5ryuI>{)j7~RQctr!cw}LD zSMmJpM(kQ;s%E6=srSTgUQU7BL*~6N&3D2gb7@LssOt85mtR`+ff8&rgC6+`b`DL$ z{QIE3G;-c&fjPiLp&H^(Lf?C!8G`DG*djCyAA&Q_aJReI>N2Q!zfYR4<2`nnF^|-{ z15~-aQ1|^chse*>6}JC^hf|*B`~Q9dN>Fs@`))H4C9nm~LS?9q zKvp*AFlkmik5Mxza&f6T9CD-sB1aU=wCS3T5P3*-B#bUIBhYE!Zu=OXCyG`@@_q{cL^kkcHpn!PJhJrKScg@rL-1?8(d_7PN zFE4!Gt;OFA)%8QL20aJ$l4|o=kbT88)Jod$2{a}0n=G4Q6sm&EPuc|2Q1|V*=R(ru zoo99P`BwW%AY-0+fi!22M_%W@P@4A&pc)dq2+c*Sw-jnpikuxipVsN8F8qufF;iS- zk2D5VaMkDFU7Rle0h#R;mnt1&Tp>oylt{Y#FW7t|P;)8!GFx#6^d8S`f?a&kaXF;E z!Yd&8qtF{OUzH-3n$asEFA_|AQ3-f)u-Xnm=GD?&?1CXHSJh@1TWNBxwH4Pw#Rs;) zdk!?UBHQwu>uf{Hpc>wp(3xLG^YUu&deza9s(c}S#-ioOclY0eEIzi<*MxbBqGZ-EBs{Cw7_kTWr25s99e2ee3Up(iyj+@AaEGsPbD{6dyM=w_Du{RgPQL zssIm=HogFQ4gFD~!aMP^;?@7u`p2LSAgjZsuZ9gzvZ2{({l0BB zT^>}$gODAS%lG(lu+{2(->o1+CX_Dq7&UbwJ(7Qy%~%1|kott~Na$&pP5#omZT>Qk zyhoVOJsz2~9=Dpz9ZJXbzrYJ{{(9s!e2@H8B5EscgPPS-(i~yiJqZmpw!`;|OHF6D zog?Err5Bmz`<1@iRR7HOSaFZlogR4#{vetZriy@$s14RV!K>7dC}GSrJ}!2dNWU00 z6&`8W6E=Mblz;L`J7n!oS^of3zG;!ub8-N3*5p48d0AydB);hv-sQL36hC8I-aKd{ zhCFUHa~`=$J!}2h&)Fksd|o9o4oW7O1mHBQPVyFeH$l2>P zpxq-~nzYv~CtcPe`FZ2fV~1&n-Xxah03$xD-CP1Xf*hDb#zAS`<(ybz3rJZCbprzL z<&B8yWr{zvKh@hV6WGOvrtDGIZ))M86LY$!$G!zfrG6- zSL9doMTbDHs_lo0{QiI7Fa`KE%DTPY^*%k*>hdE*&g&z^6=o_+%w&TB>H6jqA*WaI zNqb%2WBc4FR6}}lMNZT8wt=N^`se&&3TiSApA5Oo_ng8IxXj`q0@~pO^6Z#oL0z9~ z6S~RMT%J#rpWli=O`d9~rFvL?dZ_O-$hN%XqkG*ZDjbJuc-`rct7_8*rCVb9MGmaI zU@wQ}9WfzYZ#0-KW$5W@AdR5-c}^=Rykhp9k?zd0b(pOQer99hZnfQ}#uB zc(%e~zjD2CPP3ODLm4kP&>uiE7k6or0R`#(A z{>EOn3Ko3RW{5-iN1zJoxk=7VZ1;^E~m^y>1@)`k;EWu4S*A zi*9!bD5B{$TY>*}W#pm+HO9VHG(%F=W_1Hp!TEPsfBuiGzYNYj%44-C{(G}c@E)b( zUqTSOjxzlTJ&@2UT z^tnGr)8I0w1~+<|JEq6*Ybh7+U18#nD<2Oio>Ka5lQZC@clpOB6v0cT&)5Q*29XA(KkTm~b0aW_@7txfL`Ahk?n;G%GLrl}J8jjRaka?^K)&aj zS|z>04ZJ@H^`N090y&_L!xYaiqt`)x z=a+G~{JbmbF~{T|ji%x0$EX3k*V{wDn=DX|VDpc)2^z9(#ZRf z1&dugYJru#yhtp~n8!AWe8uubNDowBWgArTC8bX?<5%0EOW#Zd{9Y(>tbF9U zbYPqODW)@O8&H3b{Ji-fG6Y#WAq~uoOY^YneycklfcGtOP5;jba9ytIQ3Agie+bf` z8K|{8t5=#IC_k)tpBa3_`qLk^{t2k_zPJy~B%KjySo7o7@9UT5Y!TVmLe>Gb?YH>CU`QWL4$da1_w`*W@t~h z4a_^kmS>=PsPr5)VCQKj|6&|;P0y!oMqil{WSiMx|31f3DSy=l!SGBXj3V$BnPV>KN1lV=lmd z-#VWCKqg^NDP(T6T>PKjeLxIqXkFi@l^|eBF0+n_N;D0LY!bUo;BuRx1S-QQocbBx zX78aQe%VyN^h57RW|n>ERS@+Rp|tn<>?0~ zqSLgCEIhMEf9M@y@iEe;nc1_%1C9SvkfnFfBYVDL`H$o$9OB8Q;;Uk+nKafv^SF4t zi5{>I`pwY6;!;zvPUQDL!Nd1?7o9w)f&)iboeMRlu_L9~jEWrj*ip*J4MY~COB;`t zUSYCN5JRSCgVp6{is{C8z8El*7eLOIh6^EQOZ!F8Ht3FsvZ-ee0dfjY8`Z`%r+pm(0boy+d$;$(Frya(O%9cg~Y z?~%9SziabX!kyPXV9d=ny?F12Jd@F6b&f~2=}oS6^x`O^Wy6UCncw4nF71B)X*C<) zme74Lw(Hvf_s}z6Rc>1?Dz;q@}IaAA>4qD4_>oH#+}L>#sePz*L-v$#5Dr z!yVPuQ4OnY$_P)SSxo>sw3uLq*9~Z{Bj% zl{H%~+j#Xct*!l`dv;Ym5$a58&3r0Uvuon1(1l5@=RF-db64gsLX}HeJ4QlTttr0_ zHSB79K9rG^w)wi+$mYuqFg}#@xtKyfTzNFT&kx)_VAQ?gzUvyTa z^sIABB4-{~df{1TMb19|!pIR@THhK8eRtIv7nh!Y?ir=$d^}Qe#)YNloKf7m>6Oq= zTQgn_HMbW0CKPEMoeeea3hWJKCbbqk5z1`!KNZS2@Y+q6ZT|A6Yd2L!j;M^(Y`kLA zmdNGTZvGOb?mGU((20v%ho1@sTjNiWzxipJG5K^T|B%W}TWYVodSmUCo3D;kZmiw- zg^gP_MXuZux$^4Bbz3&I?i~%Cy{q}xq3Wd8*sJ_AiWx753R^o~4)unwyZWlDH-BY+ zrqig05ox{j<4VT=%Xd`x!oKB~a`;;~5@**X{&3AH{F#Ma&uj?a zU)WmT5FTjlyfHk~T5w~yVD&{86w{>0<(sel(#G1zNow{DH-?8c zedQUa7i_4#_L?or`DbmbujJoBzQAccbVvAz*225PW37cd!db2Ho5GhZNjlPi20 zIQ!6KN^(v*K9B!S*!7hi;nx@48hGF5`fm?8K`j5rAtxJ4!E%2RawcFQ)4UJ=Yi$pJ>kxJGEFpHjAYnM?98)TmGpsl(JC6CV#dgJ*`F8O-pP z3l!h`Y}jeU%CIb~jxriKpJ&bpJJkhYXJ7+ml1^!Tt=BvpKIqo|J-)R36KF;r$#FBb ztuH+sKKKB_PER6Yny{7yAGvM5rJW}#PwSHphmUa^a&7+N*`-eDo~2F@=3`9{gq%)n z9CLmaa6SQXZSO<>MLbTwA=P{?&^ z2()4S*a$X-IlGt~SUy&YRbfq7CpLo3VUb=MgwHi-rL=@zUMtHYYH9&8Moz#>o35Ud_+!eZDE zHih}0q@h?9)`^W_fv50c`B)_u#aO7F^Z|TWHRd+*zkX~A)2IHkOlPbKGgw>ON@x1c zl}^1s_`ymiisk=srQ@`$bRxIH+lap%VkzY7ZC>eQ zQbsl5cFHTpB6qHIotaHx=iB9B=ZY)BPQykfvi=wz)_^r(Em%7?ip^r_Q&faiVEvf+ zI|aYB(#xm3kt0%_z>%p=#o?(=erBrUKPuHJJ}lKKS!ewVefmcw|M{66N_B=_Om#Ab zQ$1hSFH@bmmr|YH7gC+*5GxR-ldtx+fHU<*nlo~0np4@tzu$gyz%l5)sWhjVu#*S( zta3)*O?Aex!CL~%uQX?daKX0&PQ{I+zc$S)tH*8p_l4DyxB;ui78a(K{ky_+hBy5e zW#!VavB@;2>ED#){=33PewXTuVS(4voZd^*oQ{*zoJOnxoBu?Kk7K=9KQ@33V#C<{ zM~#~Ke41m9OLL0y15O9w;IcF)1512veR$8&u2~&+nlXKP;4n6g`PPJ;$ZweVuzZ?R z8kS-8STh#GhOlug<4q?03!GhqQ-b8fim)ooU>(>1){-9fmc!EBA&+zS2VAGQAkAsN zKj5_gmZ8Raus%#59fUqJrv;pW>@=t6KN!ldr8xzAQk_zm`Pnq5n(){qbe6*PX^wA{ zGx%wi0S=<({SXWDd@1}ZXcsa?5}%o{4mvRh7bdD&%Rk$n_)L0+$=rx9?J&d7`;_Re67p>4Az9TVVzhU>%#`HA#4O2$EL6u zY!36K(A8KF%fKR74px8_VWn6(R*6+(wOBpYh&5yFSSRMj_+Jm!j}2nO*cdj2&0x;T zu;a%9SUQ%0Wn$S_9#)7IV`W$+R)f`JjaVBN#d@#-Y#1BG#<59kdS%#kW(hc{91WI^ zMX+ov2g}6@uwtwfE5|CaDy$l-!D_KOtR8E`nz1&l6N_U#SU)y|jbP*0BsPuBrn*#~ zM&(!rmWAbDc~}8fgq2|BSS41C)nkoV3)X=}u{hR?^<#tBFgAuwVl$W%pa-!GEDOuU z3b10A|CM2tST$CQ)nkoV3)YTxVlk`->&J$$5o{cr#HO)1%*Vt^!Gc%@mWAbF`B)*A zvzCVN(QYWtL`>qu@aBI35$s?11e_AWT50tuC6O<2_EaR&=me@J%-?D7J|^K;p>2eh zCj3#t?5?~|Zz7FB4H8ymT7^c}GXBdG6-*MbA`zZTWFSpaAe3kvaebUZ-kz3-Ec_{n z^!bEWCc-82={e2{!ighuY7+hkc^eX8{^A=yAezrWOpI`9qM&}l`U@EP3=s|_!Vwy= zDiLm?hgK)T?S$9Zv2$xXKVTo{z^!jLCWa3}vDTWe1f8*~{o*Y7W zN9j*;3Mf?N4>M!MQK+~HsEIk9(6b5cu+Hn_U)}oHli>s1+CR;AHvb|bY34r*m+#Th z`GI117Np6etOBeEE5=H&QmhOs$11TJY>b1ggMZ@wB>>a02$r>)0Zr%XR!pJgiGr&W z%$`Yg(lHzJ&~4biewq$g<@6M-a&ix0VZiF#Bh#F@L(-g~ zf2?KW9B_P31lX+yoFXjlvf-kl$dWW?czmtXyf4*hj0c?IPq1U7khdRb0m=;!A3ccPgEeX(+lIOdHZ+}d=j;!0V7XZPZ5*w-nInv!v&!kkN|b?CPthwK z_pNnmXs|gT;0)12eT-$!(ln=*UWhMR%irW!_f!&7QGXs82$vDpPq(EU$Z*gLbAPAucUJMIq49BKMa+vj zhNpTFbL8tZdSs1L{Pt?65?zkfJ+s=0P~pIMsx$p4b?hP?<>jnlo-mX{ZhgQh{o^X9 z6K9ly`u=FQazji&-|yErK`Q9`e$W}_NGA@Yi7*JDq?h^)(MK4Y$Nf&c&+qhI#NOr_zcV`Ocl=NJouU!HQ~5i;)0U<2bDUY8 z=oF2!m%1j|>B&fT>JLeFqC6X$D`k~`KiTPJ;cfab*~xSH%fHi0Q=IDAWGCxA9J`a9 zs&|u}l7A#Sb+08mMSo0o%Kn0XBH8JDHJSUgWG81d*%|nKvQzNOWT)|^WT)ndWT$y5 z*@?eFWzQx%v8R)rk-lVSs5ja15uc4e<5$T}^>DJ&@>H@@@pl^XCjOyhXLbCUWGDCW zWM}x1WT%#d#V@sfb13}7wR6vNT^i!r^B%iItQJdeJ^F?4`KQHjk6+KG@hceacB}(y z!zziZ!YZ(Gh3SNvs~EX|z|E}>ybwNS-2}JqId5|-kIiDW(>zbWrm)=IJPO#|`r!-V zL)>xl&#z+BJ=DqiobnFau7_yK!Cd>XEKHxgo0)3)HtabP|I0dqzbN!SGxvX*@qZ~F zUyS?@TmHY3Z`1#*+x{ObZ~gG4@P!97J(%juJj6u>Yr^6^sZIyJfz~UB!+%ZMd+Yss zPE0PS9kGvO>PA{``DHld`p?>bOWd}6|GtY`Yj$<^^IxT5Z{|eCA|NB<@B{9Vm|m1f_*!|ZxNTN~T=AI#M2t>67sc-ogFX^4%-{3pJky-Cg)|7=TM;r_Pt zE)Tb!KN?<}mh(Wq-*tIK37%vvZyQ%*{K4Z|zU%Pfi@rzd9cs4Ihx4 z{R#G}_k$RWk2eiJ^xUEr8+ zD>teu{r;Qn1Z_y)-`+CreCI!loF)F=+y3t~={#4M|1AFR)3h%8ZFpsxbIkrqayV&=}o-3 z_4_ND@+X`Vx%-_CDPLkjxalYDccw2`619AnsDBa{ft0m8zk3DyV3jleJ@)z6@^BkE z`DsoC_iHmBO>?HOUY^XyVHsAyt@re4q<8Am zQ#{|F#e5v4K65X!f#=&8eS$CTpV^at*dH!j;CJ|LVE*G@5YAhWCa}Ptz91Y)|L1cw zo);{Ls9TUZXMsO&LAY>1xOhRhWI^6C{CVHBYf{yMG&TPW=W)}B7(B%uams?s=AVhU zNnGG>#NU6)t_%MVel;nnqV?$U@S!K@hEk>*%K6XyzT$8ky6M!&aHHv2U+eW`Tdw<7 zSzYT^J^eM}v|X1) l&TswVYvDuv?BKPFf2H*YsO7pJ9oxk{$gYQ93qPOq{{hj;h}HlA delta 275304 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�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 BkJJDF diff --git a/TMessagesProj/libs/armeabi/libtmessages.5.so b/TMessagesProj/libs/armeabi/libtmessages.5.so index 397e267cc68de6510b9778f73d573cdcf65d26bf..3e08cd8f74b1d0263f190de4d913f5c9e0e15051 100755 GIT binary patch delta 291573 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 z∋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� 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 YUQ`?asc-TAA$Q71$;zA@vEpL=PcC+@8UO$Q diff --git a/TMessagesProj/libs/x86/libtmessages.5.so b/TMessagesProj/libs/x86/libtmessages.5.so index ead3c521e998368ec5b3813779fb7026405a9244..326a064f8481b40e98fa011124423944ef89925d 100755 GIT binary patch delta 376832 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

    Ig{TKQjt9||fs2}7D1e`#n(P9=NRZcf)H6O4s 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 z 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 z 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%0Darcz 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 W-sig3%V6krN&gSI_0jW`_J06SQ_t!E diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index a85bdd038..5ca90c91e 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -149,6 +149,7 @@ + diff --git a/TMessagesProj/src/main/java/org/telegram/android/ImageLoader.java b/TMessagesProj/src/main/java/org/telegram/android/ImageLoader.java index 555806d19..1e9a454a7 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/ImageLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/android/ImageLoader.java @@ -18,6 +18,7 @@ import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.media.ExifInterface; +import android.media.ThumbnailUtils; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; @@ -56,12 +57,19 @@ public class ImageLoader { private HashMap bitmapUseCounts = new HashMap<>(); private LruCache memCache; - private ConcurrentHashMap imageLoadingByUrl = new ConcurrentHashMap<>(); - private ConcurrentHashMap imageLoadingByKeys = new ConcurrentHashMap<>(); + private HashMap imageLoadingByUrl = new HashMap<>(); + private HashMap imageLoadingByKeys = new HashMap<>(); private HashMap imageLoadingByTag = new HashMap<>(); + private HashMap waitingForQualityThumb = new HashMap<>(); + private HashMap waitingForQualityThumbByTag = new HashMap<>(); private LinkedList httpTasks = new LinkedList<>(); private DispatchQueue cacheOutQueue = new DispatchQueue("cacheOutQueue"); + private DispatchQueue cacheThumbOutQueue = new DispatchQueue("cacheThumbOutQueue"); + private DispatchQueue thumbGeneratingQueue = new DispatchQueue("thumbGeneratingQueue"); + private DispatchQueue imageLoadQueue = new DispatchQueue("imageLoadQueue"); + private DispatchQueue recycleQueue = new DispatchQueue("recycleQueue"); private ConcurrentHashMap fileProgresses = new ConcurrentHashMap<>(); + private HashMap thumbGenerateTasks = new HashMap<>(); private int currentHttpTasksCount = 0; private LinkedList httpFileLoadTasks = new LinkedList<>(); @@ -78,6 +86,12 @@ public class ImageLoader { private File telegramPath = null; + private class ThumbGenerateInfo { + private int count; + private TLRPC.FileLocation fileLocation; + private String filter; + } + private class HttpFileTask extends AsyncTask { private String url; @@ -298,7 +312,9 @@ public class ImageLoader { if (done) { if (cacheImage.tempFilePath != null) { - cacheImage.tempFilePath.renameTo(cacheImage.finalFilePath); + if (!cacheImage.tempFilePath.renameTo(cacheImage.finalFilePath)) { + cacheImage.finalFilePath = cacheImage.tempFilePath; + } } } @@ -308,7 +324,7 @@ public class ImageLoader { @Override protected void onPostExecute(final Boolean result) { if (result || !canRetry) { - fileDidLoaded(cacheImage.url, cacheImage.finalFilePath, cacheImage.tempFilePath); + fileDidLoaded(cacheImage.url, cacheImage.finalFilePath, FileLoader.MEDIA_DIR_IMAGE); } else { httpFileLoadError(cacheImage.url); } @@ -359,15 +375,120 @@ public class ImageLoader { } } + private class ThumbGenerateTask implements Runnable { + + private File originalPath; + private int mediaType; + private TLRPC.FileLocation thumbLocation; + private String filter; + + public ThumbGenerateTask(int type, File path, TLRPC.FileLocation location, String f) { + mediaType = type; + originalPath = path; + thumbLocation = location; + filter = f; + } + + private void removeTask() { + if (thumbLocation == null) { + return; + } + final String name = FileLoader.getAttachFileName(thumbLocation); + imageLoadQueue.postRunnable(new Runnable() { + @Override + public void run() { + thumbGenerateTasks.remove(name); + } + }); + } + + @Override + public void run() { + try { + if (thumbLocation == null) { + removeTask(); + return; + } + final String key = thumbLocation.volume_id + "_" + thumbLocation.local_id; + File thumbFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), "q_" + key + ".jpg"); + if (thumbFile.exists() || !originalPath.exists()) { + removeTask(); + return; + } + int size = Math.min(180, Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / 4); + Bitmap originalBitmap = null; + if (mediaType == FileLoader.MEDIA_DIR_IMAGE) { + originalBitmap = ImageLoader.loadBitmap(originalPath.toString(), null, size, size, false); + } else if (mediaType == FileLoader.MEDIA_DIR_VIDEO) { + originalBitmap = ThumbnailUtils.createVideoThumbnail(originalPath.toString(), MediaStore.Video.Thumbnails.MINI_KIND); + } else if (mediaType == FileLoader.MEDIA_DIR_DOCUMENT) { + String path = originalPath.toString().toLowerCase(); + if (!path.endsWith(".jpg") && !path.endsWith(".jpeg") && !path.endsWith(".png") && !path.endsWith(".gif")) { + removeTask(); + return; + } + originalBitmap = ImageLoader.loadBitmap(path, null, size, size, false); + } + if (originalBitmap == null) { + removeTask(); + return; + } + + int w = originalBitmap.getWidth(); + int h = originalBitmap.getHeight(); + if (w == 0 || h == 0) { + removeTask(); + return; + } + float scaleFactor = Math.min((float) w / size, (float) h / size); + Bitmap scaledBitmap = Bitmap.createScaledBitmap(originalBitmap, (int) (w / scaleFactor), (int) (h / scaleFactor), true); + if (scaledBitmap != originalBitmap) { + originalBitmap.recycle(); + callGC(); + } + originalBitmap = scaledBitmap; + FileOutputStream stream = new FileOutputStream(thumbFile); + originalBitmap.compress(Bitmap.CompressFormat.JPEG, 60, stream); + final BitmapDrawable bitmapDrawable = new BitmapDrawable(originalBitmap); + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + removeTask(); + + String kf = key; + if (filter != null) { + kf += "@" + filter; + } + NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageThumbGenerated, bitmapDrawable, kf); + /*BitmapDrawable old = memCache.get(kf); + if (old != null) { + Bitmap image = old.getBitmap(); + if (runtimeHack != null) { + runtimeHack.trackAlloc(image.getRowBytes() * image.getHeight()); + } + if (!image.isRecycled()) { + image.recycle(); + } + }*/ + memCache.put(kf, bitmapDrawable); + } + }); + } catch (Throwable e) { + FileLog.e("tmessages", e); + removeTask(); + } + } + } + private class CacheOutTask implements Runnable { - private Thread runningThread = null; + private Thread runningThread; private final Object sync = new Object(); - private CacheImage cacheImage = null; - private boolean isCancelled = false; + private CacheImage cacheImage; + private boolean isCancelled; - public CacheOutTask(CacheImage cacheImage) { - this.cacheImage = cacheImage; + public CacheOutTask(CacheImage image) { + cacheImage = image; } @Override @@ -382,138 +503,185 @@ public class ImageLoader { Long mediaId = null; Bitmap image = null; - File cacheFileFinal = null; + File cacheFileFinal = cacheImage.finalFilePath; boolean canDeleteFile = true; boolean isWebp = false; - if (cacheImage.finalFilePath != null && cacheImage.finalFilePath.exists()) { - cacheFileFinal = cacheImage.finalFilePath; - } else if (cacheImage.tempFilePath != null && cacheImage.tempFilePath.exists()) { - cacheFileFinal = cacheImage.tempFilePath; - } else if (cacheImage.finalFilePath != null) { - cacheFileFinal = cacheImage.finalFilePath; - } - if (cacheFileFinal.toString().endsWith("webp")) { isWebp = true; } - try { - if (cacheImage.httpUrl != null) { - if (cacheImage.httpUrl.startsWith("thumb://")) { - int idx = cacheImage.httpUrl.indexOf(":", 8); - if (idx >= 0) { - mediaId = Long.parseLong(cacheImage.httpUrl.substring(8, idx)); - } - canDeleteFile = false; - } else if (!cacheImage.httpUrl.startsWith("http")) { - canDeleteFile = false; - } - } + if (cacheImage.thumb) { - int delay = 20; - if (runtimeHack != null) { - delay = 60; - } - if (mediaId != null) { - delay = 0; - } - if (delay != 0 && lastCacheOutTime != 0 && lastCacheOutTime > System.currentTimeMillis() - delay) { - Thread.sleep(delay); - } - lastCacheOutTime = System.currentTimeMillis(); - synchronized (sync) { - if (isCancelled) { - return; - } - } - - BitmapFactory.Options opts = new BitmapFactory.Options(); - - float w_filter = 0; - float h_filter = 0; - boolean blur = false; + int blurType = 0; if (cacheImage.filter != null) { - String args[] = cacheImage.filter.split("_"); - w_filter = Float.parseFloat(args[0]) * AndroidUtilities.density; - h_filter = Float.parseFloat(args[1]) * AndroidUtilities.density; - if (args.length > 2) { - blur = true; + if (cacheImage.filter.contains("b2")) { + blurType = 3; + } else if (cacheImage.filter.contains("b1")) { + blurType = 2; + } else if (cacheImage.filter.contains("b")) { + blurType = 1; } - opts.inJustDecodeBounds = true; + } - if (mediaId != null) { - MediaStore.Images.Thumbnails.getThumbnail(ApplicationLoader.applicationContext.getContentResolver(), mediaId, MediaStore.Images.Thumbnails.MINI_KIND, opts); - } else { - if (cacheImage.finalFilePath != null && cacheImage.finalFilePath.exists()) { - BitmapFactory.decodeFile(cacheImage.finalFilePath.getAbsolutePath(), opts); - } else if (cacheImage.tempFilePath != null && cacheImage.tempFilePath.exists()) { - BitmapFactory.decodeFile(cacheImage.tempFilePath.getAbsolutePath(), opts); + try { + lastCacheOutTime = System.currentTimeMillis(); + synchronized (sync) { + if (isCancelled) { + return; } } - float photoW = opts.outWidth; - float photoH = opts.outHeight; - float scaleFactor = Math.max(photoW / w_filter, photoH / h_filter); - if (scaleFactor < 1) { - scaleFactor = 1; + if (image == null) { + if (isWebp) { + RandomAccessFile file = new RandomAccessFile(cacheFileFinal, "r"); + ByteBuffer buffer = file.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, cacheFileFinal.length()); + image = Utilities.loadWebpImage(buffer, buffer.limit(), null); + file.close(); + } else { + FileInputStream is = new FileInputStream(cacheFileFinal); + image = BitmapFactory.decodeStream(is, null, null); + is.close(); + } } - opts.inJustDecodeBounds = false; - opts.inSampleSize = (int)scaleFactor; - } - synchronized (sync) { - if (isCancelled) { - return; - } - } - - if (cacheImage.filter == null || blur) { - opts.inPreferredConfig = Bitmap.Config.ARGB_8888; - } else { - opts.inPreferredConfig = Bitmap.Config.RGB_565; - } - opts.inDither = false; - if (mediaId != null) { - image = MediaStore.Images.Thumbnails.getThumbnail(ApplicationLoader.applicationContext.getContentResolver(), mediaId, MediaStore.Images.Thumbnails.MINI_KIND, null); - } - if (image == null) { - if (isWebp) { - RandomAccessFile file = new RandomAccessFile(cacheFileFinal, "r"); - ByteBuffer buffer = file.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, cacheFileFinal.length()); - image = Utilities.loadWebpImage(buffer, buffer.limit(), null); - file.close(); + if (image == null) { + if (canDeleteFile && (cacheFileFinal.length() == 0 || cacheImage.filter == null)) { + cacheFileFinal.delete(); + } } else { - FileInputStream is = new FileInputStream(cacheFileFinal); - image = BitmapFactory.decodeStream(is, null, opts); - is.close(); - } - } - if (image == null) { - if (canDeleteFile && (cacheFileFinal.length() == 0 || cacheImage.filter == null)) { - cacheFileFinal.delete(); - } - } else { - if (cacheImage.filter != null) { - float bitmapW = image.getWidth(); - float bitmapH = image.getHeight(); - if (bitmapW != w_filter && bitmapW > w_filter) { - float scaleFactor = bitmapW / w_filter; - Bitmap scaledBitmap = Bitmap.createScaledBitmap(image, (int)w_filter, (int)(bitmapH / scaleFactor), true); - if (image != scaledBitmap) { - image.recycle(); - image = scaledBitmap; + if (image != null) { + if (blurType == 1) { + Utilities.blurBitmap(image, 3); + } else if (blurType == 2) { + Utilities.blurBitmap(image, 1); + } else if (blurType == 3) { + Utilities.blurBitmap(image, 7); + Utilities.blurBitmap(image, 7); + Utilities.blurBitmap(image, 7); } } - if (image != null && blur && bitmapH < 100 && bitmapW < 100) { - Utilities.blurBitmap(image, 3); + if (runtimeHack != null) { + runtimeHack.trackFree(image.getRowBytes() * image.getHeight()); } } - if (runtimeHack != null) { - runtimeHack.trackFree(image.getRowBytes() * image.getHeight()); - } + } catch (Throwable e) { + FileLog.e("tmessages", e); + } + } else { + try { + if (cacheImage.httpUrl != null) { + if (cacheImage.httpUrl.startsWith("thumb://")) { + int idx = cacheImage.httpUrl.indexOf(":", 8); + if (idx >= 0) { + mediaId = Long.parseLong(cacheImage.httpUrl.substring(8, idx)); + } + canDeleteFile = false; + } else if (!cacheImage.httpUrl.startsWith("http")) { + canDeleteFile = false; + } + } + + int delay = 20; + if (runtimeHack != null) { + delay = 60; + } + if (mediaId != null) { + delay = 0; + } + if (delay != 0 && lastCacheOutTime != 0 && lastCacheOutTime > System.currentTimeMillis() - delay && Build.VERSION.SDK_INT < 21) { + Thread.sleep(delay); + } + lastCacheOutTime = System.currentTimeMillis(); + synchronized (sync) { + if (isCancelled) { + return; + } + } + + BitmapFactory.Options opts = new BitmapFactory.Options(); + + float w_filter = 0; + float h_filter = 0; + boolean blur = false; + if (cacheImage.filter != null) { + String args[] = cacheImage.filter.split("_"); + w_filter = Float.parseFloat(args[0]) * AndroidUtilities.density; + h_filter = Float.parseFloat(args[1]) * AndroidUtilities.density; + if (args.length > 2) { + blur = true; + } + opts.inJustDecodeBounds = true; + + if (mediaId != null) { + MediaStore.Images.Thumbnails.getThumbnail(ApplicationLoader.applicationContext.getContentResolver(), mediaId, MediaStore.Images.Thumbnails.MINI_KIND, opts); + } else { + BitmapFactory.decodeFile(cacheImage.finalFilePath.getAbsolutePath(), opts); + } + + float photoW = opts.outWidth; + float photoH = opts.outHeight; + float scaleFactor = Math.max(photoW / w_filter, photoH / h_filter); + if (scaleFactor < 1) { + scaleFactor = 1; + } + opts.inJustDecodeBounds = false; + opts.inSampleSize = (int)scaleFactor; + } + synchronized (sync) { + if (isCancelled) { + return; + } + } + + if (cacheImage.filter == null || blur) { + opts.inPreferredConfig = Bitmap.Config.ARGB_8888; + } else { + opts.inPreferredConfig = Bitmap.Config.RGB_565; + } + opts.inDither = false; + if (mediaId != null) { + image = MediaStore.Images.Thumbnails.getThumbnail(ApplicationLoader.applicationContext.getContentResolver(), mediaId, MediaStore.Images.Thumbnails.MINI_KIND, null); + } + if (image == null) { + if (isWebp) { + RandomAccessFile file = new RandomAccessFile(cacheFileFinal, "r"); + ByteBuffer buffer = file.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, cacheFileFinal.length()); + image = Utilities.loadWebpImage(buffer, buffer.limit(), null); + file.close(); + } else { + FileInputStream is = new FileInputStream(cacheFileFinal); + image = BitmapFactory.decodeStream(is, null, opts); + is.close(); + } + } + if (image == null) { + if (canDeleteFile && (cacheFileFinal.length() == 0 || cacheImage.filter == null)) { + cacheFileFinal.delete(); + } + } else { + if (cacheImage.filter != null) { + float bitmapW = image.getWidth(); + float bitmapH = image.getHeight(); + if (bitmapW != w_filter && bitmapW > w_filter) { + float scaleFactor = bitmapW / w_filter; + Bitmap scaledBitmap = Bitmap.createScaledBitmap(image, (int)w_filter, (int)(bitmapH / scaleFactor), true); + if (image != scaledBitmap) { + image.recycle(); + callGC(); + image = scaledBitmap; + } + } + if (image != null && blur && bitmapH < 100 && bitmapW < 100) { + Utilities.blurBitmap(image, 3); + } + } + if (runtimeHack != null) { + runtimeHack.trackFree(image.getRowBytes() * image.getHeight()); + } + } + } catch (Throwable e) { + //don't promt } - } catch (Throwable e) { - //don't promt } Thread.interrupted(); onPostExecute(image != null ? new BitmapDrawable(image) : null); @@ -523,10 +691,28 @@ public class ImageLoader { AndroidUtilities.runOnUIThread(new Runnable() { @Override public void run() { - if (bitmapDrawable != null && memCache.get(cacheImage.key) == null) { - memCache.put(cacheImage.key, bitmapDrawable); + BitmapDrawable toSet = null; + if (bitmapDrawable != null) { + toSet = memCache.get(cacheImage.key); + if (toSet == null) { + memCache.put(cacheImage.key, bitmapDrawable); + toSet = bitmapDrawable; + } else { + Bitmap image = bitmapDrawable.getBitmap(); + if (runtimeHack != null) { + runtimeHack.trackAlloc(image.getRowBytes() * image.getHeight()); + } + image.recycle(); + callGC(); + } } - cacheImage.setImageAndClear(bitmapDrawable); + final BitmapDrawable toSetFinal = toSet; + imageLoadQueue.postRunnable(new Runnable() { + @Override + public void run() { + cacheImage.setImageAndClear(toSetFinal); + } + }); } }); } @@ -593,83 +779,97 @@ public class ImageLoader { } private class CacheImage { - protected String key = null; - protected String url = null; - protected String filter = null; - protected TLObject fileLocation = null; - protected String httpUrl = null; - protected File finalFilePath = null; - protected File tempFilePath = null; - protected CacheOutTask cacheTask; - protected HttpImageTask httpTask; - protected ArrayList imageViewArray = new ArrayList<>(); + protected String key; + protected String url; + protected String filter; + protected TLObject location; - public void addImageView(ImageReceiver imageView) { + protected File finalFilePath; + protected File tempFilePath; + protected boolean thumb; + + protected String httpUrl; + protected HttpImageTask httpTask; + protected CacheOutTask cacheTask; + + protected ArrayList imageReceiverArray = new ArrayList<>(); + + public void addImageReceiver(ImageReceiver imageReceiver) { boolean exist = false; - for (ImageReceiver v : imageViewArray) { - if (v == imageView) { + for (ImageReceiver v : imageReceiverArray) { + if (v == imageReceiver) { exist = true; break; } } if (!exist) { - imageViewArray.add(imageView); - imageLoadingByTag.put(imageView.getTag(), this); + imageReceiverArray.add(imageReceiver); + imageLoadingByTag.put(imageReceiver.getTag(thumb), this); } } - public void removeImageView(ImageReceiver imageView) { - for (int a = 0; a < imageViewArray.size(); a++) { - ImageReceiver obj = imageViewArray.get(a); - if (obj == null || obj == imageView) { - imageViewArray.remove(a); + public void removeImageReceiver(ImageReceiver imageReceiver) { + for (int a = 0; a < imageReceiverArray.size(); a++) { + ImageReceiver obj = imageReceiverArray.get(a); + if (obj == null || obj == imageReceiver) { + imageReceiverArray.remove(a); if (obj != null) { - imageLoadingByTag.remove(obj.getTag()); + imageLoadingByTag.remove(obj.getTag(thumb)); } a--; } } - - if (imageViewArray.size() == 0) { - cancelAndClear(); + if (imageReceiverArray.size() == 0) { + for (ImageReceiver receiver : imageReceiverArray) { + imageLoadingByTag.remove(receiver.getTag(thumb)); + } + imageReceiverArray.clear(); + if (location != null) { + if (location instanceof TLRPC.FileLocation) { + FileLoader.getInstance().cancelLoadFile((TLRPC.FileLocation) location); + } else if (location instanceof TLRPC.Document) { + FileLoader.getInstance().cancelLoadFile((TLRPC.Document) location); + } + } + if (cacheTask != null) { + if (thumb) { + cacheThumbOutQueue.cancelRunnable(cacheTask); + } else { + cacheOutQueue.cancelRunnable(cacheTask); + } + cacheTask.cancel(); + cacheTask = null; + } + if (httpTask != null) { + httpTasks.remove(httpTask); + httpTask.cancel(true); + httpTask = null; + } + if (url != null) { + imageLoadingByUrl.remove(url); + } + if (key != null) { + imageLoadingByKeys.remove(key); + } } } - public void setImageAndClear(BitmapDrawable image) { + public void setImageAndClear(final BitmapDrawable image) { if (image != null) { - for (ImageReceiver imgView : imageViewArray) { - imgView.setImageBitmap(image, key); - } + final ArrayList finalImageReceiverArray = new ArrayList<>(imageReceiverArray); + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + for (ImageReceiver imgView : finalImageReceiverArray) { + imgView.setImageBitmapByKey(image, key, thumb); + } + } + }); } - clear(); - } - - public void cancelAndClear() { - if (fileLocation != null) { - if (fileLocation instanceof TLRPC.FileLocation) { - FileLoader.getInstance().cancelLoadFile((TLRPC.FileLocation) fileLocation); - } else if (fileLocation instanceof TLRPC.Document) { - FileLoader.getInstance().cancelLoadFile((TLRPC.Document) fileLocation); - } + for (ImageReceiver imageReceiver : imageReceiverArray) { + imageLoadingByTag.remove(imageReceiver.getTag(thumb)); } - if (cacheTask != null) { - cacheOutQueue.cancelRunnable(cacheTask); - cacheTask.cancel(); - cacheTask = null; - } - if (httpTask != null) { - httpTasks.remove(httpTask); - httpTask.cancel(true); - httpTask = null; - } - clear(); - } - - private void clear() { - for (ImageReceiver imageReceiver : imageViewArray) { - imageLoadingByTag.remove(imageReceiver.getTag()); - } - imageViewArray.clear(); + imageReceiverArray.clear(); if (url != null) { imageLoadingByUrl.remove(url); } @@ -711,11 +911,11 @@ public class ImageLoader { } } @Override - protected void entryRemoved(boolean evicted, String key, BitmapDrawable oldBitmap, BitmapDrawable newBitmap) { + protected void entryRemoved(boolean evicted, String key, final BitmapDrawable oldBitmap, BitmapDrawable newBitmap) { if (ignoreRemoval != null && key != null && ignoreRemoval.equals(key)) { return; } - Integer count = bitmapUseCounts.get(key); + final Integer count = bitmapUseCounts.get(key); if (count == null || count == 0) { Bitmap b = oldBitmap.getBitmap(); if (runtimeHack != null) { @@ -768,7 +968,7 @@ public class ImageLoader { } @Override - public void fileDidLoaded(final String location, final File finalFile, final File tempFile) { + public void fileDidLoaded(final String location, final File finalFile, final int type) { fileProgresses.remove(location); AndroidUtilities.runOnUIThread(new Runnable() { @Override @@ -780,20 +980,20 @@ public class ImageLoader { } } } - ImageLoader.this.fileDidLoaded(location, finalFile, tempFile); + ImageLoader.this.fileDidLoaded(location, finalFile, type); NotificationCenter.getInstance().postNotificationName(NotificationCenter.FileDidLoaded, location); } }); } @Override - public void fileDidFailedLoad(final String location, final int state) { + public void fileDidFailedLoad(final String location, final int canceled) { fileProgresses.remove(location); AndroidUtilities.runOnUIThread(new Runnable() { @Override public void run() { - ImageLoader.this.fileDidFailedLoad(location); - NotificationCenter.getInstance().postNotificationName(NotificationCenter.FileDidFailedLoad, location, state); + ImageLoader.this.fileDidFailedLoad(location, canceled); + NotificationCenter.getInstance().postNotificationName(NotificationCenter.FileDidFailedLoad, location, canceled); } }); } @@ -971,6 +1171,17 @@ public class ImageLoader { } } + public void callGC() { + if (Build.VERSION.SDK_INT > 13) { + recycleQueue.postRunnable(new Runnable() { + @Override + public void run() { + System.gc(); + } + }); + } + } + public boolean decrementUseCount(String key) { Integer count = bitmapUseCounts.get(key); if (count == null) { @@ -998,25 +1209,55 @@ public class ImageLoader { memCache.evictAll(); } - public void cancelLoadingForImageView(ImageReceiver imageView) { - if (imageView == null) { - return; - } - Integer TAG = imageView.getTag(); - if (TAG == null) { - imageView.setTag(TAG = lastImageNum); - lastImageNum++; - if (lastImageNum == Integer.MAX_VALUE) { - lastImageNum = 0; + private void removeFromWaitingForThumb(Integer TAG) { + String location = waitingForQualityThumbByTag.get(TAG); + if (location != null) { + ThumbGenerateInfo info = waitingForQualityThumb.get(location); + if (info != null) { + info.count--; + if (info.count == 0) { + waitingForQualityThumb.remove(location); + } } - } - CacheImage ei = imageLoadingByTag.get(TAG); - if (ei != null) { - ei.removeImageView(imageView); + waitingForQualityThumbByTag.remove(TAG); } } - public BitmapDrawable getImageFromMemory(TLObject fileLocation, String httpUrl, String filter, ImageReceiver imageReceiver) { + public void cancelLoadingForImageReceiver(final ImageReceiver imageReceiver, final int type) { + if (imageReceiver == null) { + return; + } + imageLoadQueue.postRunnable(new Runnable() { + @Override + public void run() { + int start = 0; + int count = 2; + if (type == 1) { + count = 1; + } else if (type == 2) { + start = 1; + } + for (int a = start; a < count; a++) { + Integer TAG = imageReceiver.getTag(a == 0); + if (a == 0) { + removeFromWaitingForThumb(TAG); + } + if (TAG != null) { + CacheImage ei = imageLoadingByTag.get(TAG); + if (ei != null) { + ei.removeImageReceiver(imageReceiver); + } + } + } + } + }); + } + + public BitmapDrawable getImageFromMemory(String key) { + return memCache.get(key); + } + + public BitmapDrawable getImageFromMemory(TLObject fileLocation, String httpUrl, String filter) { if (fileLocation == null && httpUrl == null) { return null; } @@ -1035,17 +1276,7 @@ public class ImageLoader { if (filter != null) { key += "@" + filter; } - BitmapDrawable bitmapDrawable = memCache.get(key); - if (bitmapDrawable != null && imageReceiver != null) { - Integer TAG = imageReceiver.getTag(); - if (TAG != null) { - CacheImage alreadyLoadingImage = imageLoadingByTag.get(TAG); - if (alreadyLoadingImage != null) { - alreadyLoadingImage.removeImageView(imageReceiver); - } - } - } - return bitmapDrawable; + return memCache.get(key); } public void replaceImageInCache(final String oldKey, final String newKey) { @@ -1068,177 +1299,331 @@ public class ImageLoader { memCache.put(key, bitmap); } - public void loadImage(final TLObject fileLocation, final String httpUrl, final ImageReceiver imageView, final int size, final boolean cacheOnly) { - if ((fileLocation == null && httpUrl == null) || imageView == null || (fileLocation != null && !(fileLocation instanceof TLRPC.TL_fileLocation) && !(fileLocation instanceof TLRPC.TL_fileEncryptedLocation) && !(fileLocation instanceof TLRPC.TL_document))) { + private void generateThumb(int mediaType, File originalPath, TLRPC.FileLocation thumbLocation, String filter) { + if (mediaType != FileLoader.MEDIA_DIR_IMAGE && mediaType != FileLoader.MEDIA_DIR_VIDEO && mediaType != FileLoader.MEDIA_DIR_DOCUMENT || originalPath == null || thumbLocation == null) { return; } - - String url = null; - String key = null; - boolean writeToCache = false; - if (httpUrl != null) { - key = Utilities.MD5(httpUrl); - url = key + "." + getHttpUrlExtension(httpUrl); - } else { - if (fileLocation instanceof TLRPC.FileLocation) { - TLRPC.FileLocation location = (TLRPC.FileLocation) fileLocation; - key = location.volume_id + "_" + location.local_id; - url = key + "." + (location.ext != null ? location.ext : "jpg"); - if (location.ext != null) { - writeToCache = true; - } - if (!writeToCache) { - writeToCache = location.key != null || location.volume_id == Integer.MIN_VALUE && location.local_id < 0; - } - } else if (fileLocation instanceof TLRPC.Document) { - TLRPC.Document location = (TLRPC.Document) fileLocation; - if (location.id == 0 || location.dc_id == 0) { - return; - } - key = location.dc_id + "_" + location.id; - url = key + ".webp"; - writeToCache = true; - } - } - String filter = imageView.getFilter(); - if (filter != null) { - key += "@" + filter; + String name = FileLoader.getAttachFileName(thumbLocation); + ThumbGenerateTask task = thumbGenerateTasks.get(name); + if (task == null) { + task = new ThumbGenerateTask(mediaType, originalPath, thumbLocation, filter); + thumbGeneratingQueue.postRunnable(task); } + } - Integer TAG = imageView.getTag(); + private void createLoadOperationForImageReceiver(final ImageReceiver imageReceiver, final String key, final String url, final TLObject imageLocation, final String httpLocation, final String filter, final int size, final boolean cacheOnly, final int thumb) { + if (imageReceiver == null || url == null || key == null) { + return; + } + Integer TAG = imageReceiver.getTag(thumb != 0); if (TAG == null) { - imageView.setTag(TAG = lastImageNum); + imageReceiver.setTag(TAG = lastImageNum, thumb != 0); lastImageNum++; if (lastImageNum == Integer.MAX_VALUE) { lastImageNum = 0; } } - boolean added = false; - CacheImage alreadyLoadingUrl = imageLoadingByUrl.get(url); - CacheImage alreadyLoadingCache = imageLoadingByKeys.get(key); - CacheImage alreadyLoadingImage = imageLoadingByTag.get(TAG); - if (alreadyLoadingImage != null) { - if (alreadyLoadingImage == alreadyLoadingUrl || alreadyLoadingImage == alreadyLoadingCache) { - added = true; - } else { - alreadyLoadingImage.removeImageView(imageView); - } - } - - if (!added && alreadyLoadingCache != null) { - alreadyLoadingCache.addImageView(imageView); - added = true; - } - if (!added && alreadyLoadingUrl != null) { - alreadyLoadingUrl.addImageView(imageView); - added = true; - } - - if (!added) { - boolean onlyCache = false; - File cacheFile = null; - if (cacheOnly || size == 0 || httpUrl != null || fileLocation != null && writeToCache) { - cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), url); - } else { - cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_IMAGE), url); - } - if (httpUrl != null) { - if (!httpUrl.startsWith("http")) { - onlyCache = true; - if (httpUrl.startsWith("thumb://")) { - int idx = httpUrl.indexOf(":", 8); - if (idx >= 0) { - cacheFile = new File(httpUrl.substring(idx + 1)); + final Integer finalTag = TAG; + final boolean finalIsNeedsQualityThumb = imageReceiver.isNeedsQualityThumb(); + final MessageObject parentMessageObject = imageReceiver.getParentMessageObject(); + final boolean shouldGenerateQualityThumb = imageReceiver.isShouldGenerateQualityThumb(); + imageLoadQueue.postRunnable(new Runnable() { + @Override + public void run() { + boolean added = false; + if (thumb != 2) { + CacheImage alreadyLoadingUrl = imageLoadingByUrl.get(url); + CacheImage alreadyLoadingCache = imageLoadingByKeys.get(key); + CacheImage alreadyLoadingImage = imageLoadingByTag.get(finalTag); + if (alreadyLoadingImage != null) { + if (alreadyLoadingImage == alreadyLoadingUrl || alreadyLoadingImage == alreadyLoadingCache) { + added = true; + } else { + alreadyLoadingImage.removeImageReceiver(imageReceiver); + } + } + + if (!added && alreadyLoadingCache != null) { + alreadyLoadingCache.addImageReceiver(imageReceiver); + added = true; + } + if (!added && alreadyLoadingUrl != null) { + alreadyLoadingUrl.addImageReceiver(imageReceiver); + added = true; + } + } + + if (!added) { + boolean onlyCache = false; + boolean isQuality = false; + File cacheFile = null; + + if (httpLocation != null) { + if (!httpLocation.startsWith("http")) { + onlyCache = true; + if (httpLocation.startsWith("thumb://")) { + int idx = httpLocation.indexOf(":", 8); + if (idx >= 0) { + cacheFile = new File(httpLocation.substring(idx + 1)); + } + } else { + cacheFile = new File(httpLocation); + } + } + } else if (thumb != 0) { + if (finalIsNeedsQualityThumb) { + cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), "q_" + url); + if (!cacheFile.exists()) { + cacheFile = null; + } + } + + if (parentMessageObject != null) { + File attachPath = null; + if (parentMessageObject.messageOwner.attachPath != null && parentMessageObject.messageOwner.attachPath.length() > 0) { + attachPath = new File(parentMessageObject.messageOwner.attachPath); + if (!attachPath.exists()) { + attachPath = null; + } + } + if (attachPath == null) { + attachPath = FileLoader.getPathToMessage(parentMessageObject.messageOwner); + } + if (finalIsNeedsQualityThumb && cacheFile == null) { + String location = parentMessageObject.getFileName(); + ThumbGenerateInfo info = waitingForQualityThumb.get(location); + if (info == null) { + info = new ThumbGenerateInfo(); + info.fileLocation = (TLRPC.TL_fileLocation) imageLocation; + info.filter = filter; + waitingForQualityThumb.put(location, info); + } + info.count++; + waitingForQualityThumbByTag.put(finalTag, location); + } + if (attachPath.exists() && shouldGenerateQualityThumb) { + generateThumb(parentMessageObject.getFileType(), attachPath, (TLRPC.TL_fileLocation) imageLocation, filter); + } + } + } + + if (thumb != 2) { + if (cacheFile == null) { + if (cacheOnly || size == 0 || httpLocation != null) { + cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), url); + } else { + cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_IMAGE), url); + } + } + + CacheImage img = new CacheImage(); + img.thumb = thumb != 0; + img.key = key; + img.filter = filter; + img.httpUrl = httpLocation; + img.addImageReceiver(imageReceiver); + if (onlyCache || cacheFile.exists()) { + img.finalFilePath = cacheFile; + img.cacheTask = new CacheOutTask(img); + imageLoadingByKeys.put(key, img); + if (thumb != 0) { + cacheThumbOutQueue.postRunnable(img.cacheTask); + } else { + cacheOutQueue.postRunnable(img.cacheTask); + } + } else { + img.url = url; + img.location = imageLocation; + imageLoadingByUrl.put(url, img); + if (httpLocation == null) { + if (imageLocation instanceof TLRPC.FileLocation) { + TLRPC.FileLocation location = (TLRPC.FileLocation) imageLocation; + FileLoader.getInstance().loadFile(location, size, size == 0 || location.key != null || cacheOnly); + } else if (imageLocation instanceof TLRPC.Document) { + FileLoader.getInstance().loadFile((TLRPC.Document) imageLocation, true, true); + } + } else { + String file = Utilities.MD5(httpLocation); + File cacheDir = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE); + img.tempFilePath = new File(cacheDir, file + "_temp.jpg"); + img.finalFilePath = cacheFile; + img.httpTask = new HttpImageTask(img, size); + httpTasks.add(img.httpTask); + runHttpTasks(false); + } } - } else { - cacheFile = new File(httpUrl); } } } - CacheImage img = new CacheImage(); - if (onlyCache || cacheFile.exists()) { - img.finalFilePath = cacheFile; - img.key = key; - img.httpUrl = httpUrl; - if (imageView.getFilter() != null) { - img.filter = imageView.getFilter(); + }); + } + + public void loadImageForImageReceiver(ImageReceiver imageReceiver) { + if (imageReceiver == null) { + return; + } + + String key = imageReceiver.getKey(); + if (key != null) { + BitmapDrawable bitmapDrawable = memCache.get(key); + if (bitmapDrawable != null) { + cancelLoadingForImageReceiver(imageReceiver, 0); + if (!imageReceiver.isForcePreview()) { + imageReceiver.setImageBitmapByKey(bitmapDrawable, key, false); + return; } - img.addImageView(imageView); - imageLoadingByKeys.put(key, img); - img.cacheTask = new CacheOutTask(img); - cacheOutQueue.postRunnable(img.cacheTask); + } + } + boolean thumbSet = false; + String thumbKey = imageReceiver.getThumbKey(); + if (thumbKey != null) { + BitmapDrawable bitmapDrawable = memCache.get(thumbKey); + if (bitmapDrawable != null) { + imageReceiver.setImageBitmapByKey(bitmapDrawable, thumbKey, true); + cancelLoadingForImageReceiver(imageReceiver, 1); + thumbSet = true; + } + } + + TLRPC.FileLocation thumbLocation = imageReceiver.getThumbLocation(); + TLObject imageLocation = imageReceiver.getImageLocation(); + String httpLocation = imageReceiver.getHttpImageLocation(); + + boolean saveImageToCache = false; + + String url = null; + String thumbUrl = null; + key = null; + thumbKey = null; + String ext = null; + if (httpLocation != null) { + key = Utilities.MD5(httpLocation); + url = key + "." + getHttpUrlExtension(httpLocation); + } else if (imageLocation != null) { + if (imageLocation instanceof TLRPC.FileLocation) { + TLRPC.FileLocation location = (TLRPC.FileLocation) imageLocation; + key = location.volume_id + "_" + location.local_id; + ext = "." + (location.ext != null ? location.ext : "jpg"); + url = key + ext; + if (location.ext != null || location.key != null || location.volume_id == Integer.MIN_VALUE && location.local_id < 0) { + saveImageToCache = true; + } + } else if (imageLocation instanceof TLRPC.Document) { + TLRPC.Document location = (TLRPC.Document) imageLocation; + if (location.id == 0 || location.dc_id == 0) { + return; + } + key = location.dc_id + "_" + location.id; + ext = ".webp"; + url = key + ext; + if (thumbKey != null) { + thumbUrl = thumbKey + ext; + } + saveImageToCache = true; + } + if (imageLocation == thumbLocation) { + imageLocation = null; + key = null; + url = null; + } + } + + if (thumbLocation != null) { + thumbKey = thumbLocation.volume_id + "_" + thumbLocation.local_id; + if (ext != null) { + thumbUrl = thumbKey + ext; } else { - img.url = url; - img.fileLocation = fileLocation; - img.httpUrl = httpUrl; - img.addImageView(imageView); - imageLoadingByUrl.put(url, img); - if (httpUrl == null) { - if (fileLocation instanceof TLRPC.FileLocation) { - TLRPC.FileLocation location = (TLRPC.FileLocation) fileLocation; - FileLoader.getInstance().loadFile(location, size, size == 0 || location.key != null || cacheOnly); - } else if (fileLocation instanceof TLRPC.Document) { - FileLoader.getInstance().loadFile((TLRPC.Document) fileLocation, true, true); + thumbUrl = thumbKey + "." + (thumbLocation.ext != null ? thumbLocation.ext : "jpg"); + } + } + + String filter = imageReceiver.getFilter(); + String thumbFilter = imageReceiver.getThumbFilter(); + if (key != null && filter != null) { + key += "@" + filter; + } + if (thumbKey != null && thumbFilter != null) { + thumbKey += "@" + thumbFilter; + } + + if (httpLocation != null) { + createLoadOperationForImageReceiver(imageReceiver, key, url, null, httpLocation, filter, 0, true, 0); + } else { + createLoadOperationForImageReceiver(imageReceiver, thumbKey, thumbUrl, thumbLocation, null, thumbFilter, 0, true, thumbSet ? 2 : 1); + createLoadOperationForImageReceiver(imageReceiver, key, url, imageLocation, null, filter, imageReceiver.getSize(), saveImageToCache || imageReceiver.getCacheOnly(), 0); + } + } + + private void httpFileLoadError(final String location) { + imageLoadQueue.postRunnable(new Runnable() { + @Override + public void run() { + CacheImage img = imageLoadingByUrl.get(location); + if (img == null) { + return; + } + HttpImageTask oldTask = img.httpTask; + img.httpTask = new HttpImageTask(oldTask.cacheImage, oldTask.imageSize); + httpTasks.add(img.httpTask); + runHttpTasks(false); + } + }); + } + + private void fileDidLoaded(final String location, final File finalFile, final int type) { + imageLoadQueue.postRunnable(new Runnable() { + @Override + public void run() { + ThumbGenerateInfo info = waitingForQualityThumb.get(location); + if (info != null) { + generateThumb(type, finalFile, info.fileLocation, info.filter); + waitingForQualityThumb.remove(location); + } + CacheImage img = imageLoadingByUrl.get(location); + if (img == null) { + return; + } + imageLoadingByUrl.remove(location); + CacheOutTask task = null; + for (ImageReceiver imageReceiver : img.imageReceiverArray) { + CacheImage cacheImage = imageLoadingByKeys.get(img.key); + if (cacheImage == null) { + cacheImage = new CacheImage(); + cacheImage.finalFilePath = finalFile; + cacheImage.key = img.key; + cacheImage.httpUrl = img.httpUrl; + cacheImage.thumb = img.thumb; + cacheImage.cacheTask = task = new CacheOutTask(cacheImage); + cacheImage.filter = img.filter; + imageLoadingByKeys.put(cacheImage.key, cacheImage); + } + cacheImage.addImageReceiver(imageReceiver); + } + if (task != null) { + if (img.thumb) { + cacheThumbOutQueue.postRunnable(task); + } else { + cacheOutQueue.postRunnable(task); } - } else { - String file = Utilities.MD5(httpUrl); - File cacheDir = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE); - img.tempFilePath = new File(cacheDir, file + "_temp.jpg"); - img.finalFilePath = cacheFile; - img.httpTask = new HttpImageTask(img, size); - httpTasks.add(img.httpTask); - runHttpTasks(false); } } - } + }); } - private void httpFileLoadError(String location) { - CacheImage img = imageLoadingByUrl.get(location); - if (img == null) { + private void fileDidFailedLoad(final String location, int canceled) { + if (canceled == 1) { return; } - HttpImageTask oldTask = img.httpTask; - img.httpTask = new HttpImageTask(oldTask.cacheImage, oldTask.imageSize); - httpTasks.add(img.httpTask); - runHttpTasks(false); - } - - private void fileDidLoaded(String location, File finalFile, File tempFile) { - CacheImage img = imageLoadingByUrl.get(location); - if (img == null) { - return; - } - imageLoadingByUrl.remove(location); - for (ImageReceiver imageReceiver : img.imageViewArray) { - String key = imageReceiver.getKey(); - if (key == null) { - continue; - } - CacheImage cacheImage = imageLoadingByKeys.get(key); - if (cacheImage == null) { - cacheImage = new CacheImage(); - cacheImage.finalFilePath = finalFile; - cacheImage.tempFilePath = tempFile; - cacheImage.key = key; - cacheImage.httpUrl = img.httpUrl; - cacheImage.cacheTask = new CacheOutTask(cacheImage); - if (imageReceiver.getFilter() != null) { - cacheImage.filter = imageReceiver.getFilter(); + imageLoadQueue.postRunnable(new Runnable() { + @Override + public void run() { + CacheImage img = imageLoadingByUrl.get(location); + if (img != null) { + img.setImageAndClear(null); } - imageLoadingByKeys.put(cacheImage.key, cacheImage); - cacheOutQueue.postRunnable(cacheImage.cacheTask); } - cacheImage.addImageView(imageReceiver); - } - } - - private void fileDidFailedLoad(String location) { - CacheImage img = imageLoadingByUrl.get(location); - if (img != null) { - img.setImageAndClear(null); - } + }); } private void runHttpTasks(boolean complete) { @@ -1331,7 +1716,7 @@ public class ImageLoader { } } - public static Bitmap loadBitmap(String path, Uri uri, float maxWidth, float maxHeight) { + public static Bitmap loadBitmap(String path, Uri uri, float maxWidth, float maxHeight, boolean useMaxScale) { BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = true; FileDescriptor fileDescriptor = null; @@ -1372,7 +1757,7 @@ public class ImageLoader { } float photoW = bmOptions.outWidth; float photoH = bmOptions.outHeight; - float scaleFactor = Math.max(photoW / maxWidth, photoH / maxHeight); + float scaleFactor = useMaxScale ? Math.max(photoW / maxWidth, photoH / maxHeight) : Math.min(photoW / maxWidth, photoH / maxHeight); if (scaleFactor < 1) { scaleFactor = 1; } @@ -1466,12 +1851,7 @@ public class ImageLoader { location.dc_id = Integer.MIN_VALUE; location.local_id = UserConfig.lastLocalId; UserConfig.lastLocalId--; - TLRPC.PhotoSize size; - if (!cache) { - size = new TLRPC.TL_photoSize(); - } else { - size = new TLRPC.TL_photoCachedSize(); - } + TLRPC.PhotoSize size = new TLRPC.TL_photoSize(); size.location = location; size.w = scaledBitmap.getWidth(); size.h = scaledBitmap.getHeight(); @@ -1487,18 +1867,20 @@ public class ImageLoader { size.type = "w"; } - if (!cache) { - String fileName = location.volume_id + "_" + location.local_id + ".jpg"; - final File cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName); - FileOutputStream stream = new FileOutputStream(cacheFile); - scaledBitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream); - size.size = (int)stream.getChannel().size(); - } else { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - scaledBitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream); - size.bytes = stream.toByteArray(); + String fileName = location.volume_id + "_" + location.local_id + ".jpg"; + final File cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName); + FileOutputStream stream = new FileOutputStream(cacheFile); + scaledBitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream); + if (cache) { + ByteArrayOutputStream stream2 = new ByteArrayOutputStream(); + scaledBitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream2); + size.bytes = stream2.toByteArray(); size.size = size.bytes.length; + stream2.close(); + } else { + size.size = (int)stream.getChannel().size(); } + stream.close(); if (scaledBitmap != bitmap) { scaledBitmap.recycle(); } @@ -1557,4 +1939,77 @@ public class ImageLoader { } return ext; } + + public static void saveMessageThumbs(TLRPC.Message message) { + TLRPC.PhotoSize photoSize = null; + if (message.media instanceof TLRPC.TL_messageMediaPhoto) { + for (TLRPC.PhotoSize size : message.media.photo.sizes) { + if (size instanceof TLRPC.TL_photoCachedSize) { + photoSize = size; + break; + } + } + } else if (message.media instanceof TLRPC.TL_messageMediaVideo) { + if (message.media.video.thumb instanceof TLRPC.TL_photoCachedSize) { + photoSize = message.media.video.thumb; + } + } else if (message.media instanceof TLRPC.TL_messageMediaDocument) { + if (message.media.document.thumb instanceof TLRPC.TL_photoCachedSize) { + photoSize = message.media.document.thumb; + for (TLRPC.DocumentAttribute attribute : message.media.document.attributes) { + if (attribute instanceof TLRPC.TL_documentAttributeSticker) { + photoSize.location.ext = "webp"; + break; + } + } + } + } + if (photoSize != null && photoSize.bytes != null && photoSize.bytes.length != 0) { + if (photoSize.location instanceof TLRPC.TL_fileLocationUnavailable) { + photoSize.location = new TLRPC.TL_fileLocation(); + photoSize.location.volume_id = Integer.MIN_VALUE; + photoSize.location.dc_id = Integer.MIN_VALUE; + photoSize.location.local_id = UserConfig.lastLocalId; + UserConfig.lastLocalId--; + } + File file = FileLoader.getPathToAttach(photoSize, true); + if (!file.exists()) { + try { + RandomAccessFile writeFile = new RandomAccessFile(file, "rws"); + writeFile.write(photoSize.bytes); + writeFile.close(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } + TLRPC.TL_photoSize newPhotoSize = new TLRPC.TL_photoSize(); + newPhotoSize.w = photoSize.w; + newPhotoSize.h = photoSize.h; + newPhotoSize.location = photoSize.location; + newPhotoSize.size = photoSize.size; + newPhotoSize.type = photoSize.type; + + if (message.media instanceof TLRPC.TL_messageMediaPhoto) { + for (int a = 0; a < message.media.photo.sizes.size(); a++) { + if (message.media.photo.sizes.get(a) instanceof TLRPC.TL_photoCachedSize) { + message.media.photo.sizes.set(a, newPhotoSize); + break; + } + } + } else if (message.media instanceof TLRPC.TL_messageMediaVideo) { + message.media.video.thumb = newPhotoSize; + } else if (message.media instanceof TLRPC.TL_messageMediaDocument) { + message.media.document.thumb = newPhotoSize; + } + } + } + + public static void saveMessagesThumbs(ArrayList messages) { + if (messages == null || messages.isEmpty()) { + return; + } + for (TLRPC.Message message : messages) { + saveMessageThumbs(message); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/ImageReceiver.java b/TMessagesProj/src/main/java/org/telegram/android/ImageReceiver.java index 8290a5f8a..9c467f72b 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/ImageReceiver.java +++ b/TMessagesProj/src/main/java/org/telegram/android/ImageReceiver.java @@ -27,33 +27,49 @@ import org.telegram.messenger.TLRPC; import org.telegram.messenger.FileLog; import org.telegram.messenger.Utilities; -public class ImageReceiver { - private TLObject last_path = null; - private String last_httpUrl = null; - private String last_filter = null; - private Drawable last_placeholder = null; - private TLRPC.FileLocation last_placeholderLocation = null; - private int last_size = 0; - private String currentPath = null; - private boolean isPlaceholder = false; - private Drawable currentImage = null; - private Integer tag = null; - private View parentView = null; - private int imageX = 0, imageY = 0, imageW = 0, imageH = 0; +public class ImageReceiver implements NotificationCenter.NotificationCenterDelegate { + + public static interface ImageReceiverDelegate { + public void didSetImage(ImageReceiver imageReceiver, boolean set, boolean thumb); + } + + private View parentView; + private Integer tag; + private Integer thumbTag; + private MessageObject parentMessageObject; + private boolean canceledLoading; + + private TLObject currentImageLocation; + private String currentKey; + private String currentThumbKey; + private String currentHttpUrl; + private String currentFilter; + private String currentThumbFilter; + private TLRPC.FileLocation currentThumbLocation; + private int currentSize; + private boolean currentCacheOnly; + private BitmapDrawable currentImage; + private BitmapDrawable currentThumb; + private Drawable staticThumb; + + private boolean needsQualityThumb; + private boolean shouldGenerateQualityThumb; + + private int imageX, imageY, imageW, imageH; private Rect drawRegion = new Rect(); private boolean isVisible = true; - private boolean isAspectFit = false; - private boolean lastCacheOnly = false; - private boolean forcePreview = false; - private int roundRadius = 0; - private BitmapShader bitmapShader = null; - private Paint roundPaint = null; - private RectF roundRect = null; - private RectF bitmapRect = null; - private Matrix shaderMatrix = null; + private boolean isAspectFit; + private boolean forcePreview; + private int roundRadius; + private BitmapShader bitmapShader; + private Paint roundPaint; + private RectF roundRect; + private RectF bitmapRect; + private Matrix shaderMatrix; private int alpha = 255; private boolean isPressed; private boolean disableRecycle; + private ImageReceiverDelegate delegate; public ImageReceiver() { @@ -63,38 +79,64 @@ public class ImageReceiver { parentView = view; } - public void setImage(TLObject path, String filter, Drawable placeholder, boolean cacheOnly) { - setImage(path, null, filter, placeholder, null, 0, cacheOnly); + public void cancelLoadImage() { + ImageLoader.getInstance().cancelLoadingForImageReceiver(this, 0); + canceledLoading = true; } - public void setImage(TLObject path, String filter, Drawable placeholder, int size, boolean cacheOnly) { - setImage(path, null, filter, placeholder, null, size, cacheOnly); + public void setImage(TLObject path, String filter, Drawable thumb, boolean cacheOnly) { + setImage(path, null, filter, thumb, null, null, 0, cacheOnly); } - public void setImage(String path, String filter, Drawable placeholder, int size) { - setImage(null, path, filter, placeholder, null, size, true); + public void setImage(TLObject path, String filter, Drawable thumb, int size, boolean cacheOnly) { + setImage(path, null, filter, thumb, null, null, size, cacheOnly); } - public void setImage(TLObject fileLocation, String httpUrl, String filter, Drawable placeholder, TLRPC.FileLocation placeholderLocation, int size, boolean cacheOnly) { - if ((fileLocation == null && httpUrl == null) || (fileLocation != null && !(fileLocation instanceof TLRPC.TL_fileLocation) && !(fileLocation instanceof TLRPC.TL_fileEncryptedLocation) && !(fileLocation instanceof TLRPC.TL_document))) { - recycleBitmap(null); - currentPath = null; - isPlaceholder = true; - last_path = null; - last_httpUrl = null; - last_filter = null; - lastCacheOnly = false; - bitmapShader = null; - last_placeholder = placeholder; - last_placeholderLocation = placeholderLocation; - last_size = 0; + public void setImage(String httpUrl, String filter, Drawable thumb, int size) { + setImage(null, httpUrl, filter, thumb, null, null, size, true); + } + + public void setImage(TLObject fileLocation, String filter, TLRPC.FileLocation thumbLocation, String thumbFilter, boolean cacheOnly) { + setImage(fileLocation, null, filter, null, thumbLocation, thumbFilter, 0, cacheOnly); + } + + public void setImage(TLObject fileLocation, String filter, TLRPC.FileLocation thumbLocation, String thumbFilter, int size, boolean cacheOnly) { + setImage(fileLocation, null, filter, null, thumbLocation, thumbFilter, size, cacheOnly); + } + + public void setImage(TLObject fileLocation, String httpUrl, String filter, Drawable thumb, TLRPC.FileLocation thumbLocation, String thumbFilter, int size, boolean cacheOnly) { + if ((fileLocation == null && httpUrl == null && thumbLocation == null) + || (fileLocation != null && !(fileLocation instanceof TLRPC.TL_fileLocation) + && !(fileLocation instanceof TLRPC.TL_fileEncryptedLocation) + && !(fileLocation instanceof TLRPC.TL_document))) { + recycleBitmap(null, false); + recycleBitmap(null, true); + currentKey = null; + currentThumbKey = null; + currentThumbFilter = null; + currentImageLocation = null; + currentHttpUrl = null; + currentFilter = null; + currentCacheOnly = false; + staticThumb = thumb; + currentThumbLocation = null; + currentSize = 0; currentImage = null; - ImageLoader.getInstance().cancelLoadingForImageView(this); + bitmapShader = null; + ImageLoader.getInstance().cancelLoadingForImageReceiver(this, 0); if (parentView != null) { parentView.invalidate(); } + if (delegate != null) { + delegate.didSetImage(this, currentImage != null || currentThumb != null || staticThumb != null, currentImage == null); + } return; } + + if (!(thumbLocation instanceof TLRPC.TL_fileLocation)) { + thumbLocation = null; + } + String key = null; if (fileLocation != null) { if (fileLocation instanceof TLRPC.FileLocation) { @@ -104,80 +146,61 @@ public class ImageReceiver { TLRPC.Document location = (TLRPC.Document) fileLocation; key = location.dc_id + "_" + location.id; } - } else { + } else if (httpUrl != null) { key = Utilities.MD5(httpUrl); } - if (filter != null) { - key += "@" + filter; - } - boolean sameFile = false; - BitmapDrawable img = null; - if (currentPath != null) { - if (currentPath.equals(key)) { - sameFile = true; - if (currentImage != null) { - return; - } else { - img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter, this); - } - } else { - img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter, this); - recycleBitmap(img); + if (key != null) { + if (filter != null) { + key += "@" + filter; } } - img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter, this); - currentPath = key; - last_path = fileLocation; - last_httpUrl = httpUrl; - last_filter = filter; - if (!sameFile) { - last_placeholder = placeholder; - last_placeholderLocation = placeholderLocation; - } - last_size = size; - lastCacheOnly = cacheOnly; - bitmapShader = null; - if (img == null) { - isPlaceholder = true; - if (!sameFile && last_placeholderLocation != null && last_placeholder == null) { - last_placeholder = ImageLoader.getInstance().getImageFromMemory(last_placeholderLocation, null, null, null); - if (last_placeholder != null) { - try { - Bitmap bitmap = ((BitmapDrawable) last_placeholder).getBitmap(); - bitmap = bitmap.copy(bitmap.getConfig(), true); - Utilities.blurBitmap(bitmap, 1); - last_placeholder = new BitmapDrawable(bitmap); - } catch (Exception e) { - FileLog.e("tmessages", e); - } - } - } - ImageLoader.getInstance().loadImage(fileLocation, httpUrl, this, size, cacheOnly); - if (parentView != null) { - parentView.invalidate(); - } - } else { - setImageBitmap(img, currentPath); - } - } - public void setImageBitmap(BitmapDrawable bitmap, String imgKey) { - if (currentPath == null || !imgKey.equals(currentPath)) { - return; + if (currentKey != null && key != null && currentKey.equals(key)) { + if (delegate != null) { + delegate.didSetImage(this, currentImage != null || currentThumb != null || staticThumb != null, currentImage == null); + } + if (!canceledLoading && !forcePreview) { + return; + } } - isPlaceholder = false; - ImageLoader.getInstance().incrementUseCount(currentPath); - currentImage = bitmap; - if (roundRadius != 0) { - bitmapShader = new BitmapShader(bitmap.getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - roundPaint.setShader(bitmapShader); - bitmapRect.set(0, 0, bitmap.getBitmap().getWidth(), bitmap.getBitmap().getHeight()); + + String thumbKey = null; + if (thumbLocation != null) { + thumbKey = thumbLocation.volume_id + "_" + thumbLocation.local_id; + if (thumbFilter != null) { + thumbKey += "@" + thumbFilter; + } } + + recycleBitmap(key, false); + recycleBitmap(thumbKey, true); + + currentThumbKey = thumbKey; + currentKey = key; + currentImageLocation = fileLocation; + currentHttpUrl = httpUrl; + currentFilter = filter; + currentThumbFilter = thumbFilter; + currentSize = size; + currentCacheOnly = cacheOnly; + currentThumbLocation = thumbLocation; + staticThumb = thumb; + bitmapShader = null; + + if (delegate != null) { + delegate.didSetImage(this, currentImage != null || currentThumb != null || staticThumb != null, currentImage == null); + } + + ImageLoader.getInstance().loadImageForImageReceiver(this); if (parentView != null) { parentView.invalidate(); } } + public void setDelegate(ImageReceiverDelegate delegate) { + this.delegate = delegate; + } + public void setPressed(boolean value) { isPressed = value; } @@ -195,62 +218,50 @@ public class ImageReceiver { } public void setImageBitmap(Drawable bitmap) { - ImageLoader.getInstance().cancelLoadingForImageView(this); - recycleBitmap(null); - last_placeholder = bitmap; - isPlaceholder = true; - last_placeholderLocation = null; - currentPath = null; + ImageLoader.getInstance().cancelLoadingForImageReceiver(this, 0); + recycleBitmap(null, false); + recycleBitmap(null, true); + staticThumb = bitmap; + currentThumbLocation = null; + currentKey = null; + currentThumbKey = null; currentImage = null; - last_path = null; - last_httpUrl = null; - last_filter = null; + currentThumbFilter = null; + currentImageLocation = null; + currentHttpUrl = null; + currentFilter = null; + currentSize = 0; + currentCacheOnly = false; bitmapShader = null; - last_size = 0; - lastCacheOnly = false; + if (delegate != null) { + delegate.didSetImage(this, currentImage != null || currentThumb != null || staticThumb != null, currentImage == null); + } if (parentView != null) { parentView.invalidate(); } } public void clearImage() { - recycleBitmap(null); - } - - private void recycleBitmap(BitmapDrawable newBitmap) { - if (currentImage == null || isPlaceholder || disableRecycle) { - return; - } - if (currentImage instanceof BitmapDrawable) { - if (currentImage != newBitmap) { - if (currentPath != null) { - Bitmap bitmap = ((BitmapDrawable) currentImage).getBitmap(); - boolean canDelete = ImageLoader.getInstance().decrementUseCount(currentPath); - if (!ImageLoader.getInstance().isInCache(currentPath)) { - if (ImageLoader.getInstance().runtimeHack != null) { - ImageLoader.getInstance().runtimeHack.trackAlloc(bitmap.getRowBytes() * bitmap.getHeight()); - } - if (canDelete) { - currentImage = null; - bitmap.recycle(); - } - } else { - currentImage = null; - } - currentPath = null; - } - } + recycleBitmap(null, false); + recycleBitmap(null, true); + if (needsQualityThumb) { + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.messageThumbGenerated); + ImageLoader.getInstance().cancelLoadingForImageReceiver(this, 0); } } public boolean draw(Canvas canvas) { try { - Drawable bitmapDrawable = currentImage; - if (forcePreview || bitmapDrawable == null && last_placeholder != null && last_placeholder instanceof BitmapDrawable) { - bitmapDrawable = last_placeholder; + BitmapDrawable bitmapDrawable = null; + if (!forcePreview && currentImage != null) { + bitmapDrawable = currentImage; + } else if (staticThumb instanceof BitmapDrawable) { + bitmapDrawable = (BitmapDrawable) staticThumb; + } else if (currentThumb != null) { + bitmapDrawable = currentThumb; } if (bitmapDrawable != null) { - Paint paint = ((BitmapDrawable) bitmapDrawable).getPaint(); + Paint paint = bitmapDrawable.getPaint(); boolean hasFilter = paint != null && paint.getColorFilter() != null; if (hasFilter && !isPressed) { bitmapDrawable.setColorFilter(null); @@ -285,11 +296,14 @@ public class ImageReceiver { bitmapDrawable.setAlpha(alpha); bitmapDrawable.draw(canvas); } catch (Exception e) { - if (currentPath != null) { - ImageLoader.getInstance().removeImage(currentPath); - currentPath = null; + if (bitmapDrawable == currentImage && currentKey != null) { + ImageLoader.getInstance().removeImage(currentKey); + currentKey = null; + } else if (bitmapDrawable == currentThumb && currentThumbKey != null) { + ImageLoader.getInstance().removeImage(currentThumbKey); + currentThumbKey = null; } - setImage(last_path, last_httpUrl, last_filter, last_placeholder, last_placeholderLocation, last_size, lastCacheOnly); + setImage(currentImageLocation, currentHttpUrl, currentFilter, currentThumb, currentThumbLocation, currentThumbFilter, currentSize, currentCacheOnly); FileLog.e("tmessages", e); } canvas.restore(); @@ -311,11 +325,14 @@ public class ImageReceiver { bitmapDrawable.setAlpha(alpha); bitmapDrawable.draw(canvas); } catch (Exception e) { - if (currentPath != null) { - ImageLoader.getInstance().removeImage(currentPath); - currentPath = null; + if (bitmapDrawable == currentImage && currentKey != null) { + ImageLoader.getInstance().removeImage(currentKey); + currentKey = null; + } else if (bitmapDrawable == currentThumb && currentThumbKey != null) { + ImageLoader.getInstance().removeImage(currentThumbKey); + currentThumbKey = null; } - setImage(last_path, last_httpUrl, last_filter, last_placeholder, last_placeholderLocation, last_size, lastCacheOnly); + setImage(currentImageLocation, currentHttpUrl, currentFilter, currentThumb, currentThumbLocation, currentThumbFilter, currentSize, currentCacheOnly); FileLog.e("tmessages", e); } } @@ -329,11 +346,14 @@ public class ImageReceiver { bitmapDrawable.setAlpha(alpha); bitmapDrawable.draw(canvas); } catch (Exception e) { - if (currentPath != null) { - ImageLoader.getInstance().removeImage(currentPath); - currentPath = null; + if (bitmapDrawable == currentImage && currentKey != null) { + ImageLoader.getInstance().removeImage(currentKey); + currentKey = null; + } else if (bitmapDrawable == currentThumb && currentThumbKey != null) { + ImageLoader.getInstance().removeImage(currentThumbKey); + currentThumbKey = null; } - setImage(last_path, last_httpUrl, last_filter, last_placeholder, last_placeholderLocation, last_size, lastCacheOnly); + setImage(currentImageLocation, currentHttpUrl, currentFilter, currentThumb, currentThumbLocation, currentThumbFilter, currentSize, currentCacheOnly); FileLog.e("tmessages", e); } } @@ -341,19 +361,14 @@ public class ImageReceiver { } } return true; - } else if (last_placeholder != null) { + } else if (staticThumb != null) { drawRegion.set(imageX, imageY, imageX + imageW, imageY + imageH); - last_placeholder.setBounds(drawRegion); + staticThumb.setBounds(drawRegion); if (isVisible) { try { - last_placeholder.setAlpha(alpha); - last_placeholder.draw(canvas); + staticThumb.setAlpha(alpha); + staticThumb.draw(canvas); } catch (Exception e) { - if (currentPath != null) { - ImageLoader.getInstance().removeImage(currentPath); - currentPath = null; - } - setImage(last_path, last_httpUrl, last_filter, last_placeholder, last_placeholderLocation, last_size, lastCacheOnly); FileLog.e("tmessages", e); } } @@ -366,10 +381,12 @@ public class ImageReceiver { } public Bitmap getBitmap() { - if (currentImage != null && currentImage instanceof BitmapDrawable) { - return ((BitmapDrawable)currentImage).getBitmap(); - } else if (isPlaceholder && last_placeholder != null && last_placeholder instanceof BitmapDrawable) { - return ((BitmapDrawable)last_placeholder).getBitmap(); + if (currentImage != null) { + return currentImage.getBitmap(); + } else if (currentThumb != null) { + return currentThumb.getBitmap(); + } else if (staticThumb instanceof BitmapDrawable) { + return ((BitmapDrawable) staticThumb).getBitmap(); } return null; } @@ -393,7 +410,7 @@ public class ImageReceiver { } public boolean hasImage() { - return currentImage != null || last_placeholder != null || currentPath != null || last_httpUrl != null; + return currentImage != null || currentThumb != null || currentKey != null || currentHttpUrl != null || staticThumb != null; } public void setAspectFit(boolean value) { @@ -404,14 +421,6 @@ public class ImageReceiver { parentView = view; } - protected Integer getTag() { - return tag; - } - - protected void setTag(Integer tag) { - this.tag = tag; - } - public void setImageCoords(int x, int y, int width, int height) { imageX = x; imageY = y; @@ -444,17 +453,49 @@ public class ImageReceiver { } public String getFilter() { - return last_filter; + return currentFilter; + } + + public String getThumbFilter() { + return currentThumbFilter; } public String getKey() { - return currentPath; + return currentKey; + } + + public String getThumbKey() { + return currentThumbKey; + } + + public int getSize() { + return currentSize; + } + + public TLObject getImageLocation() { + return currentImageLocation; + } + + public TLRPC.FileLocation getThumbLocation() { + return currentThumbLocation; + } + + public String getHttpImageLocation() { + return currentHttpUrl; + } + + public boolean getCacheOnly() { + return currentCacheOnly; } public void setForcePreview(boolean value) { forcePreview = value; } + public boolean isForcePreview() { + return forcePreview; + } + public void setRoundRadius(int value) { roundRadius = value; if (roundRadius != 0) { @@ -475,4 +516,146 @@ public class ImageReceiver { public int getRoundRadius() { return roundRadius; } + + public void setParentMessageObject(MessageObject messageObject) { + parentMessageObject = messageObject; + } + + public MessageObject getParentMessageObject() { + return parentMessageObject; + } + + public void setNeedsQualityThumb(boolean value) { + needsQualityThumb = value; + if (needsQualityThumb) { + NotificationCenter.getInstance().addObserver(this, NotificationCenter.messageThumbGenerated); + } else { + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.messageThumbGenerated); + } + } + + public boolean isNeedsQualityThumb() { + return needsQualityThumb; + } + + public void setShouldGenerateQualityThumb(boolean value) { + shouldGenerateQualityThumb = value; + } + + public boolean isShouldGenerateQualityThumb() { + return shouldGenerateQualityThumb; + } + + protected Integer getTag(boolean thumb) { + if (thumb) { + return thumbTag; + } else { + return tag; + } + } + + protected void setTag(Integer value, boolean thumb) { + if (thumb) { + thumbTag = value; + } else { + tag = value; + } + } + + protected void setImageBitmapByKey(BitmapDrawable bitmap, String key, boolean thumb) { + if (bitmap == null || key == null) { + return; + } + if (!thumb) { + if (currentKey == null || !key.equals(currentKey)) { + return; + } + ImageLoader.getInstance().incrementUseCount(currentKey); + currentImage = bitmap; + if (roundRadius != 0 && bitmap instanceof BitmapDrawable) { + Bitmap object = bitmap.getBitmap(); + bitmapShader = new BitmapShader(object, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + roundPaint.setShader(bitmapShader); + bitmapRect.set(0, 0, object.getWidth(), object.getHeight()); + } + if (parentView != null) { + parentView.invalidate(); + } + } else if (currentThumb == null && (currentImage == null || forcePreview)) { + if (currentThumbKey == null || !key.equals(currentThumbKey)) { + return; + } + ImageLoader.getInstance().incrementUseCount(currentThumbKey); + currentThumb = bitmap; + if (!(staticThumb instanceof BitmapDrawable) && parentView != null) { + parentView.invalidate(); + } + } + + if (delegate != null) { + delegate.didSetImage(this, currentImage != null || currentThumb != null || staticThumb != null, currentImage == null); + } + } + + private void recycleBitmap(String newKey, boolean thumb) { + String key; + BitmapDrawable image; + if (thumb) { + if (currentThumb == null) { + return; + } + key = currentThumbKey; + image = currentThumb; + } else { + if (currentImage == null) { + return; + } + key = currentKey; + image = currentImage; + } + BitmapDrawable newBitmap = null; + if (newKey != null) { + newBitmap = ImageLoader.getInstance().getImageFromMemory(newKey); + } + if (key == null || image == null || image == newBitmap || disableRecycle) { + return; + } + Bitmap bitmap = image.getBitmap(); + boolean canDelete = ImageLoader.getInstance().decrementUseCount(key); + if (!ImageLoader.getInstance().isInCache(key)) { + if (ImageLoader.getInstance().runtimeHack != null) { + ImageLoader.getInstance().runtimeHack.trackAlloc(bitmap.getRowBytes() * bitmap.getHeight()); + } + if (canDelete) { + bitmap.recycle(); + ImageLoader.getInstance().callGC(); + } + } + if (thumb) { + currentThumb = null; + currentThumbKey = null; + } else { + currentImage = null; + currentKey = null; + } + } + + @Override + public void didReceivedNotification(int id, Object... args) { + if (id == NotificationCenter.messageThumbGenerated) { + String key = (String) args[1]; + if (currentThumbKey != null && currentThumbKey.equals(key)) { + if (currentThumb == null) { + ImageLoader.getInstance().incrementUseCount(currentThumbKey); + } + currentThumb = (BitmapDrawable) args[0]; + if (staticThumb instanceof BitmapDrawable) { + staticThumb = null; + } + if (parentView != null) { + parentView.invalidate(); + } + } + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java index 0aae84ab0..db7b228b3 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java @@ -58,17 +58,19 @@ public class LocaleController { public static FastDateFormat chatDate; public static FastDateFormat chatFullDate; - private HashMap allRules = new HashMap(); + private HashMap allRules = new HashMap<>(); private Locale currentLocale; private Locale systemDefaultLocale; private PluralRules currentPluralRules; private LocaleInfo currentLocaleInfo; private LocaleInfo defaultLocalInfo; - private HashMap localeValues = new HashMap(); + private HashMap localeValues = new HashMap<>(); private String languageOverride; private boolean changingConfiguration = false; + private HashMap translitChars; + private class TimeZoneChangedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { @@ -110,10 +112,10 @@ public class LocaleController { } } - public ArrayList sortedLanguages = new ArrayList(); - public HashMap languagesDict = new HashMap(); + public ArrayList sortedLanguages = new ArrayList<>(); + public HashMap languagesDict = new HashMap<>(); - private ArrayList otherLanguages = new ArrayList(); + private ArrayList otherLanguages = new ArrayList<>(); private static volatile LocaleController Instance = null; public static LocaleController getInstance() { @@ -442,7 +444,7 @@ public class LocaleController { private HashMap getLocaleFileStrings(File file) { try { - HashMap stringMap = new HashMap(); + HashMap stringMap = new HashMap<>(); XmlPullParser parser = Xml.newPullParser(); parser.setInput(new FileInputStream(file), "UTF-8"); int eventType = parser.getEventType(); @@ -818,6 +820,542 @@ public class LocaleController { } } + public String getTranslitString(String src) { + if (translitChars == null) { + translitChars = new HashMap<>(520); + translitChars.put("ȼ", "c"); + translitChars.put("ᶇ", "n"); + translitChars.put("ɖ", "d"); + translitChars.put("ỿ", "y"); + translitChars.put("ᴓ", "o"); + translitChars.put("ø", "o"); + translitChars.put("ḁ", "a"); + translitChars.put("ʯ", "h"); + translitChars.put("ŷ", "y"); + translitChars.put("ʞ", "k"); + translitChars.put("ừ", "u"); + translitChars.put("ꜳ", "aa"); + translitChars.put("ij", "ij"); + translitChars.put("ḽ", "l"); + translitChars.put("ɪ", "i"); + translitChars.put("ḇ", "b"); + translitChars.put("ʀ", "r"); + translitChars.put("ě", "e"); + translitChars.put("ffi", "ffi"); + translitChars.put("ơ", "o"); + translitChars.put("ⱹ", "r"); + translitChars.put("ồ", "o"); + translitChars.put("ǐ", "i"); + translitChars.put("ꝕ", "p"); + translitChars.put("ý", "y"); + translitChars.put("ḝ", "e"); + translitChars.put("ₒ", "o"); + translitChars.put("ⱥ", "a"); + translitChars.put("ʙ", "b"); + translitChars.put("ḛ", "e"); + translitChars.put("ƈ", "c"); + translitChars.put("ɦ", "h"); + translitChars.put("ᵬ", "b"); + translitChars.put("ṣ", "s"); + translitChars.put("đ", "d"); + translitChars.put("ỗ", "o"); + translitChars.put("ɟ", "j"); + translitChars.put("ẚ", "a"); + translitChars.put("ɏ", "y"); + translitChars.put("л", "l"); + translitChars.put("ʌ", "v"); + translitChars.put("ꝓ", "p"); + translitChars.put("fi", "fi"); + translitChars.put("ᶄ", "k"); + translitChars.put("ḏ", "d"); + translitChars.put("ᴌ", "l"); + translitChars.put("ė", "e"); + translitChars.put("ё", "yo"); + translitChars.put("ᴋ", "k"); + translitChars.put("ċ", "c"); + translitChars.put("ʁ", "r"); + translitChars.put("ƕ", "hv"); + translitChars.put("ƀ", "b"); + translitChars.put("ṍ", "o"); + translitChars.put("ȣ", "ou"); + translitChars.put("ǰ", "j"); + translitChars.put("ᶃ", "g"); + translitChars.put("ṋ", "n"); + translitChars.put("ɉ", "j"); + translitChars.put("ǧ", "g"); + translitChars.put("dz", "dz"); + translitChars.put("ź", "z"); + translitChars.put("ꜷ", "au"); + translitChars.put("ǖ", "u"); + translitChars.put("ᵹ", "g"); + translitChars.put("ȯ", "o"); + translitChars.put("ɐ", "a"); + translitChars.put("ą", "a"); + translitChars.put("õ", "o"); + translitChars.put("ɻ", "r"); + translitChars.put("ꝍ", "o"); + translitChars.put("ǟ", "a"); + translitChars.put("ȴ", "l"); + translitChars.put("ʂ", "s"); + translitChars.put("fl", "fl"); + translitChars.put("ȉ", "i"); + translitChars.put("ⱻ", "e"); + translitChars.put("ṉ", "n"); + translitChars.put("ï", "i"); + translitChars.put("ñ", "n"); + translitChars.put("ᴉ", "i"); + translitChars.put("ʇ", "t"); + translitChars.put("ẓ", "z"); + translitChars.put("ỷ", "y"); + translitChars.put("ȳ", "y"); + translitChars.put("ṩ", "s"); + translitChars.put("ɽ", "r"); + translitChars.put("ĝ", "g"); + translitChars.put("в", "v"); + translitChars.put("ᴝ", "u"); + translitChars.put("ḳ", "k"); + translitChars.put("ꝫ", "et"); + translitChars.put("ī", "i"); + translitChars.put("ť", "t"); + translitChars.put("ꜿ", "c"); + translitChars.put("ʟ", "l"); + translitChars.put("ꜹ", "av"); + translitChars.put("û", "u"); + translitChars.put("æ", "ae"); + translitChars.put("и", "i"); + translitChars.put("ă", "a"); + translitChars.put("ǘ", "u"); + translitChars.put("ꞅ", "s"); + translitChars.put("ᵣ", "r"); + translitChars.put("ᴀ", "a"); + translitChars.put("ƃ", "b"); + translitChars.put("ḩ", "h"); + translitChars.put("ṧ", "s"); + translitChars.put("ₑ", "e"); + translitChars.put("ʜ", "h"); + translitChars.put("ẋ", "x"); + translitChars.put("ꝅ", "k"); + translitChars.put("ḋ", "d"); + translitChars.put("ƣ", "oi"); + translitChars.put("ꝑ", "p"); + translitChars.put("ħ", "h"); + translitChars.put("ⱴ", "v"); + translitChars.put("ẇ", "w"); + translitChars.put("ǹ", "n"); + translitChars.put("ɯ", "m"); + translitChars.put("ɡ", "g"); + translitChars.put("ɴ", "n"); + translitChars.put("ᴘ", "p"); + translitChars.put("ᵥ", "v"); + translitChars.put("ū", "u"); + translitChars.put("ḃ", "b"); + translitChars.put("ṗ", "p"); + translitChars.put("ь", ""); + translitChars.put("å", "a"); + translitChars.put("ɕ", "c"); + translitChars.put("ọ", "o"); + translitChars.put("ắ", "a"); + translitChars.put("ƒ", "f"); + translitChars.put("ǣ", "ae"); + translitChars.put("ꝡ", "vy"); + translitChars.put("ff", "ff"); + translitChars.put("ᶉ", "r"); + translitChars.put("ô", "o"); + translitChars.put("ǿ", "o"); + translitChars.put("ṳ", "u"); + translitChars.put("ȥ", "z"); + translitChars.put("ḟ", "f"); + translitChars.put("ḓ", "d"); + translitChars.put("ȇ", "e"); + translitChars.put("ȕ", "u"); + translitChars.put("п", "p"); + translitChars.put("ȵ", "n"); + translitChars.put("ʠ", "q"); + translitChars.put("ấ", "a"); + translitChars.put("ǩ", "k"); + translitChars.put("ĩ", "i"); + translitChars.put("ṵ", "u"); + translitChars.put("ŧ", "t"); + translitChars.put("ɾ", "r"); + translitChars.put("ƙ", "k"); + translitChars.put("ṫ", "t"); + translitChars.put("ꝗ", "q"); + translitChars.put("ậ", "a"); + translitChars.put("н", "n"); + translitChars.put("ʄ", "j"); + translitChars.put("ƚ", "l"); + translitChars.put("ᶂ", "f"); + translitChars.put("д", "d"); + translitChars.put("ᵴ", "s"); + translitChars.put("ꞃ", "r"); + translitChars.put("ᶌ", "v"); + translitChars.put("ɵ", "o"); + translitChars.put("ḉ", "c"); + translitChars.put("ᵤ", "u"); + translitChars.put("ẑ", "z"); + translitChars.put("ṹ", "u"); + translitChars.put("ň", "n"); + translitChars.put("ʍ", "w"); + translitChars.put("ầ", "a"); + translitChars.put("lj", "lj"); + translitChars.put("ɓ", "b"); + translitChars.put("ɼ", "r"); + translitChars.put("ò", "o"); + translitChars.put("ẘ", "w"); + translitChars.put("ɗ", "d"); + translitChars.put("ꜽ", "ay"); + translitChars.put("ư", "u"); + translitChars.put("ᶀ", "b"); + translitChars.put("ǜ", "u"); + translitChars.put("ẹ", "e"); + translitChars.put("ǡ", "a"); + translitChars.put("ɥ", "h"); + translitChars.put("ṏ", "o"); + translitChars.put("ǔ", "u"); + translitChars.put("ʎ", "y"); + translitChars.put("ȱ", "o"); + translitChars.put("ệ", "e"); + translitChars.put("ế", "e"); + translitChars.put("ĭ", "i"); + translitChars.put("ⱸ", "e"); + translitChars.put("ṯ", "t"); + translitChars.put("ᶑ", "d"); + translitChars.put("ḧ", "h"); + translitChars.put("ṥ", "s"); + translitChars.put("ë", "e"); + translitChars.put("ᴍ", "m"); + translitChars.put("ö", "o"); + translitChars.put("é", "e"); + translitChars.put("ı", "i"); + translitChars.put("ď", "d"); + translitChars.put("ᵯ", "m"); + translitChars.put("ỵ", "y"); + translitChars.put("я", "ya"); + translitChars.put("ŵ", "w"); + translitChars.put("ề", "e"); + translitChars.put("ứ", "u"); + translitChars.put("ƶ", "z"); + translitChars.put("ĵ", "j"); + translitChars.put("ḍ", "d"); + translitChars.put("ŭ", "u"); + translitChars.put("ʝ", "j"); + translitChars.put("ж", "zh"); + translitChars.put("ê", "e"); + translitChars.put("ǚ", "u"); + translitChars.put("ġ", "g"); + translitChars.put("ṙ", "r"); + translitChars.put("ƞ", "n"); + translitChars.put("ъ", ""); + translitChars.put("ḗ", "e"); + translitChars.put("ẝ", "s"); + translitChars.put("ᶁ", "d"); + translitChars.put("ķ", "k"); + translitChars.put("ᴂ", "ae"); + translitChars.put("ɘ", "e"); + translitChars.put("ợ", "o"); + translitChars.put("ḿ", "m"); + translitChars.put("ꜰ", "f"); + translitChars.put("а", "a"); + translitChars.put("ẵ", "a"); + translitChars.put("ꝏ", "oo"); + translitChars.put("ᶆ", "m"); + translitChars.put("ᵽ", "p"); + translitChars.put("ц", "ts"); + translitChars.put("ữ", "u"); + translitChars.put("ⱪ", "k"); + translitChars.put("ḥ", "h"); + translitChars.put("ţ", "t"); + translitChars.put("ᵱ", "p"); + translitChars.put("ṁ", "m"); + translitChars.put("á", "a"); + translitChars.put("ᴎ", "n"); + translitChars.put("ꝟ", "v"); + translitChars.put("è", "e"); + translitChars.put("ᶎ", "z"); + translitChars.put("ꝺ", "d"); + translitChars.put("ᶈ", "p"); + translitChars.put("м", "m"); + translitChars.put("ɫ", "l"); + translitChars.put("ᴢ", "z"); + translitChars.put("ɱ", "m"); + translitChars.put("ṝ", "r"); + translitChars.put("ṽ", "v"); + translitChars.put("ũ", "u"); + translitChars.put("ß", "ss"); + translitChars.put("т", "t"); + translitChars.put("ĥ", "h"); + translitChars.put("ᵵ", "t"); + translitChars.put("ʐ", "z"); + translitChars.put("ṟ", "r"); + translitChars.put("ɲ", "n"); + translitChars.put("à", "a"); + translitChars.put("ẙ", "y"); + translitChars.put("ỳ", "y"); + translitChars.put("ᴔ", "oe"); + translitChars.put("ы", "i"); + translitChars.put("ₓ", "x"); + translitChars.put("ȗ", "u"); + translitChars.put("ⱼ", "j"); + translitChars.put("ẫ", "a"); + translitChars.put("ʑ", "z"); + translitChars.put("ẛ", "s"); + translitChars.put("ḭ", "i"); + translitChars.put("ꜵ", "ao"); + translitChars.put("ɀ", "z"); + translitChars.put("ÿ", "y"); + translitChars.put("ǝ", "e"); + translitChars.put("ǭ", "o"); + translitChars.put("ᴅ", "d"); + translitChars.put("ᶅ", "l"); + translitChars.put("ù", "u"); + translitChars.put("ạ", "a"); + translitChars.put("ḅ", "b"); + translitChars.put("ụ", "u"); + translitChars.put("к", "k"); + translitChars.put("ằ", "a"); + translitChars.put("ᴛ", "t"); + translitChars.put("ƴ", "y"); + translitChars.put("ⱦ", "t"); + translitChars.put("з", "z"); + translitChars.put("ⱡ", "l"); + translitChars.put("ȷ", "j"); + translitChars.put("ᵶ", "z"); + translitChars.put("ḫ", "h"); + translitChars.put("ⱳ", "w"); + translitChars.put("ḵ", "k"); + translitChars.put("ờ", "o"); + translitChars.put("î", "i"); + translitChars.put("ģ", "g"); + translitChars.put("ȅ", "e"); + translitChars.put("ȧ", "a"); + translitChars.put("ẳ", "a"); + translitChars.put("щ", "sch"); + translitChars.put("ɋ", "q"); + translitChars.put("ṭ", "t"); + translitChars.put("ꝸ", "um"); + translitChars.put("ᴄ", "c"); + translitChars.put("ẍ", "x"); + translitChars.put("ủ", "u"); + translitChars.put("ỉ", "i"); + translitChars.put("ᴚ", "r"); + translitChars.put("ś", "s"); + translitChars.put("ꝋ", "o"); + translitChars.put("ỹ", "y"); + translitChars.put("ṡ", "s"); + translitChars.put("nj", "nj"); + translitChars.put("ȁ", "a"); + translitChars.put("ẗ", "t"); + translitChars.put("ĺ", "l"); + translitChars.put("ž", "z"); + translitChars.put("ᵺ", "th"); + translitChars.put("ƌ", "d"); + translitChars.put("ș", "s"); + translitChars.put("š", "s"); + translitChars.put("ᶙ", "u"); + translitChars.put("ẽ", "e"); + translitChars.put("ẜ", "s"); + translitChars.put("ɇ", "e"); + translitChars.put("ṷ", "u"); + translitChars.put("ố", "o"); + translitChars.put("ȿ", "s"); + translitChars.put("ᴠ", "v"); + translitChars.put("ꝭ", "is"); + translitChars.put("ᴏ", "o"); + translitChars.put("ɛ", "e"); + translitChars.put("ǻ", "a"); + translitChars.put("ffl", "ffl"); + translitChars.put("ⱺ", "o"); + translitChars.put("ȋ", "i"); + translitChars.put("ᵫ", "ue"); + translitChars.put("ȡ", "d"); + translitChars.put("ⱬ", "z"); + translitChars.put("ẁ", "w"); + translitChars.put("ᶏ", "a"); + translitChars.put("ꞇ", "t"); + translitChars.put("ğ", "g"); + translitChars.put("ɳ", "n"); + translitChars.put("ʛ", "g"); + translitChars.put("ᴜ", "u"); + translitChars.put("ф", "f"); + translitChars.put("ẩ", "a"); + translitChars.put("ṅ", "n"); + translitChars.put("ɨ", "i"); + translitChars.put("ᴙ", "r"); + translitChars.put("ǎ", "a"); + translitChars.put("ſ", "s"); + translitChars.put("у", "u"); + translitChars.put("ȫ", "o"); + translitChars.put("ɿ", "r"); + translitChars.put("ƭ", "t"); + translitChars.put("ḯ", "i"); + translitChars.put("ǽ", "ae"); + translitChars.put("ⱱ", "v"); + translitChars.put("ɶ", "oe"); + translitChars.put("ṃ", "m"); + translitChars.put("ż", "z"); + translitChars.put("ĕ", "e"); + translitChars.put("ꜻ", "av"); + translitChars.put("ở", "o"); + translitChars.put("ễ", "e"); + translitChars.put("ɬ", "l"); + translitChars.put("ị", "i"); + translitChars.put("ᵭ", "d"); + translitChars.put("st", "st"); + translitChars.put("ḷ", "l"); + translitChars.put("ŕ", "r"); + translitChars.put("ᴕ", "ou"); + translitChars.put("ʈ", "t"); + translitChars.put("ā", "a"); + translitChars.put("э", "e"); + translitChars.put("ḙ", "e"); + translitChars.put("ᴑ", "o"); + translitChars.put("ç", "c"); + translitChars.put("ᶊ", "s"); + translitChars.put("ặ", "a"); + translitChars.put("ų", "u"); + translitChars.put("ả", "a"); + translitChars.put("ǥ", "g"); + translitChars.put("р", "r"); + translitChars.put("ꝁ", "k"); + translitChars.put("ẕ", "z"); + translitChars.put("ŝ", "s"); + translitChars.put("ḕ", "e"); + translitChars.put("ɠ", "g"); + translitChars.put("ꝉ", "l"); + translitChars.put("ꝼ", "f"); + translitChars.put("ᶍ", "x"); + translitChars.put("х", "h"); + translitChars.put("ǒ", "o"); + translitChars.put("ę", "e"); + translitChars.put("ổ", "o"); + translitChars.put("ƫ", "t"); + translitChars.put("ǫ", "o"); + translitChars.put("i̇", "i"); + translitChars.put("ṇ", "n"); + translitChars.put("ć", "c"); + translitChars.put("ᵷ", "g"); + translitChars.put("ẅ", "w"); + translitChars.put("ḑ", "d"); + translitChars.put("ḹ", "l"); + translitChars.put("ч", "ch"); + translitChars.put("œ", "oe"); + translitChars.put("ᵳ", "r"); + translitChars.put("ļ", "l"); + translitChars.put("ȑ", "r"); + translitChars.put("ȭ", "o"); + translitChars.put("ᵰ", "n"); + translitChars.put("ᴁ", "ae"); + translitChars.put("ŀ", "l"); + translitChars.put("ä", "a"); + translitChars.put("ƥ", "p"); + translitChars.put("ỏ", "o"); + translitChars.put("į", "i"); + translitChars.put("ȓ", "r"); + translitChars.put("dž", "dz"); + translitChars.put("ḡ", "g"); + translitChars.put("ṻ", "u"); + translitChars.put("ō", "o"); + translitChars.put("ľ", "l"); + translitChars.put("ẃ", "w"); + translitChars.put("ț", "t"); + translitChars.put("ń", "n"); + translitChars.put("ɍ", "r"); + translitChars.put("ȃ", "a"); + translitChars.put("ü", "u"); + translitChars.put("ꞁ", "l"); + translitChars.put("ᴐ", "o"); + translitChars.put("ớ", "o"); + translitChars.put("ᴃ", "b"); + translitChars.put("ɹ", "r"); + translitChars.put("ᵲ", "r"); + translitChars.put("ʏ", "y"); + translitChars.put("ᵮ", "f"); + translitChars.put("ⱨ", "h"); + translitChars.put("ŏ", "o"); + translitChars.put("ú", "u"); + translitChars.put("ṛ", "r"); + translitChars.put("ʮ", "h"); + translitChars.put("ó", "o"); + translitChars.put("ů", "u"); + translitChars.put("ỡ", "o"); + translitChars.put("ṕ", "p"); + translitChars.put("ᶖ", "i"); + translitChars.put("ự", "u"); + translitChars.put("ã", "a"); + translitChars.put("ᵢ", "i"); + translitChars.put("ṱ", "t"); + translitChars.put("ể", "e"); + translitChars.put("ử", "u"); + translitChars.put("í", "i"); + translitChars.put("ɔ", "o"); + translitChars.put("с", "s"); + translitChars.put("й", "i"); + translitChars.put("ɺ", "r"); + translitChars.put("ɢ", "g"); + translitChars.put("ř", "r"); + translitChars.put("ẖ", "h"); + translitChars.put("ű", "u"); + translitChars.put("ȍ", "o"); + translitChars.put("ш", "sh"); + translitChars.put("ḻ", "l"); + translitChars.put("ḣ", "h"); + translitChars.put("ȶ", "t"); + translitChars.put("ņ", "n"); + translitChars.put("ᶒ", "e"); + translitChars.put("ì", "i"); + translitChars.put("ẉ", "w"); + translitChars.put("б", "b"); + translitChars.put("ē", "e"); + translitChars.put("ᴇ", "e"); + translitChars.put("ł", "l"); + translitChars.put("ộ", "o"); + translitChars.put("ɭ", "l"); + translitChars.put("ẏ", "y"); + translitChars.put("ᴊ", "j"); + translitChars.put("ḱ", "k"); + translitChars.put("ṿ", "v"); + translitChars.put("ȩ", "e"); + translitChars.put("â", "a"); + translitChars.put("ş", "s"); + translitChars.put("ŗ", "r"); + translitChars.put("ʋ", "v"); + translitChars.put("ₐ", "a"); + translitChars.put("ↄ", "c"); + translitChars.put("ᶓ", "e"); + translitChars.put("ɰ", "m"); + translitChars.put("е", "e"); + translitChars.put("ᴡ", "w"); + translitChars.put("ȏ", "o"); + translitChars.put("č", "c"); + translitChars.put("ǵ", "g"); + translitChars.put("ĉ", "c"); + translitChars.put("ю", "yu"); + translitChars.put("ᶗ", "o"); + translitChars.put("ꝃ", "k"); + translitChars.put("ꝙ", "q"); + translitChars.put("г", "g"); + translitChars.put("ṑ", "o"); + translitChars.put("ꜱ", "s"); + translitChars.put("ṓ", "o"); + translitChars.put("ȟ", "h"); + translitChars.put("ő", "o"); + translitChars.put("ꜩ", "tz"); + translitChars.put("ẻ", "e"); + translitChars.put("о", "o"); + } + StringBuilder dst = new StringBuilder(src.length()); + int len = src.length(); + for (int a = 0; a < len; a++) { + String ch = src.substring(a, a + 1); + String tch = translitChars.get(ch); + if (tch != null) { + dst.append(tch); + } else { + dst.append(ch); + } + } + return dst.toString(); + } abstract public static class PluralRules { abstract int quantityForNumber(int n); diff --git a/TMessagesProj/src/main/java/org/telegram/android/LruCache.java b/TMessagesProj/src/main/java/org/telegram/android/LruCache.java index 7455bbceb..3ed7d3c64 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/LruCache.java +++ b/TMessagesProj/src/main/java/org/telegram/android/LruCache.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; -import java.util.Map; /** * Static library version of {@link android.util.LruCache}. Used to write apps @@ -41,8 +40,8 @@ public class LruCache { throw new IllegalArgumentException("maxSize <= 0"); } this.maxSize = maxSize; - this.map = new LinkedHashMap(0, 0.75f, true); - this.mapFilters = new LinkedHashMap>(); + this.map = new LinkedHashMap<>(0, 0.75f, true); + this.mapFilters = new LinkedHashMap<>(); } /** @@ -69,7 +68,7 @@ public class LruCache { public ArrayList getFilterKeys(String key) { ArrayList arr = mapFilters.get(key); if (arr != null) { - return new ArrayList(arr); + return new ArrayList<>(arr); } return null; } @@ -98,14 +97,17 @@ public class LruCache { if (args.length > 1) { ArrayList arr = mapFilters.get(args[0]); if (arr == null) { - arr = new ArrayList(); + arr = new ArrayList<>(); mapFilters.put(args[0], arr); } - arr.add(args[1]); + if (!arr.contains(args[1])) { + arr.add(args[1]); + } } if (previous != null) { entryRemoved(false, key, previous, value); + ImageLoader.getInstance().callGC(); } trimToSize(maxSize, key); @@ -137,15 +139,16 @@ public class LruCache { if (args.length > 1) { ArrayList arr = mapFilters.get(args[0]); if (arr != null) { - arr.remove(key); + arr.remove(args[1]); if (arr.isEmpty()) { - mapFilters.remove(args[1]); + mapFilters.remove(args[0]); } } } entryRemoved(true, key, value, null); } + ImageLoader.getInstance().callGC(); } } @@ -172,14 +175,15 @@ public class LruCache { if (args.length > 1) { ArrayList arr = mapFilters.get(args[0]); if (arr != null) { - arr.remove(key); + arr.remove(args[1]); if (arr.isEmpty()) { - mapFilters.remove(args[1]); + mapFilters.remove(args[0]); } } } entryRemoved(false, key, previous, null); + ImageLoader.getInstance().callGC(); } return previous; diff --git a/TMessagesProj/src/main/java/org/telegram/android/MediaController.java b/TMessagesProj/src/main/java/org/telegram/android/MediaController.java index 2dc688aa5..efa53b092 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MediaController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MediaController.java @@ -122,6 +122,7 @@ public class MediaController implements NotificationCenter.NotificationCenterDel public String bucketName; public PhotoEntry coverPhoto; public ArrayList photos = new ArrayList<>(); + public HashMap photosByIds = new HashMap<>(); public AlbumEntry(int bucketId, String bucketName, PhotoEntry coverPhoto) { this.bucketId = bucketId; @@ -131,6 +132,7 @@ public class MediaController implements NotificationCenter.NotificationCenterDel public void addPhoto(PhotoEntry photoEntry) { photos.add(photoEntry); + photosByIds.put(photoEntry.imageId, photoEntry); } } @@ -140,6 +142,8 @@ public class MediaController implements NotificationCenter.NotificationCenterDel public long dateTaken; public String path; public int orientation; + public String thumbPath; + public String imagePath; public PhotoEntry(int bucketId, int imageId, long dateTaken, String path, int orientation) { this.bucketId = bucketId; @@ -1095,11 +1099,11 @@ public class MediaController implements NotificationCenter.NotificationCenterDel @Override public void onSensorChanged(SensorEvent event) { - if (audioTrackPlayer == null && audioPlayer == null || isPaused || (useFrontSpeaker == (event.values[0] == 0))) { + if (proximitySensor != null && audioTrackPlayer == null && audioPlayer == null || isPaused || (useFrontSpeaker == (event.values[0] < proximitySensor.getMaximumRange() / 10))) { return; } ignoreProximity = true; - useFrontSpeaker = event.values[0] == 0; + useFrontSpeaker = event.values[0] < proximitySensor.getMaximumRange() / 10; NotificationCenter.getInstance().postNotificationName(NotificationCenter.audioRouteChanged, useFrontSpeaker); MessageObject currentMessageObject = playingMessageObject; float progress = playingMessageObject.audioProgress; @@ -2450,11 +2454,15 @@ public class MediaController implements NotificationCenter.NotificationCenterDel decoder.start(); final int TIMEOUT_USEC = 2500; - ByteBuffer[] decoderInputBuffers = decoder.getInputBuffers(); - ByteBuffer[] encoderOutputBuffers = encoder.getOutputBuffers(); + ByteBuffer[] decoderInputBuffers = null; + ByteBuffer[] encoderOutputBuffers = null; ByteBuffer[] encoderInputBuffers = null; - if (Build.VERSION.SDK_INT < 18) { - encoderInputBuffers = encoder.getInputBuffers(); + if (Build.VERSION.SDK_INT < 21) { + decoderInputBuffers = decoder.getInputBuffers(); + encoderOutputBuffers = encoder.getOutputBuffers(); + if (Build.VERSION.SDK_INT < 18) { + encoderInputBuffers = encoder.getInputBuffers(); + } } checkConversionCanceled(); @@ -2467,7 +2475,12 @@ public class MediaController implements NotificationCenter.NotificationCenterDel if (index == videoIndex) { int inputBufIndex = decoder.dequeueInputBuffer(TIMEOUT_USEC); if (inputBufIndex >= 0) { - ByteBuffer inputBuf = decoderInputBuffers[inputBufIndex]; + ByteBuffer inputBuf = null; + if (Build.VERSION.SDK_INT < 21) { + inputBuf = decoderInputBuffers[inputBufIndex]; + } else { + inputBuf = decoder.getInputBuffer(inputBufIndex); + } int chunkSize = extractor.readSampleData(inputBuf, 0); if (chunkSize < 0) { decoder.queueInputBuffer(inputBufIndex, 0, 0, 0L, MediaCodec.BUFFER_FLAG_END_OF_STREAM); @@ -2497,7 +2510,9 @@ public class MediaController implements NotificationCenter.NotificationCenterDel if (encoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { encoderOutputAvailable = false; } else if (encoderStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { - encoderOutputBuffers = encoder.getOutputBuffers(); + if (Build.VERSION.SDK_INT < 21) { + encoderOutputBuffers = encoder.getOutputBuffers(); + } } else if (encoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { MediaFormat newFormat = encoder.getOutputFormat(); if (videoTrackIndex == -5) { @@ -2506,7 +2521,12 @@ public class MediaController implements NotificationCenter.NotificationCenterDel } else if (encoderStatus < 0) { throw new RuntimeException("unexpected result from encoder.dequeueOutputBuffer: " + encoderStatus); } else { - ByteBuffer encodedData = encoderOutputBuffers[encoderStatus]; + ByteBuffer encodedData = null; + if (Build.VERSION.SDK_INT < 21) { + encodedData = encoderOutputBuffers[encoderStatus]; + } else { + encodedData = encoder.getOutputBuffer(encoderStatus); + } if (encodedData == null) { throw new RuntimeException("encoderOutputBuffer " + encoderStatus + " was null"); } diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java index 3274ccf3f..1c6c0dd48 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java @@ -8,7 +8,6 @@ package org.telegram.android; -import android.graphics.Bitmap; import android.graphics.Paint; import android.text.Layout; import android.text.Spannable; @@ -42,12 +41,11 @@ public class MessageObject { public CharSequence messageText; public int type; public int contentType; - public ArrayList photoThumbs; - public Bitmap imagePreview; public String dateKey; public boolean deleted = false; public float audioProgress; public int audioProgressSec; + public ArrayList photoThumbs; private static TextPaint textPaint; public int lastLineWidth; @@ -66,11 +64,7 @@ public class MessageObject { public ArrayList textLayoutBlocks; - public MessageObject(TLRPC.Message message, AbstractMap users) { - this(message, users, 1); - } - - public MessageObject(TLRPC.Message message, AbstractMap users, int preview) { + public MessageObject(TLRPC.Message message, AbstractMap users, boolean generateLayout) { if (textPaint == null) { textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); textPaint.setColor(0xff000000); @@ -319,6 +313,9 @@ public class MessageObject { type = 8; } else if (message.media.document.mime_type.equals("image/webp") && isSticker()) { type = 13; + if (messageOwner.media.document.thumb != null && messageOwner.media.document.thumb.location != null) { + messageOwner.media.document.thumb.location.ext = "webp"; + } } else { type = 9; } @@ -355,37 +352,25 @@ public class MessageObject { int dateMonth = rightNow.get(Calendar.MONTH); dateKey = String.format("%d_%02d_%02d", dateYear, dateMonth, dateDay); - if (preview != 0) { + if (generateLayout) { generateLayout(); } - generateThumbs(false, preview); + generateThumbs(false); } - public CharSequence replaceWithLink(CharSequence source, String param, TLRPC.User user) { - String name = ContactsController.formatName(user.first_name, user.last_name); - int start = TextUtils.indexOf(source, param); - URLSpanNoUnderline span = new URLSpanNoUnderline("" + user.id); - SpannableStringBuilder builder = new SpannableStringBuilder(TextUtils.replace(source, new String[]{param}, new String[]{name})); - builder.setSpan(span, start, start + name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - return builder; - } - - public void generateThumbs(boolean update, int preview) { + public void generateThumbs(boolean update) { if (messageOwner instanceof TLRPC.TL_messageService) { if (messageOwner.action instanceof TLRPC.TL_messageActionChatEditPhoto) { if (!update) { - photoThumbs = new ArrayList<>(); - for (TLRPC.PhotoSize size : messageOwner.action.photo.sizes) { - photoThumbs.add(new PhotoObject(size, preview, isSecretMedia())); - } + photoThumbs = new ArrayList<>(messageOwner.action.photo.sizes); } else if (photoThumbs != null && !photoThumbs.isEmpty()) { - for (PhotoObject photoObject : photoThumbs) { + for (TLRPC.PhotoSize photoObject : photoThumbs) { for (TLRPC.PhotoSize size : messageOwner.action.photo.sizes) { if (size instanceof TLRPC.TL_photoSizeEmpty) { continue; } - if (size.type.equals(photoObject.photoOwner.type)) { - photoObject.photoOwner.location = size.location; + if (size.type.equals(photoObject.type)) { + photoObject.location = size.location; break; } } @@ -395,22 +380,15 @@ public class MessageObject { } else if (messageOwner.media != null && !(messageOwner.media instanceof TLRPC.TL_messageMediaEmpty)) { if (messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) { if (!update) { - photoThumbs = new ArrayList<>(); - for (TLRPC.PhotoSize size : messageOwner.media.photo.sizes) { - PhotoObject obj = new PhotoObject(size, preview, isSecretMedia()); - photoThumbs.add(obj); - if (imagePreview == null && obj.image != null) { - imagePreview = obj.image; - } - } + photoThumbs = new ArrayList<>(messageOwner.media.photo.sizes); } else if (photoThumbs != null && !photoThumbs.isEmpty()) { - for (PhotoObject photoObject : photoThumbs) { + for (TLRPC.PhotoSize photoObject : photoThumbs) { for (TLRPC.PhotoSize size : messageOwner.media.photo.sizes) { if (size instanceof TLRPC.TL_photoSizeEmpty) { continue; } - if (size.type.equals(photoObject.photoOwner.type)) { - photoObject.photoOwner.location = size.location; + if (size.type.equals(photoObject.type)) { + photoObject.location = size.location; break; } } @@ -419,36 +397,34 @@ public class MessageObject { } else if (messageOwner.media instanceof TLRPC.TL_messageMediaVideo) { if (!update) { photoThumbs = new ArrayList<>(); - PhotoObject obj = new PhotoObject(messageOwner.media.video.thumb, preview, isSecretMedia()); - photoThumbs.add(obj); - if (imagePreview == null && obj.image != null) { - imagePreview = obj.image; - } + photoThumbs.add(messageOwner.media.video.thumb); } else if (photoThumbs != null && !photoThumbs.isEmpty() && messageOwner.media.video.thumb != null) { - PhotoObject photoObject = photoThumbs.get(0); - photoObject.photoOwner.location = messageOwner.media.video.thumb.location; + TLRPC.PhotoSize photoObject = photoThumbs.get(0); + photoObject.location = messageOwner.media.video.thumb.location; } } else if (messageOwner.media instanceof TLRPC.TL_messageMediaDocument) { if (!(messageOwner.media.document.thumb instanceof TLRPC.TL_photoSizeEmpty)) { if (!update) { photoThumbs = new ArrayList<>(); - if (type == 13) { - messageOwner.media.document.thumb.location.ext = "webp"; - } - PhotoObject obj = new PhotoObject(messageOwner.media.document.thumb, preview, isSecretMedia()); - photoThumbs.add(obj); - if (imagePreview == null && obj.image != null) { - imagePreview = obj.image; - } + photoThumbs.add(messageOwner.media.document.thumb); } else if (photoThumbs != null && !photoThumbs.isEmpty() && messageOwner.media.document.thumb != null) { - PhotoObject photoObject = photoThumbs.get(0); - photoObject.photoOwner.location = messageOwner.media.document.thumb.location; + TLRPC.PhotoSize photoObject = photoThumbs.get(0); + photoObject.location = messageOwner.media.document.thumb.location; } } } } } + public CharSequence replaceWithLink(CharSequence source, String param, TLRPC.User user) { + String name = ContactsController.formatName(user.first_name, user.last_name); + int start = TextUtils.indexOf(source, param); + URLSpanNoUnderline span = new URLSpanNoUnderline("" + user.id); + SpannableStringBuilder builder = new SpannableStringBuilder(TextUtils.replace(source, new String[]{param}, new String[]{name})); + builder.setSpan(span, start, start + name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + return builder; + } + public String getFileName() { if (messageOwner.media instanceof TLRPC.TL_messageMediaVideo) { return FileLoader.getAttachFileName(messageOwner.media.video); @@ -468,6 +444,19 @@ public class MessageObject { return ""; } + public int getFileType() { + if (messageOwner.media instanceof TLRPC.TL_messageMediaVideo) { + return FileLoader.MEDIA_DIR_VIDEO; + } else if (messageOwner.media instanceof TLRPC.TL_messageMediaDocument) { + return FileLoader.MEDIA_DIR_DOCUMENT; + } else if (messageOwner.media instanceof TLRPC.TL_messageMediaAudio) { + return FileLoader.MEDIA_DIR_AUDIO; + } else if (messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) { + return FileLoader.MEDIA_DIR_IMAGE; + } + return FileLoader.MEDIA_DIR_CACHE; + } + private boolean containsUrls(CharSequence message) { if (message == null || message.length() < 3 || message.length() > 1024 * 20) { return false; @@ -787,9 +776,9 @@ public class MessageObject { return ""; } - public boolean isSticker() { - if (messageOwner.media != null && messageOwner.media.document != null) { - for (TLRPC.DocumentAttribute attribute : messageOwner.media.document.attributes) { + public static boolean isStickerMessage(TLRPC.Message message) { + if (message.media != null && message.media.document != null) { + for (TLRPC.DocumentAttribute attribute : message.media.document.attributes) { if (attribute instanceof TLRPC.TL_documentAttributeSticker) { return true; } @@ -797,4 +786,8 @@ public class MessageObject { } return false; } + + public boolean isSticker() { + return isStickerMessage(messageOwner); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java index 1c673e6b8..71bd216e9 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java @@ -314,9 +314,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter sendingTypings.clear(); loadingFullUsers.clear(); loadedFullUsers.clear(); - loadingFullUsers.clear(); - loadedFullUsers.clear(); reloadingMessages.clear(); + loadingFullChats.clear(); + loadedFullChats.clear(); updatesStartWaitTime = 0; currentDeletingTaskTime = 0; @@ -568,6 +568,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter public void run(TLObject response, TLRPC.TL_error error) { if (error == null) { TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response; + ImageLoader.saveMessagesThumbs(messagesRes.messages); MessagesStorage.getInstance().putMessages(messagesRes, dialog_id); final ArrayList objects = new ArrayList<>(); @@ -578,7 +579,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter for (TLRPC.User u : messagesRes.users) { usersLocal.put(u.id, u); } - objects.add(new MessageObject(message, usersLocal, 2)); + objects.add(new MessageObject(message, usersLocal, true)); } AndroidUtilities.runOnUIThread(new Runnable() { @Override @@ -898,151 +899,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter }); } - public void processLoadedMedia(final TLRPC.messages_Messages res, final long uid, int offset, int count, int max_id, final boolean fromCache, final int classGuid) { - int lower_part = (int)uid; - if (fromCache && res.messages.isEmpty() && lower_part != 0) { - loadMedia(uid, offset, count, max_id, false, classGuid); - } else { - if (!fromCache) { - MessagesStorage.getInstance().putUsersAndChats(res.users, res.chats, true, true); - MessagesStorage.getInstance().putMedia(uid, res.messages); - } - - final HashMap usersLocal = new HashMap<>(); - for (TLRPC.User u : res.users) { - usersLocal.put(u.id, u); - } - final ArrayList objects = new ArrayList<>(); - for (TLRPC.Message message : res.messages) { - objects.add(new MessageObject(message, usersLocal)); - } - - AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - int totalCount; - if (res instanceof TLRPC.TL_messages_messagesSlice) { - totalCount = res.count; - } else { - totalCount = res.messages.size(); - } - putUsers(res.users, fromCache); - for (TLRPC.Chat chat : res.chats) { - putChat(chat, fromCache); - } - NotificationCenter.getInstance().postNotificationName(NotificationCenter.mediaDidLoaded, uid, totalCount, objects, fromCache, classGuid); - } - }); - } - } - - public void loadMedia(final long uid, final int offset, final int count, final int max_id, final boolean fromCache, final int classGuid) { - int lower_part = (int)uid; - if (fromCache || lower_part == 0) { - MessagesStorage.getInstance().loadMedia(uid, offset, count, max_id, classGuid); - } else { - TLRPC.TL_messages_search req = new TLRPC.TL_messages_search(); - req.offset = offset; - req.limit = count; - req.max_id = max_id; - req.filter = new TLRPC.TL_inputMessagesFilterPhotoVideo(); - req.q = ""; - if (uid < 0) { - req.peer = new TLRPC.TL_inputPeerChat(); - req.peer.chat_id = -lower_part; - } else { - TLRPC.User user = getUser(lower_part); - if (user instanceof TLRPC.TL_userForeign || user instanceof TLRPC.TL_userRequest) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - } - req.peer.user_id = lower_part; - } - long reqId = ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { - @Override - public void run(TLObject response, TLRPC.TL_error error) { - if (error == null) { - final TLRPC.messages_Messages res = (TLRPC.messages_Messages) response; - processLoadedMedia(res, uid, offset, count, max_id, false, classGuid); - } - } - }); - ConnectionsManager.getInstance().bindRequestToGuid(reqId, classGuid); - } - } - - public void processLoadedMediaCount(final int count, final long uid, final int classGuid, final boolean fromCache) { - AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - int lower_part = (int)uid; - if (fromCache && count == -1 && lower_part != 0) { - getMediaCount(uid, classGuid, false); - } else { - if (!fromCache) { - MessagesStorage.getInstance().putMediaCount(uid, count); - } - NotificationCenter.getInstance().postNotificationName(NotificationCenter.mediaCountDidLoaded, uid, (fromCache && count == -1 ? 0 : count), fromCache); - } - } - }); - } - - public void getMediaCount(final long uid, final int classGuid, boolean fromCache) { - int lower_part = (int)uid; - if (fromCache || lower_part == 0) { - MessagesStorage.getInstance().getMediaCount(uid, classGuid); - } else { - TLRPC.TL_messages_search req = new TLRPC.TL_messages_search(); - req.offset = 0; - req.limit = 1; - req.max_id = 0; - req.filter = new TLRPC.TL_inputMessagesFilterPhotoVideo(); - req.q = ""; - if (uid < 0) { - req.peer = new TLRPC.TL_inputPeerChat(); - req.peer.chat_id = -lower_part; - } else { - TLRPC.User user = getUser(lower_part); - if (user instanceof TLRPC.TL_userForeign || user instanceof TLRPC.TL_userRequest) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - } - req.peer.user_id = lower_part; - } - long reqId = ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { - @Override - public void run(TLObject response, TLRPC.TL_error error) { - if (error == null) { - final TLRPC.messages_Messages res = (TLRPC.messages_Messages) response; - MessagesStorage.getInstance().putUsersAndChats(res.users, res.chats, true, true); - - AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - putUsers(res.users, false); - for (TLRPC.Chat chat : res.chats) { - putChat(chat, false); - } - } - }); - - if (res instanceof TLRPC.TL_messages_messagesSlice) { - processLoadedMediaCount(res.count, uid, classGuid, false); - } else { - processLoadedMediaCount(res.messages.size(), uid, classGuid, false); - } - } - } - }); - ConnectionsManager.getInstance().bindRequestToGuid(reqId, classGuid); - } - } - public void uploadAndApplyUserAvatar(TLRPC.PhotoSize bigPhoto) { if (bigPhoto != null) { uploadingAvatar = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + bigPhoto.location.volume_id + "_" + bigPhoto.location.local_id + ".jpg"; @@ -1470,6 +1326,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter public void run() { int lower_id = (int)dialog_id; int high_id = (int)(dialog_id >> 32); + if (!isCache) { + ImageLoader.saveMessagesThumbs(messagesRes.messages); + } if (!isCache && allowCache) { MessagesStorage.getInstance().putMessages(messagesRes, dialog_id); } @@ -1490,7 +1349,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter ArrayList messagesToReload = null; for (TLRPC.Message message : messagesRes.messages) { message.dialog_id = dialog_id; - objects.add(new MessageObject(message, usersLocal, 2)); + objects.add(new MessageObject(message, usersLocal, true)); if (isCache && message.media instanceof TLRPC.TL_messageMediaUnsupported) { if (message.media.bytes.length == 0 || message.media.bytes.length == 1 && message.media.bytes[0] < TLRPC.LAYER) { if (messagesToReload == null) { @@ -1553,7 +1412,13 @@ public class MessagesController implements NotificationCenter.NotificationCenter dialog_id = -dialog.peer.chat_id; } if (dialog.notify_settings.mute_until != 0) { - editor.putInt("notify2_" + dialog_id, 2); + if (dialog.notify_settings.mute_until > ConnectionsManager.getInstance().getCurrentTime() + 60 * 60 * 24 * 365) { + editor.putInt("notify2_" + dialog_id, 2); + dialog.notify_settings.mute_until = Integer.MAX_VALUE; + } else { + editor.putInt("notify2_" + dialog_id, 3); + editor.putInt("notifyuntil_" + dialog_id, dialog.notify_settings.mute_until); + } } } } @@ -1592,7 +1457,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter } for (TLRPC.Message m : dialogsRes.messages) { - new_dialogMessage.put(m.id, new MessageObject(m, usersLocal, 0)); + new_dialogMessage.put(m.id, new MessageObject(m, usersLocal, false)); } for (TLRPC.TL_dialog d : dialogsRes.dialogs) { if (d.last_message_date == 0) { @@ -1701,6 +1566,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter int new_totalDialogsCount; if (!isCache) { + ImageLoader.saveMessagesThumbs(dialogsRes.messages); MessagesStorage.getInstance().putDialogs(dialogsRes); } @@ -1716,7 +1582,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter } for (TLRPC.Message m : dialogsRes.messages) { - new_dialogMessage.put(m.id, new MessageObject(m, usersLocal, 0)); + new_dialogMessage.put(m.id, new MessageObject(m, usersLocal, false)); } for (TLRPC.TL_dialog d : dialogsRes.dialogs) { if (d.last_message_date == 0) { @@ -1990,7 +1856,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter newMsg.date = ConnectionsManager.getInstance().getCurrentTime(); newMsg.random_id = 0; UserConfig.saveConfig(false); - MessageObject newMsgObj = new MessageObject(newMsg, users); + MessageObject newMsgObj = new MessageObject(newMsg, users, true); newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENT; ArrayList objArr = new ArrayList<>(); @@ -2034,7 +1900,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter putUsers(res.users, false); putChats(res.chats, false); final ArrayList messagesObj = new ArrayList<>(); - messagesObj.add(new MessageObject(res.message, users)); + messagesObj.add(new MessageObject(res.message, users, true)); TLRPC.Chat chat = res.chats.get(0); updateInterfaceWithMessages(-chat.id, messagesObj); NotificationCenter.getInstance().postNotificationName(NotificationCenter.chatDidCreated, chat.id); @@ -2081,7 +1947,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter putUsers(res.users, false); putChats(res.chats, false); final ArrayList messagesObj = new ArrayList<>(); - messagesObj.add(new MessageObject(res.message, users)); + messagesObj.add(new MessageObject(res.message, users, true)); TLRPC.Chat chat = res.chats.get(0); updateInterfaceWithMessages(-chat.id, messagesObj); NotificationCenter.getInstance().postNotificationName(NotificationCenter.updateInterfaces, UPDATE_MASK_CHAT_MEMBERS); @@ -2163,7 +2029,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter putChats(res.chats, false); if (user.id != UserConfig.getClientUserId()) { final ArrayList messagesObj = new ArrayList<>(); - messagesObj.add(new MessageObject(res.message, users)); + messagesObj.add(new MessageObject(res.message, users, true)); TLRPC.Chat chat = res.chats.get(0); updateInterfaceWithMessages(-chat.id, messagesObj); NotificationCenter.getInstance().postNotificationName(NotificationCenter.updateInterfaces, UPDATE_MASK_CHAT_MEMBERS); @@ -2247,7 +2113,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter putUsers(res.users, false); putChats(res.chats, false); final ArrayList messagesObj = new ArrayList<>(); - messagesObj.add(new MessageObject(res.message, users)); + messagesObj.add(new MessageObject(res.message, users, true)); TLRPC.Chat chat = res.chats.get(0); updateInterfaceWithMessages(-chat.id, messagesObj); NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); @@ -2291,13 +2157,17 @@ public class MessagesController implements NotificationCenter.NotificationCenter final TLRPC.messages_StatedMessage res = (TLRPC.messages_StatedMessage) response; MessagesStorage.getInstance().putUsersAndChats(res.users, res.chats, true, true); + final ArrayList messages = new ArrayList<>(); + messages.add(res.message); + ImageLoader.saveMessagesThumbs(messages); + AndroidUtilities.runOnUIThread(new Runnable() { @Override public void run() { putUsers(res.users, false); putChats(res.chats, false); final ArrayList messagesObj = new ArrayList<>(); - messagesObj.add(new MessageObject(res.message, users)); + messagesObj.add(new MessageObject(res.message, users, true)); TLRPC.Chat chat = res.chats.get(0); updateInterfaceWithMessages(-chat.id, messagesObj); NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); @@ -2305,8 +2175,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter } }); - final ArrayList messages = new ArrayList<>(); - messages.add(res.message); MessagesStorage.getInstance().putMessages(messages, true, true, false, 0); processNewDifferenceParams(res.seq, res.pts, -1); } @@ -2616,9 +2484,11 @@ public class MessagesController implements NotificationCenter.NotificationCenter } } + ImageLoader.saveMessagesThumbs(res.new_messages); + final ArrayList pushMessages = new ArrayList<>(); for (TLRPC.Message message : res.new_messages) { - MessageObject obj = new MessageObject(message, usersDict, 2); + MessageObject obj = new MessageObject(message, usersDict, true); long dialog_id = obj.messageOwner.dialog_id; if (dialog_id == 0) { @@ -2763,7 +2633,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter message.media = new TLRPC.TL_messageMediaEmpty(); MessagesStorage.lastSeqValue = updates.seq; MessagesStorage.lastPtsValue = updates.pts; - final MessageObject obj = new MessageObject(message, null); + final MessageObject obj = new MessageObject(message, null, true); final ArrayList objArr = new ArrayList<>(); objArr.add(obj); ArrayList arr = new ArrayList<>(); @@ -2834,7 +2704,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter MessagesStorage.lastSeqValue = updates.seq; MessagesStorage.lastPtsValue = updates.pts; MessagesStorage.lastDateValue = updates.date; - final MessageObject obj = new MessageObject(message, null); + final MessageObject obj = new MessageObject(message, null, true); final ArrayList objArr = new ArrayList<>(); objArr.add(obj); ArrayList arr = new ArrayList<>(); @@ -2976,6 +2846,29 @@ public class MessagesController implements NotificationCenter.NotificationCenter MessagesStorage.getInstance().saveDiffParams(MessagesStorage.lastSeqValue, MessagesStorage.lastPtsValue, MessagesStorage.lastDateValue, MessagesStorage.lastQtsValue); } + private boolean isNotifySettingsMuted(TLRPC.PeerNotifySettings settings) { + return settings instanceof TLRPC.TL_peerNotifySettings && settings.mute_until > ConnectionsManager.getInstance().getCurrentTime(); + } + + public boolean isDialogMuted(long dialog_id) { + TLRPC.TL_dialog dialog = dialogs_dict.get(dialog_id); + if (dialog != null) { + return isNotifySettingsMuted(dialog.notify_settings); + } else { + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); + int mute_type = preferences.getInt("notify2_" + dialog_id, 0); + if (mute_type == 2) { + return true; + } else if (mute_type == 3) { + int mute_until = preferences.getInt("notifyuntil_" + dialog_id, 0); + if (mute_until >= ConnectionsManager.getInstance().getCurrentTime()) { + return true; + } + } + } + return false; + } + public boolean processUpdateArray(ArrayList updates, final ArrayList usersArr, final ArrayList chatsArr) { if (updates.isEmpty()) { return true; @@ -3043,7 +2936,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter } } messagesArr.add(upd.message); - MessageObject obj = new MessageObject(upd.message, usersDict, 2); + ImageLoader.saveMessageThumbs(upd.message); + MessageObject obj = new MessageObject(upd.message, usersDict, true); if (obj.type == 11) { interfaceUpdateMask |= UPDATE_MASK_CHAT_AVATAR; } else if (obj.type == 10) { @@ -3134,7 +3028,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter newMessage.dialog_id = update.user_id; messagesArr.add(newMessage); - MessageObject obj = new MessageObject(newMessage, usersDict); + MessageObject obj = new MessageObject(newMessage, usersDict, true); ArrayList arr = messages.get(newMessage.dialog_id); if (arr == null) { arr = new ArrayList<>(); @@ -3178,7 +3072,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter newMessage.dialog_id = 777000; messagesArr.add(newMessage); - MessageObject obj = new MessageObject(newMessage, usersDict); + MessageObject obj = new MessageObject(newMessage, usersDict, true); ArrayList arr = messages.get(newMessage.dialog_id); if (arr == null) { arr = new ArrayList<>(); @@ -3200,8 +3094,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter messages.put(uid, arr); } for (TLRPC.Message message : decryptedMessages) { + ImageLoader.saveMessageThumbs(message); messagesArr.add(message); - MessageObject obj = new MessageObject(message, usersDict, 2); + MessageObject obj = new MessageObject(message, usersDict, true); arr.add(obj); pushMessages.add(obj); } @@ -3287,7 +3182,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter newMessage.message = ((TLRPC.TL_updateServiceNotification)update).message; messagesArr.add(newMessage); - MessageObject obj = new MessageObject(newMessage, usersDict); + MessageObject obj = new MessageObject(newMessage, usersDict, true); ArrayList arr = messages.get(newMessage.dialog_id); if (arr == null) { arr = new ArrayList<>(); @@ -3370,6 +3265,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter } toDbUser.status = update.status; dbUsersStatus.add(toDbUser); + if (update.user_id == UserConfig.getClientUserId()) { + NotificationsController.getInstance().setLastOnlineFromOtherDevice(update.status.expires); + } } else if (update instanceof TLRPC.TL_updateUserName) { if (currentUser != null) { currentUser.first_name = update.first_name; @@ -3405,15 +3303,38 @@ public class MessagesController implements NotificationCenter.NotificationCenter SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); editor = preferences.edit(); } - int dialog_id = update.peer.peer.user_id; + long dialog_id = update.peer.peer.user_id; if (dialog_id == 0) { dialog_id = -update.peer.peer.chat_id; } - if (update.notify_settings.mute_until != 0) { - editor.putInt("notify2_" + dialog_id, 2); - } else { - editor.remove("notify2_" + dialog_id); + TLRPC.TL_dialog dialog = dialogs_dict.get(dialog_id); + if (dialog != null) { + dialog.notify_settings = update.notify_settings; } + if (update.notify_settings.mute_until > ConnectionsManager.getInstance().getCurrentTime()) { + int until = 0; + if (update.notify_settings.mute_until > ConnectionsManager.getInstance().getCurrentTime() + 60 * 60 * 24 * 365) { + editor.putInt("notify2_" + dialog_id, 2); + if (dialog != null) { + dialog.notify_settings.mute_until = Integer.MAX_VALUE; + } + } else { + until = update.notify_settings.mute_until; + editor.putInt("notify2_" + dialog_id, 3); + editor.putInt("notifyuntil_" + dialog_id, update.notify_settings.mute_until); + if (dialog != null) { + dialog.notify_settings.mute_until = until; + } + } + MessagesStorage.getInstance().setDialogFlags(dialog_id, ((long)until << 32) | 1); + } else { + if (dialog != null) { + dialog.notify_settings.mute_until = 0; + } + editor.remove("notify2_" + dialog_id); + MessagesStorage.getInstance().setDialogFlags(dialog_id, 0); + } + }/* else if (update.peer instanceof TLRPC.TL_notifyChats) { disable global settings sync if (editor == null) { SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java index 4b3191758..87f0e1982 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java @@ -17,6 +17,7 @@ import org.telegram.PhoneFormat.PhoneFormat; import org.telegram.SQLite.SQLiteCursor; import org.telegram.SQLite.SQLiteDatabase; import org.telegram.SQLite.SQLitePreparedStatement; +import org.telegram.android.query.SharedMediaQuery; import org.telegram.messenger.BuffersStorage; import org.telegram.messenger.ByteBufferDesc; import org.telegram.messenger.ConnectionsManager; @@ -109,8 +110,6 @@ public class MessagesStorage { database.executeFast("CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)").stepThis().dispose(); database.executeFast("CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)").stepThis().dispose(); database.executeFast("CREATE TABLE pending_read(uid INTEGER PRIMARY KEY, max_id INTEGER)").stepThis().dispose(); - database.executeFast("CREATE TABLE media(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, data BLOB)").stepThis().dispose(); - database.executeFast("CREATE TABLE media_counts(uid INTEGER PRIMARY KEY, count INTEGER)").stepThis().dispose(); database.executeFast("CREATE TABLE wallpapers(uid INTEGER PRIMARY KEY, data BLOB)").stepThis().dispose(); database.executeFast("CREATE TABLE randoms(random_id INTEGER, mid INTEGER, PRIMARY KEY (random_id, mid))").stepThis().dispose(); database.executeFast("CREATE TABLE enc_tasks_v2(mid INTEGER PRIMARY KEY, date INTEGER)").stepThis().dispose(); @@ -123,9 +122,6 @@ public class MessagesStorage { database.executeFast("CREATE TABLE messages_seq(mid INTEGER PRIMARY KEY, seq_in INTEGER, seq_out INTEGER);").stepThis().dispose(); database.executeFast("CREATE TABLE web_recent_v3(id TEXT, type INTEGER, image_url TEXT, thumb_url TEXT, local_url TEXT, width INTEGER, height INTEGER, size INTEGER, date INTEGER, PRIMARY KEY (id, type));").stepThis().dispose(); database.executeFast("CREATE TABLE stickers(id INTEGER PRIMARY KEY, data BLOB, date INTEGER);").stepThis().dispose(); - //database.executeFast("CREATE TABLE secret_holes(uid INTEGER, seq_in INTEGER, seq_out INTEGER, data BLOB, PRIMARY KEY (uid, seq_in, seq_out));").stepThis().dispose(); - - //database.executeFast("CREATE TABLE attach_data(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))").stepThis().dispose(); database.executeFast("CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)").stepThis().dispose(); database.executeFast("CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))").stepThis().dispose(); @@ -134,6 +130,8 @@ public class MessagesStorage { //database.executeFast("CREATE TABLE messages_holes(uid INTEGER, start INTEGER, end INTEGER, PRIMARY KEY(uid, start));").stepThis().dispose(); //database.executeFast("CREATE INDEX IF NOT EXISTS type_uid_end_messages_holes ON messages_holes(uid, end);").stepThis().dispose(); + //database.executeFast("CREATE TABLE secret_holes(uid INTEGER, seq_in INTEGER, seq_out INTEGER, data BLOB, PRIMARY KEY (uid, seq_in, seq_out));").stepThis().dispose(); + //database.executeFast("CREATE TABLE attach_data(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS type_date_idx_download_queue ON download_queue(type, date);").stepThis().dispose(); @@ -146,10 +144,6 @@ public class MessagesStorage { database.executeFast("CREATE INDEX IF NOT EXISTS last_mid_idx_dialogs ON dialogs(last_mid);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS unread_count_idx_dialogs ON dialogs(unread_count);").stepThis().dispose(); - database.executeFast("CREATE INDEX IF NOT EXISTS uid_mid_idx_media ON media(uid, mid);").stepThis().dispose(); - database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_media ON media(mid);").stepThis().dispose(); - database.executeFast("CREATE INDEX IF NOT EXISTS uid_date_mid_idx_media ON media(uid, date, mid);").stepThis().dispose(); - database.executeFast("CREATE INDEX IF NOT EXISTS uid_mid_idx_messages ON messages(uid, mid);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS uid_date_mid_idx_messages ON messages(uid, date, mid);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS mid_out_idx_messages ON messages(mid, out);").stepThis().dispose(); @@ -158,7 +152,17 @@ public class MessagesStorage { database.executeFast("CREATE INDEX IF NOT EXISTS seq_idx_messages_seq ON messages_seq(seq_in, seq_out);").stepThis().dispose(); - database.executeFast("PRAGMA user_version = 12").stepThis().dispose(); + //shared media + database.executeFast("CREATE TABLE media_v2(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, type INTEGER, data BLOB)").stepThis().dispose(); + database.executeFast("CREATE TABLE media_counts_v2(uid INTEGER, type INTEGER, count INTEGER, PRIMARY KEY(uid, type))").stepThis().dispose(); + database.executeFast("CREATE INDEX IF NOT EXISTS uid_mid_type_date_idx_media ON media_v2(uid, mid, type, date);").stepThis().dispose(); + database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_media ON media_v2(mid);").stepThis().dispose(); + + //kev-value + database.executeFast("CREATE TABLE keyvalue(id TEXT PRIMARY KEY, value TEXT)").stepThis().dispose(); + + //version + database.executeFast("PRAGMA user_version = 13").stepThis().dispose(); } else { try { SQLiteCursor cursor = database.queryFinalized("SELECT seq, pts, date, qts, lsv, sg, pbytes FROM params WHERE id = 1"); @@ -189,7 +193,7 @@ public class MessagesStorage { } } int version = database.executeInt("PRAGMA user_version"); - if (version < 12) { + if (version < 13) { updateDbToLastVersion(version); } } @@ -208,9 +212,6 @@ public class MessagesStorage { if (version < 4) { database.executeFast("CREATE TABLE IF NOT EXISTS user_photos(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))").stepThis().dispose(); - database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_media ON media(mid);").stepThis().dispose(); - database.executeFast("CREATE INDEX IF NOT EXISTS uid_date_mid_idx_media ON media(uid, date, mid);").stepThis().dispose(); - database.executeFast("DROP INDEX IF EXISTS read_state_out_idx_messages;").stepThis().dispose(); database.executeFast("DROP INDEX IF EXISTS ttl_idx_messages;").stepThis().dispose(); database.executeFast("DROP INDEX IF EXISTS date_idx_messages;").stepThis().dispose(); @@ -350,6 +351,23 @@ public class MessagesStorage { database.executeFast("PRAGMA user_version = 12").stepThis().dispose(); version = 12; } + if (version == 12 && version < 13) { + database.executeFast("DROP INDEX IF EXISTS uid_mid_idx_media;").stepThis().dispose(); + database.executeFast("DROP INDEX IF EXISTS mid_idx_media;").stepThis().dispose(); + database.executeFast("DROP INDEX IF EXISTS uid_date_mid_idx_media;").stepThis().dispose(); + database.executeFast("DROP TABLE IF EXISTS media;").stepThis().dispose(); + database.executeFast("DROP TABLE IF EXISTS media_counts;").stepThis().dispose(); + + database.executeFast("CREATE TABLE IF NOT EXISTS media_v2(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, type INTEGER, data BLOB)").stepThis().dispose(); + database.executeFast("CREATE TABLE IF NOT EXISTS media_counts_v2(uid INTEGER, type INTEGER, count INTEGER, PRIMARY KEY(uid, type))").stepThis().dispose(); + database.executeFast("CREATE INDEX IF NOT EXISTS uid_mid_type_date_idx_media ON media_v2(uid, mid, type, date);").stepThis().dispose(); + database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_media ON media_v2(mid);").stepThis().dispose(); + + database.executeFast("CREATE TABLE IF NOT EXISTS keyvalue(id TEXT PRIMARY KEY, value TEXT)").stepThis().dispose(); + + database.executeFast("PRAGMA user_version = 13").stepThis().dispose(); + version = 13; + } } catch (Exception e) { FileLog.e("tmessages", e); } @@ -445,7 +463,7 @@ public class MessagesStorage { }); } - public void setDialogFlags(final long did, final int flags) { + public void setDialogFlags(final long did, final long flags) { storageQueue.postRunnable(new Runnable() { @Override public void run() { @@ -821,9 +839,9 @@ public class MessagesStorage { } } database.executeFast("UPDATE dialogs SET unread_count = 0 WHERE did = " + did).stepThis().dispose(); - database.executeFast("DELETE FROM media_counts WHERE uid = " + did).stepThis().dispose(); database.executeFast("DELETE FROM messages WHERE uid = " + did).stepThis().dispose(); - database.executeFast("DELETE FROM media WHERE uid = " + did).stepThis().dispose(); + database.executeFast("DELETE FROM media_counts_v2 WHERE uid = " + did).stepThis().dispose(); + database.executeFast("DELETE FROM media_v2 WHERE uid = " + did).stepThis().dispose(); } catch (Exception e) { FileLog.e("tmessages", e); } @@ -1479,149 +1497,6 @@ public class MessagesStorage { }); } - public void putMediaCount(final long uid, final int count) { - storageQueue.postRunnable(new Runnable() { - @Override - public void run() { - try { - SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media_counts VALUES(?, ?)"); - state2.requery(); - state2.bindLong(1, uid); - state2.bindInteger(2, count); - state2.step(); - state2.dispose(); - } catch (Exception e) { - FileLog.e("tmessages", e); - } - } - }); - } - - public void getMediaCount(final long uid, final int classGuid) { - storageQueue.postRunnable(new Runnable() { - @Override - public void run() { - try { - int count = -1; - SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT count FROM media_counts WHERE uid = %d LIMIT 1", uid)); - if (cursor.next()) { - count = cursor.intValue(0); - } - cursor.dispose(); - int lower_part = (int)uid; - if (count == -1 && lower_part == 0) { - cursor = database.queryFinalized(String.format(Locale.US, "SELECT COUNT(mid) FROM media WHERE uid = %d LIMIT 1", uid)); - if (cursor.next()) { - count = cursor.intValue(0); - } - cursor.dispose(); - if (count != -1) { - putMediaCount(uid, count); - } - } - MessagesController.getInstance().processLoadedMediaCount(count, uid, classGuid, true); - } catch (Exception e) { - FileLog.e("tmessages", e); - } - } - }); - } - - public void loadMedia(final long uid, final int offset, final int count, final int max_id, final int classGuid) { - storageQueue.postRunnable(new Runnable() { - @Override - public void run() { - TLRPC.TL_messages_messages res = new TLRPC.TL_messages_messages(); - try { - ArrayList loadedUsers = new ArrayList<>(); - ArrayList fromUser = new ArrayList<>(); - - SQLiteCursor cursor; - - if ((int)uid != 0) { - if (max_id != 0) { - cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, mid FROM media WHERE uid = %d AND mid < %d ORDER BY date DESC, mid DESC LIMIT %d", uid, max_id, count)); - } else { - cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, mid FROM media WHERE uid = %d ORDER BY date DESC, mid DESC LIMIT %d,%d", uid, offset, count)); - } - } else { - if (max_id != 0) { - cursor = database.queryFinalized(String.format(Locale.US, "SELECT m.data, m.mid, r.random_id FROM media as m LEFT JOIN randoms as r ON r.mid = m.mid WHERE m.uid = %d AND m.mid > %d ORDER BY m.mid ASC LIMIT %d", uid, max_id, count)); - } else { - cursor = database.queryFinalized(String.format(Locale.US, "SELECT m.data, m.mid, r.random_id FROM media as m LEFT JOIN randoms as r ON r.mid = m.mid WHERE m.uid = %d ORDER BY m.mid ASC LIMIT %d,%d", uid, offset, count)); - } - } - - while (cursor.next()) { - ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(0)); - if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { - TLRPC.Message message = (TLRPC.Message)TLClassStore.Instance().TLdeserialize(data, data.readInt32()); - message.id = cursor.intValue(1); - message.dialog_id = uid; - if ((int)uid == 0) { - message.random_id = cursor.longValue(2); - } - res.messages.add(message); - fromUser.add(message.from_id); - } - buffersStorage.reuseFreeBuffer(data); - } - cursor.dispose(); - - StringBuilder usersToLoad = new StringBuilder(); - for (int uid : fromUser) { - if (!loadedUsers.contains(uid)) { - if (usersToLoad.length() != 0) { - usersToLoad.append(","); - } - usersToLoad.append(uid); - loadedUsers.add(uid); - } - } - if (usersToLoad.length() != 0) { - getUsersInternal(usersToLoad.toString(), res.users); - } - } catch (Exception e) { - res.messages.clear(); - res.chats.clear(); - res.users.clear(); - FileLog.e("tmessages", e); - } finally { - MessagesController.getInstance().processLoadedMedia(res, uid, offset, count, max_id, true, classGuid); - } - } - }); - } - - public void putMedia(final long uid, final ArrayList messages) { - storageQueue.postRunnable(new Runnable() { - @Override - public void run() { - try { - database.beginTransaction(); - SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media VALUES(?, ?, ?, ?)"); - for (TLRPC.Message message : messages) { - if (message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaPhoto) { - state2.requery(); - ByteBufferDesc data = buffersStorage.getFreeBuffer(message.getObjectSize()); - message.serializeToStream(data); - state2.bindInteger(1, message.id); - state2.bindLong(2, uid); - state2.bindInteger(3, message.date); - state2.bindByteBuffer(4, data.buffer); - state2.step(); - buffersStorage.reuseFreeBuffer(data); - } - } - state2.dispose(); - database.commitTransaction(); - } catch (Exception e) { - FileLog.e("tmessages", e); - } - } - }); - } - public void getUnsentMessages(final int count) { storageQueue.postRunnable(new Runnable() { @Override @@ -2105,10 +1980,11 @@ public class MessagesStorage { storageQueue.postRunnable(new Runnable() { @Override public void run() { + SQLitePreparedStatement state = null; try { String id = Utilities.MD5(path); if (id != null) { - SQLitePreparedStatement state = database.executeFast("REPLACE INTO sent_files_v2 VALUES(?, ?, ?)"); + state = database.executeFast("REPLACE INTO sent_files_v2 VALUES(?, ?, ?)"); state.requery(); ByteBufferDesc data = buffersStorage.getFreeBuffer(file.getObjectSize()); file.serializeToStream(data); @@ -2116,11 +1992,14 @@ public class MessagesStorage { state.bindInteger(2, type); state.bindByteBuffer(3, data.buffer); state.step(); - state.dispose(); buffersStorage.reuseFreeBuffer(data); } } catch (Exception e) { FileLog.e("tmessages", e); + } finally { + if (state != null) { + state.dispose(); + } } } }); @@ -2439,7 +2318,7 @@ public class MessagesStorage { state.dispose(); } - private void getUsersInternal(String usersToLoad, ArrayList result) throws Exception { + public void getUsersInternal(String usersToLoad, ArrayList result) throws Exception { if (usersToLoad == null || usersToLoad.length() == 0 || result == null) { return; } @@ -2464,7 +2343,7 @@ public class MessagesStorage { cursor.dispose(); } - private void getChatsInternal(String chatsToLoad, ArrayList result) throws Exception { + public void getChatsInternal(String chatsToLoad, ArrayList result) throws Exception { if (chatsToLoad == null || chatsToLoad.length() == 0 || result == null) { return; } @@ -2486,7 +2365,7 @@ public class MessagesStorage { cursor.dispose(); } - private void getEncryptedChatsInternal(String chatsToLoad, ArrayList result, ArrayList usersToLoad) throws Exception { + public void getEncryptedChatsInternal(String chatsToLoad, ArrayList result, ArrayList usersToLoad) throws Exception { if (chatsToLoad == null || chatsToLoad.length() == 0 || result == null) { return; } @@ -2633,15 +2512,6 @@ public class MessagesStorage { }); } - private boolean canAddMessageToMedia(TLRPC.Message message) { - if (message instanceof TLRPC.TL_message_secret && message.media instanceof TLRPC.TL_messageMediaPhoto && message.ttl != 0 && message.ttl <= 60) { - return false; - } else if (message.media instanceof TLRPC.TL_messageMediaPhoto || message.media instanceof TLRPC.TL_messageMediaVideo) { - return true; - } - return false; - } - private int getMessageMediaType(TLRPC.Message message) { if (message instanceof TLRPC.TL_message_secret && ( message.media instanceof TLRPC.TL_messageMediaPhoto && message.ttl != 0 && message.ttl <= 60 || @@ -2661,13 +2531,14 @@ public class MessagesStorage { } HashMap messagesMap = new HashMap<>(); HashMap messagesCounts = new HashMap<>(); - HashMap mediaCounts = new HashMap<>(); + HashMap> mediaCounts = new HashMap<>(); + HashMap mediaTypes = new HashMap<>(); HashMap messagesIdsMap = new HashMap<>(); HashMap messagesMediaIdsMap = new HashMap<>(); StringBuilder messageIds = new StringBuilder(); StringBuilder messageMediaIds = new StringBuilder(); SQLitePreparedStatement state = database.executeFast("REPLACE INTO messages VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"); - SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media VALUES(?, ?, ?, ?)"); + SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media_v2 VALUES(?, ?, ?, ?, ?)"); SQLitePreparedStatement state3 = database.executeFast("REPLACE INTO randoms VALUES(?, ?)"); SQLitePreparedStatement state4 = database.executeFast("REPLACE INTO download_queue VALUES(?, ?, ?, ?)"); @@ -2689,12 +2560,39 @@ public class MessagesStorage { messagesIdsMap.put(message.id, dialog_id); } - if (canAddMessageToMedia(message)) { + if (SharedMediaQuery.canAddMessageToMedia(message)) { if (messageMediaIds.length() > 0) { messageMediaIds.append(","); } messageMediaIds.append(message.id); messagesMediaIdsMap.put(message.id, dialog_id); + mediaTypes.put(message.id, SharedMediaQuery.getMediaType(message)); + } + } + + if (messageMediaIds.length() > 0) { + SQLiteCursor cursor = database.queryFinalized("SELECT mid FROM media_v2 WHERE mid IN(" + messageMediaIds.toString() + ")"); + while (cursor.next()) { + int mid = cursor.intValue(0); + messagesMediaIdsMap.remove(mid); + } + cursor.dispose(); + for (HashMap.Entry entry : messagesMediaIdsMap.entrySet()) { + Integer type = mediaTypes.get(entry.getKey()); + HashMap counts = mediaCounts.get(type); + Integer count; + if (counts == null) { + counts = new HashMap<>(); + count = 0; + mediaCounts.put(type, counts); + } else { + count = counts.get(entry.getValue()); + } + if (count == null) { + count = 0; + } + count++; + counts.put(entry.getValue(), count); } } @@ -2715,23 +2613,6 @@ public class MessagesStorage { } } - if (messageMediaIds.length() > 0) { - SQLiteCursor cursor = database.queryFinalized("SELECT mid FROM media WHERE mid IN(" + messageMediaIds.toString() + ")"); - while (cursor.next()) { - int mid = cursor.intValue(0); - messagesMediaIdsMap.remove(mid); - } - cursor.dispose(); - for (Long dialog_id : messagesMediaIdsMap.values()) { - Integer count = mediaCounts.get(dialog_id); - if (count == null) { - count = 0; - } - count++; - mediaCounts.put(dialog_id, count); - } - } - int downloadMediaMask = 0; for (TLRPC.Message message : messages) { fixUnsupportedMedia(message); @@ -2784,12 +2665,13 @@ public class MessagesStorage { state3.step(); } - if (canAddMessageToMedia(message)) { + if (SharedMediaQuery.canAddMessageToMedia(message)) { state2.requery(); state2.bindInteger(1, messageId); state2.bindLong(2, dialog_id); state2.bindInteger(3, message.date); - state2.bindByteBuffer(4, data.buffer); + state2.bindInteger(4, SharedMediaQuery.getMediaType(message)); + state2.bindByteBuffer(5, data.buffer); state2.step(); } buffersStorage.reuseFreeBuffer(data); @@ -2883,33 +2765,37 @@ public class MessagesStorage { state.step(); } state.dispose(); + + if (!mediaCounts.isEmpty()) { + state = database.executeFast("REPLACE INTO media_counts_v2 VALUES(?, ?, ?)"); + for (HashMap.Entry> counts : mediaCounts.entrySet()) { + Integer type = counts.getKey(); + for (HashMap.Entry pair : counts.getValue().entrySet()) { + long uid = pair.getKey(); + int lower_part = (int) uid; + int count = -1; + SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT count FROM media_counts_v2 WHERE uid = %d AND type = %d LIMIT 1", uid, type)); + if (cursor.next()) { + count = cursor.intValue(0); + } + cursor.dispose(); + if (count != -1) { + state.requery(); + count += pair.getValue(); + state.bindLong(1, uid); + state.bindInteger(2, type); + state.bindInteger(3, count); + state.step(); + } + } + } + state.dispose(); + } if (withTransaction) { database.commitTransaction(); } MessagesController.getInstance().processDialogsUpdateRead(messagesCounts); - if (!mediaCounts.isEmpty()) { - state = database.executeFast("REPLACE INTO media_counts VALUES(?, ?)"); - for (HashMap.Entry pair : mediaCounts.entrySet()) { - long uid = pair.getKey(); - int lower_part = (int)uid; - int count = -1; - SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT count FROM media_counts WHERE uid = %d LIMIT 1", uid)); - if (cursor.next()) { - count = cursor.intValue(0); - } - if (count != -1) { - state.requery(); - count += pair.getValue(); - state.bindLong(1, uid); - state.bindInteger(2, count); - state.step(); - } - cursor.dispose(); - } - state.dispose(); - } - if (downloadMediaMask != 0) { final int downloadMediaMaskFinal = downloadMediaMask; AndroidUtilities.runOnUIThread(new Runnable() { @@ -3078,6 +2964,12 @@ public class MessagesStorage { state.bindInteger(2, oldId); state.step(); } catch (Exception e) { + try { + database.executeFast(String.format(Locale.US, "DELETE FROM messages WHERE mid = %d", oldId)).stepThis().dispose(); + database.executeFast(String.format(Locale.US, "DELETE FROM messages_seq WHERE mid = %d", oldId)).stepThis().dispose(); + } catch (Exception e2) { + FileLog.e("tmessages", e2); + } FileLog.e("tmessages", e); } finally { if (state != null) { @@ -3087,11 +2979,16 @@ public class MessagesStorage { } try { - state = database.executeFast("UPDATE media SET mid = ? WHERE mid = ?"); + state = database.executeFast("UPDATE media_v2 SET mid = ? WHERE mid = ?"); state.bindInteger(1, newId); state.bindInteger(2, oldId); state.step(); } catch (Exception e) { + try { + database.executeFast(String.format(Locale.US, "DELETE FROM media_v2 WHERE mid = %d", oldId)).stepThis().dispose(); + } catch (Exception e2) { + FileLog.e("tmessages", e2); + } FileLog.e("tmessages", e); } finally { if (state != null) { @@ -3352,8 +3249,8 @@ public class MessagesStorage { FileLoader.getInstance().deleteFiles(filesToDelete); database.executeFast(String.format(Locale.US, "DELETE FROM messages WHERE mid IN(%s)", ids)).stepThis().dispose(); database.executeFast(String.format(Locale.US, "DELETE FROM messages_seq WHERE mid IN(%s)", ids)).stepThis().dispose(); - database.executeFast(String.format(Locale.US, "DELETE FROM media WHERE mid IN(%s)", ids)).stepThis().dispose(); - database.executeFast("DELETE FROM media_counts WHERE 1").stepThis().dispose(); + database.executeFast(String.format(Locale.US, "DELETE FROM media_v2 WHERE mid IN(%s)", ids)).stepThis().dispose(); + database.executeFast("DELETE FROM media_counts_v2 WHERE 1").stepThis().dispose(); } catch (Exception e) { FileLog.e("tmessages", e); } @@ -3521,7 +3418,7 @@ public class MessagesStorage { database.beginTransaction(); if (!messages.messages.isEmpty()) { SQLitePreparedStatement state = database.executeFast("REPLACE INTO messages VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"); - SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media VALUES(?, ?, ?, ?)"); + SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media_v2 VALUES(?, ?, ?, ?, ?)"); for (TLRPC.Message message : messages.messages) { fixUnsupportedMedia(message); state.requery(); @@ -3538,12 +3435,13 @@ public class MessagesStorage { state.bindInteger(9, 0); state.step(); - if (message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaPhoto) { + if (SharedMediaQuery.canAddMessageToMedia(message)) { state2.requery(); state2.bindInteger(1, message.id); state2.bindLong(2, dialog_id); state2.bindInteger(3, message.date); - state2.bindByteBuffer(4, data.buffer); + state2.bindInteger(4, SharedMediaQuery.getMediaType(message)); + state2.bindByteBuffer(5, data.buffer); state2.step(); } buffersStorage.reuseFreeBuffer(data); @@ -3573,13 +3471,22 @@ public class MessagesStorage { usersToLoad.add(UserConfig.getClientUserId()); ArrayList chatsToLoad = new ArrayList<>(); ArrayList encryptedToLoad = new ArrayList<>(); - SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT d.did, d.last_mid, d.unread_count, d.date, m.data, m.read_state, m.mid, m.send_state FROM dialogs as d LEFT JOIN messages as m ON d.last_mid = m.mid ORDER BY d.date DESC LIMIT %d,%d", offset, count)); + SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT d.did, d.last_mid, d.unread_count, d.date, m.data, m.read_state, m.mid, m.send_state, s.flags FROM dialogs as d LEFT JOIN messages as m ON d.last_mid = m.mid LEFT JOIN dialog_settings as s ON d.did = s.did ORDER BY d.date DESC LIMIT %d,%d", offset, count)); while (cursor.next()) { TLRPC.TL_dialog dialog = new TLRPC.TL_dialog(); dialog.id = cursor.longValue(0); dialog.top_message = cursor.intValue(1); dialog.unread_count = cursor.intValue(2); dialog.last_message_date = cursor.intValue(3); + long flags = cursor.longValue(8); + int low_flags = (int)flags; + dialog.notify_settings = new TLRPC.TL_peerNotifySettings(); + if ((low_flags & 1) != 0) { + dialog.notify_settings.mute_until = (int)(flags >> 32); + if (dialog.notify_settings.mute_until == 0) { + dialog.notify_settings.mute_until = Integer.MAX_VALUE; + } + } dialogs.dialogs.add(dialog); ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(4)); @@ -3680,7 +3587,7 @@ public class MessagesStorage { if (!dialogs.dialogs.isEmpty()) { SQLitePreparedStatement state = database.executeFast("REPLACE INTO messages VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"); SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO dialogs(did, date, unread_count, last_mid) VALUES(?, ?, ?, ?)"); - SQLitePreparedStatement state3 = database.executeFast("REPLACE INTO media VALUES(?, ?, ?, ?)"); + SQLitePreparedStatement state3 = database.executeFast("REPLACE INTO media_v2 VALUES(?, ?, ?, ?, ?)"); SQLitePreparedStatement state4 = database.executeFast("REPLACE INTO dialog_settings VALUES(?, ?)"); for (TLRPC.TL_dialog dialog : dialogs.dialogs) { @@ -3717,12 +3624,13 @@ public class MessagesStorage { state4.bindInteger(2, dialog.notify_settings.mute_until != 0 ? 1 : 0); state4.step(); - if (message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaPhoto) { + if (SharedMediaQuery.canAddMessageToMedia(message)) { state3.requery(); state3.bindLong(1, message.id); state3.bindInteger(2, uid); state3.bindInteger(3, message.date); - state3.bindByteBuffer(4, data.buffer); + state3.bindInteger(4, SharedMediaQuery.getMediaType(message)); + state3.bindByteBuffer(5, data.buffer); state3.step(); } buffersStorage.reuseFreeBuffer(data); diff --git a/TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java b/TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java index 4500948ae..6e045c321 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java +++ b/TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java @@ -52,6 +52,8 @@ public class NotificationCenter { public static final int httpFileDidLoaded = totalEvents++; public static final int httpFileDidFailedLoad = totalEvents++; + public static final int messageThumbGenerated = totalEvents++; + public static final int wallpapersDidLoaded = totalEvents++; public static final int closeOtherAppActivities = totalEvents++; public static final int didUpdatedConnectionState = totalEvents++; @@ -70,16 +72,16 @@ public class NotificationCenter { public static final int FileNewChunkAvailable = totalEvents++; public static final int FilePreparingFailed = totalEvents++; - public final static int audioProgressDidChanged = totalEvents++; - public final static int audioDidReset = totalEvents++; - public final static int recordProgressChanged = totalEvents++; - public final static int recordStarted = totalEvents++; - public final static int recordStartError = totalEvents++; - public final static int recordStopped = totalEvents++; - public final static int screenshotTook = totalEvents++; - public final static int albumsDidLoaded = totalEvents++; - public final static int audioDidSent = totalEvents++; - public final static int audioDidStarted = totalEvents++; + public static final int audioProgressDidChanged = totalEvents++; + public static final int audioDidReset = totalEvents++; + public static final int recordProgressChanged = totalEvents++; + public static final int recordStarted = totalEvents++; + public static final int recordStartError = totalEvents++; + public static final int recordStopped = totalEvents++; + public static final int screenshotTook = totalEvents++; + public static final int albumsDidLoaded = totalEvents++; + public static final int audioDidSent = totalEvents++; + public static final int audioDidStarted = totalEvents++; public static final int audioRouteChanged = totalEvents++; final private HashMap> observers = new HashMap<>(); diff --git a/TMessagesProj/src/main/java/org/telegram/android/NotificationDelay.java b/TMessagesProj/src/main/java/org/telegram/android/NotificationDelay.java new file mode 100644 index 000000000..c47af63f3 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/android/NotificationDelay.java @@ -0,0 +1,29 @@ +/* + * This is the source code of Telegram for Android v. 2.0.x. + * It is licensed under GNU GPL v. 2 or later. + * You should have received a copy of the license in this archive (see LICENSE). + * + * Copyright Nikolai Kudashov, 2013-2014. + */ + +package org.telegram.android; + +import android.app.IntentService; +import android.content.Intent; + +public class NotificationDelay extends IntentService { + + public NotificationDelay() { + super("NotificationDelay"); + } + + @Override + protected void onHandleIntent(Intent intent) { + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + NotificationsController.getInstance().notificationDelayReached(); + } + }); + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java index 9d461166f..c0cc5d4f9 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java @@ -31,6 +31,8 @@ import org.json.JSONObject; import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.FileLog; import org.telegram.messenger.R; +import org.telegram.messenger.RPCRequest; +import org.telegram.messenger.TLObject; import org.telegram.messenger.TLRPC; import org.telegram.messenger.UserConfig; import org.telegram.messenger.ApplicationLoader; @@ -57,6 +59,7 @@ public class NotificationsController { private int total_unread_count = 0; private int personal_count = 0; private boolean notifyCheck = false; + private int lastOnlineFromOtherDevice = 0; private static volatile NotificationsController Instance = null; public static NotificationsController getInstance() { @@ -256,6 +259,27 @@ public class NotificationsController { } } + private void scheduleNotificationDelay(boolean onlineReason) { + try { + FileLog.e("tmessages", "delay notification start"); + AlarmManager alarm = (AlarmManager) ApplicationLoader.applicationContext.getSystemService(Context.ALARM_SERVICE); + PendingIntent pintent = PendingIntent.getService(ApplicationLoader.applicationContext, 0, new Intent(ApplicationLoader.applicationContext, NotificationDelay.class), 0); + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); + if (onlineReason) { + alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3 * 1000, pintent); + } else { + alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 500, pintent); + } + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } + + protected void notificationDelayReached() { + FileLog.e("tmessages", "delay reached"); + showOrUpdateNotification(true); + } + protected void repeatNotificationMaybe() { int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); if (hour >= 11 && hour <= 22) { @@ -266,6 +290,15 @@ public class NotificationsController { } } + public void setLastOnlineFromOtherDevice(final int time) { + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + lastOnlineFromOtherDevice = time; + } + }); + } + private void showOrUpdateNotification(boolean notifyAboutLast) { if (!UserConfig.isClientActivated() || pushMessages.isEmpty()) { dismissNotification(); @@ -307,6 +340,12 @@ public class NotificationsController { SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE); int notify_override = preferences.getInt("notify2_" + dialog_id, 0); + if (notify_override == 3) { + int mute_until = preferences.getInt("notifyuntil_" + dialog_id, 0); + if (mute_until >= ConnectionsManager.getInstance().getCurrentTime()) { + notify_override = 2; + } + } if (!notifyAboutLast || notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || chat_id != 0 && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0) { notifyDisabled = true; } @@ -490,7 +529,7 @@ public class NotificationsController { } if (photoPath != null) { - BitmapDrawable img = ImageLoader.getInstance().getImageFromMemory(photoPath, null, "50_50", null); + BitmapDrawable img = ImageLoader.getInstance().getImageFromMemory(photoPath, null, "50_50"); if (img != null) { mBuilder.setLargeIcon(img.getBitmap()); } @@ -773,6 +812,12 @@ public class NotificationsController { popup = (int)dialog_id == 0 ? 0 : preferences.getInt(isChat ? "popupGroup" : "popupAll", 0); if (value == null) { int notify_override = preferences.getInt("notify2_" + dialog_id, 0); + if (notify_override == 3) { + int mute_until = preferences.getInt("notifyuntil_" + dialog_id, 0); + if (mute_until >= ConnectionsManager.getInstance().getCurrentTime()) { + notify_override = 2; + } + } value = !(notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || isChat && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0); settingsCache.put(dialog_id, value); } @@ -808,6 +853,12 @@ public class NotificationsController { long dialog_id = entry.getKey(); int notify_override = preferences.getInt("notify2_" + dialog_id, 0); + if (notify_override == 3) { + int mute_until = preferences.getInt("notifyuntil_" + dialog_id, 0); + if (mute_until >= ConnectionsManager.getInstance().getCurrentTime()) { + notify_override = 2; + } + } boolean canAddValue = !(notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || ((int)dialog_id < 0) && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0); Integer currentCount = pushDialogs.get(dialog_id); @@ -842,6 +893,14 @@ public class NotificationsController { pushDialogs.put(dialog_id, newCount); } } + /*if (old_unread_count != total_unread_count) { TODO + if (lastOnlineFromOtherDevice > ConnectionsManager.getInstance().getCurrentTime()) { + showOrUpdateNotification(false); + scheduleNotificationDelay(true); + } else { + showOrUpdateNotification(notifyCheck); + } + }*/ if (old_unread_count != total_unread_count) { showOrUpdateNotification(notifyCheck); } @@ -869,6 +928,12 @@ public class NotificationsController { Boolean value = settingsCache.get(dialog_id); if (value == null) { int notify_override = preferences.getInt("notify2_" + dialog_id, 0); + if (notify_override == 3) { + int mute_until = preferences.getInt("notifyuntil_" + dialog_id, 0); + if (mute_until >= ConnectionsManager.getInstance().getCurrentTime()) { + notify_override = 2; + } + } value = !(notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || ((int) dialog_id < 0) && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0); settingsCache.put(dialog_id, value); } @@ -884,7 +949,7 @@ public class NotificationsController { if (pushMessagesDict.containsKey(message.id)) { continue; } - MessageObject messageObject = new MessageObject(message, null, 0); + MessageObject messageObject = new MessageObject(message, null, false); if (isPersonalMessage(messageObject)) { personal_count++; } @@ -892,6 +957,12 @@ public class NotificationsController { Boolean value = settingsCache.get(dialog_id); if (value == null) { int notify_override = preferences.getInt("notify2_" + dialog_id, 0); + if (notify_override == 3) { + int mute_until = preferences.getInt("notifyuntil_" + dialog_id, 0); + if (mute_until >= ConnectionsManager.getInstance().getCurrentTime()) { + notify_override = 2; + } + } value = !(notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || ((int) dialog_id < 0) && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0); settingsCache.put(dialog_id, value); } @@ -957,4 +1028,49 @@ public class NotificationsController { return messageObject.messageOwner.to_id != null && messageObject.messageOwner.to_id.chat_id == 0 && (messageObject.messageOwner.action == null || messageObject.messageOwner.action instanceof TLRPC.TL_messageActionEmpty); } + + public static void updateServerNotificationsSettings(long dialog_id) { + NotificationCenter.getInstance().postNotificationName(NotificationCenter.notificationsSettingsUpdated); + if ((int)dialog_id == 0) { + return; + } + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); + TLRPC.TL_account_updateNotifySettings req = new TLRPC.TL_account_updateNotifySettings(); + req.settings = new TLRPC.TL_inputPeerNotifySettings(); + req.settings.sound = "default"; + req.settings.events_mask = 0; + int mute_type = preferences.getInt("notify2_" + dialog_id, 0); + if (mute_type == 3) { + req.settings.mute_until = preferences.getInt("notifyuntil_" + dialog_id, 0); + } else { + req.settings.mute_until = mute_type != 2 ? 0 : Integer.MAX_VALUE; + } + req.settings.show_previews = preferences.getBoolean("preview_" + dialog_id, true); + + req.peer = new TLRPC.TL_inputNotifyPeer(); + + if ((int)dialog_id < 0) { + ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerChat(); + ((TLRPC.TL_inputNotifyPeer)req.peer).peer.chat_id = -(int)dialog_id; + } else { + TLRPC.User user = MessagesController.getInstance().getUser((int)dialog_id); + if (user == null) { + return; + } + if (user instanceof TLRPC.TL_userForeign || user instanceof TLRPC.TL_userRequest) { + ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerForeign(); + ((TLRPC.TL_inputNotifyPeer)req.peer).peer.access_hash = user.access_hash; + } else { + ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerContact(); + } + ((TLRPC.TL_inputNotifyPeer)req.peer).peer.user_id = (int)dialog_id; + } + + ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { + @Override + public void run(TLObject response, TLRPC.TL_error error) { + + } + }); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/PhotoObject.java b/TMessagesProj/src/main/java/org/telegram/android/PhotoObject.java deleted file mode 100644 index d0d16e575..000000000 --- a/TMessagesProj/src/main/java/org/telegram/android/PhotoObject.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This is the source code of Telegram for Android v. 1.3.2. - * It is licensed under GNU GPL v. 2 or later. - * You should have received a copy of the license in this archive (see LICENSE). - * - * Copyright Nikolai Kudashov, 2013. - */ - -package org.telegram.android; - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; - -import org.telegram.messenger.FileLog; -import org.telegram.messenger.TLRPC; -import org.telegram.messenger.Utilities; - -import java.nio.ByteBuffer; -import java.util.ArrayList; - -public class PhotoObject { - - public TLRPC.PhotoSize photoOwner; - public Bitmap image; - - public PhotoObject(TLRPC.PhotoSize photo, int preview, boolean secret) { - photoOwner = photo; - - if (preview != 0 && photo instanceof TLRPC.TL_photoCachedSize) { - BitmapFactory.Options opts = new BitmapFactory.Options(); - opts.inPreferredConfig = Bitmap.Config.ARGB_8888; - opts.inDither = false; - opts.outWidth = photo.w; - opts.outHeight = photo.h; - try { - if (photo.location.ext != null) { - ByteBuffer buffer = ByteBuffer.allocateDirect(photo.bytes.length); - buffer.put(photo.bytes); - image = Utilities.loadWebpImage(buffer, buffer.limit(), null); - } else { - image = BitmapFactory.decodeByteArray(photoOwner.bytes, 0, photoOwner.bytes.length, opts); - } - if (image != null) { - if (preview == 2) { - if (secret) { - Utilities.blurBitmap(image, 7); - Utilities.blurBitmap(image, 7); - Utilities.blurBitmap(image, 7); - } else { - if (photo.location.ext != null) { - Utilities.blurBitmap(image, 1); - } else { - Utilities.blurBitmap(image, 3); - } - } - } - if (ImageLoader.getInstance().runtimeHack != null) { - ImageLoader.getInstance().runtimeHack.trackFree(image.getRowBytes() * image.getHeight()); - } - } - } catch (Throwable throwable) { - FileLog.e("tmessages", throwable); - } - } - } - - public static PhotoObject getClosestImageWithSize(ArrayList arr, int side) { - if (arr == null) { - return null; - } - - int lastSide = 0; - PhotoObject closestObject = null; - for (PhotoObject obj : arr) { - if (obj == null || obj.photoOwner == null) { - continue; - } - int currentSide = obj.photoOwner.w >= obj.photoOwner.h ? obj.photoOwner.w : obj.photoOwner.h; - if (closestObject == null || closestObject.photoOwner instanceof TLRPC.TL_photoCachedSize || currentSide <= side && lastSide < currentSide) { - closestObject = obj; - lastSide = currentSide; - } - } - return closestObject; - } -} diff --git a/TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java b/TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java index d9fd56a10..6a1140245 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java @@ -478,7 +478,7 @@ public class SecretChatHelper { reqSend.action.ttl_seconds = encryptedChat.ttl; message = createServiceSecretMessage(encryptedChat, reqSend.action); - MessageObject newMsgObj = new MessageObject(message, null); + MessageObject newMsgObj = new MessageObject(message, null, false); newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENDING; ArrayList objArr = new ArrayList<>(); objArr.add(newMsgObj); @@ -514,7 +514,7 @@ public class SecretChatHelper { reqSend.action.random_ids = random_ids; message = createServiceSecretMessage(encryptedChat, reqSend.action); - MessageObject newMsgObj = new MessageObject(message, null); + MessageObject newMsgObj = new MessageObject(message, null, false); newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENDING; ArrayList objArr = new ArrayList<>(); objArr.add(newMsgObj); @@ -547,7 +547,7 @@ public class SecretChatHelper { arr.add(newMsg); MessagesStorage.getInstance().putMessages(arr, false, true, false, 0); - MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.photo, 3); + //MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.photo, 3); } else if (newMsg.media instanceof TLRPC.TL_messageMediaVideo && newMsg.media.video != null) { TLRPC.Video video = newMsg.media.video; newMsg.media.video = new TLRPC.TL_videoEncrypted(); @@ -578,7 +578,7 @@ public class SecretChatHelper { arr.add(newMsg); MessagesStorage.getInstance().putMessages(arr, false, true, false, 0); - MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.video, 5); + //MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.video, 5); } else if (newMsg.media instanceof TLRPC.TL_messageMediaDocument && newMsg.media.document != null) { TLRPC.Document document = newMsg.media.document; newMsg.media.document = new TLRPC.TL_documentEncrypted(); @@ -605,7 +605,7 @@ public class SecretChatHelper { arr.add(newMsg); MessagesStorage.getInstance().putMessages(arr, false, true, false, 0); - MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.document, 4); + //MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.document, 4); } else if (newMsg.media instanceof TLRPC.TL_messageMediaAudio && newMsg.media.audio != null) { TLRPC.Audio audio = newMsg.media.audio; newMsg.media.audio = new TLRPC.TL_audioEncrypted(); @@ -656,7 +656,8 @@ public class SecretChatHelper { TLObject toEncryptObject = null; if (AndroidUtilities.getPeerLayerVersion(chat.layer) >= 17) { TLRPC.TL_decryptedMessageLayer layer = new TLRPC.TL_decryptedMessageLayer(); - layer.layer = Math.min(17, AndroidUtilities.getPeerLayerVersion(chat.layer)); + int myLayer = Math.max(17, AndroidUtilities.getMyLayerVersion(chat.layer)); + layer.layer = Math.min(myLayer, AndroidUtilities.getPeerLayerVersion(chat.layer)); layer.message = req; layer.random_bytes = new byte[Math.max(1, (int) Math.ceil(Utilities.random.nextDouble() * 16))]; Utilities.random.nextBytes(layer.random_bytes); @@ -698,6 +699,7 @@ public class SecretChatHelper { toEncryptObject = req; } + int len = toEncryptObject.getObjectSize(); ByteBufferDesc toEncrypt = BuffersStorage.getInstance().getFreeBuffer(4 + len); toEncrypt.writeInt32(len); diff --git a/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java index ff92dab38..b7dc050d7 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java @@ -301,7 +301,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter public void run() { if (message.documentLocation.thumb.location instanceof TLRPC.TL_fileLocationUnavailable) { try { - Bitmap bitmap = ImageLoader.loadBitmap(cacheFile.getAbsolutePath(), null, 90, 90); + Bitmap bitmap = ImageLoader.loadBitmap(cacheFile.getAbsolutePath(), null, 90, 90, true); if (bitmap != null) { message.documentLocation.thumb = ImageLoader.scaleAndSaveImage(bitmap, 90, 90, 55, message.sendEncryptedRequest != null); } @@ -753,7 +753,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } } - MessageObject newMsgObj = new MessageObject(newMsg, null, 2); + MessageObject newMsgObj = new MessageObject(newMsg, null, true); newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENDING; ArrayList objArr = new ArrayList<>(); @@ -1302,7 +1302,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter if (isBroadcast) { for (TLRPC.Message message : sentMessages) { ArrayList arr = new ArrayList<>(); - MessageObject messageObject = new MessageObject(message, null, 0); + MessageObject messageObject = new MessageObject(message, null, false); arr.add(messageObject); MessagesController.getInstance().updateInterfaceWithMessages(messageObject.getDialogId(), arr, isBroadcast); } @@ -1369,7 +1369,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } File cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName + ".jpg"); File cacheFile2 = null; - if (sentMessage.media.photo.sizes.size() == 1 || size.w > 80 || size.h > 80) { + if (sentMessage.media.photo.sizes.size() == 1 || size.w > 90 || size.h > 90) { cacheFile2 = FileLoader.getPathToAttach(size); } else { cacheFile2 = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName2 + ".jpg"); @@ -1431,6 +1431,8 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ImageLoader.getInstance().replaceImageInCache(fileName, fileName2); size2.location = size.location; } + } else if (MessageObject.isStickerMessage(sentMessage) && size2.location != null) { + size.location = size2.location; } newMsg.media.document.dc_id = sentMessage.media.document.dc_id; @@ -1501,7 +1503,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter MessagesController.getInstance().putChats(chats, true); MessagesController.getInstance().putEncryptedChats(encryptedChats, true); for (TLRPC.Message message : messages) { - MessageObject messageObject = new MessageObject(message, null, 0); + MessageObject messageObject = new MessageObject(message, null, false); retrySendMessage(messageObject, true); } } @@ -1509,9 +1511,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } public TLRPC.TL_photo generatePhotoSizes(String path, Uri imageUri) { - Bitmap bitmap = ImageLoader.loadBitmap(path, imageUri, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize()); + Bitmap bitmap = ImageLoader.loadBitmap(path, imageUri, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), true); if (bitmap == null && AndroidUtilities.getPhotoSize() != 800) { - bitmap = ImageLoader.loadBitmap(path, imageUri, 800, 800); + bitmap = ImageLoader.loadBitmap(path, imageUri, 800, 800, true); } ArrayList sizes = new ArrayList<>(); TLRPC.PhotoSize size = ImageLoader.scaleAndSaveImage(bitmap, 90, 90, 55, true); @@ -1578,9 +1580,12 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter originalPath += "" + f.length(); } - TLRPC.TL_document document = (TLRPC.TL_document)MessagesStorage.getInstance().getSentFile(originalPath, !isEncrypted ? 1 : 4); - if (document == null && !path.equals(originalPath)) { - document = (TLRPC.TL_document)MessagesStorage.getInstance().getSentFile(path + f.length(), !isEncrypted ? 1 : 4); + TLRPC.TL_document document = null; + if (!isEncrypted) { + document = (TLRPC.TL_document) MessagesStorage.getInstance().getSentFile(originalPath, !isEncrypted ? 1 : 4); + if (document == null && !path.equals(originalPath) && !isEncrypted) { + document = (TLRPC.TL_document) MessagesStorage.getInstance().getSentFile(path + f.length(), !isEncrypted ? 1 : 4); + } } if (document == null) { document = new TLRPC.TL_document(); @@ -1603,7 +1608,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } if (document.mime_type.equals("image/gif")) { try { - Bitmap bitmap = ImageLoader.loadBitmap(f.getAbsolutePath(), null, 90, 90); + Bitmap bitmap = ImageLoader.loadBitmap(f.getAbsolutePath(), null, 90, 90, true); if (bitmap != null) { document.thumb = ImageLoader.scaleAndSaveImage(bitmap, 90, 90, 55, isEncrypted); } @@ -1727,7 +1732,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter boolean isEncrypted = (int)dialog_id == 0; for (final MediaController.SearchImage searchImage : photos) { if (searchImage.type == 1) { - TLRPC.TL_document document = (TLRPC.TL_document)MessagesStorage.getInstance().getSentFile(searchImage.imageUrl, !isEncrypted ? 1 : 4); + TLRPC.TL_document document = null; + if (!isEncrypted) { + document = (TLRPC.TL_document) MessagesStorage.getInstance().getSentFile(searchImage.imageUrl, !isEncrypted ? 1 : 4); + } String md5 = Utilities.MD5(searchImage.imageUrl) + "." + ImageLoader.getHttpUrlExtension(searchImage.imageUrl); File cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), md5); if (document == null) { @@ -1753,7 +1761,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } if (thumbFile != null) { try { - Bitmap bitmap = ImageLoader.loadBitmap(thumbFile.getAbsolutePath(), null, 90, 90); + Bitmap bitmap = ImageLoader.loadBitmap(thumbFile.getAbsolutePath(), null, 90, 90, true); if (bitmap != null) { document.thumb = ImageLoader.scaleAndSaveImage(bitmap, 90, 90, 55, isEncrypted); } @@ -1781,7 +1789,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter }); } else { boolean needDownloadHttp = true; - TLRPC.TL_photo photo = (TLRPC.TL_photo) MessagesStorage.getInstance().getSentFile(searchImage.imageUrl, !isEncrypted ? 0 : 3); + TLRPC.TL_photo photo = null; + if (!isEncrypted) { + photo = (TLRPC.TL_photo) MessagesStorage.getInstance().getSentFile(searchImage.imageUrl, !isEncrypted ? 0 : 3); + } if (photo == null) { String md5 = Utilities.MD5(searchImage.imageUrl) + "." + ImageLoader.getHttpUrlExtension(searchImage.imageUrl); File cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), md5); @@ -1891,9 +1902,12 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } else { originalPath = null; } - TLRPC.TL_photo photo = (TLRPC.TL_photo)MessagesStorage.getInstance().getSentFile(originalPath, !isEncrypted ? 0 : 3); - if (photo == null && uri != null) { - photo = (TLRPC.TL_photo)MessagesStorage.getInstance().getSentFile(Utilities.getPath(uri), !isEncrypted ? 0 : 3); + TLRPC.TL_photo photo = null; + if (!isEncrypted) { + photo = (TLRPC.TL_photo) MessagesStorage.getInstance().getSentFile(originalPath, !isEncrypted ? 0 : 3); + if (photo == null && uri != null) { + photo = (TLRPC.TL_photo) MessagesStorage.getInstance().getSentFile(Utilities.getPath(uri), !isEncrypted ? 0 : 3); + } } if (photo == null) { photo = SendMessagesHelper.getInstance().generatePhotoSizes(path, uri); @@ -1935,7 +1949,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter if (videoEditedInfo != null) { originalPath += duration + "_" + videoEditedInfo.startTime + "_" + videoEditedInfo.endTime; } - TLRPC.TL_video video = (TLRPC.TL_video)MessagesStorage.getInstance().getSentFile(originalPath, !isEncrypted ? 2 : 5); + TLRPC.TL_video video = null; + if (!isEncrypted) { + video = (TLRPC.TL_video) MessagesStorage.getInstance().getSentFile(originalPath, !isEncrypted ? 2 : 5); + } if (video == null) { Bitmap thumb = ThumbnailUtils.createVideoThumbnail(videoPath, MediaStore.Video.Thumbnails.MINI_KIND); TLRPC.PhotoSize size = ImageLoader.scaleAndSaveImage(thumb, 90, 90, 55, isEncrypted); diff --git a/TMessagesProj/src/main/java/org/telegram/android/query/SharedMediaQuery.java b/TMessagesProj/src/main/java/org/telegram/android/query/SharedMediaQuery.java new file mode 100644 index 000000000..aab9255e6 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/android/query/SharedMediaQuery.java @@ -0,0 +1,398 @@ +/* + * This is the source code of Telegram for Android v. 2.0.x. + * It is licensed under GNU GPL v. 2 or later. + * You should have received a copy of the license in this archive (see LICENSE). + * + * Copyright Nikolai Kudashov, 2013-2014. + */ + +package org.telegram.android.query; + +import org.telegram.SQLite.SQLiteCursor; +import org.telegram.SQLite.SQLitePreparedStatement; +import org.telegram.android.AndroidUtilities; +import org.telegram.android.ImageLoader; +import org.telegram.android.MessageObject; +import org.telegram.android.MessagesController; +import org.telegram.android.MessagesStorage; +import org.telegram.android.NotificationCenter; +import org.telegram.messenger.ByteBufferDesc; +import org.telegram.messenger.ConnectionsManager; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.RPCRequest; +import org.telegram.messenger.TLClassStore; +import org.telegram.messenger.TLObject; +import org.telegram.messenger.TLRPC; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Locale; + +public class SharedMediaQuery { + + public final static int MEDIA_PHOTOVIDEO = 0; + public final static int MEDIA_FILE = 1; + public final static int MEDIA_AUDIO = 2; + + public static void loadMedia(final long uid, final int offset, final int count, final int max_id, final int type, final boolean fromCache, final int classGuid) { + int lower_part = (int)uid; + if (fromCache || lower_part == 0) { + loadMediaDatabase(uid, offset, count, max_id, type, classGuid); + } else { + TLRPC.TL_messages_search req = new TLRPC.TL_messages_search(); + req.offset = offset; + req.limit = count; + req.max_id = max_id; + if (type == MEDIA_PHOTOVIDEO) { + req.filter = new TLRPC.TL_inputMessagesFilterPhotoVideo(); + } else if (type == MEDIA_FILE) { + req.filter = new TLRPC.TL_inputMessagesFilterDocument(); + } else if (type == MEDIA_AUDIO) { + req.filter = new TLRPC.TL_inputMessagesFilterAudio(); + } + req.q = ""; + if (uid < 0) { + req.peer = new TLRPC.TL_inputPeerChat(); + req.peer.chat_id = -lower_part; + } else { + TLRPC.User user = MessagesController.getInstance().getUser(lower_part); + if (user instanceof TLRPC.TL_userForeign || user instanceof TLRPC.TL_userRequest) { + req.peer = new TLRPC.TL_inputPeerForeign(); + req.peer.access_hash = user.access_hash; + } else { + req.peer = new TLRPC.TL_inputPeerContact(); + } + req.peer.user_id = lower_part; + } + long reqId = ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { + @Override + public void run(TLObject response, TLRPC.TL_error error) { + if (error == null) { + final TLRPC.messages_Messages res = (TLRPC.messages_Messages) response; + processLoadedMedia(res, uid, offset, count, max_id, type, false, classGuid); + } + } + }); + ConnectionsManager.getInstance().bindRequestToGuid(reqId, classGuid); + } + } + + public static void getMediaCount(final long uid, final int type, final int classGuid, boolean fromCache) { + int lower_part = (int)uid; + if (fromCache || lower_part == 0) { + getMediaCountDatabase(uid, type, classGuid); + } else { + TLRPC.TL_messages_search req = new TLRPC.TL_messages_search(); + req.offset = 0; + req.limit = 1; + req.max_id = 0; + if (type == MEDIA_PHOTOVIDEO) { + req.filter = new TLRPC.TL_inputMessagesFilterPhotoVideo(); + } else if (type == MEDIA_FILE) { + req.filter = new TLRPC.TL_inputMessagesFilterDocument(); + } else if (type == MEDIA_AUDIO) { + req.filter = new TLRPC.TL_inputMessagesFilterAudio(); + } + req.q = ""; + if (uid < 0) { + req.peer = new TLRPC.TL_inputPeerChat(); + req.peer.chat_id = -lower_part; + } else { + TLRPC.User user = MessagesController.getInstance().getUser(lower_part); + if (user instanceof TLRPC.TL_userForeign || user instanceof TLRPC.TL_userRequest) { + req.peer = new TLRPC.TL_inputPeerForeign(); + req.peer.access_hash = user.access_hash; + } else { + req.peer = new TLRPC.TL_inputPeerContact(); + } + req.peer.user_id = lower_part; + } + long reqId = ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { + @Override + public void run(TLObject response, TLRPC.TL_error error) { + if (error == null) { + final TLRPC.messages_Messages res = (TLRPC.messages_Messages) response; + MessagesStorage.getInstance().putUsersAndChats(res.users, res.chats, true, true); + + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + MessagesController.getInstance().putUsers(res.users, false); + MessagesController.getInstance().putChats(res.chats, false); + } + }); + + if (res instanceof TLRPC.TL_messages_messagesSlice) { + processLoadedMediaCount(res.count, uid, type, classGuid, false); + } else { + processLoadedMediaCount(res.messages.size(), uid, type, classGuid, false); + } + } + } + }); + ConnectionsManager.getInstance().bindRequestToGuid(reqId, classGuid); + } + } + + public static int getMediaType(TLRPC.Message message) { + if (message == null) { + return -1; + } + if (message.media instanceof TLRPC.TL_messageMediaPhoto || message.media instanceof TLRPC.TL_messageMediaVideo) { + return SharedMediaQuery.MEDIA_PHOTOVIDEO; + } else if (message.media instanceof TLRPC.TL_messageMediaDocument) { + if (MessageObject.isStickerMessage(message)) { + return -1; + } else { + return SharedMediaQuery.MEDIA_FILE; + } + } else if (message.media instanceof TLRPC.TL_messageMediaAudio) { + return SharedMediaQuery.MEDIA_AUDIO; + } + return -1; + } + + public static boolean canAddMessageToMedia(TLRPC.Message message) { + if (message instanceof TLRPC.TL_message_secret && message.media instanceof TLRPC.TL_messageMediaPhoto && message.ttl != 0 && message.ttl <= 60) { + return false; + } else if (message.media instanceof TLRPC.TL_messageMediaPhoto || message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaDocument || message.media instanceof TLRPC.TL_messageMediaAudio) { + return true; + } + return false; + } + + private static void processLoadedMedia(final TLRPC.messages_Messages res, final long uid, int offset, int count, int max_id, final int type, final boolean fromCache, final int classGuid) { + int lower_part = (int)uid; + if (fromCache && res.messages.isEmpty() && lower_part != 0) { + loadMedia(uid, offset, count, max_id, type, false, classGuid); + } else { + if (!fromCache) { + ImageLoader.saveMessagesThumbs(res.messages); + MessagesStorage.getInstance().putUsersAndChats(res.users, res.chats, true, true); + putMediaDatabase(uid, type, res.messages); + } + + final HashMap usersLocal = new HashMap<>(); + for (TLRPC.User u : res.users) { + usersLocal.put(u.id, u); + } + final ArrayList objects = new ArrayList<>(); + for (TLRPC.Message message : res.messages) { + objects.add(new MessageObject(message, usersLocal, false)); + } + + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + int totalCount; + if (res instanceof TLRPC.TL_messages_messagesSlice) { + totalCount = res.count; + } else { + totalCount = res.messages.size(); + } + MessagesController.getInstance().putUsers(res.users, fromCache); + MessagesController.getInstance().putChats(res.chats, fromCache); + NotificationCenter.getInstance().postNotificationName(NotificationCenter.mediaDidLoaded, uid, totalCount, objects, fromCache, classGuid, type); + } + }); + } + } + + private static void processLoadedMediaCount(final int count, final long uid, final int type, final int classGuid, final boolean fromCache) { + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + int lower_part = (int)uid; + if (fromCache && count == -1 && lower_part != 0) { + getMediaCount(uid, type, classGuid, false); + } else { + if (!fromCache) { + putMediaCountDatabase(uid, type, count); + } + NotificationCenter.getInstance().postNotificationName(NotificationCenter.mediaCountDidLoaded, uid, (fromCache && count == -1 ? 0 : count), fromCache, type); + } + } + }); + } + + private static void putMediaCountDatabase(final long uid, final int type, final int count) { + MessagesStorage.getInstance().getStorageQueue().postRunnable(new Runnable() { + @Override + public void run() { + try { + SQLitePreparedStatement state2 = MessagesStorage.getInstance().getDatabase().executeFast("REPLACE INTO media_counts_v2 VALUES(?, ?, ?)"); + state2.requery(); + state2.bindLong(1, uid); + state2.bindInteger(2, type); + state2.bindInteger(3, count); + state2.step(); + state2.dispose(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } + }); + } + + private static void getMediaCountDatabase(final long uid, final int type, final int classGuid) { + MessagesStorage.getInstance().getStorageQueue().postRunnable(new Runnable() { + @Override + public void run() { + try { + int count = -1; + SQLiteCursor cursor = MessagesStorage.getInstance().getDatabase().queryFinalized(String.format(Locale.US, "SELECT count FROM media_counts_v2 WHERE uid = %d AND type = %d LIMIT 1", uid, type)); + if (cursor.next()) { + count = cursor.intValue(0); + } + cursor.dispose(); + int lower_part = (int)uid; + if (count == -1 && lower_part == 0) { + cursor = MessagesStorage.getInstance().getDatabase().queryFinalized(String.format(Locale.US, "SELECT COUNT(mid) FROM media_v2 WHERE uid = %d AND type = %d LIMIT 1", uid, type)); + if (cursor.next()) { + count = cursor.intValue(0); + } + cursor.dispose(); + + /*cursor = MessagesStorage.getInstance().getDatabase().queryFinalized(String.format(Locale.US, "SELECT data, send_state, date FROM messages WHERE uid = %d ORDER BY mid ASC LIMIT %d", uid, 1000)); + ArrayList photos = new ArrayList<>(); + ArrayList docs = new ArrayList<>(); + while (cursor.next()) { + ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(1)); + if (data != null && cursor.byteBufferValue(1, data.buffer) != 0) { + TLRPC.Message message = (TLRPC.Message) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); + MessageObject.setIsUnread(message, cursor.intValue(0) != 1); + message.date = cursor.intValue(2); + message.send_state = cursor.intValue(1); + message.dialog_id = uid; + if (message.ttl > 60 && message.media instanceof TLRPC.TL_messageMediaPhoto || message.media instanceof TLRPC.TL_messageMediaVideo) { + photos.add(message); + } else if (message.media instanceof TLRPC.TL_messageMediaDocument) { + docs.add(message); + } + } + MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); + } + cursor.dispose(); + if (!photos.isEmpty() || !docs.isEmpty()) { + MessagesStorage.getInstance().getDatabase().beginTransaction(); + if (!photos.isEmpty()) { + putMediaDatabaseInternal(uid, MEDIA_PHOTOVIDEO, photos); + } + if (docs.isEmpty()) { + putMediaDatabaseInternal(uid, MEDIA_FILE, docs); + } + MessagesStorage.getInstance().getDatabase().commitTransaction(); + }*/ + + if (count != -1) { + putMediaCountDatabase(uid, type, count); + } + } + processLoadedMediaCount(count, uid, type, classGuid, true); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } + }); + } + + private static void loadMediaDatabase(final long uid, final int offset, final int count, final int max_id, final int type, final int classGuid) { + MessagesStorage.getInstance().getStorageQueue().postRunnable(new Runnable() { + @Override + public void run() { + TLRPC.TL_messages_messages res = new TLRPC.TL_messages_messages(); + try { + ArrayList loadedUsers = new ArrayList<>(); + ArrayList fromUser = new ArrayList<>(); + + SQLiteCursor cursor; + + if ((int)uid != 0) { + if (max_id != 0) { + cursor = MessagesStorage.getInstance().getDatabase().queryFinalized(String.format(Locale.US, "SELECT data, mid FROM media_v2 WHERE uid = %d AND mid < %d AND type = %d ORDER BY date DESC, mid DESC LIMIT %d", uid, max_id, type, count)); + } else { + cursor = MessagesStorage.getInstance().getDatabase().queryFinalized(String.format(Locale.US, "SELECT data, mid FROM media_v2 WHERE uid = %d AND type = %d ORDER BY date DESC, mid DESC LIMIT %d,%d", uid, type, offset, count)); + } + } else { + if (max_id != 0) { + cursor = MessagesStorage.getInstance().getDatabase().queryFinalized(String.format(Locale.US, "SELECT m.data, m.mid, r.random_id FROM media_v2 as m LEFT JOIN randoms as r ON r.mid = m.mid WHERE m.uid = %d AND m.mid > %d AND type = %d ORDER BY m.mid ASC LIMIT %d", uid, max_id, type, count)); + } else { + cursor = MessagesStorage.getInstance().getDatabase().queryFinalized(String.format(Locale.US, "SELECT m.data, m.mid, r.random_id FROM media_v2 as m LEFT JOIN randoms as r ON r.mid = m.mid WHERE m.uid = %d AND type = %d ORDER BY m.mid ASC LIMIT %d,%d", uid, type, offset, count)); + } + } + + while (cursor.next()) { + ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); + if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { + TLRPC.Message message = (TLRPC.Message) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); + message.id = cursor.intValue(1); + message.dialog_id = uid; + if ((int)uid == 0) { + message.random_id = cursor.longValue(2); + } + res.messages.add(message); + fromUser.add(message.from_id); + } + MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); + } + cursor.dispose(); + + StringBuilder usersToLoad = new StringBuilder(); + for (int uid : fromUser) { + if (!loadedUsers.contains(uid)) { + if (usersToLoad.length() != 0) { + usersToLoad.append(","); + } + usersToLoad.append(uid); + loadedUsers.add(uid); + } + } + if (usersToLoad.length() != 0) { + MessagesStorage.getInstance().getUsersInternal(usersToLoad.toString(), res.users); + } + } catch (Exception e) { + res.messages.clear(); + res.chats.clear(); + res.users.clear(); + FileLog.e("tmessages", e); + } finally { + processLoadedMedia(res, uid, offset, count, max_id, type, true, classGuid); + } + } + }); + } + + private static void putMediaDatabaseInternal(final long uid, final int type, final ArrayList messages) { + try { + MessagesStorage.getInstance().getDatabase().beginTransaction(); + SQLitePreparedStatement state2 = MessagesStorage.getInstance().getDatabase().executeFast("REPLACE INTO media_v2 VALUES(?, ?, ?, ?, ?)"); + for (TLRPC.Message message : messages) { + if (canAddMessageToMedia(message)) { + state2.requery(); + ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(message.getObjectSize()); + message.serializeToStream(data); + state2.bindInteger(1, message.id); + state2.bindLong(2, uid); + state2.bindInteger(3, message.date); + state2.bindInteger(4, type); + state2.bindByteBuffer(5, data.buffer); + state2.step(); + MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); + } + } + state2.dispose(); + MessagesStorage.getInstance().getDatabase().commitTransaction(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } + + private static void putMediaDatabase(final long uid, final int type, final ArrayList messages) { + MessagesStorage.getInstance().getStorageQueue().postRunnable(new Runnable() { + @Override + public void run() { + putMediaDatabaseInternal(uid, type, messages); + } + }); + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ConnectionsManager.java b/TMessagesProj/src/main/java/org/telegram/messenger/ConnectionsManager.java index b3c50750f..bc3dd2995 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ConnectionsManager.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ConnectionsManager.java @@ -14,6 +14,7 @@ import android.content.pm.PackageInfo; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Build; +import android.os.PowerManager; import android.util.Base64; import org.telegram.android.AndroidUtilities; @@ -81,6 +82,8 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. private volatile long nextCallToken = 1; + private PowerManager.WakeLock wakeLock = null; + private static volatile ConnectionsManager Instance = null; public static ConnectionsManager getInstance() { ConnectionsManager localInstance = Instance; @@ -213,6 +216,14 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. } Utilities.stageQueue.postRunnable(stageRunnable, 1000); + + try { + PowerManager pm = (PowerManager)ApplicationLoader.applicationContext.getSystemService(Context.POWER_SERVICE); + wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "lock"); + wakeLock.setReferenceCounted(false); + } catch (Exception e) { + FileLog.e("tmessages", e); + } } public int getConnectionState() { @@ -456,7 +467,7 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. } else { Datacenter datacenter = new Datacenter(); datacenter.datacenterId = 1; - datacenter.addAddressAndPort("173.240.5.253", 443); + datacenter.addAddressAndPort("149.154.175.10", 443); datacenters.put(datacenter.datacenterId, datacenter); datacenter = new Datacenter(); @@ -566,25 +577,33 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. Utilities.stageQueue.postRunnable(new Runnable() { @Override public void run() { - while (requestQueue.size() != 0) { - RPCRequest request = requestQueue.get(0); - requestQueue.remove(0); + for (int a = 0; a < requestQueue.size(); a++) { + RPCRequest request = requestQueue.get(a); + if ((request.flags & RPCRequest.RPCRequestClassWithoutLogin) != 0) { + continue; + } + requestQueue.remove(a); if (request.completionBlock != null) { TLRPC.TL_error implicitError = new TLRPC.TL_error(); implicitError.code = -1000; implicitError.text = ""; request.completionBlock.run(null, implicitError); } + a--; } - while (runningRequests.size() != 0) { - RPCRequest request = runningRequests.get(0); - runningRequests.remove(0); + for (int a = 0; a < runningRequests.size(); a++) { + RPCRequest request = runningRequests.get(a); + if ((request.flags & RPCRequest.RPCRequestClassWithoutLogin) != 0) { + continue; + } + runningRequests.remove(a); if (request.completionBlock != null) { TLRPC.TL_error implicitError = new TLRPC.TL_error(); implicitError.code = -1000; implicitError.text = ""; request.completionBlock.run(null, implicitError); } + a--; } pingIdToDate.clear(); quickAckIdToRequestIds.clear(); @@ -2140,6 +2159,15 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. } else { if (resultContainer.result instanceof TLRPC.updates_Difference) { pushMessagesReceived = true; + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + if (wakeLock.isHeld()) { + FileLog.e("tmessages", "release wakelock"); + wakeLock.release(); + } + } + }); } if (request.rawRequest instanceof TLRPC.TL_auth_checkPassword) { UserConfig.setWaitingForPasswordEnter(false); @@ -2337,9 +2365,25 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. if (paused) { pushMessagesReceived = false; } + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + FileLog.e("tmessages", "acquire wakelock"); + wakeLock.acquire(20000); + } + }); resumeNetworkInternal(); } else { pushMessagesReceived = true; + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + if (wakeLock.isHeld()) { + FileLog.e("tmessages", "release wakelock"); + wakeLock.release(); + } + } + }); MessagesController.getInstance().processUpdates((TLRPC.Updates) message, false); } } else { @@ -2444,7 +2488,25 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. } }); } else if ((connection.transportRequestClass & RPCRequest.RPCRequestClassPush) != 0) { - FileLog.e("tmessages", "call connection closed"); + FileLog.e("tmessages", "push connection closed"); + if (BuildVars.DEBUG_VERSION) { + try { + ConnectivityManager cm = (ConnectivityManager)ApplicationLoader.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo[] networkInfos = cm.getAllNetworkInfo(); + for (int a = 0; a < 2; a++) { + if (a >= networkInfos.length) { + break; + } + NetworkInfo info = networkInfos[a]; + FileLog.e("tmessages", "Network: " + info.getTypeName() + " status: " + info.getState() + " info: " + info.getExtraInfo() + " object: " + info.getDetailedState() + " other: " + info); + } + if (networkInfos.length == 0) { + FileLog.e("tmessages", "no network available"); + } + } catch (Exception e) { + FileLog.e("tmessages", "NETWORK STATE GET ERROR", e); + } + } sendingPushPing = false; lastPushPingTime = System.currentTimeMillis() - 60000 * 3 + 4000; } @@ -2456,7 +2518,10 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. if (datacenter.authKey != null) { if ((connection.transportRequestClass & RPCRequest.RPCRequestClassPush) != 0) { sendingPushPing = false; - lastPushPingTime = System.currentTimeMillis() - 60000 * 3 + 4000; + //lastPushPingTime = System.currentTimeMillis() - 60000 * 3 + 4000; //TODO check this + //FileLog.e("tmessages", "schedule push ping in 4 seconds"); + lastPushPingTime = System.currentTimeMillis(); + generatePing(datacenter, true); } else { if (paused && lastPauseTime != 0) { lastPauseTime = System.currentTimeMillis(); @@ -2541,6 +2606,7 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. } else { if (datacenter.authKeyId == 0 || keyId != datacenter.authKeyId) { FileLog.e("tmessages", "Error: invalid auth key id " + connection); + datacenter.switchTo443Port(); connection.suspendConnection(true); connection.connect(); return; @@ -2581,6 +2647,7 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. if (!Utilities.arraysEquals(messageKey, 0, realMessageKeyFull, realMessageKeyFull.length - 16)) { FileLog.e("tmessages", "***** Error: invalid message key"); + datacenter.switchTo443Port(); connection.suspendConnection(true); connection.connect(); return; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/Datacenter.java b/TMessagesProj/src/main/java/org/telegram/messenger/Datacenter.java index b37088d35..61c63d2aa 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/Datacenter.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/Datacenter.java @@ -115,6 +115,16 @@ public class Datacenter { readCurrentAddressAndPortNum(); } + public void switchTo443Port() { + for (int a = 0; a < addresses.size(); a++) { + if (ports.get(addresses.get(a)) == 443) { + currentAddressNum = a; + currentPortNum = 0; + break; + } + } + } + public String getCurrentAddress() { if (addresses.isEmpty()) { return null; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java index c3200a7fa..462098cc7 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java @@ -55,7 +55,7 @@ public class FileLoadOperation { private boolean isForceRequest = false; public static interface FileLoadOperationDelegate { - public abstract void didFinishLoadingFile(FileLoadOperation operation, File finalFile, File tempFile); + public abstract void didFinishLoadingFile(FileLoadOperation operation, File finalFile); public abstract void didFailedLoadingFile(FileLoadOperation operation, int state); public abstract void didChangedLoadProgress(FileLoadOperation operation, float progress); } @@ -341,9 +341,11 @@ public class FileLoadOperation { cacheIvTemp.delete(); } if (cacheFileTemp != null) { - cacheFileTemp.renameTo(cacheFileFinal); + if (!cacheFileTemp.renameTo(cacheFileFinal)) { + cacheFileFinal = cacheFileTemp; + } } - delegate.didFinishLoadingFile(FileLoadOperation.this, cacheFileFinal, cacheFileTemp); + delegate.didFinishLoadingFile(FileLoadOperation.this, cacheFileFinal); } private void processRequestResult(RequestInfo requestInfo, TLRPC.TL_error error) { @@ -373,7 +375,8 @@ public class FileLoadOperation { fiv.seek(0); fiv.write(iv); } - downloadedBytes += requestInfo.response.bytes.limit(); + int currentBytesSize = requestInfo.response.bytes.limit(); + downloadedBytes += currentBytesSize; if (totalBytesCount > 0 && state == stateDownloading) { delegate.didChangedLoadProgress(FileLoadOperation.this, Math.min(1.0f, (float)downloadedBytes / (float)totalBytesCount)); } @@ -390,10 +393,14 @@ public class FileLoadOperation { } } - if (totalBytesCount != downloadedBytes && downloadedBytes % downloadChunkSize == 0 || totalBytesCount > 0 && totalBytesCount > downloadedBytes) { - startDownloadRequest(); - } else { + if (currentBytesSize != downloadChunkSize) { onFinishLoadingFile(); + } else { + if (totalBytesCount != downloadedBytes && downloadedBytes % downloadChunkSize == 0 || totalBytesCount > 0 && totalBytesCount > downloadedBytes) { + startDownloadRequest(); + } else { + onFinishLoadingFile(); + } } } catch (Exception e) { cleanup(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java index 48f5dda00..b0e1ac4e9 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java @@ -23,7 +23,7 @@ public class FileLoader { public abstract void fileUploadProgressChanged(String location, float progress, boolean isEncrypted); public abstract void fileDidUploaded(String location, TLRPC.InputFile inputFile, TLRPC.InputEncryptedFile inputEncryptedFile); public abstract void fileDidFailedUpload(String location, boolean isEncrypted); - public abstract void fileDidLoaded(String location, File finalFile, File tempFile); + public abstract void fileDidLoaded(String location, File finalFile, int type); public abstract void fileDidFailedLoad(String location, int state); public abstract void fileLoadProgressChanged(String location, float progress); } @@ -395,53 +395,50 @@ public class FileLoader { File tempDir = getDirectory(MEDIA_DIR_CACHE); File storeDir = tempDir; + int type = MEDIA_DIR_CACHE; if (video != null) { operation = new FileLoadOperation(video); - if (!cacheOnly) { - storeDir = getDirectory(MEDIA_DIR_VIDEO); - } + type = MEDIA_DIR_VIDEO; } else if (location != null) { operation = new FileLoadOperation(location, locationSize); - if (!cacheOnly) { - storeDir = getDirectory(MEDIA_DIR_IMAGE); - } + type = MEDIA_DIR_IMAGE; } else if (document != null) { operation = new FileLoadOperation(document); - if (!cacheOnly) { - storeDir = getDirectory(MEDIA_DIR_DOCUMENT); - } + type = MEDIA_DIR_DOCUMENT; } else if (audio != null) { operation = new FileLoadOperation(audio); - if (!cacheOnly) { - storeDir = getDirectory(MEDIA_DIR_AUDIO); - } + type = MEDIA_DIR_AUDIO; + } + if (!cacheOnly) { + storeDir = getDirectory(type); } operation.setPaths(storeDir, tempDir); - final String arg1 = fileName; + final String finalFileName = fileName; + final int finalType = type; loadOperationPaths.put(fileName, operation); operation.setDelegate(new FileLoadOperation.FileLoadOperationDelegate() { @Override - public void didFinishLoadingFile(FileLoadOperation operation, File finalFile, File tempFile) { + public void didFinishLoadingFile(FileLoadOperation operation, File finalFile) { if (delegate != null) { - delegate.fileDidLoaded(arg1, finalFile, tempFile); + delegate.fileDidLoaded(finalFileName, finalFile, finalType); } - checkDownloadQueue(audio, location, arg1); + checkDownloadQueue(audio, location, finalFileName); } @Override public void didFailedLoadingFile(FileLoadOperation operation, int canceled) { - checkDownloadQueue(audio, location, arg1); + checkDownloadQueue(audio, location, finalFileName); if (delegate != null) { - delegate.fileDidFailedLoad(arg1, canceled); + delegate.fileDidFailedLoad(finalFileName, canceled); } } @Override public void didChangedLoadProgress(FileLoadOperation operation, float progress) { if (delegate != null) { - delegate.fileLoadProgressChanged(arg1, progress); + delegate.fileLoadProgressChanged(finalFileName, progress); } } }); @@ -641,7 +638,7 @@ public class FileLoader { continue; } int currentSide = obj.w >= obj.h ? obj.w : obj.h; - if (closestObject == null || closestObject instanceof TLRPC.TL_photoCachedSize || currentSide <= side && lastSide < currentSide) { + if (closestObject == null || obj instanceof TLRPC.TL_photoCachedSize || currentSide <= side && lastSide < currentSide) { closestObject = obj; lastSide = currentSide; } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLog.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLog.java index ceee714f6..3d01798f4 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLog.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLog.java @@ -160,6 +160,26 @@ public class FileLog { } } + public static void w(final String tag, final String message) { + if (!BuildVars.DEBUG_VERSION) { + return; + } + Log.w(tag, message); + if (getInstance().streamWriter != null) { + getInstance().logQueue.postRunnable(new Runnable() { + @Override + public void run() { + try { + getInstance().streamWriter.write(getInstance().dateFormat.format(System.currentTimeMillis()) + " W/" + tag + ": " + message + "\n"); + getInstance().streamWriter.flush(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + } + public static void cleanupLogs() { ArrayList uris = new ArrayList(); File sdCard = ApplicationLoader.applicationContext.getExternalFilesDir(null); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/TcpConnection.java b/TMessagesProj/src/main/java/org/telegram/messenger/TcpConnection.java index a2afb811c..406c05139 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/TcpConnection.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/TcpConnection.java @@ -299,6 +299,9 @@ public class TcpConnection extends ConnectionContext { if (canReuse) { BuffersStorage.getInstance().reuseFreeBuffer(buff); } + if (BuildConfig.DEBUG) { + FileLog.e("tmessages", TcpConnection.this + " disconnected, don't send data"); + } return; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBar.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBar.java index 629942b40..188fdf767 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBar.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBar.java @@ -48,6 +48,7 @@ public class ActionBar extends FrameLayout { private boolean allowOverlayTitle; private CharSequence lastTitle; private boolean showingOverlayTitle; + private boolean castShadows = true; protected boolean isSearchFieldVisible; protected int itemsBackgroundResourceId; @@ -485,6 +486,14 @@ public class ActionBar extends FrameLayout { } } + public void setCastShadows(boolean value) { + castShadows = value; + } + + public boolean getCastShadows() { + return castShadows; + } + @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java index c8c6658df..bf295a531 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java @@ -68,8 +68,10 @@ public class ActionBarLayout extends FrameLayout { continue; } if (view instanceof ActionBar && view.getVisibility() == VISIBLE) { - actionBarHeight = view.getMeasuredHeight(); - wasActionBar = true; + if (((ActionBar) view).getCastShadows()) { + actionBarHeight = view.getMeasuredHeight(); + wasActionBar = true; + } break; } } @@ -597,7 +599,7 @@ public class ActionBarLayout extends FrameLayout { if (useAlphaAnimations && fragmentsStack.size() == 1) { presentFragmentInternalRemoveOld(removeLast, currentFragment); - ArrayList animators = new ArrayList(); + ArrayList animators = new ArrayList<>(); animators.add(ObjectAnimatorProxy.ofFloat(this, "alpha", 0.0f, 1.0f)); if (backgroundView != null) { backgroundView.setVisibility(VISIBLE); @@ -783,7 +785,7 @@ public class ActionBarLayout extends FrameLayout { } }; - ArrayList animators = new ArrayList(); + ArrayList animators = new ArrayList<>(); animators.add(ObjectAnimatorProxy.ofFloat(this, "alpha", 1.0f, 0.0f)); if (backgroundView != null) { animators.add(ObjectAnimatorProxy.ofFloat(backgroundView, "alpha", 1.0f, 0.0f)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenu.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenu.java index 7b9d202a0..188804be6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenu.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenu.java @@ -14,7 +14,6 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; -import android.widget.ImageView; import android.widget.LinearLayout; import org.telegram.android.AndroidUtilities; @@ -78,11 +77,10 @@ public class ActionBarMenu extends LinearLayout { public ActionBarMenuItem addItem(int id, int icon, int backgroundResource, Drawable drawable, int width) { ActionBarMenuItem menuItem = new ActionBarMenuItem(getContext(), this, backgroundResource); menuItem.setTag(id); - menuItem.setScaleType(ImageView.ScaleType.CENTER); if (drawable != null) { - menuItem.setImageDrawable(drawable); + menuItem.iconView.setImageDrawable(drawable); } else { - menuItem.setImageResource(icon); + menuItem.iconView.setImageResource(icon); } addView(menuItem); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)menuItem.getLayoutParams(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java index da715be0d..966505486 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java @@ -34,10 +34,11 @@ import org.telegram.android.AndroidUtilities; import org.telegram.android.LocaleController; import org.telegram.messenger.R; import org.telegram.ui.AnimationCompat.ViewProxy; +import org.telegram.ui.Components.FrameLayoutFixed; import java.lang.reflect.Field; -public class ActionBarMenuItem extends ImageView { +public class ActionBarMenuItem extends FrameLayoutFixed { public static class ActionBarMenuItemSearchListener { public void onSearchExpand() { } @@ -51,6 +52,7 @@ public class ActionBarMenuItem extends ImageView { private ActionBarPopupWindow popupWindow; private EditText searchField; private ImageView clearButton; + protected ImageView iconView; private FrameLayout searchContainer; private boolean isSearchField = false; private ActionBarMenuItemSearchListener listener; @@ -61,11 +63,20 @@ public class ActionBarMenuItem extends ImageView { private boolean showFromBottom; private int menuHeight = AndroidUtilities.dp(16); private boolean needOffset = Build.VERSION.SDK_INT >= 21; + private int subMenuOpenSide = 0; public ActionBarMenuItem(Context context, ActionBarMenu menu, int background) { super(context); setBackgroundResource(background); parentMenu = menu; + + iconView = new ImageView(context); + iconView.setScaleType(ImageView.ScaleType.CENTER); + addView(iconView); + LayoutParams layoutParams = (LayoutParams) iconView.getLayoutParams(); + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.height = LayoutParams.MATCH_PARENT; + iconView.setLayoutParams(layoutParams); } @Override @@ -145,6 +156,10 @@ public class ActionBarMenuItem extends ImageView { needOffset = Build.VERSION.SDK_INT >= 21 && value; } + public void setSubMenuOpenSide(int side) { + subMenuOpenSide = side; + } + public TextView addSubItem(int id, String text, int icon) { if (popupLayout == null) { rect = new Rect(); @@ -256,18 +271,27 @@ public class ActionBarMenuItem extends ImageView { } popupWindow.setFocusable(true); if (popupLayout.getMeasuredWidth() == 0) { - if (showFromBottom) { - popupWindow.showAsDropDown(this, -popupLayout.getMeasuredWidth() + getMeasuredWidth(), getOffsetY()); - popupWindow.update(this, -popupLayout.getMeasuredWidth() + getMeasuredWidth(), getOffsetY(), -1, -1); + if (subMenuOpenSide == 0) { + if (showFromBottom) { + popupWindow.showAsDropDown(this, -popupLayout.getMeasuredWidth() + getMeasuredWidth(), getOffsetY()); + popupWindow.update(this, -popupLayout.getMeasuredWidth() + getMeasuredWidth(), getOffsetY(), -1, -1); + } else { + popupWindow.showAsDropDown(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), getOffsetY()); + popupWindow.update(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), getOffsetY(), -1, -1); + } } else { - popupWindow.showAsDropDown(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), getOffsetY()); - popupWindow.update(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), getOffsetY(), -1, -1); + popupWindow.showAsDropDown(this, -AndroidUtilities.dp(8), getOffsetY()); + popupWindow.update(this, -AndroidUtilities.dp(8), getOffsetY(), -1, -1); } } else { - if (showFromBottom) { - popupWindow.showAsDropDown(this, -popupLayout.getMeasuredWidth() + getMeasuredWidth(), getOffsetY()); + if (subMenuOpenSide == 0) { + if (showFromBottom) { + popupWindow.showAsDropDown(this, -popupLayout.getMeasuredWidth() + getMeasuredWidth(), getOffsetY()); + } else { + popupWindow.showAsDropDown(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), getOffsetY()); + } } else { - popupWindow.showAsDropDown(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), getOffsetY()); + popupWindow.showAsDropDown(this, -AndroidUtilities.dp(8), getOffsetY()); } } } @@ -427,7 +451,7 @@ public class ActionBarMenuItem extends ImageView { clearButton = new ImageView(getContext()); clearButton.setImageResource(R.drawable.ic_close_white); - clearButton.setScaleType(ScaleType.CENTER); + clearButton.setScaleType(ImageView.ScaleType.CENTER); clearButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -459,10 +483,14 @@ public class ActionBarMenuItem extends ImageView { protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if (popupWindow != null && popupWindow.isShowing()) { - if (showFromBottom) { - popupWindow.update(this, -popupLayout.getMeasuredWidth() + getMeasuredWidth(), getOffsetY(), -1, -1); + if (subMenuOpenSide == 0) { + if (showFromBottom) { + popupWindow.update(this, -popupLayout.getMeasuredWidth() + getMeasuredWidth(), getOffsetY(), -1, -1); + } else { + popupWindow.update(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), getOffsetY(), -1, -1); + } } else { - popupWindow.update(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), getOffsetY(), -1, -1); + popupWindow.update(this, -AndroidUtilities.dp(8), getOffsetY(), -1, -1); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsSearchAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsSearchAdapter.java index 82ec545f3..e68e9be57 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsSearchAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsSearchAdapter.java @@ -99,12 +99,21 @@ public class ContactsSearchAdapter extends BaseContactsSearchAdapter { Utilities.searchQueue.postRunnable(new Runnable() { @Override public void run() { - String q = query.trim().toLowerCase(); - if (q.length() == 0) { + String search1 = query.trim().toLowerCase(); + if (search1.length() == 0) { updateSearchResults(new ArrayList(), new ArrayList()); return; } - long time = System.currentTimeMillis(); + String search2 = LocaleController.getInstance().getTranslitString(search1); + if (search1.equals(search2) || search2.length() == 0) { + search2 = null; + } + String search[] = new String[1 + (search2 != null ? 1 : 0)]; + search[0] = search1; + if (search2 != null) { + search[1] = search2; + } + ArrayList resultArray = new ArrayList<>(); ArrayList resultArrayNames = new ArrayList<>(); @@ -117,19 +126,22 @@ public class ContactsSearchAdapter extends BaseContactsSearchAdapter { String name = ContactsController.formatName(user.first_name, user.last_name).toLowerCase(); int found = 0; - if (name.startsWith(q) || name.contains(" " + q)) { - found = 1; - } else if (user.username != null && user.username.startsWith(q)) { - found = 2; - } - - if (found != 0) { - if (found == 1) { - resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q)); - } else { - resultArrayNames.add(Utilities.generateSearchName("@" + user.username, null, "@" + q)); + for (String q : search) { + if (name.startsWith(q) || name.contains(" " + q)) { + found = 1; + } else if (user.username != null && user.username.startsWith(q)) { + found = 2; + } + + if (found != 0) { + if (found == 1) { + resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q)); + } else { + resultArrayNames.add(Utilities.generateSearchName("@" + user.username, null, "@" + q)); + } + resultArray.add(user); + break; } - resultArray.add(user); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsAdapter.java index b48dc5080..6031ed215 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsAdapter.java @@ -112,7 +112,7 @@ public class DialogsAdapter extends BaseFragmentAdapter { } } MessageObject message = MessagesController.getInstance().dialogMessage.get(dialog.top_message); - ((DialogCell) view).setDialog(dialog.id, message, true, dialog.last_message_date, dialog.unread_count); + ((DialogCell) view).setDialog(dialog.id, message, true, dialog.last_message_date, dialog.unread_count, MessagesController.getInstance().isDialogMuted(dialog.id)); } return view; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsSearchAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsSearchAdapter.java index 225f89a38..2424062cd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsSearchAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsSearchAdapter.java @@ -134,7 +134,7 @@ public class DialogsSearchAdapter extends BaseContactsSearchAdapter { searchResultMessages.clear(); } for (TLRPC.Message message : res.messages) { - searchResultMessages.add(new MessageObject(message, null, 0)); + searchResultMessages.add(new MessageObject(message, null, false)); } messagesSearchEndReached = res.messages.size() != 20; notifyDataSetChanged(); @@ -155,12 +155,21 @@ public class DialogsSearchAdapter extends BaseContactsSearchAdapter { @Override public void run() { try { - String q = query.trim().toLowerCase(); - if (q.length() == 0) { + String search1 = query.trim().toLowerCase(); + if (search1.length() == 0) { lastSearchId = -1; updateSearchResults(new ArrayList(), new ArrayList(), new ArrayList(), lastSearchId); return; } + String search2 = LocaleController.getInstance().getTranslitString(search1); + if (search1.equals(search2) || search2.length() == 0) { + search2 = null; + } + String search[] = new String[1 + (search2 != null ? 1 : 0)]; + search[0] = search1; + if (search2 != null) { + search[1] = search2; + } ArrayList usersToLoad = new ArrayList<>(); ArrayList chatsToLoad = new ArrayList<>(); @@ -212,30 +221,33 @@ public class DialogsSearchAdapter extends BaseContactsSearchAdapter { username = name.substring(usernamePos + 3); } int found = 0; - if (name.startsWith(q) || name.contains(" " + q)) { - found = 1; - } else if (username != null && username.startsWith(q)) { - found = 2; - } - if (found != 0) { - ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); - if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { - TLRPC.User user = (TLRPC.User) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); - if (user.id != UserConfig.getClientUserId()) { - DialogSearchResult dialogSearchResult = dialogsResult.get((long)user.id); - if (user.status != null) { - user.status.expires = cursor.intValue(1); - } - if (found == 1) { - dialogSearchResult.name = Utilities.generateSearchName(user.first_name, user.last_name, q); - } else { - dialogSearchResult.name = Utilities.generateSearchName("@" + user.username, null, "@" + q); - } - dialogSearchResult.object = user; - resultCount++; - } + for (String q : search) { + if (name.startsWith(q) || name.contains(" " + q)) { + found = 1; + } else if (username != null && username.startsWith(q)) { + found = 2; + } + if (found != 0) { + ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); + if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { + TLRPC.User user = (TLRPC.User) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); + if (user.id != UserConfig.getClientUserId()) { + DialogSearchResult dialogSearchResult = dialogsResult.get((long) user.id); + if (user.status != null) { + user.status.expires = cursor.intValue(1); + } + if (found == 1) { + dialogSearchResult.name = Utilities.generateSearchName(user.first_name, user.last_name, q); + } else { + dialogSearchResult.name = Utilities.generateSearchName("@" + user.username, null, "@" + q); + } + dialogSearchResult.object = user; + resultCount++; + } + } + MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); + break; } - MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); } } cursor.dispose(); @@ -245,23 +257,25 @@ public class DialogsSearchAdapter extends BaseContactsSearchAdapter { cursor = MessagesStorage.getInstance().getDatabase().queryFinalized(String.format(Locale.US, "SELECT data, name FROM chats WHERE uid IN(%s)", TextUtils.join(",", chatsToLoad))); while (cursor.next()) { String name = cursor.stringValue(1); - String[] args = name.split(" "); - if (name.startsWith(q) || name.contains(" " + q)) { - ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); - if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { - TLRPC.Chat chat = (TLRPC.Chat) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); - long dialog_id; - if (chat.id > 0) { - dialog_id = -chat.id; - } else { - dialog_id = AndroidUtilities.makeBroadcastId(chat.id); + for (String q : search) { + if (name.startsWith(q) || name.contains(" " + q)) { + ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); + if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { + TLRPC.Chat chat = (TLRPC.Chat) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); + long dialog_id; + if (chat.id > 0) { + dialog_id = -chat.id; + } else { + dialog_id = AndroidUtilities.makeBroadcastId(chat.id); + } + DialogSearchResult dialogSearchResult = dialogsResult.get(dialog_id); + dialogSearchResult.name = Utilities.generateSearchName(chat.title, null, q); + dialogSearchResult.object = chat; + resultCount++; } - DialogSearchResult dialogSearchResult = dialogsResult.get(dialog_id); - dialogSearchResult.name = Utilities.generateSearchName(chat.title, null, q); - dialogSearchResult.object = chat; - resultCount++; + MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); + break; } - MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); } } cursor.dispose(); @@ -278,50 +292,53 @@ public class DialogsSearchAdapter extends BaseContactsSearchAdapter { username = name.substring(usernamePos + 2); } int found = 0; - if (name.startsWith(q) || name.contains(" " + q)) { - found = 1; - } else if (username != null && username.startsWith(q)) { - found = 2; - } - - if (found != 0) { - ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); - ByteBufferDesc data2 = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(6)); - if (data != null && cursor.byteBufferValue(0, data.buffer) != 0 && cursor.byteBufferValue(6, data2.buffer) != 0) { - TLRPC.EncryptedChat chat = (TLRPC.EncryptedChat) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); - DialogSearchResult dialogSearchResult = dialogsResult.get((long)chat.id << 32); - - chat.user_id = cursor.intValue(2); - chat.a_or_b = cursor.byteArrayValue(3); - chat.auth_key = cursor.byteArrayValue(4); - chat.ttl = cursor.intValue(5); - chat.layer = cursor.intValue(8); - chat.seq_in = cursor.intValue(9); - chat.seq_out = cursor.intValue(10); - int use_count = cursor.intValue(11); - chat.key_use_count_in = (short)(use_count >> 16); - chat.key_use_count_out = (short)(use_count); - chat.exchange_id = cursor.longValue(12); - chat.key_create_date = cursor.intValue(13); - chat.future_key_fingerprint = cursor.longValue(14); - chat.future_auth_key = cursor.byteArrayValue(15); - chat.key_hash = cursor.byteArrayValue(16); - - TLRPC.User user = (TLRPC.User)TLClassStore.Instance().TLdeserialize(data2, data2.readInt32()); - if (user.status != null) { - user.status.expires = cursor.intValue(7); - } - if (found == 1) { - dialogSearchResult.name = Html.fromHtml("" + ContactsController.formatName(user.first_name, user.last_name) + ""); - } else { - dialogSearchResult.name = Utilities.generateSearchName("@" + user.username, null, "@" + q); - } - dialogSearchResult.object = chat; - encUsers.add(user); - resultCount++; + for (String q : search) { + if (name.startsWith(q) || name.contains(" " + q)) { + found = 1; + } else if (username != null && username.startsWith(q)) { + found = 2; + } + + if (found != 0) { + ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); + ByteBufferDesc data2 = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(6)); + if (data != null && cursor.byteBufferValue(0, data.buffer) != 0 && cursor.byteBufferValue(6, data2.buffer) != 0) { + TLRPC.EncryptedChat chat = (TLRPC.EncryptedChat) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); + DialogSearchResult dialogSearchResult = dialogsResult.get((long) chat.id << 32); + + chat.user_id = cursor.intValue(2); + chat.a_or_b = cursor.byteArrayValue(3); + chat.auth_key = cursor.byteArrayValue(4); + chat.ttl = cursor.intValue(5); + chat.layer = cursor.intValue(8); + chat.seq_in = cursor.intValue(9); + chat.seq_out = cursor.intValue(10); + int use_count = cursor.intValue(11); + chat.key_use_count_in = (short) (use_count >> 16); + chat.key_use_count_out = (short) (use_count); + chat.exchange_id = cursor.longValue(12); + chat.key_create_date = cursor.intValue(13); + chat.future_key_fingerprint = cursor.longValue(14); + chat.future_auth_key = cursor.byteArrayValue(15); + chat.key_hash = cursor.byteArrayValue(16); + + TLRPC.User user = (TLRPC.User) TLClassStore.Instance().TLdeserialize(data2, data2.readInt32()); + if (user.status != null) { + user.status.expires = cursor.intValue(7); + } + if (found == 1) { + dialogSearchResult.name = Html.fromHtml("" + ContactsController.formatName(user.first_name, user.last_name) + ""); + } else { + dialogSearchResult.name = Utilities.generateSearchName("@" + user.username, null, "@" + q); + } + dialogSearchResult.object = chat; + encUsers.add(user); + resultCount++; + } + MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); + MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data2); + break; } - MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); - MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data2); } } cursor.dispose(); @@ -367,28 +384,31 @@ public class DialogsSearchAdapter extends BaseContactsSearchAdapter { username = name.substring(usernamePos + 3); } int found = 0; - if (name.startsWith(q) || name.contains(" " + q)) { - found = 1; - } else if (username != null && username.startsWith(q)) { - found = 2; - } - if (found != 0) { - ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); - if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { - TLRPC.User user = (TLRPC.User) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); - if (user.id != UserConfig.getClientUserId()) { - if (user.status != null) { - user.status.expires = cursor.intValue(1); - } - if (found == 1) { - resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q)); - } else { - resultArrayNames.add(Utilities.generateSearchName("@" + user.username, null, "@" + q)); - } - resultArray.add(user); - } + for (String q : search) { + if (name.startsWith(q) || name.contains(" " + q)) { + found = 1; + } else if (username != null && username.startsWith(q)) { + found = 2; + } + if (found != 0) { + ByteBufferDesc data = MessagesStorage.getInstance().getBuffersStorage().getFreeBuffer(cursor.byteArrayLength(0)); + if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { + TLRPC.User user = (TLRPC.User) TLClassStore.Instance().TLdeserialize(data, data.readInt32()); + if (user.id != UserConfig.getClientUserId()) { + if (user.status != null) { + user.status.expires = cursor.intValue(1); + } + if (found == 1) { + resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q)); + } else { + resultArrayNames.add(Utilities.generateSearchName("@" + user.username, null, "@" + q)); + } + resultArray.add(user); + } + } + MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); + break; } - MessagesStorage.getInstance().getBuffersStorage().reuseFreeBuffer(data); } } cursor.dispose(); @@ -598,7 +618,7 @@ public class DialogsSearchAdapter extends BaseContactsSearchAdapter { } ((DialogCell) view).useSeparator = (i != getCount() - 1); MessageObject messageObject = (MessageObject)getItem(i); - ((DialogCell) view).setDialog(messageObject.getDialogId(), messageObject, false, messageObject.messageOwner.date, 0); + ((DialogCell) view).setDialog(messageObject.getDialogId(), messageObject, false, messageObject.messageOwner.date, 0, false); } else if (type == 3) { if (view == null) { view = new LoadingCell(mContext); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java index c0764d16b..f07555cf2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java @@ -25,7 +25,7 @@ import org.telegram.android.AndroidUtilities; import org.telegram.android.ImageReceiver; import org.telegram.android.MessageObject; import org.telegram.android.MessagesController; -import org.telegram.android.PhotoObject; +import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.R; import org.telegram.messenger.TLRPC; @@ -105,13 +105,9 @@ public class ChatActionCell extends BaseCell { if (currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) { imageReceiver.setImage(currentMessageObject.messageOwner.action.newUserPhoto.photo_small, "50_50", avatarDrawable, false); } else { - PhotoObject photo = PhotoObject.getClosestImageWithSize(currentMessageObject.photoThumbs, AndroidUtilities.dp(64)); + TLRPC.PhotoSize photo = FileLoader.getClosestPhotoSizeWithSize(currentMessageObject.photoThumbs, AndroidUtilities.dp(64)); if (photo != null) { - if (photo.image != null) { - imageReceiver.setImageBitmap(photo.image); - } else { - imageReceiver.setImage(photo.photoOwner.location, "50_50", avatarDrawable, false); - } + imageReceiver.setImage(photo.location, "50_50", avatarDrawable, false); } else { imageReceiver.setImageBitmap(avatarDrawable); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java index a128d3411..87825a1c6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java @@ -33,7 +33,6 @@ import org.telegram.messenger.R; import org.telegram.messenger.TLRPC; import org.telegram.messenger.Utilities; import org.telegram.android.MessageObject; -import org.telegram.android.PhotoObject; import org.telegram.ui.Components.RadialProgress; import org.telegram.ui.PhotoViewer; import org.telegram.ui.Components.GifDrawable; @@ -67,8 +66,8 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD private int photoWidth; private int photoHeight; - private PhotoObject currentPhotoObject; - private PhotoObject currentPhotoObjectThumb; + private TLRPC.PhotoSize currentPhotoObject; + private TLRPC.PhotoSize currentPhotoObjectThumb; private String currentUrl; private String currentPhotoFilter; private ImageReceiver photoImage; @@ -339,11 +338,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD cancelLoading = false; radialProgress.setProgress(0, false); if (currentMessageObject.type == 1) { - if (currentMessageObject.imagePreview != null) { - photoImage.setImage(currentPhotoObject.photoOwner.location, currentPhotoFilter, new BitmapDrawable(currentMessageObject.imagePreview), currentPhotoObject.photoOwner.size, false); - } else { - photoImage.setImage(currentPhotoObject.photoOwner.location, currentPhotoFilter, null, currentPhotoObject.photoOwner.size, false); - } + photoImage.setImage(currentPhotoObject.location, currentPhotoFilter, currentPhotoObjectThumb != null ? currentPhotoObjectThumb.location : null, currentPhotoFilter, currentPhotoObject.size, false); } else if (currentMessageObject.type == 8 || currentMessageObject.type == 9) { FileLoader.getInstance().loadFile(currentMessageObject.messageOwner.media.document, true, false); lastDownloadedGifMessage = currentMessageObject; @@ -361,7 +356,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD } else { cancelLoading = true; if (currentMessageObject.type == 1) { - ImageLoader.getInstance().cancelLoadingForImageView(photoImage); + photoImage.cancelLoadImage(); } else if (currentMessageObject.type == 8 || currentMessageObject.type == 9) { FileLoader.getInstance().cancelLoadFile(currentMessageObject.messageOwner.media.document); if (lastDownloadedGifMessage != null && lastDownloadedGifMessage.messageOwner.id == currentMessageObject.messageOwner.id) { @@ -402,7 +397,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD if (!url.equals(currentUrl)) { return true; } - } else if (currentPhotoObject == null || currentPhotoObject.photoOwner.location instanceof TLRPC.TL_fileLocationUnavailable) { + } else if (currentPhotoObject == null || currentPhotoObject.location instanceof TLRPC.TL_fileLocationUnavailable) { return true; } else if (currentMessageObject != null && photoNotSet) { File cacheFile = FileLoader.getPathToMessage(currentMessageObject.messageOwner); @@ -429,6 +424,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD photoNotSet = false; drawBackground = true; + photoImage.setForcePreview(messageObject.isSecretPhoto()); if (messageObject.type == 9) { String name = messageObject.getDocumentName(); if (name == null || name.length() == 0) { @@ -499,23 +495,21 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD nameLayout = null; updateSecretTimeText(); } - - if (messageObject.type == 9) { + if (messageObject.type == 9) { //doc photoWidth = AndroidUtilities.dp(86); photoHeight = AndroidUtilities.dp(86); backgroundWidth = photoWidth + Math.max(nameWidth, infoWidth) + AndroidUtilities.dp(68); - currentPhotoObject = PhotoObject.getClosestImageWithSize(messageObject.photoThumbs, AndroidUtilities.getPhotoSize()); + currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, AndroidUtilities.getPhotoSize()); + photoImage.setNeedsQualityThumb(true); + photoImage.setShouldGenerateQualityThumb(true); + photoImage.setParentMessageObject(messageObject); if (currentPhotoObject != null) { - if (currentPhotoObject.image != null) { - photoImage.setImageBitmap(currentPhotoObject.image); - } else { - currentPhotoFilter = String.format(Locale.US, "%d_%d_b", photoWidth, photoHeight); - photoImage.setImage(currentPhotoObject.photoOwner.location, currentPhotoFilter, null, 0, false); - } + currentPhotoFilter = String.format(Locale.US, "%d_%d_b", photoWidth, photoHeight); + photoImage.setImage(null, null, null, null, currentPhotoObject.location, currentPhotoFilter, 0, true); } else { - photoImage.setImageBitmap((BitmapDrawable)null); + photoImage.setImageBitmap((BitmapDrawable) null); } - } else if (messageObject.type == 4) { + } else if (messageObject.type == 4) { //geo photoWidth = AndroidUtilities.dp(100); photoHeight = AndroidUtilities.dp(100); backgroundWidth = photoWidth + AndroidUtilities.dp(12); @@ -523,8 +517,11 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD double lat = messageObject.messageOwner.media.geo.lat; double lon = messageObject.messageOwner.media.geo._long; currentUrl = String.format(Locale.US, "https://maps.googleapis.com/maps/api/staticmap?center=%f,%f&zoom=13&size=100x100&maptype=roadmap&scale=%d&markers=color:red|size:big|%f,%f&sensor=false", lat, lon, Math.min(2, (int)Math.ceil(AndroidUtilities.density)), lat, lon); + photoImage.setNeedsQualityThumb(false); + photoImage.setShouldGenerateQualityThumb(false); + photoImage.setParentMessageObject(null); photoImage.setImage(currentUrl, null, null, 0); - } else if (messageObject.type == 13) { + } else if (messageObject.type == 13) { //webp drawBackground = false; for (TLRPC.DocumentAttribute attribute : messageObject.messageOwner.media.document.attributes) { if (attribute instanceof TLRPC.TL_documentAttributeImageSize) { @@ -548,20 +545,26 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD photoWidth = (int)maxWidth; } backgroundWidth = photoWidth + AndroidUtilities.dp(12); + currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 80); + photoImage.setNeedsQualityThumb(false); + photoImage.setShouldGenerateQualityThumb(false); + photoImage.setParentMessageObject(null); if (currentMessageObject.messageOwner.attachPath != null && currentMessageObject.messageOwner.attachPath.length() > 0) { File f = new File(currentMessageObject.messageOwner.attachPath); if (f.exists()) { photoImage.setImage(null, currentMessageObject.messageOwner.attachPath, String.format(Locale.US, "%d_%d", photoWidth, photoHeight), - messageObject.imagePreview != null ? new BitmapDrawable(messageObject.imagePreview) : null, null, + currentPhotoObjectThumb != null ? currentPhotoObjectThumb.location : null, + "b1", currentMessageObject.messageOwner.media.document.size, true); } } else if (currentMessageObject.messageOwner.media.document.id != 0) { photoImage.setImage(currentMessageObject.messageOwner.media.document, null, String.format(Locale.US, "%d_%d", photoWidth, photoHeight), - messageObject.imagePreview != null ? new BitmapDrawable(messageObject.imagePreview) : null, - messageObject.messageOwner.media.document.thumb.location, + null, + currentPhotoObjectThumb != null ? currentPhotoObjectThumb.location : null, + "b1", currentMessageObject.messageOwner.media.document.size, true); } } else { @@ -579,23 +582,38 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD photoHeight = AndroidUtilities.getPhotoSize(); } - currentPhotoObject = PhotoObject.getClosestImageWithSize(messageObject.photoThumbs, AndroidUtilities.getPhotoSize()); if (messageObject.type == 1) { - currentPhotoObjectThumb = PhotoObject.getClosestImageWithSize(messageObject.photoThumbs, 80); + photoImage.setNeedsQualityThumb(false); + photoImage.setShouldGenerateQualityThumb(false); + photoImage.setParentMessageObject(null); + currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 80); + } else if (messageObject.type == 3) { + photoImage.setNeedsQualityThumb(true); + photoImage.setShouldGenerateQualityThumb(true); + photoImage.setParentMessageObject(messageObject); + } else if (messageObject.type == 8) { + photoImage.setNeedsQualityThumb(true); + photoImage.setShouldGenerateQualityThumb(true); + photoImage.setParentMessageObject(messageObject); } + //8 - gif, 1 - photo, 3 - video + + + currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, AndroidUtilities.getPhotoSize()); + if (currentPhotoObject != null) { boolean noSize = false; if (currentMessageObject.type == 3 || currentMessageObject.type == 8) { noSize = true; } - float scale = (float) currentPhotoObject.photoOwner.w / (float) photoWidth; + float scale = (float) currentPhotoObject.w / (float) photoWidth; - if (!noSize && currentPhotoObject.photoOwner.size == 0) { - currentPhotoObject.photoOwner.size = -1; + if (!noSize && currentPhotoObject.size == 0) { + currentPhotoObject.size = -1; } - int w = (int) (currentPhotoObject.photoOwner.w / scale); - int h = (int) (currentPhotoObject.photoOwner.h / scale); + int w = (int) (currentPhotoObject.w / scale); + int h = (int) (currentPhotoObject.h / scale); if (w == 0) { if (messageObject.type == 3) { w = infoWidth + infoOffset + AndroidUtilities.dp(16); @@ -613,9 +631,9 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD w = (int) (w / scale2); } else if (h < AndroidUtilities.dp(120)) { h = AndroidUtilities.dp(120); - float hScale = (float) currentPhotoObject.photoOwner.h / h; - if (currentPhotoObject.photoOwner.w / hScale < photoWidth) { - w = (int) (currentPhotoObject.photoOwner.w / hScale); + float hScale = (float) currentPhotoObject.h / h; + if (currentPhotoObject.w / hScale < photoWidth) { + w = (int) (currentPhotoObject.w / hScale); } } int timeWidthTotal = timeWidth + AndroidUtilities.dp(14 + (currentMessageObject.isOut() ? 20 : 0)); @@ -634,49 +652,50 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD photoWidth = w; photoHeight = h; backgroundWidth = w + AndroidUtilities.dp(12); + currentPhotoFilter = String.format(Locale.US, "%d_%d", (int) (w / AndroidUtilities.density), (int) (h / AndroidUtilities.density)); if (messageObject.photoThumbs.size() > 1 || messageObject.type == 3 || messageObject.type == 8) { - currentPhotoFilter += "_b"; + if (messageObject.isSecretPhoto()) { + currentPhotoFilter += "_b2"; + } else { + currentPhotoFilter += "_b"; + } } - if (currentPhotoObject.image != null) { - photoImage.setImageBitmap(currentPhotoObject.image); - } else { + String fileName = FileLoader.getAttachFileName(currentPhotoObject); + if (messageObject.type == 1) { boolean photoExist = true; - String fileName = FileLoader.getAttachFileName(currentPhotoObject.photoOwner); - if (messageObject.type == 1) { - File cacheFile = FileLoader.getPathToMessage(currentMessageObject.messageOwner); - if (!cacheFile.exists()) { - photoExist = false; - } else { - MediaController.getInstance().removeLoadingFileObserver(this); - } + File cacheFile = FileLoader.getPathToMessage(currentMessageObject.messageOwner); + if (!cacheFile.exists()) { + photoExist = false; + } else { + MediaController.getInstance().removeLoadingFileObserver(this); } + if (photoExist || MediaController.getInstance().canDownloadMedia(MediaController.AUTODOWNLOAD_MASK_PHOTO) || FileLoader.getInstance().isLoadingFile(fileName)) { - if (allowedToSetPhoto || ImageLoader.getInstance().getImageFromMemory(currentPhotoObject.photoOwner.location, null, currentPhotoFilter, null) != null) { + if (allowedToSetPhoto || ImageLoader.getInstance().getImageFromMemory(currentPhotoObject.location, null, currentPhotoFilter) != null) { allowedToSetPhoto = true; - if (messageObject.imagePreview != null) { - photoImage.setImage(currentPhotoObject.photoOwner.location, currentPhotoFilter, new BitmapDrawable(messageObject.imagePreview), noSize ? 0 : currentPhotoObject.photoOwner.size, false); - } else { - photoImage.setImage(currentPhotoObject.photoOwner.location, currentPhotoFilter, null, noSize ? 0 : currentPhotoObject.photoOwner.size, false); - } + photoImage.setImage(currentPhotoObject.location, currentPhotoFilter, currentPhotoObjectThumb != null ? currentPhotoObjectThumb.location : null, currentPhotoFilter, noSize ? 0 : currentPhotoObject.size, false); + } else if (currentPhotoObjectThumb != null) { + photoImage.setImage(null, null, currentPhotoObjectThumb.location, currentPhotoFilter, 0, false); } else { - photoImage.setImageBitmap(messageObject.imagePreview); + photoImage.setImageBitmap((Drawable) null); } } else { photoNotSet = true; - if (messageObject.imagePreview != null) { - photoImage.setImageBitmap(messageObject.imagePreview); - } else if (currentPhotoObjectThumb != null) { - photoImage.setImage(currentPhotoObjectThumb.photoOwner.location, currentPhotoFilter, null, 0, true); + if (currentPhotoObjectThumb != null) { + photoImage.setImage(null, null, currentPhotoObjectThumb.location, currentPhotoFilter, 0, false); + } else { + photoImage.setImageBitmap((Drawable) null); } } + } else { + photoImage.setImage(null, null, currentPhotoObject.location, currentPhotoFilter, 0, false); } } else { photoImage.setImageBitmap((Bitmap)null); } } - photoImage.setForcePreview(messageObject.isSecretPhoto()); invalidate(); } @@ -694,7 +713,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD if (currentPhotoObject == null) { return; } - fileName = FileLoader.getAttachFileName(currentPhotoObject.photoOwner); + fileName = FileLoader.getAttachFileName(currentPhotoObject); cacheFile = FileLoader.getPathToMessage(currentMessageObject.messageOwner); } else if (currentMessageObject.type == 8 || currentMessageObject.type == 3 || currentMessageObject.type == 9) { if (currentMessageObject.messageOwner.attachPath != null && currentMessageObject.messageOwner.attachPath.length() != 0) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java index 027b8cbfb..d04e80cc4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java @@ -50,6 +50,7 @@ public class DialogCell extends BaseCell { private static Drawable countDrawable; private static Drawable groupDrawable; private static Drawable broadcastDrawable; + private static Drawable muteDrawable; private static Paint linePaint; @@ -58,6 +59,7 @@ public class DialogCell extends BaseCell { private int lastMessageDate; private int unreadCount; private boolean lastUnreadState; + private boolean dialogMuted; private MessageObject message; private ImageReceiver avatarImage; @@ -76,6 +78,7 @@ public class DialogCell extends BaseCell { private boolean drawNameLock; private boolean drawNameGroup; private boolean drawNameBroadcast; + private int nameMuteLeft; private int nameLockLeft; private int nameLockTop; @@ -151,6 +154,7 @@ public class DialogCell extends BaseCell { countDrawable = getResources().getDrawable(R.drawable.dialogs_badge); groupDrawable = getResources().getDrawable(R.drawable.list_group); broadcastDrawable = getResources().getDrawable(R.drawable.list_broadcast); + muteDrawable = getResources().getDrawable(R.drawable.mute_grey); } } @@ -162,12 +166,13 @@ public class DialogCell extends BaseCell { avatarDrawable = new AvatarDrawable(); } - public void setDialog(long dialog_id, MessageObject messageObject, boolean usePrintStrings, int date, int unread) { + public void setDialog(long dialog_id, MessageObject messageObject, boolean usePrintStrings, int date, int unread, boolean muted) { currentDialogId = dialog_id; message = messageObject; allowPrintStrings = usePrintStrings; lastMessageDate = date; unreadCount = unread; + dialogMuted = muted; lastUnreadState = messageObject != null && messageObject.isUnread(); update(0); } @@ -463,6 +468,14 @@ public class DialogCell extends BaseCell { } } + if (dialogMuted) { + int w = AndroidUtilities.dp(6) + muteDrawable.getIntrinsicWidth(); + nameWidth -= w; + if (LocaleController.isRTL) { + nameLeft += w; + } + } + nameWidth = Math.max(AndroidUtilities.dp(12), nameWidth); CharSequence nameStringFinal = TextUtils.ellipsize(nameString.replace("\n", " "), currentNamePaint, nameWidth - AndroidUtilities.dp(12), TextUtils.TruncateAt.END); try { @@ -536,6 +549,9 @@ public class DialogCell extends BaseCell { nameLeft += (nameWidth - widthpx); } } + if (dialogMuted) { + nameMuteLeft = (nameLeft - AndroidUtilities.dp(6) - muteDrawable.getIntrinsicWidth()); + } } if (messageLayout != null && messageLayout.getLineCount() > 0) { left = messageLayout.getLineLeft(0); @@ -555,6 +571,9 @@ public class DialogCell extends BaseCell { nameLeft -= (nameWidth - widthpx); } } + if (dialogMuted) { + nameMuteLeft = (int) (nameLeft + left + AndroidUtilities.dp(6)); + } } if (messageLayout != null && messageLayout.getLineCount() > 0) { left = messageLayout.getLineRight(0); @@ -710,6 +729,11 @@ public class DialogCell extends BaseCell { } } + if (dialogMuted) { + setDrawableBounds(muteDrawable, nameMuteLeft, AndroidUtilities.dp(16.5f)); + muteDrawable.draw(canvas); + } + if (drawError) { setDrawableBounds(errorDrawable, errorLeft, errorTop); errorDrawable.draw(canvas); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/PhotoEditToolCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/PhotoEditToolCell.java new file mode 100644 index 000000000..b6be0e98c --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/PhotoEditToolCell.java @@ -0,0 +1,59 @@ +/* + * This is the source code of Telegram for Android v. 2.0.x. + * It is licensed under GNU GPL v. 2 or later. + * You should have received a copy of the license in this archive (see LICENSE). + * + * Copyright Nikolai Kudashov, 2013-2014. + */ + +package org.telegram.ui.Cells; + +import android.content.Context; +import android.util.TypedValue; +import android.view.Gravity; +import android.widget.ImageView; +import android.widget.TextView; + +import org.telegram.android.AndroidUtilities; +import org.telegram.ui.Components.FrameLayoutFixed; + +public class PhotoEditToolCell extends FrameLayoutFixed { + + private ImageView iconImage; + private TextView nameTextView; + private TextView valueTextView; + + public PhotoEditToolCell(Context context) { + super(context); + + iconImage = new ImageView(context); + iconImage.setScaleType(ImageView.ScaleType.CENTER); + addView(iconImage); + LayoutParams layoutParams = (LayoutParams) iconImage.getLayoutParams(); + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.height = LayoutParams.MATCH_PARENT; + layoutParams.bottomMargin = AndroidUtilities.dp(20); + iconImage.setLayoutParams(layoutParams); + + nameTextView = new TextView(context); + nameTextView.setGravity(Gravity.CENTER); + nameTextView.setTextColor(0xffffffff); + nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); + addView(nameTextView); + layoutParams = (LayoutParams) nameTextView.getLayoutParams(); + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.height = AndroidUtilities.dp(20); + layoutParams.gravity = Gravity.LEFT | Gravity.BOTTOM; + nameTextView.setLayoutParams(layoutParams); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(80), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(60), MeasureSpec.EXACTLY)); + } + + public void setIconAndText(int resId, String text) { + iconImage.setImageResource(resId); + nameTextView.setText(text); + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/PhotoPickerPhotoCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/PhotoPickerPhotoCell.java index f00434920..4879a0c09 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/PhotoPickerPhotoCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/PhotoPickerPhotoCell.java @@ -11,6 +11,7 @@ package org.telegram.ui.Cells; import android.content.Context; import android.view.Gravity; import android.widget.FrameLayout; +import android.widget.ImageView; import org.telegram.android.AndroidUtilities; import org.telegram.messenger.R; @@ -22,6 +23,7 @@ public class PhotoPickerPhotoCell extends FrameLayout { public BackupImageView photoImage; public FrameLayout checkFrame; public CheckBox checkBox; + public ImageView editedImage; public int itemWidth; public PhotoPickerPhotoCell(Context context) { @@ -55,6 +57,16 @@ public class PhotoPickerPhotoCell extends FrameLayout { layoutParams.topMargin = AndroidUtilities.dp(6); layoutParams.rightMargin = AndroidUtilities.dp(6); checkBox.setLayoutParams(layoutParams); + + editedImage = new ImageView(context); + editedImage.setImageResource(R.drawable.photo_edit); + editedImage.setScaleType(ImageView.ScaleType.CENTER); + addView(editedImage); + layoutParams = (LayoutParams) editedImage.getLayoutParams(); + layoutParams.width = AndroidUtilities.dp(42); + layoutParams.height = AndroidUtilities.dp(42); + layoutParams.gravity = Gravity.LEFT | Gravity.TOP; + editedImage.setLayoutParams(layoutParams); } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedDocumentCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedDocumentCell.java new file mode 100644 index 000000000..2ddd7307b --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedDocumentCell.java @@ -0,0 +1,381 @@ +/* + * This is the source code of Telegram for Android v. 2.0.x. + * It is licensed under GNU GPL v. 2 or later. + * You should have received a copy of the license in this archive (see LICENSE). + * + * Copyright Nikolai Kudashov, 2013-2014. + */ + +package org.telegram.ui.Cells; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.Gravity; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import org.telegram.android.AndroidUtilities; +import org.telegram.android.ImageLoader; +import org.telegram.android.ImageReceiver; +import org.telegram.android.LocaleController; +import org.telegram.android.MediaController; +import org.telegram.android.MessageObject; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.R; +import org.telegram.messenger.TLRPC; +import org.telegram.messenger.Utilities; +import org.telegram.ui.Components.BackupImageView; +import org.telegram.ui.Components.CheckBox; +import org.telegram.ui.Components.LineProgressView; + +import java.io.File; +import java.util.Date; + +public class SharedDocumentCell extends FrameLayout implements MediaController.FileDownloadProgressListener { + + private ImageView placeholderImabeView; + private BackupImageView thumbImageView; + private TextView nameTextView; + private TextView extTextView; + private TextView dateTextView; + private ImageView statusImageView; + private LineProgressView progressView; + private CheckBox checkBox; + + private boolean needDivider; + + private static Paint paint; + + private int TAG; + + private MessageObject message; + private boolean loading; + private boolean loaded; + + private int icons[] = { + R.drawable.media_doc_blue, + R.drawable.media_doc_green, + R.drawable.media_doc_red, + R.drawable.media_doc_yellow + }; + + public SharedDocumentCell(Context context) { + super(context); + + if (paint == null) { + paint = new Paint(); + paint.setColor(0xffd9d9d9); + paint.setStrokeWidth(1); + } + + TAG = MediaController.getInstance().generateObserverTag(); + + placeholderImabeView = new ImageView(context); + addView(placeholderImabeView); + LayoutParams layoutParams = (LayoutParams) placeholderImabeView.getLayoutParams(); + layoutParams.width = AndroidUtilities.dp(40); + layoutParams.height = AndroidUtilities.dp(40); + layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(12); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(12) : 0; + layoutParams.topMargin = AndroidUtilities.dp(8); + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + placeholderImabeView.setLayoutParams(layoutParams); + + extTextView = new TextView(context); + extTextView.setTextColor(0xffffffff); + extTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + extTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + extTextView.setLines(1); + extTextView.setMaxLines(1); + extTextView.setSingleLine(true); + extTextView.setGravity(Gravity.CENTER); + extTextView.setEllipsize(TextUtils.TruncateAt.END); + addView(extTextView); + layoutParams = (LayoutParams) extTextView.getLayoutParams(); + layoutParams.width = AndroidUtilities.dp(32); + layoutParams.height = LayoutParams.WRAP_CONTENT; + layoutParams.topMargin = AndroidUtilities.dp(22); + layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(16); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(16) : 0; + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + extTextView.setLayoutParams(layoutParams); + + thumbImageView = new BackupImageView(context); + thumbImageView.imageReceiver.setDelegate(new ImageReceiver.ImageReceiverDelegate() { + @Override + public void didSetImage(ImageReceiver imageReceiver, boolean set, boolean thumb) { + extTextView.setVisibility(set ? GONE : VISIBLE); + placeholderImabeView.setVisibility(set ? GONE : VISIBLE); + } + }); + addView(thumbImageView); + layoutParams = (LayoutParams) thumbImageView.getLayoutParams(); + layoutParams.width = AndroidUtilities.dp(40); + layoutParams.height = AndroidUtilities.dp(40); + layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(12); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(12) : 0; + layoutParams.topMargin = AndroidUtilities.dp(8); + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + thumbImageView.setLayoutParams(layoutParams); + + nameTextView = new TextView(context); + nameTextView.setTextColor(0xff222222); + nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + nameTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + nameTextView.setLines(1); + nameTextView.setMaxLines(1); + nameTextView.setSingleLine(true); + nameTextView.setEllipsize(TextUtils.TruncateAt.END); + nameTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); + addView(nameTextView); + layoutParams = (LayoutParams) nameTextView.getLayoutParams(); + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.height = LayoutParams.WRAP_CONTENT; + layoutParams.topMargin = AndroidUtilities.dp(5); + layoutParams.leftMargin = LocaleController.isRTL ? AndroidUtilities.dp(8) : AndroidUtilities.dp(72); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(72) : AndroidUtilities.dp(8); + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + nameTextView.setLayoutParams(layoutParams); + + statusImageView = new ImageView(context); + statusImageView.setVisibility(GONE); + addView(statusImageView); + layoutParams = (LayoutParams) statusImageView.getLayoutParams(); + layoutParams.width = LayoutParams.WRAP_CONTENT; + layoutParams.height = LayoutParams.WRAP_CONTENT; + layoutParams.topMargin = AndroidUtilities.dp(35); + layoutParams.leftMargin = LocaleController.isRTL ? AndroidUtilities.dp(8) : AndroidUtilities.dp(72); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(72) : AndroidUtilities.dp(8); + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + statusImageView.setLayoutParams(layoutParams); + + dateTextView = new TextView(context); + dateTextView.setTextColor(0xff999999); + dateTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + dateTextView.setLines(1); + dateTextView.setMaxLines(1); + dateTextView.setSingleLine(true); + dateTextView.setEllipsize(TextUtils.TruncateAt.END); + dateTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); + addView(dateTextView); + layoutParams = (LayoutParams) dateTextView.getLayoutParams(); + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.height = LayoutParams.WRAP_CONTENT; + layoutParams.topMargin = AndroidUtilities.dp(30); + layoutParams.leftMargin = LocaleController.isRTL ? AndroidUtilities.dp(8) : AndroidUtilities.dp(72); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(72) : AndroidUtilities.dp(8); + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + dateTextView.setLayoutParams(layoutParams); + + progressView = new LineProgressView(context); + addView(progressView); + layoutParams = (LayoutParams) progressView.getLayoutParams(); + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.height = AndroidUtilities.dp(2); + layoutParams.topMargin = AndroidUtilities.dp(54); + layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(72); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(72) : 0; + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + progressView.setLayoutParams(layoutParams); + + checkBox = new CheckBox(context, R.drawable.round_check2); + checkBox.setVisibility(GONE); + addView(checkBox); + layoutParams = (LayoutParams) checkBox.getLayoutParams(); + layoutParams.width = AndroidUtilities.dp(22); + layoutParams.height = AndroidUtilities.dp(22); + layoutParams.topMargin = AndroidUtilities.dp(30); + layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(34); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(34) : 0; + layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); + checkBox.setLayoutParams(layoutParams); + } + + private int getThumbForNameOrMime(String name, String mime) { + if (name != null && name.length() != 0) { + int color = -1; + if (name.contains(".doc") || name.contains(".txt") || name.contains(".psd")) { + color = 0; + } else if (name.contains(".xls") || name.contains(".csv")) { + color = 1; + } else if (name.contains(".pdf") || name.contains(".ppt") || name.contains(".key")) { + color = 2; + } else if (name.contains(".zip") || name.contains(".rar") || name.contains(".ai") || name.contains(".mp3") || name.contains(".mov") || name.contains(".avi")) { + color = 3; + } + if (color == -1) { + int idx; + String ext = (idx = name.lastIndexOf(".")) == -1 ? "" : name.substring(idx + 1); + if (ext.length() != 0) { + color = ext.charAt(0) % icons.length; + } else { + color = name.charAt(0) % icons.length; + } + } + return icons[color]; + } + return icons[0]; + } + + public void setTextAndValueAndTypeAndThumb(String text, String value, String type, String thumb, int resId) { + nameTextView.setText(text); + dateTextView.setText(value); + if (type != null) { + extTextView.setVisibility(VISIBLE); + extTextView.setText(type); + } else { + extTextView.setVisibility(GONE); + } + if (resId == 0) { + placeholderImabeView.setImageResource(getThumbForNameOrMime(text, type)); + placeholderImabeView.setVisibility(VISIBLE); + } else { + placeholderImabeView.setVisibility(GONE); + } + if (thumb != null || resId != 0) { + if (thumb != null) { + thumbImageView.setImage(thumb, "40_40", null); + } else { + thumbImageView.setImageResource(resId); + } + thumbImageView.setVisibility(VISIBLE); + } else { + thumbImageView.setVisibility(GONE); + } + } + + public void setChecked(boolean checked, boolean animated) { + if (checkBox.getVisibility() != VISIBLE) { + checkBox.setVisibility(VISIBLE); + } + checkBox.setChecked(checked, animated); + } + + public void setDocument(MessageObject document, boolean divider) { + needDivider = divider; + message = document; + loaded = false; + loading = false; + + int idx = -1; + String name = FileLoader.getDocumentFileName(document.messageOwner.media.document); + placeholderImabeView.setVisibility(VISIBLE); + extTextView.setVisibility(VISIBLE); + placeholderImabeView.setImageResource(getThumbForNameOrMime(name, document.messageOwner.media.document.mime_type)); + nameTextView.setText(name); + extTextView.setText((idx = name.lastIndexOf(".")) == -1 ? "" : name.substring(idx + 1).toLowerCase()); + if (document.messageOwner.media.document.thumb instanceof TLRPC.TL_photoSizeEmpty) { + thumbImageView.setVisibility(GONE); + thumbImageView.setImageBitmap(null); + } else { + thumbImageView.setVisibility(VISIBLE); + thumbImageView.setImage(document.messageOwner.media.document.thumb.location, "40_40", (Drawable) null); + } + long date = (long) document.messageOwner.date * 1000; + dateTextView.setText(String.format("%s, %s", Utilities.formatFileSize(document.messageOwner.media.document.size), LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, LocaleController.formatterYear.format(new Date(date)), LocaleController.formatterDay.format(new Date(date))))); + setWillNotDraw(!needDivider); + progressView.setProgress(0, false); + + updateFileExistIcon(); + } + + public void updateFileExistIcon() { + if (message != null) { + String fileName = null; + File cacheFile = null; + if (message.messageOwner.attachPath == null || message.messageOwner.attachPath.length() == 0 || !(new File(message.messageOwner.attachPath).exists())) { + cacheFile = FileLoader.getPathToMessage(message.messageOwner); + if (!cacheFile.exists()) { + fileName = FileLoader.getAttachFileName(message.messageOwner.media.document); + } + } + loaded = false; + if (fileName == null) { + statusImageView.setVisibility(GONE); + dateTextView.setPadding(0, 0, 0, 0); + loading = false; + loaded = true; + MediaController.getInstance().removeLoadingFileObserver(this); + } else { + MediaController.getInstance().addLoadingFileObserver(fileName, this); + loading = FileLoader.getInstance().isLoadingFile(fileName); + statusImageView.setVisibility(VISIBLE); + statusImageView.setImageResource(loading ? R.drawable.media_doc_pause : R.drawable.media_doc_load); + dateTextView.setPadding(LocaleController.isRTL ? 0 : AndroidUtilities.dp(14), 0, LocaleController.isRTL ? AndroidUtilities.dp(14) : 0, 0); + if (loading) { + progressView.setVisibility(VISIBLE); + Float progress = ImageLoader.getInstance().getFileProgress(fileName); + if (progress == null) { + progress = 0.0f; + } + progressView.setProgress(progress, false); + } else { + progressView.setVisibility(GONE); + } + } + } else { + loading = false; + loaded = true; + progressView.setVisibility(GONE); + progressView.setProgress(0, false); + statusImageView.setVisibility(GONE); + dateTextView.setPadding(0, 0, 0, 0); + MediaController.getInstance().removeLoadingFileObserver(this); + } + } + + public MessageObject getDocument() { + return message; + } + + public boolean isLoaded() { + return loaded; + } + + public boolean isLoading() { + return loading; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(56) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY)); + } + + @Override + protected void onDraw(Canvas canvas) { + if (needDivider) { + canvas.drawLine(AndroidUtilities.dp(72), getHeight() - 1, getWidth() - getPaddingRight(), getHeight() - 1, paint); + } + } + + @Override + public void onFailedDownload(String name) { + updateFileExistIcon(); + } + + @Override + public void onSuccessDownload(String name) { + progressView.setProgress(1, true); + updateFileExistIcon(); + } + + @Override + public void onProgressDownload(String fileName, float progress) { + progressView.setProgress(progress, true); + } + + @Override + public void onProgressUpload(String fileName, float progress, boolean isEncrypted) { + + } + + @Override + public int getObserverTag() { + return TAG; + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextDetailDocumentsCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextDetailDocumentsCell.java deleted file mode 100644 index 66b5363ba..000000000 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextDetailDocumentsCell.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * This is the source code of Telegram for Android v. 1.7.x. - * It is licensed under GNU GPL v. 2 or later. - * You should have received a copy of the license in this archive (see LICENSE). - * - * Copyright Nikolai Kudashov, 2013-2014. - */ - -package org.telegram.ui.Cells; - -import android.content.Context; -import android.graphics.Typeface; -import android.text.TextUtils; -import android.util.TypedValue; -import android.view.Gravity; -import android.widget.FrameLayout; -import android.widget.TextView; - -import org.telegram.android.AndroidUtilities; -import org.telegram.android.LocaleController; -import org.telegram.messenger.R; -import org.telegram.ui.Components.BackupImageView; -import org.telegram.ui.Components.CheckBox; - -public class TextDetailDocumentsCell extends FrameLayout { - - private TextView textView; - private TextView valueTextView; - private TextView typeTextView; - private BackupImageView imageView; - private CheckBox checkBox; - - public TextDetailDocumentsCell(Context context) { - super(context); - - textView = new TextView(context); - textView.setTextColor(0xff212121); - textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - textView.setLines(1); - textView.setMaxLines(1); - textView.setSingleLine(true); - textView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); - addView(textView); - LayoutParams layoutParams = (LayoutParams) textView.getLayoutParams(); - layoutParams.width = LayoutParams.WRAP_CONTENT; - layoutParams.height = LayoutParams.WRAP_CONTENT; - layoutParams.topMargin = AndroidUtilities.dp(10); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : 71); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 71 : 16); - layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; - textView.setLayoutParams(layoutParams); - - valueTextView = new TextView(context); - valueTextView.setTextColor(0xff8a8a8a); - valueTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); - valueTextView.setLines(1); - valueTextView.setMaxLines(1); - valueTextView.setSingleLine(true); - valueTextView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); - addView(valueTextView); - layoutParams = (LayoutParams) valueTextView.getLayoutParams(); - layoutParams.width = LayoutParams.WRAP_CONTENT; - layoutParams.height = LayoutParams.WRAP_CONTENT; - layoutParams.topMargin = AndroidUtilities.dp(35); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : 71); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 71 : 16); - layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; - valueTextView.setLayoutParams(layoutParams); - - typeTextView = new TextView(context); - typeTextView.setBackgroundColor(0xff757575); - typeTextView.setEllipsize(TextUtils.TruncateAt.MARQUEE); - typeTextView.setGravity(Gravity.CENTER); - typeTextView.setSingleLine(true); - typeTextView.setTextColor(0xffd1d1d1); - typeTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - typeTextView.setTypeface(Typeface.DEFAULT_BOLD); - addView(typeTextView); - layoutParams = (LayoutParams) typeTextView.getLayoutParams(); - layoutParams.width = AndroidUtilities.dp(40); - layoutParams.height = AndroidUtilities.dp(40); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 16); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : 0); - layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL; - typeTextView.setLayoutParams(layoutParams); - - imageView = new BackupImageView(context); - addView(imageView); - layoutParams = (LayoutParams) imageView.getLayoutParams(); - layoutParams.width = AndroidUtilities.dp(40); - layoutParams.height = AndroidUtilities.dp(40); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 16); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : 0); - layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL; - imageView.setLayoutParams(layoutParams); - - checkBox = new CheckBox(context, R.drawable.round_check2); - checkBox.setVisibility(GONE); - addView(checkBox); - layoutParams = (LayoutParams) checkBox.getLayoutParams(); - layoutParams.width = AndroidUtilities.dp(22); - layoutParams.height = AndroidUtilities.dp(22); - layoutParams.topMargin = AndroidUtilities.dp(34); - layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(38); - layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(38) : 0; - layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); - checkBox.setLayoutParams(layoutParams); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64), MeasureSpec.EXACTLY)); - } - - public void setTextAndValueAndTypeAndThumb(String text, String value, String type, String thumb, int resId) { - textView.setText(text); - valueTextView.setText(value); - if (type != null) { - typeTextView.setVisibility(VISIBLE); - typeTextView.setText(type); - } else { - typeTextView.setVisibility(GONE); - } - if (thumb != null || resId != 0) { - if (thumb != null) { - imageView.setImage(thumb, "40_40", null); - } else { - imageView.setImageResource(resId); - } - imageView.setVisibility(VISIBLE); - } else { - imageView.setVisibility(GONE); - } - } - - public void setChecked(boolean checked, boolean animated) { - if (checkBox.getVisibility() != VISIBLE) { - checkBox.setVisibility(VISIBLE); - } - checkBox.setChecked(checked, animated); - } -} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index adc0c2472..7b4590106 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -134,6 +134,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private RecyclerListView stickersListView; private StickersAdapter stickersAdapter; private View stickersPanel; + private TextView muteItem; private boolean allowStickersPanel; private AnimatorSetProxy runningAnimation; @@ -213,6 +214,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private final static int clear_history = 11; private final static int delete_chat = 12; private final static int share_contact = 13; + private final static int mute = 14; AdapterView.OnItemLongClickListener onItemLongClickListener = new AdapterView.OnItemLongClickListener() { @Override @@ -446,6 +448,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioDidStarted); NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateMessageMedia); NotificationCenter.getInstance().addObserver(this, NotificationCenter.replaceMessagesObjects); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.notificationsSettingsUpdated); super.onFragmentCreate(); @@ -505,6 +508,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidStarted); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateMessageMedia); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.replaceMessagesObjects); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.notificationsSettingsUpdated); if (AndroidUtilities.isTablet()) { NotificationCenter.getInstance().postNotificationName(NotificationCenter.openedChatChanged, dialog_id, true); } @@ -770,6 +774,58 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); showAlertDialog(builder); } + } else if (id == mute) { + boolean muted = MessagesController.getInstance().isDialogMuted(dialog_id); + if (!muted) { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setTitle(LocaleController.getString("Notifications", R.string.Notifications)); + CharSequence[] items = new CharSequence[]{ + LocaleController.formatString("MuteFor", R.string.MuteFor, LocaleController.formatPluralString("Hours", 1)), + LocaleController.formatString("MuteFor", R.string.MuteFor, LocaleController.formatPluralString("Hours", 8)), + LocaleController.formatString("MuteFor", R.string.MuteFor, LocaleController.formatPluralString("Days", 2)) + }; + builder.setItems(items, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + int untilTime = ConnectionsManager.getInstance().getCurrentTime(); + if (i == 0) { + untilTime += 60 * 60; + } else if (i == 1) { + untilTime += 60 * 60 * 8; + } else if (i == 2) { + untilTime += 60 * 60 * 48; + } + + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("notify2_" + dialog_id, 3); + editor.putInt("notifyuntil_" + dialog_id, untilTime); + long flags = ((long)untilTime << 32) | 1; + MessagesStorage.getInstance().setDialogFlags(dialog_id, flags); + editor.commit(); + TLRPC.TL_dialog dialog = MessagesController.getInstance().dialogs_dict.get(dialog_id); + if (dialog != null) { + dialog.notify_settings = new TLRPC.TL_peerNotifySettings(); + dialog.notify_settings.mute_until = untilTime; + } + NotificationsController.updateServerNotificationsSettings(dialog_id); + } + } + ); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + showAlertDialog(builder); + } else { + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("notify2_" + dialog_id, 0); + MessagesStorage.getInstance().setDialogFlags(dialog_id, 0); + editor.commit(); + TLRPC.TL_dialog dialog = MessagesController.getInstance().dialogs_dict.get(dialog_id); + if (dialog != null) { + dialog.notify_settings = new TLRPC.TL_peerNotifySettings(); + } + NotificationsController.updateServerNotificationsSettings(dialog_id); + } } } }); @@ -861,6 +917,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not nameTextView.setSingleLine(true); nameTextView.setEllipsize(TextUtils.TruncateAt.END); nameTextView.setGravity(Gravity.LEFT); + nameTextView.setCompoundDrawablePadding(AndroidUtilities.dp(4)); nameTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); avatarContainer.addView(nameTextView); layoutParams2 = (FrameLayout.LayoutParams) nameTextView.getLayoutParams(); @@ -888,14 +945,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not layoutParams2.gravity = Gravity.BOTTOM; onlineTextView.setLayoutParams(layoutParams2); - updateTitle(); - updateSubtitle(); - - if (currentEncryptedChat != null) { - nameTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_header, 0, 0, 0); - nameTextView.setCompoundDrawablePadding(AndroidUtilities.dp(4)); - } - ActionBarMenu menu = actionBar.createMenu(); headerItem = menu.addItem(0, R.drawable.ic_ab_other); @@ -911,11 +960,16 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else { headerItem.addSubItem(delete_chat, LocaleController.getString("DeleteChatUser", R.string.DeleteChatUser), 0); } + muteItem = headerItem.addSubItem(mute, null, 0); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) headerItem.getLayoutParams(); layoutParams.rightMargin = AndroidUtilities.dp(-48); headerItem.setLayoutParams(layoutParams); + updateTitle(); + updateSubtitle(); + updateTitleIcons(); + attachItem = menu.addItem(chat_menu_attach, R.drawable.ic_ab_other); attachItem.addSubItem(attach_photo, LocaleController.getString("ChatTakePhoto", R.string.ChatTakePhoto), R.drawable.ic_attach_photo); attachItem.addSubItem(attach_gallery, LocaleController.getString("ChatGallery", R.string.ChatGallery), R.drawable.ic_attach_gallery); @@ -1731,12 +1785,34 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (currentUser.phone != null && currentUser.phone.length() != 0) { nameTextView.setText(PhoneFormat.getInstance().format("+" + currentUser.phone)); } else { - nameTextView.setText(ContactsController.formatName(currentUser.first_name, currentUser.last_name)); + if (currentUser instanceof TLRPC.TL_userDeleted) { + nameTextView.setText(LocaleController.getString("HiddenName", R.string.HiddenName)); + } else { + nameTextView.setText(ContactsController.formatName(currentUser.first_name, currentUser.last_name)); + } } } else { nameTextView.setText(ContactsController.formatName(currentUser.first_name, currentUser.last_name)); } } + TLRPC.TL_dialog dialog = MessagesController.getInstance().dialogs_dict.get(dialog_id); + if (dialog != null && dialog.notify_settings != null) { + + } else { + nameTextView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.mute_blue, 0); + } + } + + private void updateTitleIcons() { + int leftIcon = currentEncryptedChat != null ? R.drawable.ic_lock_header : 0; + int rightIcon = MessagesController.getInstance().isDialogMuted(dialog_id) ? R.drawable.mute_fixed : 0; + nameTextView.setCompoundDrawablesWithIntrinsicBounds(leftIcon, 0, rightIcon, 0); + + if (rightIcon != 0) { + muteItem.setText(LocaleController.getString("UnmuteNotifications", R.string.UnmuteNotifications)); + } else { + muteItem.setText(LocaleController.getString("MuteNotifications", R.string.MuteNotifications)); + } } private void updateSubtitle() { @@ -2076,7 +2152,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not TLRPC.Message dateMsg = new TLRPC.Message(); dateMsg.message = LocaleController.formatDateChat(obj.messageOwner.date); dateMsg.id = 0; - MessageObject dateObj = new MessageObject(dateMsg, null); + MessageObject dateObj = new MessageObject(dateMsg, null, false); dateObj.type = 10; dateObj.contentType = 4; if (load_type == 1) { @@ -2099,7 +2175,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not TLRPC.Message dateMsg = new TLRPC.Message(); dateMsg.message = ""; dateMsg.id = 0; - MessageObject dateObj = new MessageObject(dateMsg, null); + MessageObject dateObj = new MessageObject(dateMsg, null, false); dateObj.contentType = dateObj.type = 6; boolean dateAdded = true; if (a != messArr.size() - 1) { @@ -2395,7 +2471,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not TLRPC.Message dateMsg = new TLRPC.Message(); dateMsg.message = LocaleController.formatDateChat(obj.messageOwner.date); dateMsg.id = 0; - MessageObject dateObj = new MessageObject(dateMsg, null); + MessageObject dateObj = new MessageObject(dateMsg, null, false); dateObj.type = 10; dateObj.contentType = 4; messages.add(0, dateObj); @@ -2534,7 +2610,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not TLRPC.Message newMsgObj = (TLRPC.Message)args[2]; if (newMsgObj != null) { obj.messageOwner.media = newMsgObj.media; - obj.generateThumbs(true, 1); + obj.generateThumbs(true); } messagesDict.remove(msgId); messagesDict.put(newMsgId, obj); @@ -2691,7 +2767,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (existMessageObject != null) { existMessageObject.messageOwner.media = messageObject.messageOwner.media; existMessageObject.messageOwner.attachPath = messageObject.messageOwner.attachPath; - existMessageObject.generateThumbs(false, 1); + existMessageObject.generateThumbs(false); } updateVisibleRows(); } else if (id == NotificationCenter.replaceMessagesObjects) { @@ -2713,6 +2789,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not chatAdapter.notifyDataSetChanged(); } } + } else if (id == NotificationCenter.notificationsSettingsUpdated) { + updateTitleIcons(); } } @@ -2746,8 +2824,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (currentChat != null && (currentChat instanceof TLRPC.TL_chatForbidden || currentChat.left) || currentUser != null && (currentUser instanceof TLRPC.TL_userDeleted || currentUser instanceof TLRPC.TL_userEmpty || userBlocked)) { bottomOverlayChat.setVisibility(View.VISIBLE); + muteItem.setVisibility(View.GONE); chatActivityEnterView.setFieldFocused(false); } else { + muteItem.setVisibility(View.VISIBLE); bottomOverlayChat.setVisibility(View.GONE); } } @@ -2925,6 +3005,13 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else { selectedMessagesCountTextView.setTextSize(20); } + if (AndroidUtilities.isTablet()) { + if (AndroidUtilities.isSmallTablet() && getParentActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + } else { + actionBar.setBackButtonImage(R.drawable.ic_close_white); + } + } int padding = (AndroidUtilities.getCurrentActionBarHeight() - AndroidUtilities.dp(48)) / 2; avatarContainer.setPadding(avatarContainer.getPaddingLeft(), padding, avatarContainer.getPaddingRight(), padding); FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams)avatarContainer.getLayoutParams(); @@ -3007,10 +3094,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else if (type == 3) { items = new CharSequence[]{LocaleController.getString("Forward", R.string.Forward), LocaleController.getString("Copy", R.string.Copy), LocaleController.getString("Delete", R.string.Delete)}; } else if (type == 4) { - items = new CharSequence[]{LocaleController.getString(selectedObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument ? "SaveToDownloads" : "SaveToGallery", - selectedObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument ? R.string.SaveToDownloads : R.string.SaveToGallery), LocaleController.getString("Forward", R.string.Forward), LocaleController.getString("Delete", R.string.Delete)}; + items = new CharSequence[]{LocaleController.getString(selectedObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument ? "ShareFile" : "SaveToGallery", + selectedObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument ? R.string.ShareFile : R.string.SaveToGallery), LocaleController.getString("Forward", R.string.Forward), LocaleController.getString("Delete", R.string.Delete)}; } else if (type == 5) { - items = new CharSequence[]{LocaleController.getString("ApplyLocalizationFile", R.string.ApplyLocalizationFile), LocaleController.getString("SaveToDownloads", R.string.SaveToDownloads), LocaleController.getString("Forward", R.string.Forward), LocaleController.getString("Delete", R.string.Delete)}; + items = new CharSequence[]{LocaleController.getString("ApplyLocalizationFile", R.string.ApplyLocalizationFile), LocaleController.getString("ShareFile", R.string.ShareFile), LocaleController.getString("Forward", R.string.Forward), LocaleController.getString("Delete", R.string.Delete)}; } } else { if (type == 2) { @@ -3018,8 +3105,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else if (type == 3) { items = new CharSequence[]{LocaleController.getString("Copy", R.string.Copy), LocaleController.getString("Delete", R.string.Delete)}; } else if (type == 4) { - items = new CharSequence[]{LocaleController.getString(selectedObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument ? "SaveToDownloads" : "SaveToGallery", - selectedObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument ? R.string.SaveToDownloads : R.string.SaveToGallery), LocaleController.getString("Delete", R.string.Delete)}; + items = new CharSequence[]{LocaleController.getString(selectedObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument ? "ShareFile" : "SaveToGallery", + selectedObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument ? R.string.ShareFile : R.string.SaveToGallery), LocaleController.getString("Delete", R.string.Delete)}; } else if (type == 5) { items = new CharSequence[]{LocaleController.getString("ApplyLocalizationFile", R.string.ApplyLocalizationFile), LocaleController.getString("Delete", R.string.Delete)}; } @@ -3206,7 +3293,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else if (selectedObject.type == 1) { MediaController.saveFile(path, getParentActivity(), 0, null); } else if (selectedObject.type == 8 || selectedObject.type == 9) { - MediaController.saveFile(path, getParentActivity(), 2, selectedObject.getDocumentName()); + Intent intent = new Intent(Intent.ACTION_SEND); + intent.setType(selectedObject.messageOwner.media.document.mime_type); + intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(path))); + getParentActivity().startActivity(Intent.createChooser(intent, "")); } } else if (option == 5) { File locFile = null; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java index 87904fe9e..ec5c9fd8d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java @@ -32,11 +32,11 @@ public class AvatarDrawable extends Drawable { private static TextPaint namePaint; private static int[] arrColors = {0xffe56555, 0xfff28c48, 0xffeec764, 0xff76c84d, 0xff5fbed5, 0xff549cdd, 0xff8e85ee, 0xfff2749a}; private static int[] arrColorsProfiles = {0xffd86f65, 0xfff69d61, 0xfffabb3c, 0xff67b35d, 0xff56a2bb, 0xff5c98cd, 0xff8c79d2, 0xfff37fa6}; - private static int[] arrColorsProfilesBack = {0xffca6056, 0xfff18944, 0xfff2b02c, 0xff56a14c, 0xff4492ac, 0xff4c84b6, 0xff7d6ac4, 0xffe66b94}; - private static int[] arrColorsProfilesText = {0xfff9cbc5, 0xfffdddc8, 0xfffce5bb, 0xffc0edba, 0xffb8e2f0, 0xffb3d7f7, 0xffcdc4ed, 0xfffed1e0}; - private static int[] arrColorsNames = {0xffca5650, 0xffd87b29, 0xffc7a21c, 0xff50b232, 0xff42b1a8, 0xff4e92cc, 0xff4e92cc, 0xffdb5b9d}; - private static int[] arrColorsButtons = {R.drawable.bar_selector_red, R.drawable.bar_selector_orange, R.drawable.bar_selector_yellow, - R.drawable.bar_selector_green, R.drawable.bar_selector_cyan, R.drawable.bar_selector_blue, R.drawable.bar_selector_violet, R.drawable.bar_selector_pink}; + private static int[] arrColorsProfilesBack = {0xffca6056, 0xfff18944, 0xff7d6ac4, 0xff56a14c, 0xff4492ac, 0xff4c84b6, 0xff7d6ac4, 0xff4c84b6}; + private static int[] arrColorsProfilesText = {0xfff9cbc5, 0xfffdddc8, 0xffcdc4ed, 0xffc0edba, 0xffb8e2f0, 0xffb3d7f7, 0xffcdc4ed, 0xffb3d7f7}; + private static int[] arrColorsNames = {0xffca5650, 0xffd87b29, 0xff4e92cc, 0xff50b232, 0xff42b1a8, 0xff4e92cc, 0xff4e92cc, 0xff4e92cc}; + private static int[] arrColorsButtons = {R.drawable.bar_selector_red, R.drawable.bar_selector_orange, R.drawable.bar_selector_violet, + R.drawable.bar_selector_green, R.drawable.bar_selector_cyan, R.drawable.bar_selector_blue, R.drawable.bar_selector_violet, R.drawable.bar_selector_blue}; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarUpdater.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarUpdater.java index 07edc7ad1..2b0150e50 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarUpdater.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarUpdater.java @@ -29,7 +29,7 @@ import org.telegram.ui.ActionBar.BaseFragment; import java.io.File; -public class AvatarUpdater implements NotificationCenter.NotificationCenterDelegate, PhotoCropActivity.PhotoCropActivityDelegate { +public class AvatarUpdater implements NotificationCenter.NotificationCenterDelegate, PhotoCropActivity.PhotoEditActivityDelegate { public String currentPicturePath; private TLRPC.PhotoSize smallPhoto; private TLRPC.PhotoSize bigPhoto; @@ -94,7 +94,7 @@ public class AvatarUpdater implements NotificationCenter.NotificationCenterDeleg activity.presentFragment(photoCropActivity); } catch (Exception e) { FileLog.e("tmessages", e); - Bitmap bitmap = ImageLoader.loadBitmap(path, uri, 800, 800); + Bitmap bitmap = ImageLoader.loadBitmap(path, uri, 800, 800, true); processBitmap(bitmap); } } @@ -137,7 +137,7 @@ public class AvatarUpdater implements NotificationCenter.NotificationCenterDeleg } @Override - public void didFinishCrop(Bitmap bitmap) { + public void didFinishEdit(Bitmap bitmap, Bundle args) { processBitmap(bitmap); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/BackupImageView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/BackupImageView.java index 81b4af53e..7f30f2658 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/BackupImageView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/BackupImageView.java @@ -18,6 +18,7 @@ import android.view.View; import org.telegram.android.ImageReceiver; import org.telegram.messenger.TLObject; +import org.telegram.messenger.TLRPC; public class BackupImageView extends View { @@ -43,34 +44,35 @@ public class BackupImageView extends View { imageReceiver = new ImageReceiver(this); } - public void setImage(TLObject path, String filter, Drawable placeholder) { - setImage(path, null, filter, placeholder, null, 0); + public void setImage(TLObject path, String filter, Drawable thumb) { + setImage(path, null, filter, thumb, null, null, null, 0); } - public void setImage(TLObject path, String filter, Bitmap placeholderBitmap) { - setImage(path, null, filter, null, placeholderBitmap, 0); + public void setImage(TLObject path, String filter, Bitmap thumb) { + setImage(path, null, filter, null, thumb, null, null, 0); } - public void setImage(TLObject path, String filter, Drawable placeholder, int size) { - setImage(path, null, filter, placeholder, null, size); + public void setImage(TLObject path, String filter, Drawable thumb, int size) { + setImage(path, null, filter, thumb, null, null, null, size); } - public void setImage(TLObject path, String filter, Bitmap placeholderBitmap, int size) { - setImage(path, null, filter, null, placeholderBitmap, size); + public void setImage(TLObject path, String filter, Bitmap thumb, int size) { + setImage(path, null, filter, null, thumb, null, null, size); } - public void setImage(String path, String filter, Drawable placeholder) { - setImage(null, path, filter, placeholder, null, 0); + public void setImage(TLObject path, String filter, TLRPC.FileLocation thumb, int size) { + setImage(path, null, filter, null, null, thumb, null, size); } - public void setImage(TLObject path, String httpUrl, String filter, Drawable placeholder, Bitmap placeholderBitmap, int size) { - Drawable placeholderDrawable = null; - if (placeholderBitmap != null) { - placeholderDrawable = new BitmapDrawable(null, placeholderBitmap); - } else if (placeholder != null) { - placeholderDrawable = placeholder; + public void setImage(String path, String filter, Drawable thumb) { + setImage(null, path, filter, thumb, null, null, null, 0); + } + + public void setImage(TLObject path, String httpUrl, String filter, Drawable thumb, Bitmap thumbBitmap, TLRPC.FileLocation thumbLocation, String thumbFilter, int size) { + if (thumbBitmap != null) { + thumb = new BitmapDrawable(null, thumbBitmap); } - imageReceiver.setImage(path, httpUrl, filter, placeholderDrawable, null, size, false); + imageReceiver.setImage(path, httpUrl, filter, thumb, thumbLocation, thumbFilter, size, false); } public void setImageBitmap(Bitmap bitmap) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java new file mode 100644 index 000000000..60c2522eb --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java @@ -0,0 +1,98 @@ +/* + * This is the source code of Telegram for Android v. 2.0.x. + * It is licensed under GNU GPL v. 2 or later. + * You should have received a copy of the license in this archive (see LICENSE). + * + * Copyright Nikolai Kudashov, 2013-2014. + */ + +package org.telegram.ui.Components; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.view.View; +import android.view.animation.DecelerateInterpolator; + +import org.telegram.android.AndroidUtilities; + +public class LineProgressView extends View { + + private long lastUpdateTime = 0; + private float currentProgress = 0; + private float animationProgressStart = 0; + private long currentProgressTime = 0; + private float animatedProgressValue = 0; + private float animatedAlphaValue = 1.0f; + + private static DecelerateInterpolator decelerateInterpolator = null; + private static Paint progressPaint = null; + + public LineProgressView(Context context) { + super(context); + + if (decelerateInterpolator == null) { + decelerateInterpolator = new DecelerateInterpolator(); + progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + progressPaint.setStyle(Paint.Style.STROKE); + progressPaint.setStrokeCap(Paint.Cap.ROUND); + progressPaint.setStrokeWidth(AndroidUtilities.dp(2)); + progressPaint.setColor(0xff36a2ee); + } + } + + private void updateAnimation() { + long newTime = System.currentTimeMillis(); + long dt = newTime - lastUpdateTime; + lastUpdateTime = newTime; + + if (animatedProgressValue != 1 && animatedProgressValue != currentProgress) { + float progressDiff = currentProgress - animationProgressStart; + if (progressDiff > 0) { + currentProgressTime += dt; + if (currentProgressTime >= 300) { + animatedProgressValue = currentProgress; + animationProgressStart = currentProgress; + currentProgressTime = 0; + } else { + animatedProgressValue = animationProgressStart + progressDiff * decelerateInterpolator.getInterpolation(currentProgressTime / 300.0f); + } + } + invalidate(); + } + if (animatedProgressValue >= 1 && animatedProgressValue == 1 && animatedAlphaValue != 0) { + animatedAlphaValue -= dt / 200.0f; + if (animatedAlphaValue <= 0) { + animatedAlphaValue = 0.0f; + } + invalidate(); + } + } + + public void setProgressColor(int color) { + progressPaint.setColor(color); + } + + public void setProgress(float value, boolean animated) { + if (!animated) { + animatedProgressValue = value; + animationProgressStart = value; + } else { + animationProgressStart = animatedProgressValue; + } + if (value != 1) { + animatedAlphaValue = 1; + } + currentProgress = value; + currentProgressTime = 0; + + lastUpdateTime = System.currentTimeMillis(); + invalidate(); + } + + public void onDraw(Canvas canvas) { + progressPaint.setAlpha((int)(255 * animatedAlphaValue)); + canvas.drawRect(0, 0, getWidth() * animatedProgressValue, getHeight(), progressPaint); + updateAnimation(); + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java index 8595aa084..97dbea03b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java @@ -289,7 +289,7 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, ContactsController.getInstance().getInviteText()); - getParentActivity().startActivity(intent); + getParentActivity().startActivity(Intent.createChooser(intent, "")); } catch (Exception e) { FileLog.e("tmessages", e); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/DocumentSelectActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/DocumentSelectActivity.java index 66b99d289..177c9ae0b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/DocumentSelectActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/DocumentSelectActivity.java @@ -36,11 +36,10 @@ import org.telegram.messenger.Utilities; import org.telegram.ui.Adapters.BaseFragmentAdapter; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; -import org.telegram.ui.ActionBar.ActionBarMenuItem; import org.telegram.ui.AnimationCompat.AnimatorSetProxy; import org.telegram.ui.AnimationCompat.ObjectAnimatorProxy; -import org.telegram.ui.Cells.TextDetailDocumentsCell; import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.Cells.SharedDocumentCell; import java.io.BufferedReader; import java.io.File; @@ -63,13 +62,13 @@ public class DocumentSelectActivity extends BaseFragment { private TextView emptyView; private File currentDir; - private ArrayList items = new ArrayList(); + private ArrayList items = new ArrayList<>(); private boolean receiverRegistered = false; - private ArrayList history = new ArrayList(); + private ArrayList history = new ArrayList<>(); private long sizeLimit = 1024 * 1024 * 1024; private DocumentSelectActivityDelegate delegate; - private HashMap selectedFiles = new HashMap(); - private ArrayList actionModeViews = new ArrayList(); + private HashMap selectedFiles = new HashMap<>(); + private ArrayList actionModeViews = new ArrayList<>(); private boolean scrolling; private final static int done = 3; @@ -152,27 +151,19 @@ public class DocumentSelectActivity extends BaseFragment { public void onItemClick(int id) { if (id == -1) { finishFragment(); - } else if (id == 1) { - if (delegate != null) { - delegate.startDocumentSelectActivity(); - } - finishFragment(false); } else if (id == -2) { selectedFiles.clear(); actionBar.hideActionMode(); listView.invalidateViews(); } else if (id == done) { if (delegate != null) { - ArrayList files = new ArrayList(); + ArrayList files = new ArrayList<>(); files.addAll(selectedFiles.keySet()); delegate.didSelectFiles(DocumentSelectActivity.this, files); } } } }); - ActionBarMenu menu = actionBar.createMenu(); - final ActionBarMenuItem item = menu.addItem(1, R.drawable.ic_ab_other); - selectedFiles.clear(); actionModeViews.clear(); @@ -254,7 +245,7 @@ public class DocumentSelectActivity extends BaseFragment { selectedMessagesCountTextView.setText(String.format("%d", selectedFiles.size())); if (Build.VERSION.SDK_INT >= 11) { AnimatorSetProxy animatorSet = new AnimatorSetProxy(); - ArrayList animators = new ArrayList(); + ArrayList animators = new ArrayList<>(); for (int a = 0; a < actionModeViews.size(); a++) { View view2 = actionModeViews.get(a); AndroidUtilities.clearDrawableAnimation(view2); @@ -269,8 +260,8 @@ public class DocumentSelectActivity extends BaseFragment { animatorSet.start(); } scrolling = false; - if (view instanceof TextDetailDocumentsCell) { - ((TextDetailDocumentsCell) view).setChecked(true, true); + if (view instanceof SharedDocumentCell) { + ((SharedDocumentCell) view).setChecked(true, true); } actionBar.showActionMode(); } @@ -287,24 +278,32 @@ public class DocumentSelectActivity extends BaseFragment { ListItem item = items.get(i); File file = item.file; if (file == null) { - HistoryEntry he = history.remove(history.size() - 1); - actionBar.setTitle(he.title); - if (he.dir != null) { - listFiles(he.dir); + if (item.icon == R.drawable.ic_storage_gallery) { + if (delegate != null) { + delegate.startDocumentSelectActivity(); + } + finishFragment(false); } else { - listRoots(); + HistoryEntry he = history.remove(history.size() - 1); + actionBar.setTitle(he.title); + if (he.dir != null) { + listFiles(he.dir); + } else { + listRoots(); + } + listView.setSelectionFromTop(he.scrollItem, he.scrollOffset); } - listView.setSelectionFromTop(he.scrollItem, he.scrollOffset); } else if (file.isDirectory()) { HistoryEntry he = new HistoryEntry(); he.scrollItem = listView.getFirstVisiblePosition(); he.scrollOffset = listView.getChildAt(0).getTop(); he.dir = currentDir; he.title = actionBar.getTitle().toString(); + history.add(he); if (!listFiles(file)) { + history.remove(he); return; } - history.add(he); actionBar.setTitle(item.title); listView.setSelection(0); } else { @@ -333,12 +332,12 @@ public class DocumentSelectActivity extends BaseFragment { selectedMessagesCountTextView.setText(String.format("%d", selectedFiles.size())); } scrolling = false; - if (view instanceof TextDetailDocumentsCell) { - ((TextDetailDocumentsCell) view).setChecked(selectedFiles.containsKey(item.file.toString()), true); + if (view instanceof SharedDocumentCell) { + ((SharedDocumentCell) view).setChecked(selectedFiles.containsKey(item.file.toString()), true); } } else { if (delegate != null) { - ArrayList files = new ArrayList(); + ArrayList files = new ArrayList<>(); files.add(file.getAbsolutePath()); delegate.didSelectFiles(DocumentSelectActivity.this, files); } @@ -465,7 +464,16 @@ public class DocumentSelectActivity extends BaseFragment { } ListItem item = new ListItem(); item.title = ".."; - item.subtitle = LocaleController.getString("Folder", R.string.Folder); + if (history.size() > 0) { + HistoryEntry entry = history.get(history.size() - 1); + if (entry.dir == null) { + item.subtitle = LocaleController.getString("Folder", R.string.Folder); + } else { + item.subtitle = entry.dir.toString(); + } + } else { + item.subtitle = LocaleController.getString("Folder", R.string.Folder); + } item.icon = R.drawable.ic_directory; item.file = null; items.add(0, item); @@ -499,8 +507,8 @@ public class DocumentSelectActivity extends BaseFragment { try { BufferedReader reader = new BufferedReader(new FileReader("/proc/mounts")); String line; - HashMap> aliases = new HashMap>(); - ArrayList result = new ArrayList(); + HashMap> aliases = new HashMap<>(); + ArrayList result = new ArrayList<>(); String extDevice = null; while ((line = reader.readLine()) != null) { if ((!line.contains("/mnt") && !line.contains("/storage") && !line.contains("/sdcard")) || line.contains("asec") || line.contains("tmpfs") || line.contains("none")) { @@ -560,6 +568,13 @@ public class DocumentSelectActivity extends BaseFragment { FileLog.e("tmessages", e); } + fs = new ListItem(); + fs.title = LocaleController.getString("Gallery", R.string.Gallery); + fs.subtitle = LocaleController.getString("GalleryInfo", R.string.GalleryInfo); + fs.icon = R.drawable.ic_storage_gallery; + fs.file = null; + items.add(fs); + AndroidUtilities.clearDrawableAnimation(listView); scrolling = true; listAdapter.notifyDataSetChanged(); @@ -608,15 +623,15 @@ public class DocumentSelectActivity extends BaseFragment { @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { - convertView = new TextDetailDocumentsCell(mContext); + convertView = new SharedDocumentCell(mContext); } - TextDetailDocumentsCell textDetailCell = (TextDetailDocumentsCell) convertView; + SharedDocumentCell textDetailCell = (SharedDocumentCell) convertView; ListItem item = items.get(position); if (item.icon != 0) { - ((TextDetailDocumentsCell) convertView).setTextAndValueAndTypeAndThumb(item.title, item.subtitle, null, null, item.icon); + ((SharedDocumentCell) convertView).setTextAndValueAndTypeAndThumb(item.title, item.subtitle, null, null, item.icon); } else { String type = item.ext.toUpperCase().substring(0, Math.min(item.ext.length(), 4)); - ((TextDetailDocumentsCell) convertView).setTextAndValueAndTypeAndThumb(item.title, item.subtitle, type, item.thumb, 0); + ((SharedDocumentCell) convertView).setTextAndValueAndTypeAndThumb(item.title, item.subtitle, type, item.thumb, 0); } if (item.file != null && actionBar.isActionModeShowed()) { textDetailCell.setChecked(selectedFiles.containsKey(item.file.toString()), !scrolling); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/IntroActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/IntroActivity.java index ebcf31338..983d43cd9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/IntroActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/IntroActivity.java @@ -8,10 +8,13 @@ package org.telegram.ui; +import android.animation.ObjectAnimator; +import android.animation.StateListAnimator; import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.database.DataSetObserver; +import android.os.Build; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; @@ -114,7 +117,13 @@ public class IntroActivity extends Activity { } viewPager = (ViewPager)findViewById(R.id.intro_view_pager); TextView startMessagingButton = (TextView) findViewById(R.id.start_messaging_button); - startMessagingButton.setText(LocaleController.getString("StartMessaging", R.string.StartMessaging)); + startMessagingButton.setText(LocaleController.getString("StartMessaging", R.string.StartMessaging).toUpperCase()); + if (Build.VERSION.SDK_INT >= 21) { + StateListAnimator animator = new StateListAnimator(); + animator.addState(new int[] {android.R.attr.state_pressed}, ObjectAnimator.ofFloat(startMessagingButton, "translationZ", AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200)); + animator.addState(new int[] {}, ObjectAnimator.ofFloat(startMessagingButton, "translationZ", AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200)); + startMessagingButton.setStateListAnimator(animator); + } topImage1 = (ImageView)findViewById(R.id.icon_image1); topImage2 = (ImageView)findViewById(R.id.icon_image2); bottomPages = (ViewGroup)findViewById(R.id.bottom_pages); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 67f84d0a6..ea916e6af 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -276,7 +276,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, ContactsController.getInstance().getInviteText()); - startActivity(intent); + startActivity(Intent.createChooser(intent, "")); } catch (Exception e) { FileLog.e("tmessages", e); } @@ -735,6 +735,14 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } else if (showDialogsList) { if (!AndroidUtilities.isTablet()) { actionBarLayout.removeAllFragments(); + } else { + if (!layersActionBarLayout.fragmentsStack.isEmpty()) { + for (int a = 0; a < layersActionBarLayout.fragmentsStack.size() - 1; a++) { + layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.fragmentsStack.get(0)); + a--; + } + layersActionBarLayout.closeLastFragment(false); + } } pushOpened = false; isNew = false; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java index 73adbf3bd..2814c8b32 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java @@ -843,7 +843,7 @@ public class LoginActivity extends BaseFragment { needShowAlert(LocaleController.getString("CodeExpired", R.string.CodeExpired)); } else if (error.text.startsWith("FLOOD_WAIT")) { needShowAlert(LocaleController.getString("FloodWait", R.string.FloodWait)); - } else { + } else if (error.code != -1000) { needShowAlert(error.text); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MediaActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/MediaActivity.java index ad2a0ce1c..811f0f3e4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MediaActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MediaActivity.java @@ -9,10 +9,18 @@ package org.telegram.ui; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.res.Configuration; import android.graphics.Bitmap; +import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.Surface; @@ -20,43 +28,86 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.WindowManager; +import android.webkit.MimeTypeMap; import android.widget.AbsListView; import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.FrameLayout; import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.ProgressBar; import android.widget.TextView; import org.telegram.android.AndroidUtilities; import org.telegram.android.LocaleController; +import org.telegram.android.MessagesController; +import org.telegram.android.SendMessagesHelper; +import org.telegram.android.query.SharedMediaQuery; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.FileLoader; import org.telegram.messenger.TLRPC; import org.telegram.android.MessageObject; -import org.telegram.android.MessagesController; import org.telegram.android.NotificationCenter; import org.telegram.messenger.R; +import org.telegram.ui.ActionBar.ActionBarMenu; +import org.telegram.ui.ActionBar.ActionBarMenuItem; +import org.telegram.ui.ActionBar.ActionBarPopupWindow; import org.telegram.ui.Adapters.BaseFragmentAdapter; import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.AnimationCompat.AnimatorSetProxy; +import org.telegram.ui.AnimationCompat.ObjectAnimatorProxy; +import org.telegram.ui.Cells.LoadingCell; +import org.telegram.ui.Cells.SharedDocumentCell; import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.ActionBar.BaseFragment; +import java.io.File; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; public class MediaActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, PhotoViewer.PhotoViewerProvider { private GridView listView; + private ListView mediaListView; private ListAdapter listAdapter; - private ArrayList messages = new ArrayList<>(); - private HashMap messagesDict = new HashMap<>(); + private SharedDocumentsAdapter documentsAdapter; + private LinearLayout progressView; + private TextView emptyTextView; + private ImageView emptyImageView; + private LinearLayout emptyView; + private TextView dropDown; + private ActionBarMenuItem dropDownContainer; + private ActionBarMenuItem searchItem; + private TextView selectedMessagesCountTextView; + private ActionBarPopupWindow.ActionBarPopupWindowLayout popupLayout; + + private HashMap selectedFiles = new HashMap<>(); + private ArrayList actionModeViews = new ArrayList<>(); + private boolean scrolling; + private long dialog_id; - private int totalCount = 0; + private int selectedMode; private int itemWidth = 100; - private boolean loading = false; - private boolean endReached = false; - private boolean cacheEndReached = false; - private int max_id = Integer.MAX_VALUE; - private View progressView; - private TextView emptyView; + + private class SharedMediaData { + private ArrayList messages = new ArrayList<>(); + private HashMap messagesDict = new HashMap<>(); + private int totalCount; + private boolean loading; + private boolean endReached; + private boolean cacheEndReached; + private int max_id; + } + + private SharedMediaData sharedMediaData[] = new SharedMediaData[3]; + + private final static int shared_media_item = 1; + private final static int files_item = 2; + private final static int forward = 3; + private final static int delete = 4; public MediaActivity(Bundle args) { super(args); @@ -70,11 +121,12 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No NotificationCenter.getInstance().addObserver(this, NotificationCenter.didReceivedNewMessages); NotificationCenter.getInstance().addObserver(this, NotificationCenter.messageReceivedByServer); dialog_id = getArguments().getLong("dialog_id", 0); - if (((int)dialog_id) == 0) { - max_id = Integer.MIN_VALUE; + for (int a = 0; a < sharedMediaData.length; a++) { + sharedMediaData[a] = new SharedMediaData(); + sharedMediaData[a].max_id = ((int)dialog_id) == 0 ? Integer.MIN_VALUE : Integer.MAX_VALUE; } - loading = true; - MessagesController.getInstance().loadMedia(dialog_id, 0, 50, 0, true, classGuid); + sharedMediaData[0].loading = true; + SharedMediaQuery.loadMedia(dialog_id, 0, 50, 0, SharedMediaQuery.MEDIA_PHOTOVIDEO, true, classGuid); return true; } @@ -91,8 +143,8 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No public View createView(LayoutInflater inflater, ViewGroup container) { if (fragmentView == null) { actionBar.setBackButtonImage(R.drawable.ic_ab_back); - actionBar.setAllowOverlayTitle(true); - actionBar.setTitle(LocaleController.getString("SharedMedia", R.string.SharedMedia)); + actionBar.setTitle(""); + actionBar.setAllowOverlayTitle(false); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override public void onItemClick(int id) { @@ -103,42 +155,380 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No listAdapter = null; } finishFragment(); + } else if (id == -2) { + selectedFiles.clear(); + actionBar.hideActionMode(); + mediaListView.invalidateViews(); + } else if (id == shared_media_item) { + if (selectedMode == 0) { + return; + } + selectedMode = 0; + switchToCurrentSelectedMode(); + } else if (id == files_item) { + if (selectedMode == 1) { + return; + } + selectedMode = 1; + switchToCurrentSelectedMode(); + } else if (id == delete) { + if (getParentActivity() == null) { + return; + } + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setMessage(LocaleController.formatString("AreYouSureDeleteMessages", R.string.AreYouSureDeleteMessages, LocaleController.formatPluralString("files", selectedFiles.size()))); + builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + ArrayList ids = new ArrayList<>(selectedFiles.keySet()); + ArrayList random_ids = null; + TLRPC.EncryptedChat currentEncryptedChat = null; + if ((int) dialog_id == 0) { + currentEncryptedChat = MessagesController.getInstance().getEncryptedChat((int) (dialog_id >> 32)); + } + if (currentEncryptedChat != null) { + random_ids = new ArrayList<>(); + for (HashMap.Entry entry : selectedFiles.entrySet()) { + MessageObject msg = entry.getValue(); + if (msg.messageOwner.random_id != 0 && msg.type != 10) { + random_ids.add(msg.messageOwner.random_id); + } + } + } + MessagesController.getInstance().deleteMessages(ids, random_ids, currentEncryptedChat); + actionBar.hideActionMode(); + selectedFiles.clear(); + } + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + showAlertDialog(builder); + } else if (id == forward) { + Bundle args = new Bundle(); + args.putBoolean("onlySelect", true); + args.putBoolean("serverOnly", true); + args.putString("selectAlertString", LocaleController.getString("ForwardMessagesTo", R.string.ForwardMessagesTo)); + args.putString("selectAlertStringGroup", LocaleController.getString("ForwardMessagesToGroup", R.string.ForwardMessagesToGroup)); + MessagesActivity fragment = new MessagesActivity(args); + fragment.setDelegate(new MessagesActivity.MessagesActivityDelegate() { + @Override + public void didSelectDialog(MessagesActivity fragment, long did, boolean param) { + int lower_part = (int)did; + if (lower_part != 0) { + Bundle args = new Bundle(); + args.putBoolean("scrollToTopOnResume", true); + if (lower_part > 0) { + args.putInt("user_id", lower_part); + } else if (lower_part < 0) { + args.putInt("chat_id", -lower_part); + } + + ArrayList ids = new ArrayList<>(selectedFiles.keySet()); + Collections.sort(ids); + for (Integer id : ids) { + if (id > 0) { + SendMessagesHelper.getInstance().sendMessage(selectedFiles.get(id), did); + } + } + selectedFiles.clear(); + actionBar.hideActionMode(); + + NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); + ChatActivity chatActivity = new ChatActivity(args); + presentFragment(chatActivity, true); + + if (!AndroidUtilities.isTablet()) { + removeSelfFromStack(); + Activity parentActivity = getParentActivity(); + if (parentActivity == null) { + parentActivity = chatActivity.getParentActivity(); + } + if (parentActivity != null) { + parentActivity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + } + } + } else { + fragment.finishFragment(); + } + } + }); + presentFragment(fragment); } } }); - fragmentView = inflater.inflate(R.layout.media_layout, container, false); + selectedFiles.clear(); + actionModeViews.clear(); - emptyView = (TextView)fragmentView.findViewById(R.id.searchEmptyView); - emptyView.setText(LocaleController.getString("NoMedia", R.string.NoMedia)); - emptyView.setOnTouchListener(new View.OnTouchListener() { + final ActionBarMenu menu = actionBar.createMenu(); + searchItem = menu.addItem(0, R.drawable.ic_ab_search).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() { + @Override + public void onSearchExpand() { + dropDownContainer.setVisibility(View.GONE); + } + + @Override + public void onSearchCollapse() { + dropDownContainer.setVisibility(View.VISIBLE); + } + + @Override + public void onTextChanged(EditText editText) { + + } + }); + searchItem.getSearchField().setHint(LocaleController.getString("Search", R.string.Search)); + searchItem.setVisibility(View.GONE); + + dropDownContainer = new ActionBarMenuItem(getParentActivity(), menu, R.drawable.bar_selector); + dropDownContainer.setSubMenuOpenSide(1); + dropDownContainer.addSubItem(shared_media_item, LocaleController.getString("SharedMedia", R.string.SharedMedia), 0); + dropDownContainer.addSubItem(files_item, LocaleController.getString("DocumentsTitle", R.string.DocumentsTitle), 0); + actionBar.addView(dropDownContainer); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) dropDownContainer.getLayoutParams(); + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.rightMargin = AndroidUtilities.dp(40); + layoutParams.leftMargin = AndroidUtilities.isTablet() ? AndroidUtilities.dp(64) : AndroidUtilities.dp(56); + layoutParams.gravity = Gravity.TOP | Gravity.LEFT; + dropDownContainer.setLayoutParams(layoutParams); + dropDownContainer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + dropDownContainer.toggleSubMenu(); + } + }); + + dropDown = new TextView(getParentActivity()); + dropDown.setGravity(Gravity.LEFT); + dropDown.setSingleLine(true); + dropDown.setLines(1); + dropDown.setMaxLines(1); + dropDown.setEllipsize(TextUtils.TruncateAt.END); + dropDown.setTextColor(0xffffffff); + dropDown.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + dropDown.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_arrow_drop_down, 0); + dropDown.setCompoundDrawablePadding(AndroidUtilities.dp(4)); + dropDown.setPadding(0, 0, AndroidUtilities.dp(10), 0); + dropDownContainer.addView(dropDown); + layoutParams = (FrameLayout.LayoutParams) dropDown.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.leftMargin = AndroidUtilities.dp(16); + layoutParams.gravity = Gravity.CENTER_VERTICAL; + dropDown.setLayoutParams(layoutParams); + + final ActionBarMenu actionMode = actionBar.createActionMode(); + actionModeViews.add(actionMode.addItem(-2, R.drawable.ic_ab_back_grey, R.drawable.bar_selector_mode, null, AndroidUtilities.dp(54))); + + selectedMessagesCountTextView = new TextView(actionMode.getContext()); + selectedMessagesCountTextView.setTextSize(18); + selectedMessagesCountTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + selectedMessagesCountTextView.setTextColor(0xff737373); + selectedMessagesCountTextView.setSingleLine(true); + selectedMessagesCountTextView.setLines(1); + selectedMessagesCountTextView.setEllipsize(TextUtils.TruncateAt.END); + selectedMessagesCountTextView.setPadding(AndroidUtilities.dp(11), 0, 0, AndroidUtilities.dp(2)); + selectedMessagesCountTextView.setGravity(Gravity.CENTER_VERTICAL); + selectedMessagesCountTextView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); - listView = (GridView)fragmentView.findViewById(R.id.media_grid); - progressView = fragmentView.findViewById(R.id.progressLayout); + actionMode.addView(selectedMessagesCountTextView); + LinearLayout.LayoutParams layoutParams1 = (LinearLayout.LayoutParams)selectedMessagesCountTextView.getLayoutParams(); + layoutParams1.weight = 1; + layoutParams1.width = 0; + layoutParams1.height = LinearLayout.LayoutParams.MATCH_PARENT; + selectedMessagesCountTextView.setLayoutParams(layoutParams1); + if ((int) dialog_id != 0) { + actionModeViews.add(actionMode.addItem(forward, R.drawable.ic_ab_fwd_forward, R.drawable.bar_selector_mode, null, AndroidUtilities.dp(54))); + } + actionModeViews.add(actionMode.addItem(delete, R.drawable.ic_ab_fwd_delete, R.drawable.bar_selector_mode, null, AndroidUtilities.dp(54))); + + + FrameLayout frameLayout; + fragmentView = frameLayout = new FrameLayout(getParentActivity()); + fragmentView.setBackgroundColor(0xfff0f0f0); + + mediaListView = new ListView(getParentActivity()); + mediaListView.setDivider(null); + mediaListView.setDividerHeight(0); + mediaListView.setVerticalScrollBarEnabled(false); + mediaListView.setDrawSelectorOnTop(true); + frameLayout.addView(mediaListView); + layoutParams = (FrameLayout.LayoutParams) mediaListView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.gravity = Gravity.TOP; + mediaListView.setLayoutParams(layoutParams); + mediaListView.setAdapter(documentsAdapter = new SharedDocumentsAdapter(getParentActivity())); + mediaListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, final int i, long l) { + if (view instanceof SharedDocumentCell) { + SharedDocumentCell cell = (SharedDocumentCell) view; + MessageObject message = cell.getDocument(); + if (actionBar.isActionModeShowed()) { + if (selectedFiles.containsKey(message.messageOwner.id)) { + selectedFiles.remove(message.messageOwner.id); + } else { + selectedFiles.put(message.messageOwner.id, message); + } + if (selectedFiles.isEmpty()) { + actionBar.hideActionMode(); + } else { + selectedMessagesCountTextView.setText(String.format("%d", selectedFiles.size())); + } + scrolling = false; + if (view instanceof SharedDocumentCell) { + ((SharedDocumentCell) view).setChecked(selectedFiles.containsKey(message.messageOwner.id), true); + } + } else { + if (cell.isLoaded()) { + File f = null; + String fileName = FileLoader.getAttachFileName(message.messageOwner.media.document); + if (message.messageOwner.attachPath != null && message.messageOwner.attachPath.length() != 0) { + f = new File(message.messageOwner.attachPath); + } + if (f == null || f != null && !f.exists()) { + f = FileLoader.getPathToMessage(message.messageOwner); + } + if (f != null && f.exists()) { + String realMimeType = null; + try { + Intent intent = new Intent(Intent.ACTION_VIEW); + MimeTypeMap myMime = MimeTypeMap.getSingleton(); + int idx = fileName.lastIndexOf("."); + if (idx != -1) { + String ext = fileName.substring(idx + 1); + realMimeType = myMime.getMimeTypeFromExtension(ext.toLowerCase()); + if (realMimeType == null) { + realMimeType = message.messageOwner.media.document.mime_type; + if (realMimeType == null || realMimeType.length() == 0) { + realMimeType = null; + } + } + if (realMimeType != null) { + intent.setDataAndType(Uri.fromFile(f), realMimeType); + } else { + intent.setDataAndType(Uri.fromFile(f), "text/plain"); + } + } else { + intent.setDataAndType(Uri.fromFile(f), "text/plain"); + } + if (realMimeType != null) { + try { + getParentActivity().startActivity(intent); + } catch (Exception e) { + intent.setDataAndType(Uri.fromFile(f), "text/plain"); + getParentActivity().startActivity(intent); + } + } else { + getParentActivity().startActivity(intent); + } + } catch (Exception e) { + if (getParentActivity() == null) { + return; + } + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); + builder.setMessage(LocaleController.formatString("NoHandleAppInstalled", R.string.NoHandleAppInstalled, message.messageOwner.media.document.mime_type)); + showAlertDialog(builder); + } + } + } else if (!cell.isLoading()) { + FileLoader.getInstance().loadFile(cell.getDocument().messageOwner.media.document, true, false); + cell.updateFileExistIcon(); + } else { + FileLoader.getInstance().cancelLoadFile(cell.getDocument().messageOwner.media.document); + cell.updateFileExistIcon(); + } + } + } + } + }); + mediaListView.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + scrolling = scrollState != SCROLL_STATE_IDLE; + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + if (visibleItemCount != 0 && firstVisibleItem + visibleItemCount > totalItemCount - 2 && !sharedMediaData[1].loading && !sharedMediaData[1].endReached) { + sharedMediaData[1].loading = true; + SharedMediaQuery.loadMedia(dialog_id, 0, 50, sharedMediaData[1].max_id, SharedMediaQuery.MEDIA_FILE, !sharedMediaData[1].cacheEndReached, classGuid); + } + } + }); + mediaListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView parent, View view, int i, long id) { + if (actionBar.isActionModeShowed() || i < 0 || i >= sharedMediaData[1].messages.size()) { + return false; + } + MessageObject item = sharedMediaData[1].messages.get(i); + selectedFiles.put(item.messageOwner.id, item); + selectedMessagesCountTextView.setText(String.format("%d", selectedFiles.size())); + if (Build.VERSION.SDK_INT >= 11) { + AnimatorSetProxy animatorSet = new AnimatorSetProxy(); + ArrayList animators = new ArrayList<>(); + for (int a = 0; a < actionModeViews.size(); a++) { + View view2 = actionModeViews.get(a); + AndroidUtilities.clearDrawableAnimation(view2); + if (a < 1) { + animators.add(ObjectAnimatorProxy.ofFloat(view2, "translationX", -AndroidUtilities.dp(56), 0)); + } else { + animators.add(ObjectAnimatorProxy.ofFloat(view2, "scaleY", 0.1f, 1.0f)); + } + } + animatorSet.playTogether(animators); + animatorSet.setDuration(250); + animatorSet.start(); + } + scrolling = false; + if (view instanceof SharedDocumentCell) { + ((SharedDocumentCell) view).setChecked(true, true); + } + actionBar.showActionMode(); + return true; + } + }); + + listView = new GridView(getParentActivity()); + listView.setPadding(AndroidUtilities.dp(2), 0, AndroidUtilities.dp(2), AndroidUtilities.dp(2)); + listView.setClipToPadding(false); + listView.setDrawSelectorOnTop(true); + listView.setVerticalSpacing(AndroidUtilities.dp(4)); + listView.setHorizontalSpacing(AndroidUtilities.dp(4)); + listView.setSelector(R.drawable.list_selector); + listView.setGravity(Gravity.CENTER); + listView.setNumColumns(GridView.AUTO_FIT); + listView.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); + frameLayout.addView(listView); + layoutParams = (FrameLayout.LayoutParams) listView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + listView.setLayoutParams(layoutParams); listView.setAdapter(listAdapter = new ListAdapter(getParentActivity())); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { - if (i < 0 || i >= messages.size()) { + if (i < 0 || i >= sharedMediaData[selectedMode].messages.size()) { return; } - PhotoViewer.getInstance().setParentActivity(getParentActivity()); - PhotoViewer.getInstance().openPhoto(messages, i, MediaActivity.this); + if (selectedMode == 0) { + PhotoViewer.getInstance().setParentActivity(getParentActivity()); + PhotoViewer.getInstance().openPhoto(sharedMediaData[selectedMode].messages, i, MediaActivity.this); + } else if (selectedMode == 1) { + + } } }); - if (loading && messages.isEmpty()) { - progressView.setVisibility(View.VISIBLE); - listView.setEmptyView(null); - } else { - progressView.setVisibility(View.GONE); - listView.setEmptyView(emptyView); - } - listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { @@ -147,12 +537,67 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - if (visibleItemCount != 0 && firstVisibleItem + visibleItemCount > totalItemCount - 2 && !loading && !endReached) { - loading = true; - MessagesController.getInstance().loadMedia(dialog_id, 0, 50, max_id, !cacheEndReached, classGuid); + if (visibleItemCount != 0 && firstVisibleItem + visibleItemCount > totalItemCount - 2 && !sharedMediaData[0].loading && !sharedMediaData[0].endReached) { + sharedMediaData[0].loading = true; + SharedMediaQuery.loadMedia(dialog_id, 0, 50, sharedMediaData[0].max_id, SharedMediaQuery.MEDIA_PHOTOVIDEO, !sharedMediaData[0].cacheEndReached, classGuid); } } }); + + emptyView = new LinearLayout(getParentActivity()); + emptyView.setOrientation(LinearLayout.VERTICAL); + emptyView.setGravity(Gravity.CENTER); + emptyView.setVisibility(View.GONE); + frameLayout.addView(emptyView); + layoutParams = (FrameLayout.LayoutParams) emptyView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + emptyView.setLayoutParams(layoutParams); + emptyView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return true; + } + }); + + emptyImageView = new ImageView(getParentActivity()); + emptyView.addView(emptyImageView); + layoutParams1 = (LinearLayout.LayoutParams) emptyImageView.getLayoutParams(); + layoutParams1.width = LinearLayout.LayoutParams.WRAP_CONTENT; + layoutParams1.height = LinearLayout.LayoutParams.WRAP_CONTENT; + emptyImageView.setLayoutParams(layoutParams1); + + emptyTextView = new TextView(getParentActivity()); + emptyTextView.setTextColor(0xff8a8a8a); + emptyTextView.setGravity(Gravity.CENTER); + emptyTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17); + emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), AndroidUtilities.dp(128)); + emptyView.addView(emptyTextView); + layoutParams1 = (LinearLayout.LayoutParams) emptyTextView.getLayoutParams(); + layoutParams1.topMargin = AndroidUtilities.dp(24); + layoutParams1.width = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams1.height = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams1.gravity = Gravity.CENTER; + emptyTextView.setLayoutParams(layoutParams1); + + progressView = new LinearLayout(getParentActivity()); + progressView.setGravity(Gravity.CENTER); + progressView.setOrientation(LinearLayout.VERTICAL); + progressView.setVisibility(View.GONE); + frameLayout.addView(progressView); + layoutParams = (FrameLayout.LayoutParams) progressView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + progressView.setLayoutParams(layoutParams); + + ProgressBar progressBar = new ProgressBar(getParentActivity()); + progressView.addView(progressBar); + layoutParams1 = (LinearLayout.LayoutParams) progressBar.getLayoutParams(); + layoutParams1.width = LinearLayout.LayoutParams.WRAP_CONTENT; + layoutParams1.height = LinearLayout.LayoutParams.WRAP_CONTENT; + progressBar.setLayoutParams(layoutParams1); + + switchToCurrentSelectedMode(); } else { ViewGroup parent = (ViewGroup)fragmentView.getParent(); if (parent != null) { @@ -166,98 +611,124 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No @Override public void didReceivedNotification(int id, Object... args) { if (id == NotificationCenter.mediaDidLoaded) { - long uid = (Long)args[0]; - int guid = (Integer)args[4]; + long uid = (Long) args[0]; + int guid = (Integer) args[4]; + int type = (Integer) args[5]; if (uid == dialog_id && guid == classGuid) { - loading = false; - totalCount = (Integer)args[1]; - @SuppressWarnings("uchecked") - ArrayList arr = (ArrayList)args[2]; + sharedMediaData[type].loading = false; + sharedMediaData[type].totalCount = (Integer) args[1]; + ArrayList arr = (ArrayList) args[2]; boolean added = false; - boolean enc = ((int)dialog_id) == 0; + boolean enc = ((int) dialog_id) == 0; for (MessageObject message : arr) { - if (!messagesDict.containsKey(message.messageOwner.id)) { + if (!sharedMediaData[type].messagesDict.containsKey(message.messageOwner.id)) { if (!enc) { if (message.messageOwner.id > 0) { - max_id = Math.min(message.messageOwner.id, max_id); + sharedMediaData[type].max_id = Math.min(message.messageOwner.id, sharedMediaData[type].max_id); } } else { - max_id = Math.max(message.messageOwner.id, max_id); + sharedMediaData[type].max_id = Math.max(message.messageOwner.id, sharedMediaData[type].max_id); } - messagesDict.put(message.messageOwner.id, message); - messages.add(message); + sharedMediaData[type].messagesDict.put(message.messageOwner.id, message); + sharedMediaData[type].messages.add(message); added = true; } } if (!added) { - endReached = true; + sharedMediaData[type].endReached = true; } - cacheEndReached = !(Boolean)args[3]; + sharedMediaData[type].cacheEndReached = !(Boolean) args[3]; if (progressView != null) { progressView.setVisibility(View.GONE); } - if (listView != null) { - if (listView.getEmptyView() == null) { - listView.setEmptyView(emptyView); + if (type == 0) { + if (listView != null) { + if (listView.getEmptyView() == null) { + listView.setEmptyView(emptyView); + } + } + } else if (type == 1) { + if (mediaListView != null) { + if (mediaListView.getEmptyView() == null) { + mediaListView.setEmptyView(emptyView); + } } } if (listAdapter != null) { listAdapter.notifyDataSetChanged(); } + if (documentsAdapter != null) { + scrolling = true; + documentsAdapter.notifyDataSetChanged(); + } } } else if (id == NotificationCenter.messagesDeleted) { - @SuppressWarnings("unchecked") - ArrayList markAsDeletedMessages = (ArrayList)args[0]; + ArrayList markAsDeletedMessages = (ArrayList) args[0]; boolean updated = false; for (Integer ids : markAsDeletedMessages) { - MessageObject obj = messagesDict.get(ids); - if (obj != null) { - messages.remove(obj); - messagesDict.remove(ids); - totalCount--; - updated = true; + for (SharedMediaData data : sharedMediaData) { + MessageObject obj = data.messagesDict.get(ids); + if (obj != null) { + data.messages.remove(obj); + data.messagesDict.remove(ids); + data.totalCount--; + updated = true; + } } } if (updated && listAdapter != null) { listAdapter.notifyDataSetChanged(); } + if (documentsAdapter != null) { + scrolling = true; + documentsAdapter.notifyDataSetChanged(); + } } else if (id == NotificationCenter.didReceivedNewMessages) { - long uid = (Long)args[0]; + long uid = (Long) args[0]; if (uid == dialog_id) { boolean markAsRead = false; - @SuppressWarnings("unchecked") - ArrayList arr = (ArrayList)args[1]; + ArrayList arr = (ArrayList) args[1]; for (MessageObject obj : arr) { - if (obj.messageOwner.media == null || !(obj.messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) && !(obj.messageOwner.media instanceof TLRPC.TL_messageMediaVideo)) { + if (obj.messageOwner.media == null) { continue; } - if (messagesDict.containsKey(obj.messageOwner.id)) { + int type = SharedMediaQuery.getMediaType(obj.messageOwner); + if (type == -1) { + return; + } + if (sharedMediaData[type].messagesDict.containsKey(obj.messageOwner.id)) { continue; } - boolean enc = ((int)dialog_id) == 0; + boolean enc = ((int) dialog_id) == 0; if (!enc) { if (obj.messageOwner.id > 0) { - max_id = Math.min(obj.messageOwner.id, max_id); + sharedMediaData[type].max_id = Math.min(obj.messageOwner.id, sharedMediaData[type].max_id); } } else { - max_id = Math.max(obj.messageOwner.id, max_id); + sharedMediaData[type].max_id = Math.max(obj.messageOwner.id, sharedMediaData[type].max_id); } - messagesDict.put(obj.messageOwner.id, obj); - messages.add(0, obj); + sharedMediaData[type].messagesDict.put(obj.messageOwner.id, obj); + sharedMediaData[type].messages.add(0, obj); } if (listAdapter != null) { listAdapter.notifyDataSetChanged(); } + if (documentsAdapter != null) { + scrolling = true; + documentsAdapter.notifyDataSetChanged(); + } } } else if (id == NotificationCenter.messageReceivedByServer) { - Integer msgId = (Integer)args[0]; - MessageObject obj = messagesDict.get(msgId); - if (obj != null) { - Integer newMsgId = (Integer)args[1]; - messagesDict.remove(msgId); - messagesDict.put(newMsgId, obj); - obj.messageOwner.id = newMsgId; + Integer msgId = (Integer) args[0]; + for (SharedMediaData data : sharedMediaData) { + MessageObject obj = data.messagesDict.get(msgId); + if (obj != null) { + Integer newMsgId = (Integer) args[1]; + data.messagesDict.remove(msgId); + data.messagesDict.put(newMsgId, obj); + obj.messageOwner.id = newMsgId; + } } } } @@ -268,6 +739,10 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No if (listAdapter != null) { listAdapter.notifyDataSetChanged(); } + if (documentsAdapter != null) { + scrolling = true; + documentsAdapter.notifyDataSetChanged(); + } fixLayout(); } @@ -289,10 +764,10 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No BackupImageView imageView = (BackupImageView)view.findViewById(R.id.media_photo_image); if (imageView != null) { int num = (Integer)imageView.getTag(); - if (num < 0 || num >= messages.size()) { + if (num < 0 || num >= sharedMediaData[0].messages.size()) { continue; } - MessageObject message = messages.get(num); + MessageObject message = sharedMediaData[0].messages.get(num); if (message != null && message.messageOwner.id == messageObject.messageOwner.id) { int coords[] = new int[2]; imageView.getLocationInWindow(coords); @@ -335,6 +810,56 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No @Override public int getSelectedCount() { return 0; } + private void switchToCurrentSelectedMode() { + if (selectedMode == 0) { + mediaListView.setEmptyView(null); + mediaListView.setVisibility(View.GONE); + mediaListView.setAdapter(null); + + listView.setAdapter(listAdapter); + + dropDown.setText(LocaleController.getString("SharedMedia", R.string.SharedMedia)); + emptyImageView.setImageResource(R.drawable.tip1); + emptyTextView.setText(LocaleController.getString("NoMedia", R.string.NoMedia)); + searchItem.setVisibility(View.GONE); + if (sharedMediaData[selectedMode].loading && sharedMediaData[selectedMode].messages.isEmpty()) { + progressView.setVisibility(View.VISIBLE); + listView.setEmptyView(null); + emptyView.setVisibility(View.GONE); + } else { + progressView.setVisibility(View.GONE); + listView.setEmptyView(emptyView); + } + listView.setVisibility(View.VISIBLE); + } else if (selectedMode == 1) { + listView.setEmptyView(null); + listView.setVisibility(View.GONE); + listView.setAdapter(null); + + mediaListView.setAdapter(documentsAdapter); + + dropDown.setText(LocaleController.getString("DocumentsTitle", R.string.DocumentsTitle)); + int lower_id = (int) dialog_id; + emptyImageView.setImageResource(R.drawable.tip2); + emptyTextView.setText(LocaleController.getString("NoSharedFiles", R.string.NoSharedFiles)); + //searchItem.setVisibility(View.VISIBLE); + if (!sharedMediaData[1].loading && !sharedMediaData[1].endReached && sharedMediaData[1].messages.isEmpty()) { + sharedMediaData[selectedMode].loading = true; + SharedMediaQuery.loadMedia(dialog_id, 0, 50, 0, SharedMediaQuery.MEDIA_FILE, true, classGuid); + } + mediaListView.setVisibility(View.VISIBLE); + + if (sharedMediaData[selectedMode].loading && sharedMediaData[selectedMode].messages.isEmpty()) { + progressView.setVisibility(View.VISIBLE); + mediaListView.setEmptyView(null); + emptyView.setVisibility(View.GONE); + } else { + progressView.setVisibility(View.GONE); + mediaListView.setEmptyView(emptyView); + } + } + } + private void fixLayout() { if (listView != null) { ViewTreeObserver obs = listView.getViewTreeObserver(); @@ -348,30 +873,121 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No listView.setNumColumns(4); itemWidth = AndroidUtilities.dp(490) / 4 - AndroidUtilities.dp(2) * 3; listView.setColumnWidth(itemWidth); + emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), AndroidUtilities.dp(128)); } else { if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) { listView.setNumColumns(6); itemWidth = AndroidUtilities.displaySize.x / 6 - AndroidUtilities.dp(2) * 5; listView.setColumnWidth(itemWidth); + emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), 0); } else { listView.setNumColumns(4); itemWidth = AndroidUtilities.displaySize.x / 4 - AndroidUtilities.dp(2) * 3; listView.setColumnWidth(itemWidth); + emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), AndroidUtilities.dp(128)); } } listView.setPadding(listView.getPaddingLeft(), AndroidUtilities.dp(4), listView.getPaddingRight(), listView.getPaddingBottom()); listAdapter.notifyDataSetChanged(); + listView.getViewTreeObserver().removeOnPreDrawListener(this); - if (listView != null) { - listView.getViewTreeObserver().removeOnPreDrawListener(this); + if (dropDownContainer != null) { + if (!AndroidUtilities.isTablet()) { + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) dropDownContainer.getLayoutParams(); + layoutParams.topMargin = (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0); + dropDownContainer.setLayoutParams(layoutParams); + } + + if (!AndroidUtilities.isTablet() && ApplicationLoader.applicationContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { + dropDown.setTextSize(18); + } else { + dropDown.setTextSize(20); + } } - return false; } }); } } + private class SharedDocumentsAdapter extends BaseFragmentAdapter { + private Context mContext; + + public SharedDocumentsAdapter(Context context) { + mContext = context; + } + + @Override + public boolean areAllItemsEnabled() { + return false; + } + + @Override + public boolean isEnabled(int i) { + return i != sharedMediaData[1].messages.size(); + } + + @Override + public int getCount() { + return sharedMediaData[1].messages.size() + (sharedMediaData[1].messages.isEmpty() || sharedMediaData[1].endReached ? 0 : 1); + } + + @Override + public Object getItem(int i) { + return null; + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + int type = getItemViewType(i); + if (type == 0) { + if (view == null) { + view = new SharedDocumentCell(mContext); + } + SharedDocumentCell sharedDocumentCell = (SharedDocumentCell) view; + sharedDocumentCell.setDocument(sharedMediaData[1].messages.get(i), i != sharedMediaData[1].messages.size() - 1 || sharedMediaData[1].loading); + if (actionBar.isActionModeShowed()) { + sharedDocumentCell.setChecked(selectedFiles.containsKey(sharedMediaData[1].messages.get(i).messageOwner.id), !scrolling); + } else { + sharedDocumentCell.setChecked(false, !scrolling); + } + } else if (type == 1) { + if (view == null) { + view = new LoadingCell(mContext); + } + } + return view; + } + + @Override + public int getItemViewType(int i) { + if (i == sharedMediaData[1].messages.size()) { + return 1; + } + return 0; + } + + @Override + public int getViewTypeCount() { + return 2; + } + + @Override + public boolean isEmpty() { + return sharedMediaData[1].messages.isEmpty(); + } + } + private class ListAdapter extends BaseFragmentAdapter { private Context mContext; @@ -386,12 +1002,12 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No @Override public boolean isEnabled(int i) { - return i != messages.size(); + return i != sharedMediaData[0].messages.size(); } @Override public int getCount() { - return messages.size() + (messages.isEmpty() || endReached ? 0 : 1); + return sharedMediaData[0].messages.size() + (sharedMediaData[0].messages.isEmpty() || sharedMediaData[0].endReached ? 0 : 1); } @Override @@ -406,14 +1022,14 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No @Override public boolean hasStableIds() { - return false; + return true; } @Override public View getView(int i, View view, ViewGroup viewGroup) { int type = getItemViewType(i); if (type == 0) { - MessageObject message = messages.get(i); + MessageObject message = sharedMediaData[0].messages.get(i); if (view == null) { LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = li.inflate(R.layout.media_photo_layout, viewGroup, false); @@ -426,20 +1042,18 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No BackupImageView imageView = (BackupImageView)view.findViewById(R.id.media_photo_image); imageView.setTag(i); + imageView.imageReceiver.setParentMessageObject(message); + imageView.imageReceiver.setNeedsQualityThumb(true); + imageView.imageReceiver.setShouldGenerateQualityThumb(true); if (message.messageOwner.media != null && message.messageOwner.media.photo != null && !message.messageOwner.media.photo.sizes.isEmpty()) { - ArrayList sizes = message.messageOwner.media.photo.sizes; - if (message.imagePreview != null) { - imageView.setImageBitmap(message.imagePreview); - } else { - TLRPC.PhotoSize photoSize = FileLoader.getClosestPhotoSizeWithSize(message.messageOwner.media.photo.sizes, 80); - imageView.setImage(photoSize.location, null, mContext.getResources().getDrawable(R.drawable.photo_placeholder_in)); - } + TLRPC.PhotoSize photoSize = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, 80); + imageView.setImage(null, null, null, mContext.getResources().getDrawable(R.drawable.photo_placeholder_in), null, photoSize.location, "b", 0); } else { imageView.setImageResource(R.drawable.photo_placeholder_in); } imageView.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(message), false); } else if (type == 1) { - MessageObject message = messages.get(i); + MessageObject message = sharedMediaData[0].messages.get(i); if (view == null) { LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = li.inflate(R.layout.media_video_layout, viewGroup, false); @@ -453,16 +1067,16 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No BackupImageView imageView = (BackupImageView)view.findViewById(R.id.media_photo_image); imageView.setTag(i); + imageView.imageReceiver.setParentMessageObject(message); + imageView.imageReceiver.setNeedsQualityThumb(true); + imageView.imageReceiver.setShouldGenerateQualityThumb(true); if (message.messageOwner.media.video != null && message.messageOwner.media.video.thumb != null) { int duration = message.messageOwner.media.video.duration; int minutes = duration / 60; int seconds = duration - minutes * 60; textView.setText(String.format("%d:%02d", minutes, seconds)); - if (message.imagePreview != null) { - imageView.setImageBitmap(message.imagePreview); - } else { - imageView.setImage(message.messageOwner.media.video.thumb.location, null, mContext.getResources().getDrawable(R.drawable.photo_placeholder_in)); - } + TLRPC.FileLocation location = message.messageOwner.media.video.thumb.location; + imageView.setImage(null, null, null, mContext.getResources().getDrawable(R.drawable.photo_placeholder_in), null, location, "b", 0); textView.setVisibility(View.VISIBLE); } else { textView.setVisibility(View.GONE); @@ -484,10 +1098,10 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No @Override public int getItemViewType(int i) { - if (i == messages.size()) { + if (i == sharedMediaData[0].messages.size()) { return 2; } - MessageObject message = messages.get(i); + MessageObject message = sharedMediaData[0].messages.get(i); if (message.messageOwner.media instanceof TLRPC.TL_messageMediaVideo) { return 1; } @@ -501,7 +1115,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No @Override public boolean isEmpty() { - return messages.isEmpty(); + return sharedMediaData[0].messages.isEmpty(); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java index 4846282c1..d79c4cfe3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java @@ -8,9 +8,12 @@ package org.telegram.ui; +import android.animation.ObjectAnimator; +import android.animation.StateListAnimator; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.res.Configuration; +import android.graphics.Outline; import android.os.Build; import android.os.Bundle; import android.view.Gravity; @@ -18,6 +21,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewOutlineProvider; import android.view.ViewTreeObserver; import android.view.animation.AccelerateDecelerateInterpolator; import android.widget.AbsListView; @@ -102,6 +106,8 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded); NotificationCenter.getInstance().addObserver(this, NotificationCenter.appDidLogout); NotificationCenter.getInstance().addObserver(this, NotificationCenter.openedChatChanged); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.notificationsSettingsUpdated); + if (getArguments() != null) { onlySelect = arguments.getBoolean("onlySelect", false); serverOnly = arguments.getBoolean("serverOnly", false); @@ -126,6 +132,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter NotificationCenter.getInstance().removeObserver(this, NotificationCenter.contactsDidLoaded); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.appDidLogout); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.openedChatChanged); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.notificationsSettingsUpdated); delegate = null; } @@ -273,8 +280,21 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter textView = (TextView)fragmentView.findViewById(R.id.search_empty_text); textView.setText(LocaleController.getString("NoResult", R.string.NoResult)); - floatingButton = (ImageView)fragmentView.findViewById(R.id.floating_button); + floatingButton = (ImageView) fragmentView.findViewById(R.id.floating_button); floatingButton.setVisibility(onlySelect ? View.GONE : View.VISIBLE); + floatingButton.setScaleType(ImageView.ScaleType.CENTER); + if (Build.VERSION.SDK_INT >= 21) { + StateListAnimator animator = new StateListAnimator(); + animator.addState(new int[] {android.R.attr.state_pressed}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200)); + animator.addState(new int[] {}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200)); + floatingButton.setStateListAnimator(animator); + floatingButton.setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56)); + } + }); + } FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams)floatingButton.getLayoutParams(); layoutParams.leftMargin = LocaleController.isRTL ? AndroidUtilities.dp(14) : 0; layoutParams.rightMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(14); @@ -595,6 +615,10 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter } updateVisibleRows(MessagesController.UPDATE_MASK_SELECT_DIALOG); } + } else if (id == NotificationCenter.notificationsSettingsUpdated) { + if (messagesListView != null) { + updateVisibleRows(0); + } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java index 1a5eba5fb..61646ad1e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java @@ -281,7 +281,9 @@ public class PhotoAlbumPickerActivity extends BaseFragment implements Notificati ArrayList photos = new ArrayList<>(); for (HashMap.Entry entry : selectedPhotos.entrySet()) { MediaController.PhotoEntry photoEntry = entry.getValue(); - if (photoEntry.path != null) { + if (photoEntry.imagePath != null) { + photos.add(photoEntry.imagePath); + } else if (photoEntry.path != null) { photos.add(photoEntry.path); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoCropActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoCropActivity.java index 826229517..910b4f444 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoCropActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoCropActivity.java @@ -35,8 +35,8 @@ import java.io.File; public class PhotoCropActivity extends BaseFragment { - public interface PhotoCropActivityDelegate { - public abstract void didFinishCrop(Bitmap bitmap); + public interface PhotoEditActivityDelegate { + public abstract void didFinishEdit(Bitmap bitmap, Bundle args); } private class PhotoCropView extends FrameLayout { @@ -44,12 +44,14 @@ public class PhotoCropActivity extends BaseFragment { Paint rectPaint = null; Paint circlePaint = null; Paint halfPaint = null; - float rectSize = 600; + float rectSizeX = 600; + float rectSizeY = 600; float rectX = -1, rectY = -1; int draggingState = 0; float oldX = 0, oldY = 0; int bitmapWidth, bitmapHeight, bitmapX, bitmapY; int viewWidth, viewHeight; + boolean freeform; public PhotoCropView(Context context) { super(context); @@ -68,14 +70,14 @@ public class PhotoCropActivity extends BaseFragment { private void init() { rectPaint = new Paint(); - rectPaint.setColor(0xfffafafa); + rectPaint.setColor(0x3ffafafa); rectPaint.setStrokeWidth(AndroidUtilities.dp(2)); rectPaint.setStyle(Paint.Style.STROKE); circlePaint = new Paint(); - circlePaint.setColor(0x7fffffff); + circlePaint.setColor(0xffffffff); halfPaint = new Paint(); - halfPaint.setColor(0x3f000000); - setBackgroundColor(0xff000000); + halfPaint.setColor(0xc8000000); + setBackgroundColor(0xff333333); setOnTouchListener(new OnTouchListener() { @Override @@ -86,13 +88,13 @@ public class PhotoCropActivity extends BaseFragment { if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { if (rectX - cornerSide < x && rectX + cornerSide > x && rectY - cornerSide < y && rectY + cornerSide > y) { draggingState = 1; - } else if (rectX - cornerSide + rectSize < x && rectX + cornerSide + rectSize > x && rectY - cornerSide < y && rectY + cornerSide > y) { + } else if (rectX - cornerSide + rectSizeX < x && rectX + cornerSide + rectSizeX > x && rectY - cornerSide < y && rectY + cornerSide > y) { draggingState = 2; - } else if (rectX - cornerSide < x && rectX + cornerSide > x && rectY - cornerSide + rectSize < y && rectY + cornerSide + rectSize > y) { + } else if (rectX - cornerSide < x && rectX + cornerSide > x && rectY - cornerSide + rectSizeY < y && rectY + cornerSide + rectSizeY > y) { draggingState = 3; - } else if (rectX - cornerSide + rectSize < x && rectX + cornerSide + rectSize > x && rectY - cornerSide + rectSize < y && rectY + cornerSide + rectSize > y) { + } else if (rectX - cornerSide + rectSizeX < x && rectX + cornerSide + rectSizeX > x && rectY - cornerSide + rectSizeY < y && rectY + cornerSide + rectSizeY > y) { draggingState = 4; - } else if (rectX < x && rectX + rectSize > x && rectY < y && rectY + rectSize > y) { + } else if (rectX < x && rectX + rectSizeX > x && rectY < y && rectY + rectSizeY > y) { draggingState = 5; } else { draggingState = 0; @@ -113,61 +115,115 @@ public class PhotoCropActivity extends BaseFragment { if (rectX < bitmapX) { rectX = bitmapX; - } else if (rectX + rectSize > bitmapX + bitmapWidth) { - rectX = bitmapX + bitmapWidth - rectSize; + } else if (rectX + rectSizeX > bitmapX + bitmapWidth) { + rectX = bitmapX + bitmapWidth - rectSizeX; } if (rectY < bitmapY) { rectY = bitmapY; - } else if (rectY + rectSize > bitmapY + bitmapHeight) { - rectY = bitmapY + bitmapHeight - rectSize; + } else if (rectY + rectSizeY > bitmapY + bitmapHeight) { + rectY = bitmapY + bitmapHeight - rectSizeY; } - } else if (draggingState == 1) { - if (rectSize - diffX < 160) { - diffX = rectSize - 160; - } - if (rectX + diffX < bitmapX) { - diffX = bitmapX - rectX; - } - if (rectY + diffX < bitmapY) { - diffX = bitmapY - rectY; - } - rectX += diffX; - rectY += diffX; - rectSize -= diffX; - } else if (draggingState == 2) { - if (rectSize + diffX < 160) { - diffX = -(rectSize - 160); - } - if (rectX + rectSize + diffX > bitmapX + bitmapWidth) { - diffX = bitmapX + bitmapWidth - rectX - rectSize; - } - if (rectY - diffX < bitmapY) { - diffX = rectY - bitmapY; - } - rectY -= diffX; - rectSize += diffX; - } else if (draggingState == 3) { - if (rectSize - diffX < 160) { - diffX = rectSize - 160; - } - if (rectX + diffX < bitmapX) { - diffX = bitmapX - rectX; - } - if (rectY + rectSize - diffX > bitmapY + bitmapHeight) { - diffX = rectY + rectSize - bitmapY - bitmapHeight; - } - rectX += diffX; - rectSize -= diffX; - } else if (draggingState == 4) { - if (rectX + rectSize + diffX > bitmapX + bitmapWidth) { - diffX = bitmapX + bitmapWidth - rectX - rectSize; - } - if (rectY + rectSize + diffX > bitmapY + bitmapHeight) { - diffX = bitmapY + bitmapHeight - rectY - rectSize; - } - rectSize += diffX; - if (rectSize < 160) { - rectSize = 160; + } else { + if (draggingState == 1) { + if (rectSizeX - diffX < 160) { + diffX = rectSizeX - 160; + } + if (rectX + diffX < bitmapX) { + diffX = bitmapX - rectX; + } + if (!freeform) { + if (rectY + diffX < bitmapY) { + diffX = bitmapY - rectY; + } + rectX += diffX; + rectY += diffX; + rectSizeX -= diffX; + rectSizeY -= diffX; + } else { + if (rectSizeY - diffY < 160) { + diffY = rectSizeY - 160; + } + if (rectY + diffY < bitmapY) { + diffY = bitmapY - rectY; + } + rectX += diffX; + rectY += diffY; + rectSizeX -= diffX; + rectSizeY -= diffY; + } + } else if (draggingState == 2) { + if (rectSizeX + diffX < 160) { + diffX = -(rectSizeX - 160); + } + if (rectX + rectSizeX + diffX > bitmapX + bitmapWidth) { + diffX = bitmapX + bitmapWidth - rectX - rectSizeX; + } + if (!freeform) { + if (rectY - diffX < bitmapY) { + diffX = rectY - bitmapY; + } + rectY -= diffX; + rectSizeX += diffX; + rectSizeY += diffX; + } else { + if (rectSizeY - diffY < 160) { + diffY = rectSizeY - 160; + } + if (rectY + diffY < bitmapY) { + diffY = bitmapY - rectY; + } + rectY += diffY; + rectSizeX += diffX; + rectSizeY -= diffY; + } + } else if (draggingState == 3) { + if (rectSizeX - diffX < 160) { + diffX = rectSizeX - 160; + } + if (rectX + diffX < bitmapX) { + diffX = bitmapX - rectX; + } + if (!freeform) { + if (rectY + rectSizeX - diffX > bitmapY + bitmapHeight) { + diffX = rectY + rectSizeX - bitmapY - bitmapHeight; + } + rectX += diffX; + rectSizeX -= diffX; + rectSizeY -= diffX; + } else { + if (rectY + rectSizeY + diffY > bitmapY + bitmapHeight) { + diffY = bitmapY + bitmapHeight - rectY - rectSizeY; + } + rectX += diffX; + rectSizeX -= diffX; + rectSizeY += diffY; + if (rectSizeY < 160) { + rectSizeY = 160; + } + } + } else if (draggingState == 4) { + if (rectX + rectSizeX + diffX > bitmapX + bitmapWidth) { + diffX = bitmapX + bitmapWidth - rectX - rectSizeX; + } + if (!freeform) { + if (rectY + rectSizeX + diffX > bitmapY + bitmapHeight) { + diffX = bitmapY + bitmapHeight - rectY - rectSizeX; + } + rectSizeX += diffX; + rectSizeY += diffX; + } else { + if (rectY + rectSizeY + diffY > bitmapY + bitmapHeight) { + diffY = bitmapY + bitmapHeight - rectY - rectSizeY; + } + rectSizeX += diffX; + rectSizeY += diffY; + } + if (rectSizeX < 160) { + rectSizeX = 160; + } + if (rectSizeY < 160) { + rectSizeY = 160; + } } } @@ -186,7 +242,8 @@ public class PhotoCropActivity extends BaseFragment { } float percX = (rectX - bitmapX) / bitmapWidth; float percY = (rectY - bitmapY) / bitmapHeight; - float percSize = rectSize / bitmapWidth; + float percSizeX = rectSizeX / bitmapWidth; + float percSizeY = rectSizeY / bitmapHeight; float w = imageToCrop.getWidth(); float h = imageToCrop.getHeight(); float scaleX = viewWidth / w; @@ -198,23 +255,33 @@ public class PhotoCropActivity extends BaseFragment { bitmapWidth = viewWidth; bitmapHeight = (int)Math.ceil(h * scaleX); } - bitmapX = (viewWidth - bitmapWidth) / 2; - bitmapY = (viewHeight - bitmapHeight) / 2; + bitmapX = (viewWidth - bitmapWidth) / 2 + AndroidUtilities.dp(14); + bitmapY = (viewHeight - bitmapHeight) / 2 + AndroidUtilities.dp(14); if (rectX == -1 && rectY == -1) { - if (bitmapWidth > bitmapHeight) { + if (freeform) { rectY = bitmapY; - rectX = (viewWidth - bitmapHeight) / 2; - rectSize = bitmapHeight; - } else { rectX = bitmapX; - rectY = (viewHeight - bitmapWidth) / 2; - rectSize = bitmapWidth; + rectSizeX = bitmapWidth; + rectSizeY = bitmapHeight; + } else { + if (bitmapWidth > bitmapHeight) { + rectY = bitmapY; + rectX = (viewWidth - bitmapHeight) / 2 + AndroidUtilities.dp(14); + rectSizeX = bitmapHeight; + rectSizeY = bitmapHeight; + } else { + rectX = bitmapX; + rectY = (viewHeight - bitmapWidth) / 2 + AndroidUtilities.dp(14); + rectSizeX = bitmapWidth; + rectSizeY = bitmapWidth; + } } } else { rectX = percX * bitmapWidth + bitmapX; rectY = percY * bitmapHeight + bitmapY; - rectSize = percSize * bitmapWidth; + rectSizeX = percSizeX * bitmapWidth; + rectSizeY = percSizeY * bitmapHeight; } invalidate(); } @@ -222,31 +289,33 @@ public class PhotoCropActivity extends BaseFragment { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - viewWidth = right - left; - viewHeight = bottom - top; + viewWidth = right - left - AndroidUtilities.dp(28); + viewHeight = bottom - top - AndroidUtilities.dp(28); updateBitmapSize(); } public Bitmap getBitmap() { float percX = (rectX - bitmapX) / bitmapWidth; float percY = (rectY - bitmapY) / bitmapHeight; - float percSize = rectSize / bitmapWidth; + float percSizeX = rectSizeX / bitmapWidth; + float percSizeY = rectSizeY / bitmapWidth; int x = (int)(percX * imageToCrop.getWidth()); int y = (int)(percY * imageToCrop.getHeight()); - int size = (int)(percSize * imageToCrop.getWidth()); - if (x + size > imageToCrop.getWidth()) { - size = imageToCrop.getWidth() - x; + int sizeX = (int)(percSizeX * imageToCrop.getWidth()); + int sizeY = (int)(percSizeY * imageToCrop.getWidth()); + if (x + sizeX > imageToCrop.getWidth()) { + sizeX = imageToCrop.getWidth() - x; } - if (y + size > imageToCrop.getHeight()) { - size = imageToCrop.getHeight() - y; + if (y + sizeY > imageToCrop.getHeight()) { + sizeY = imageToCrop.getHeight() - y; } try { - return Bitmap.createBitmap(imageToCrop, x, y, size, size); + return Bitmap.createBitmap(imageToCrop, x, y, sizeX, sizeY); } catch (Throwable e) { FileLog.e("tmessags", e); System.gc(); try { - return Bitmap.createBitmap(imageToCrop, x, y, size, size); + return Bitmap.createBitmap(imageToCrop, x, y, sizeX, sizeY); } catch (Throwable e2) { FileLog.e("tmessages", e2); } @@ -261,26 +330,39 @@ public class PhotoCropActivity extends BaseFragment { drawable.draw(canvas); } canvas.drawRect(bitmapX, bitmapY, bitmapX + bitmapWidth, rectY, halfPaint); - canvas.drawRect(bitmapX, rectY, rectX, rectY + rectSize, halfPaint); - canvas.drawRect(rectX + rectSize, rectY, bitmapX + bitmapWidth, rectY + rectSize, halfPaint); - canvas.drawRect(bitmapX, rectY + rectSize, bitmapX + bitmapWidth, bitmapY + bitmapHeight, halfPaint); + canvas.drawRect(bitmapX, rectY, rectX, rectY + rectSizeY, halfPaint); + canvas.drawRect(rectX + rectSizeX, rectY, bitmapX + bitmapWidth, rectY + rectSizeY, halfPaint); + canvas.drawRect(bitmapX, rectY + rectSizeY, bitmapX + bitmapWidth, bitmapY + bitmapHeight, halfPaint); - canvas.drawRect(rectX, rectY, rectX + rectSize, rectY + rectSize, rectPaint); + canvas.drawRect(rectX, rectY, rectX + rectSizeX, rectY + rectSizeY, rectPaint); - int side = AndroidUtilities.dp(7); - canvas.drawRect(rectX - side, rectY - side, rectX + side, rectY + side, circlePaint); - canvas.drawRect(rectX + rectSize - side, rectY - side, rectX + rectSize + side, rectY + side, circlePaint); - canvas.drawRect(rectX - side, rectY + rectSize - side, rectX + side, rectY + rectSize + side, circlePaint); - canvas.drawRect(rectX + rectSize - side, rectY + rectSize - side, rectX + rectSize + side, rectY + rectSize + side, circlePaint); + int side = AndroidUtilities.dp(1); + canvas.drawRect(rectX + side, rectY + side, rectX + side + AndroidUtilities.dp(20), rectY + side * 3, circlePaint); + canvas.drawRect(rectX + side, rectY + side, rectX + side * 3, rectY + side + AndroidUtilities.dp(20), circlePaint); + + canvas.drawRect(rectX + rectSizeX - side - AndroidUtilities.dp(20), rectY + side, rectX + rectSizeX - side, rectY + side * 3, circlePaint); + canvas.drawRect(rectX + rectSizeX - side * 3, rectY + side, rectX + rectSizeX - side, rectY + side + AndroidUtilities.dp(20), circlePaint); + + canvas.drawRect(rectX + side, rectY + rectSizeY - side - AndroidUtilities.dp(20), rectX + side * 3, rectY + rectSizeY - side, circlePaint); + canvas.drawRect(rectX + side, rectY + rectSizeY - side * 3, rectX + side + AndroidUtilities.dp(20), rectY + rectSizeY - side, circlePaint); + + canvas.drawRect(rectX + rectSizeX - side - AndroidUtilities.dp(20), rectY + rectSizeY - side * 3, rectX + rectSizeX - side, rectY + rectSizeY - side, circlePaint); + canvas.drawRect(rectX + rectSizeX - side * 3, rectY + rectSizeY - side - AndroidUtilities.dp(20), rectX + rectSizeX - side, rectY + rectSizeY - side, circlePaint); + + for (int a = 1; a < 3; a++) { + canvas.drawRect(rectX + rectSizeX / 3 * a, rectY + side, rectX + side + rectSizeX / 3 * a, rectY + rectSizeY - side, circlePaint); + canvas.drawRect(rectX + side, rectY + rectSizeY / 3 * a, rectX - side + rectSizeX, rectY + rectSizeY / 3 * a + side, circlePaint); + } } } private Bitmap imageToCrop; private BitmapDrawable drawable; - private PhotoCropActivityDelegate delegate = null; + private PhotoEditActivityDelegate delegate = null; private PhotoCropView view; private boolean sameBitmap = false; private boolean doneButtonPressed = false; + private String bitmapKey; private final static int done_button = 1; @@ -288,29 +370,40 @@ public class PhotoCropActivity extends BaseFragment { super(args); } + public PhotoCropActivity(Bundle args, Bitmap bitmap, String key) { + super(args); + imageToCrop = bitmap; + bitmapKey = key; + if (imageToCrop != null && key != null) { + ImageLoader.getInstance().incrementUseCount(key); + } + } + @Override public boolean onFragmentCreate() { swipeBackEnabled = false; - String photoPath = getArguments().getString("photoPath"); - Uri photoUri = getArguments().getParcelable("photoUri"); - if (photoPath == null && photoUri == null) { - return false; - } - if (photoPath != null) { - File f = new File(photoPath); - if (!f.exists()) { + if (imageToCrop == null) { + String photoPath = getArguments().getString("photoPath"); + Uri photoUri = getArguments().getParcelable("photoUri"); + if (photoPath == null && photoUri == null) { + return false; + } + if (photoPath != null) { + File f = new File(photoPath); + if (!f.exists()) { + return false; + } + } + int size = 0; + if (AndroidUtilities.isTablet()) { + size = AndroidUtilities.dp(520); + } else { + size = Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y); + } + imageToCrop = ImageLoader.loadBitmap(photoPath, photoUri, size, size, true); + if (imageToCrop == null) { return false; } - } - int size = 0; - if (AndroidUtilities.isTablet()) { - size = AndroidUtilities.dp(520); - } else { - size = Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y); - } - imageToCrop = ImageLoader.loadBitmap(photoPath, photoUri, size, size); - if (imageToCrop == null) { - return false; } drawable = new BitmapDrawable(imageToCrop); super.onFragmentCreate(); @@ -321,7 +414,12 @@ public class PhotoCropActivity extends BaseFragment { public void onFragmentDestroy() { super.onFragmentDestroy(); drawable = null; - if (imageToCrop != null && !sameBitmap) { + if (bitmapKey != null) { + if (ImageLoader.getInstance().decrementUseCount(bitmapKey) && !ImageLoader.getInstance().isInCache(bitmapKey)) { + bitmapKey = null; + } + } + if (bitmapKey == null && imageToCrop != null && !sameBitmap) { imageToCrop.recycle(); imageToCrop = null; } @@ -330,6 +428,8 @@ public class PhotoCropActivity extends BaseFragment { @Override public View createView(LayoutInflater inflater, ViewGroup container) { if (fragmentView == null) { + actionBar.setBackgroundColor(0xff333333); + actionBar.setItemsBackground(R.drawable.bar_selector_picker); actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setAllowOverlayTitle(true); actionBar.setTitle(LocaleController.getString("CropImage", R.string.CropImage)); @@ -344,7 +444,7 @@ public class PhotoCropActivity extends BaseFragment { if (bitmap == imageToCrop) { sameBitmap = true; } - delegate.didFinishCrop(bitmap); + delegate.didFinishEdit(bitmap, getArguments()); doneButtonPressed = true; } finishFragment(); @@ -356,6 +456,7 @@ public class PhotoCropActivity extends BaseFragment { menu.addItemWithWidth(done_button, R.drawable.ic_done, AndroidUtilities.dp(56)); fragmentView = view = new PhotoCropView(getParentActivity()); + ((PhotoCropView) fragmentView).freeform = getArguments().getBoolean("freeform", false); fragmentView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); } else { ViewGroup parent = (ViewGroup)fragmentView.getParent(); @@ -366,7 +467,7 @@ public class PhotoCropActivity extends BaseFragment { return fragmentView; } - public void setDelegate(PhotoCropActivityDelegate delegate) { + public void setDelegate(PhotoEditActivityDelegate delegate) { this.delegate = delegate; } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoEditorActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoEditorActivity.java new file mode 100644 index 000000000..5e0ff8f4e --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoEditorActivity.java @@ -0,0 +1,1285 @@ +/* + * This is the source code of Telegram for Android v. 2.0.x. + * It is licensed under GNU GPL v. 2 or later. + * You should have received a copy of the license in this archive (see LICENSE). + * + * Copyright Nikolai Kudashov, 2013-2014. + */ + +package org.telegram.ui; + +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.net.Uri; +import android.opengl.GLES20; +import android.opengl.GLSurfaceView; +import android.opengl.GLUtils; +import android.os.Build; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.DecelerateInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.SeekBar; + +import org.telegram.android.AndroidUtilities; +import org.telegram.android.ImageLoader; +import org.telegram.android.LocaleController; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.R; +import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarMenu; +import org.telegram.ui.ActionBar.ActionBarMenuItem; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.AnimationCompat.AnimatorListenerAdapterProxy; +import org.telegram.ui.AnimationCompat.AnimatorSetProxy; +import org.telegram.ui.AnimationCompat.ObjectAnimatorProxy; +import org.telegram.ui.AnimationCompat.ViewProxy; +import org.telegram.ui.Cells.PhotoEditToolCell; +import org.telegram.ui.Components.RecyclerListView; + +import java.io.File; +import java.lang.reflect.Field; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; + +import javax.microedition.khronos.opengles.GL10; + +public class PhotoEditorActivity extends BaseFragment { + + private GLSurfaceView glView; + private PhotoCropView cropView; + + private SeekBar valueSeekBar; + private LinearLayout toolsView; + private LinearLayout cropButtonsView; + private ImageView imageView; + private ImageView filtersButton; + private ImageView toolButton; + private AnimatorSetProxy rotationAnimation; + + private ActionBarMenuItem doneButton; + private ActionBarMenuItem sizeButton; + private ActionBarMenuItem rotateButton; + + private boolean sameBitmap = false; + private int currentMode = 0; + private boolean freeformCrop; + private boolean onlyCrop; + + private PhotoCropActivity.PhotoEditActivityDelegate delegate; + + private int selectedTool = 0; + private int rotateDegree = 0; + + private Bitmap bitmapToEdit; + private String bitmapKey; + + private float highlightsValue = 0; //0 100 + private float contrastValue = 0; //-100 100 + private float shadowsValue = 0; //0 100 + private float exposureValue = 0; //-100 100 + private float saturationValue = 0; //-100 100 + private float warmthValue = 0; //-100 100 + private float vignetteValue = 0; //0 100 + private float grainValue = 0; //0 100 + private float width = 0; + private float height = 0; + + private boolean donePressed = false; + + private final static int done_button = 1; + private final static int rotate_button = 2; + private final static int size_button = 3; + + private class PhotoCropView extends FrameLayout { + + private Paint rectPaint; + private Paint circlePaint; + private Paint halfPaint; + private Paint shadowPaint; + private float rectSizeX = 600; + private float rectSizeY = 600; + private int draggingState = 0; + private float oldX = 0, oldY = 0; + private int bitmapWidth = 1, bitmapHeight = 1, bitmapX, bitmapY; + private float rectX = -1, rectY = -1; + + public PhotoCropView(Context context) { + super(context); + + rectPaint = new Paint(); + rectPaint.setColor(0xb2ffffff); + rectPaint.setStrokeWidth(AndroidUtilities.dp(2)); + rectPaint.setStyle(Paint.Style.STROKE); + circlePaint = new Paint(); + circlePaint.setColor(0xffffffff); + halfPaint = new Paint(); + halfPaint.setColor(0x7f000000); + shadowPaint = new Paint(); + shadowPaint.setColor(0x1a000000); + setWillNotDraw(false); + + setOnTouchListener(new OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + float x = motionEvent.getX(); + float y = motionEvent.getY(); + int cornerSide = AndroidUtilities.dp(20); + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + if (rectX - cornerSide < x && rectX + cornerSide > x && rectY - cornerSide < y && rectY + cornerSide > y) { + draggingState = 1; + } else if (rectX - cornerSide + rectSizeX < x && rectX + cornerSide + rectSizeX > x && rectY - cornerSide < y && rectY + cornerSide > y) { + draggingState = 2; + } else if (rectX - cornerSide < x && rectX + cornerSide > x && rectY - cornerSide + rectSizeY < y && rectY + cornerSide + rectSizeY > y) { + draggingState = 3; + } else if (rectX - cornerSide + rectSizeX < x && rectX + cornerSide + rectSizeX > x && rectY - cornerSide + rectSizeY < y && rectY + cornerSide + rectSizeY > y) { + draggingState = 4; + } else if (rectX < x && rectX + rectSizeX > x && rectY < y && rectY + rectSizeY > y) { + draggingState = 5; + } else { + draggingState = 0; + } + if (draggingState != 0) { + PhotoCropView.this.requestDisallowInterceptTouchEvent(true); + } + oldX = x; + oldY = y; + } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { + draggingState = 0; + } else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE && draggingState != 0) { + float diffX = x - oldX; + float diffY = y - oldY; + if (draggingState == 5) { + rectX += diffX; + rectY += diffY; + + if (rectX < bitmapX) { + rectX = bitmapX; + } else if (rectX + rectSizeX > bitmapX + bitmapWidth) { + rectX = bitmapX + bitmapWidth - rectSizeX; + } + if (rectY < bitmapY) { + rectY = bitmapY; + } else if (rectY + rectSizeY > bitmapY + bitmapHeight) { + rectY = bitmapY + bitmapHeight - rectSizeY; + } + } else { + if (draggingState == 1) { + if (rectSizeX - diffX < 160) { + diffX = rectSizeX - 160; + } + if (rectX + diffX < bitmapX) { + diffX = bitmapX - rectX; + } + if (!freeformCrop) { + if (rectY + diffX < bitmapY) { + diffX = bitmapY - rectY; + } + rectX += diffX; + rectY += diffX; + rectSizeX -= diffX; + rectSizeY -= diffX; + } else { + if (rectSizeY - diffY < 160) { + diffY = rectSizeY - 160; + } + if (rectY + diffY < bitmapY) { + diffY = bitmapY - rectY; + } + rectX += diffX; + rectY += diffY; + rectSizeX -= diffX; + rectSizeY -= diffY; + } + } else if (draggingState == 2) { + if (rectSizeX + diffX < 160) { + diffX = -(rectSizeX - 160); + } + if (rectX + rectSizeX + diffX > bitmapX + bitmapWidth) { + diffX = bitmapX + bitmapWidth - rectX - rectSizeX; + } + if (!freeformCrop) { + if (rectY - diffX < bitmapY) { + diffX = rectY - bitmapY; + } + rectY -= diffX; + rectSizeX += diffX; + rectSizeY += diffX; + } else { + if (rectSizeY - diffY < 160) { + diffY = rectSizeY - 160; + } + if (rectY + diffY < bitmapY) { + diffY = bitmapY - rectY; + } + rectY += diffY; + rectSizeX += diffX; + rectSizeY -= diffY; + } + } else if (draggingState == 3) { + if (rectSizeX - diffX < 160) { + diffX = rectSizeX - 160; + } + if (rectX + diffX < bitmapX) { + diffX = bitmapX - rectX; + } + if (!freeformCrop) { + if (rectY + rectSizeX - diffX > bitmapY + bitmapHeight) { + diffX = rectY + rectSizeX - bitmapY - bitmapHeight; + } + rectX += diffX; + rectSizeX -= diffX; + rectSizeY -= diffX; + } else { + if (rectY + rectSizeY + diffY > bitmapY + bitmapHeight) { + diffY = bitmapY + bitmapHeight - rectY - rectSizeY; + } + rectX += diffX; + rectSizeX -= diffX; + rectSizeY += diffY; + if (rectSizeY < 160) { + rectSizeY = 160; + } + } + } else if (draggingState == 4) { + if (rectX + rectSizeX + diffX > bitmapX + bitmapWidth) { + diffX = bitmapX + bitmapWidth - rectX - rectSizeX; + } + if (!freeformCrop) { + if (rectY + rectSizeX + diffX > bitmapY + bitmapHeight) { + diffX = bitmapY + bitmapHeight - rectY - rectSizeX; + } + rectSizeX += diffX; + rectSizeY += diffX; + } else { + if (rectY + rectSizeY + diffY > bitmapY + bitmapHeight) { + diffY = bitmapY + bitmapHeight - rectY - rectSizeY; + } + rectSizeX += diffX; + rectSizeY += diffY; + } + if (rectSizeX < 160) { + rectSizeX = 160; + } + if (rectSizeY < 160) { + rectSizeY = 160; + } + } + } + + oldX = x; + oldY = y; + invalidate(); + } + return true; + } + }); + } + + public Bitmap getBitmap() { + float percX = (rectX - bitmapX) / bitmapWidth; + float percY = (rectY - bitmapY) / bitmapHeight; + float percSizeX = rectSizeX / bitmapWidth; + float percSizeY = rectSizeY / bitmapWidth; + int x = (int)(percX * bitmapToEdit.getWidth()); + int y = (int)(percY * bitmapToEdit.getHeight()); + int sizeX = (int)(percSizeX * bitmapToEdit.getWidth()); + int sizeY = (int)(percSizeY * bitmapToEdit.getWidth()); + if (x + sizeX > bitmapToEdit.getWidth()) { + sizeX = bitmapToEdit.getWidth() - x; + } + if (y + sizeY > bitmapToEdit.getHeight()) { + sizeY = bitmapToEdit.getHeight() - y; + } + try { + return Bitmap.createBitmap(bitmapToEdit, x, y, sizeX, sizeY); + } catch (Throwable e) { + FileLog.e("tmessags", e); + System.gc(); + try { + return Bitmap.createBitmap(bitmapToEdit, x, y, sizeX, sizeY); + } catch (Throwable e2) { + FileLog.e("tmessages", e2); + } + } + return null; + } + + @Override + protected void onDraw(Canvas canvas) { + canvas.drawRect(bitmapX, bitmapY, bitmapX + bitmapWidth, rectY, halfPaint); + canvas.drawRect(bitmapX, rectY, rectX, rectY + rectSizeY, halfPaint); + canvas.drawRect(rectX + rectSizeX, rectY, bitmapX + bitmapWidth, rectY + rectSizeY, halfPaint); + canvas.drawRect(bitmapX, rectY + rectSizeY, bitmapX + bitmapWidth, bitmapY + bitmapHeight, halfPaint); + + int side = AndroidUtilities.dp(1); + canvas.drawRect(rectX - side * 2, rectY - side * 2, rectX - side * 2 + AndroidUtilities.dp(20), rectY, circlePaint); + canvas.drawRect(rectX - side * 2, rectY - side * 2, rectX, rectY - side * 2 + AndroidUtilities.dp(20), circlePaint); + + canvas.drawRect(rectX + rectSizeX + side * 2 - AndroidUtilities.dp(20), rectY - side * 2, rectX + rectSizeX + side * 2, rectY, circlePaint); + canvas.drawRect(rectX + rectSizeX, rectY - side * 2, rectX + rectSizeX + side * 2, rectY - side * 2 + AndroidUtilities.dp(20), circlePaint); + + canvas.drawRect(rectX - side * 2, rectY + rectSizeY + side * 2 - AndroidUtilities.dp(20), rectX, rectY + rectSizeY + side * 2, circlePaint); + canvas.drawRect(rectX - side * 2, rectY + rectSizeY, rectX - side * 2 + AndroidUtilities.dp(20), rectY + rectSizeY + side * 2, circlePaint); + + canvas.drawRect(rectX + rectSizeX + side * 2 - AndroidUtilities.dp(20), rectY + rectSizeY, rectX + rectSizeX + side * 2, rectY + rectSizeY + side * 2, circlePaint); + canvas.drawRect(rectX + rectSizeX, rectY + rectSizeY + side * 2 - AndroidUtilities.dp(20), rectX + rectSizeX + side * 2, rectY + rectSizeY + side * 2, circlePaint); + + for (int a = 1; a < 3; a++) { + canvas.drawRect(rectX + rectSizeX / 3 * a - side, rectY, rectX + side * 2 + rectSizeX / 3 * a, rectY + rectSizeY, shadowPaint); + canvas.drawRect(rectX, rectY + rectSizeY / 3 * a - side, rectX + rectSizeX, rectY + rectSizeY / 3 * a + side * 2, shadowPaint); + } + + for (int a = 1; a < 3; a++) { + canvas.drawRect(rectX + rectSizeX / 3 * a, rectY, rectX + side + rectSizeX / 3 * a, rectY + rectSizeY, circlePaint); + canvas.drawRect(rectX, rectY + rectSizeY / 3 * a, rectX + rectSizeX, rectY + rectSizeY / 3 * a + side, circlePaint); + } + + canvas.drawRect(rectX, rectY, rectX + rectSizeX, rectY + rectSizeY, rectPaint); + } + } + + class MyGLSurfaceView extends GLSurfaceView { + + public MyGLSurfaceView(Context context){ + super(context); + setEGLContextClientVersion(2); + setRenderer(new MyGLRenderer()); + setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); + } + } + + public class MyGLRenderer implements GLSurfaceView.Renderer { + + private int trivialShaderProgram; + + private int positionHandle; + private int inputTexCoordHandle; + private int photoImageHandle; + private int shadowsHandle; + private int highlightsHandle; + private int exposureHandle; + private int contrastHandle; + private int saturationHandle; + private int warmthHandle; + private int vignetteHandle; + private int grainHandle; + private int grainWidthHandle; + private int grainHeightHandle; + + private int[] textures = new int[1]; + + private FloatBuffer vertexBuffer; + private FloatBuffer textureBuffer; + private FloatBuffer vertexSaveBuffer; + + private static final String trivialVertexShaderCode = + "attribute vec4 position;" + + "attribute vec4 inputTexCoord;" + + "varying vec2 texCoord;" + + "void main() {" + + "gl_Position = position;" + + "texCoord = inputTexCoord.xy;" + + "}"; + + private static final String trivialFragmentShaderCode = + "varying highp vec2 texCoord;" + + "uniform sampler2D photoImage;" + + "uniform lowp float shadows;" + + "uniform highp float width;" + + "uniform highp float height;" + + "const mediump vec3 hsLuminanceWeighting = vec3(0.3, 0.3, 0.3);" + + "uniform lowp float highlights;" + + "uniform highp float exposure;" + + "uniform lowp float contrast;" + + "const mediump vec3 satLuminanceWeighting = vec3(0.2126, 0.7152, 0.0722);" + + "uniform lowp float saturation;" + + "uniform lowp float warmth;" + + "uniform lowp float grain;" + + "const lowp float permTexUnit = 1.0 / 256.0;" + + "const lowp float permTexUnitHalf = 0.5 / 256.0;" + + "const lowp float grainsize = 2.3;" + + "uniform lowp float vignette;" + + "highp float getLuma(highp vec3 rgbP) { return (0.299 * rgbP.r) + (0.587 * rgbP.g) + (0.114 * rgbP.b); }" + + "highp vec3 rgbToYuv(highp vec3 inP) { highp vec3 outP; outP.r = getLuma(inP); outP.g = (1.0 / 1.772) * (inP.b - outP.r); outP.b = (1.0 / 1.402) * (inP.r - outP.r); return outP; }" + + "lowp vec3 yuvToRgb(highp vec3 inP) { highp float y = inP.r; highp float u = inP.g; highp float v = inP.b; lowp vec3 outP; outP.r = 1.402 * v + y; outP.g = (y - (0.299 * 1.402 / 0.587) * v - (0.114 * 1.772 / 0.587) * u); outP.b = 1.772 * u + y; return outP; } " + + "lowp float easeInOutSigmoid(lowp float value, lowp float strength) { lowp float t = 1.0 / (1.0 - strength); if (value > 0.5) { return 1.0 - pow(2.0 - 2.0 * value, t) * 0.5; } else { return pow(2.0 * value, t) * 0.5; } }" + + "highp vec4 rnm(in highp vec2 tc) { highp float noise = sin(dot(tc,vec2(12.9898,78.233))) * 43758.5453; highp float noiseR = fract(noise)*2.0-1.0; highp float noiseG = fract(noise*1.2154)*2.0-1.0; highp float noiseB = fract(noise*1.3453)*2.0-1.0; " + + "highp float noiseA = fract(noise*1.3647)*2.0-1.0; return vec4(noiseR,noiseG,noiseB,noiseA); } highp float fade(in highp float t) { return t*t*t*(t*(t*6.0-15.0)+10.0); } highp float pnoise3D(in highp vec3 p) { highp vec3 pi = permTexUnit*floor(p)+permTexUnitHalf; " + + "highp vec3 pf = fract(p); highp float perm00 = rnm(pi.xy).a ; highp vec3 grad000 = rnm(vec2(perm00, pi.z)).rgb * 4.0 - 1.0; highp float n000 = dot(grad000, pf); highp vec3 grad001 = rnm(vec2(perm00, pi.z + permTexUnit)).rgb * 4.0 - 1.0; " + + "highp float n001 = dot(grad001, pf - vec3(0.0, 0.0, 1.0)); highp float perm01 = rnm(pi.xy + vec2(0.0, permTexUnit)).a ; highp vec3 grad010 = rnm(vec2(perm01, pi.z)).rgb * 4.0 - 1.0; highp float n010 = dot(grad010, pf - vec3(0.0, 1.0, 0.0));" + + "highp vec3 grad011 = rnm(vec2(perm01, pi.z + permTexUnit)).rgb * 4.0 - 1.0; highp float n011 = dot(grad011, pf - vec3(0.0, 1.0, 1.0)); highp float perm10 = rnm(pi.xy + vec2(permTexUnit, 0.0)).a ;" + + "highp vec3 grad100 = rnm(vec2(perm10, pi.z)).rgb * 4.0 - 1.0; highp float n100 = dot(grad100, pf - vec3(1.0, 0.0, 0.0)); highp vec3 grad101 = rnm(vec2(perm10, pi.z + permTexUnit)).rgb * 4.0 - 1.0;" + + "highp float n101 = dot(grad101, pf - vec3(1.0, 0.0, 1.0)); highp float perm11 = rnm(pi.xy + vec2(permTexUnit, permTexUnit)).a ; highp vec3 grad110 = rnm(vec2(perm11, pi.z)).rgb * 4.0 - 1.0; highp float n110 = dot(grad110, pf - vec3(1.0, 1.0, 0.0));" + + "highp vec3 grad111 = rnm(vec2(perm11, pi.z + permTexUnit)).rgb * 4.0 - 1.0; highp float n111 = dot(grad111, pf - vec3(1.0, 1.0, 1.0)); highp vec4 n_x = mix(vec4(n000, n001, n010, n011), vec4(n100, n101, n110, n111), fade(pf.x));" + + "highp vec2 n_xy = mix(n_x.xy, n_x.zw, fade(pf.y)); highp float n_xyz = mix(n_xy.x, n_xy.y, fade(pf.z)); return n_xyz; } lowp vec2 coordRot(in lowp vec2 tc, in lowp float angle) { lowp float rotX = ((tc.x * 2.0 - 1.0) * cos(angle)) - ((tc.y * 2.0 - 1.0) * sin(angle));" + + "lowp float rotY = ((tc.y * 2.0 - 1.0) * cos(angle)) + ((tc.x * 2.0 - 1.0) * sin(angle)); rotX = rotX * 0.5 + 0.5; rotY = rotY * 0.5 + 0.5; return vec2(rotX,rotY); }void main() {lowp vec4 source = texture2D(photoImage, texCoord);lowp vec4 result = source;" + + "const lowp float toolEpsilon = 0.005;mediump float hsLuminance = dot(result.rgb, hsLuminanceWeighting); mediump float shadow = clamp((pow(hsLuminance, 1.0 / (shadows + 1.0)) + (-0.76) * pow(hsLuminance, 2.0 / (shadows + 1.0))) - hsLuminance, 0.0, 1.0);" + + "mediump float highlight = clamp((1.0 - (pow(1.0 - hsLuminance, 1.0 / (2.0 - highlights)) + (-0.8) * pow(1.0 - hsLuminance, 2.0 / (2.0 - highlights)))) - hsLuminance, -1.0, 0.0);" + + "lowp vec3 shresult = vec3(0.0, 0.0, 0.0) + ((hsLuminance + shadow + highlight) - 0.0) * ((result.rgb - vec3(0.0, 0.0, 0.0)) / (hsLuminance - 0.0)); result = vec4(shresult.rgb, result.a);" + + "if (abs(exposure) > toolEpsilon) { mediump float mag = exposure * 1.045; mediump float exppower = 1.0 + abs(mag); if (mag < 0.0) { exppower = 1.0 / exppower; } result.r = 1.0 - pow((1.0 - result.r), exppower);" + + "result.g = 1.0 - pow((1.0 - result.g), exppower); result.b = 1.0 - pow((1.0 - result.b), exppower); }result = vec4(((result.rgb - vec3(0.5)) * contrast + vec3(0.5)), result.a);" + + "lowp float satLuminance = dot(result.rgb, satLuminanceWeighting); lowp vec3 greyScaleColor = vec3(satLuminance); result = vec4(mix(greyScaleColor, result.rgb, saturation), result.a);" + + "if (abs(warmth) > toolEpsilon) { highp vec3 yuvVec; if (warmth > 0.0 ) { yuvVec = vec3(0.1765, -0.1255, 0.0902); } else { yuvVec = -vec3(0.0588, 0.1569, -0.1255); } highp vec3 yuvColor = rgbToYuv(result.rgb); highp float luma = yuvColor.r;" + + "highp float curveScale = sin(luma * 3.14159); yuvColor += 0.375 * warmth * curveScale * yuvVec; result.rgb = yuvToRgb(yuvColor); }if (abs(grain) > toolEpsilon) { highp vec3 rotOffset = vec3(1.425, 3.892, 5.835);" + + "highp vec2 rotCoordsR = coordRot(texCoord, rotOffset.x); highp vec3 noise = vec3(pnoise3D(vec3(rotCoordsR * vec2(width / grainsize, height / grainsize),0.0))); lowp vec3 lumcoeff = vec3(0.299,0.587,0.114);" + + "lowp float luminance = dot(result.rgb, lumcoeff); lowp float lum = smoothstep(0.2, 0.0, luminance); lum += luminance; noise = mix(noise,vec3(0.0),pow(lum,4.0)); result.rgb = result.rgb + noise * grain; }" + + "if (abs(vignette) > toolEpsilon) { const lowp float midpoint = 0.7; const lowp float fuzziness = 0.62; lowp float radDist = length(texCoord - 0.5) / sqrt(0.5);" + + "lowp float mag = easeInOutSigmoid(radDist * midpoint, fuzziness) * vignette * 0.645; result.rgb = mix(pow(result.rgb, vec3(1.0 / (1.0 - mag))), vec3(0.0), mag * mag); }gl_FragColor = result;}"; + + private int loadShader(int type, String shaderCode) { + int shader = GLES20.glCreateShader(type); + GLES20.glShaderSource(shader, shaderCode); + GLES20.glCompileShader(shader); + int[] compileStatus = new int[1]; + GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compileStatus, 0); + if (compileStatus[0] == 0) { + GLES20.glDeleteShader(shader); + shader = 0; + } + return shader; + } + + @Override + public void onSurfaceCreated(GL10 gl, javax.microedition.khronos.egl.EGLConfig config) { + + float squareCoordinates[] = { + -1.0f, 1.0f, + 1.0f, 1.0f, + -1.0f, -1.0f, + 1.0f, -1.0f}; + + ByteBuffer bb = ByteBuffer.allocateDirect(squareCoordinates.length * 4); + bb.order(ByteOrder.nativeOrder()); + vertexBuffer = bb.asFloatBuffer(); + vertexBuffer.put(squareCoordinates); + vertexBuffer.position(0); + + float squareCoordinates2[] = { + -1.0f, -1.0f, + 1.0f, -1.0f, + -1.0f, 1.0f, + 1.0f, 1.0f}; + + bb = ByteBuffer.allocateDirect(squareCoordinates2.length * 4); + bb.order(ByteOrder.nativeOrder()); + vertexSaveBuffer = bb.asFloatBuffer(); + vertexSaveBuffer.put(squareCoordinates2); + vertexSaveBuffer.position(0); + + float textureCoordinates[] = { + 0.0f, 0.0f, + 1.0f, 0.0f, + 0.0f, 1.0f, + 1.0f, 1.0f, + }; + + bb = ByteBuffer.allocateDirect(textureCoordinates.length * 4); + bb.order(ByteOrder.nativeOrder()); + textureBuffer = bb.asFloatBuffer(); + textureBuffer.put(textureCoordinates); + textureBuffer.position(0); + + GLES20.glGenTextures(1, textures, 0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); + gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); + gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); + GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmapToEdit, 0); + + int trivialVertexShader = loadShader(GLES20.GL_VERTEX_SHADER, trivialVertexShaderCode); + int trivialFragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, trivialFragmentShaderCode); + + if (trivialVertexShader != 0 && trivialFragmentShader != 0) { + trivialShaderProgram = GLES20.glCreateProgram(); + GLES20.glAttachShader(trivialShaderProgram, trivialVertexShader); + GLES20.glAttachShader(trivialShaderProgram, trivialFragmentShader); + GLES20.glBindAttribLocation(trivialShaderProgram, 0, "position"); + GLES20.glBindAttribLocation(trivialShaderProgram, 1, "inputTexCoord"); + + GLES20.glLinkProgram(trivialShaderProgram); + int[] linkStatus = new int[1]; + GLES20.glGetProgramiv(trivialShaderProgram, GLES20.GL_LINK_STATUS, linkStatus, 0); + if (linkStatus[0] == 0) { + GLES20.glDeleteProgram(trivialShaderProgram); + trivialShaderProgram = 0; + } + } + + if (trivialShaderProgram != 0) { + positionHandle = GLES20.glGetAttribLocation(trivialShaderProgram, "position"); + inputTexCoordHandle = GLES20.glGetAttribLocation(trivialShaderProgram, "inputTexCoord"); + photoImageHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "photoImage"); + shadowsHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "shadows"); + highlightsHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "highlights"); + exposureHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "exposure"); + contrastHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "contrast"); + saturationHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "saturation"); + warmthHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "warmth"); + vignetteHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "vignette"); + grainHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "grain"); + grainWidthHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "width"); + grainHeightHandle = GLES20.glGetUniformLocation(trivialShaderProgram, "height"); + GLES20.glUseProgram(trivialShaderProgram); + } + } + + public void onDrawFrame(GL10 unused) { + GLES20.glActiveTexture(GLES20.GL_TEXTURE0); + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); + GLES20.glUniform1i(photoImageHandle, 0); + GLES20.glUniform1f(shadowsHandle, getShadowsValue()); + GLES20.glUniform1f(highlightsHandle, getHighlightsValue()); + GLES20.glUniform1f(exposureHandle, getExposureValue()); + GLES20.glUniform1f(contrastHandle, getContrastValue()); + GLES20.glUniform1f(saturationHandle, getSaturationValue()); + GLES20.glUniform1f(warmthHandle, getWarmthValue()); + GLES20.glUniform1f(vignetteHandle, getVignetteValue()); + GLES20.glUniform1f(grainHandle, getGrainValue()); + GLES20.glUniform1f(grainWidthHandle, width); + GLES20.glUniform1f(grainHeightHandle, height); + GLES20.glEnableVertexAttribArray(inputTexCoordHandle); + GLES20.glVertexAttribPointer(inputTexCoordHandle, 2, GLES20.GL_FLOAT, false, 8, textureBuffer); + GLES20.glEnableVertexAttribArray(positionHandle); + if (donePressed) { + GLES20.glVertexAttribPointer(positionHandle, 2, GLES20.GL_FLOAT, false, 8, vertexSaveBuffer); + GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); + final Bitmap bitmap = saveTexture((int)width, (int)height); + donePressed = false; + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + delegate.didFinishEdit(bitmap, getArguments()); + finishFragment(); + } + }); + } + GLES20.glVertexAttribPointer(positionHandle, 2, GLES20.GL_FLOAT, false, 8, vertexBuffer); + GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); + } + + public void onSurfaceChanged(GL10 unused, int width, int height) { + GLES20.glViewport(0, 0, width, height); + } + + public Bitmap saveTexture(int width, int height) { + //int[] frame = new int[1]; + //GLES20.glGenFramebuffers(1, frame, 0); + //GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frame[0]); + //GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, texture, 0); + ByteBuffer buffer = ByteBuffer.allocate(width * height * 4); + GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer); + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + bitmap.copyPixelsFromBuffer(buffer); + //GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); + //GLES20.glDeleteFramebuffers(1, frame, 0); + return bitmap; + } + } + + public PhotoEditorActivity(Bundle args, Bitmap bitmap, String key) { + super(args); + bitmapToEdit = bitmap; + bitmapKey = key; + if (bitmapToEdit != null && key != null) { + ImageLoader.getInstance().incrementUseCount(key); + } + } + + private float getShadowsValue() { + return (shadowsValue / 100.0f) * 0.65f; + } + + private float getHighlightsValue() { + return 1 - (highlightsValue / 100.0f); + } + + private float getExposureValue() { + return (exposureValue / 100.0f); + } + + private float getContrastValue() { + return (contrastValue / 100.0f) * 0.3f + 1; + } + + private float getWarmthValue() { + return warmthValue / 100.0f; + } + + private float getVignetteValue() { + return vignetteValue / 100.0f; + } + + private float getGrainValue() { + return grainValue / 100.0f * 0.04f; + } + + private float getSaturationValue() { + float value = (saturationValue / 100.0f); + if (value < 0) { + value *= 0.55f; + } else { + value *= 1.05f; + } + return value + 1; + } + + @Override + public boolean onFragmentCreate() { + swipeBackEnabled = false; + freeformCrop = getArguments().getBoolean("freeformCrop", false); + onlyCrop = getArguments().getBoolean("onlyCrop", false); + if (bitmapToEdit == null) { + String photoPath = getArguments().getString("photoPath"); + Uri photoUri = getArguments().getParcelable("photoUri"); + if (photoPath == null && photoUri == null) { + return false; + } + if (photoPath != null) { + File f = new File(photoPath); + if (!f.exists()) { + return false; + } + } + int size = 0; + if (AndroidUtilities.isTablet()) { + size = AndroidUtilities.dp(520); + } else { + size = Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y); + } + bitmapToEdit = ImageLoader.loadBitmap(photoPath, photoUri, size, size, true); + if (bitmapToEdit == null) { + return false; + } + } + return super.onFragmentCreate(); + } + + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + if (bitmapKey != null) { + if (ImageLoader.getInstance().decrementUseCount(bitmapKey) && !ImageLoader.getInstance().isInCache(bitmapKey)) { + bitmapKey = null; + } + } + if (bitmapKey == null && bitmapToEdit != null && !sameBitmap) { + bitmapToEdit.recycle(); + bitmapToEdit = null; + } + } + + @Override + public void onPause() { + super.onPause(); + if (glView != null) { + glView.onPause(); + } + } + + @Override + public void onResume() { + super.onResume(); + if (glView != null) { + glView.onResume(); + } + } + + @Override + public View createView(LayoutInflater inflater, ViewGroup container) { + if (fragmentView == null) { + actionBar.setBackgroundColor(0xff262626); + actionBar.setItemsBackground(R.drawable.bar_selector_picker); + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + actionBar.setAllowOverlayTitle(true); + actionBar.setTitle(LocaleController.getString("EditImage", R.string.EditImage)); + actionBar.setCastShadows(false); + actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { + @Override + public void onItemClick(int id) { + if (id == -1) { + finishFragment(); + } else if (id == done_button) { + donePressed = true; + glView.requestRender(); + } else if (id == rotate_button) { + int newRotation = rotateDegree; + newRotation += 90; + fixLayoutInternal(newRotation, true); + } + } + }); + + ActionBarMenu menu = actionBar.createMenu(); + rotateButton = menu.addItemWithWidth(rotate_button, R.drawable.photo_rotate, AndroidUtilities.dp(56)); + sizeButton = menu.addItemWithWidth(size_button, R.drawable.photo_sizes, AndroidUtilities.dp(56)); + doneButton = menu.addItemWithWidth(done_button, R.drawable.ic_done, AndroidUtilities.dp(56)); + + rotateButton.setVisibility(View.GONE); + sizeButton.setVisibility(View.GONE); + + FrameLayout frameLayout = null; + fragmentView = frameLayout = new FrameLayout(getParentActivity()); + fragmentView.setBackgroundColor(0xff262626); + + imageView = new ImageView(getParentActivity()); + imageView.setScaleType(ImageView.ScaleType.MATRIX); + imageView.setImageBitmap(bitmapToEdit); + frameLayout.addView(imageView); + + cropView = new PhotoCropView(getParentActivity()); + cropView.setVisibility(View.GONE); + frameLayout.addView(cropView); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) cropView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + cropView.setLayoutParams(layoutParams); + + cropButtonsView = new LinearLayout(getParentActivity()); + cropButtonsView.setVisibility(View.GONE); + frameLayout.addView(cropButtonsView); + layoutParams = (FrameLayout.LayoutParams) cropButtonsView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.height = AndroidUtilities.dp(48); + layoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + cropButtonsView.setLayoutParams(layoutParams); + + ImageView button = new ImageView(getParentActivity()); + button.setScaleType(ImageView.ScaleType.CENTER); + button.setImageResource(R.drawable.ic_close_white); + cropButtonsView.addView(button); + LinearLayout.LayoutParams layoutParams1 = (LinearLayout.LayoutParams) button.getLayoutParams(); + layoutParams1.width = AndroidUtilities.dp(48); + layoutParams1.height = AndroidUtilities.dp(48); + button.setLayoutParams(layoutParams1); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onlyCrop) { + finishFragment(); + } else { + switchToMode(0, true); + } + } + }); + + button = new ImageView(getParentActivity()); + button.setScaleType(ImageView.ScaleType.CENTER); + button.setImageResource(R.drawable.ic_done); + cropButtonsView.addView(button); + layoutParams1 = (LinearLayout.LayoutParams) button.getLayoutParams(); + layoutParams1.width = AndroidUtilities.dp(48); + layoutParams1.height = AndroidUtilities.dp(48); + layoutParams1.leftMargin = AndroidUtilities.dp(146); + button.setLayoutParams(layoutParams1); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onlyCrop) { + if (delegate != null && currentMode == 1) { + Bitmap bitmap = cropView.getBitmap(); + if (bitmap == bitmapToEdit) { + sameBitmap = true; + } + delegate.didFinishEdit(bitmap, getArguments()); + currentMode = 0; + finishFragment(); + } + } else { + switchToMode(0, false); + } + } + }); + + if (!onlyCrop) { + toolsView = new LinearLayout(getParentActivity()); + frameLayout.addView(toolsView); + layoutParams = (FrameLayout.LayoutParams) toolsView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.height = AndroidUtilities.dp(48); + layoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + toolsView.setLayoutParams(layoutParams); + + button = new ImageView(getParentActivity()); + button.setScaleType(ImageView.ScaleType.CENTER); + button.setImageResource(R.drawable.photo_crop); + toolsView.addView(button); + layoutParams1 = (LinearLayout.LayoutParams) button.getLayoutParams(); + layoutParams1.width = AndroidUtilities.dp(48); + layoutParams1.height = AndroidUtilities.dp(48); + button.setLayoutParams(layoutParams1); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + switchToMode(1, true); + } + }); + + filtersButton = new ImageView(getParentActivity()); + filtersButton.setScaleType(ImageView.ScaleType.CENTER); + filtersButton.setImageResource(R.drawable.photo_filters); + toolsView.addView(filtersButton); + layoutParams1 = (LinearLayout.LayoutParams) filtersButton.getLayoutParams(); + layoutParams1.width = AndroidUtilities.dp(48); + layoutParams1.height = AndroidUtilities.dp(48); + layoutParams1.leftMargin = AndroidUtilities.dp(54); + filtersButton.setLayoutParams(layoutParams1); + + toolButton = new ImageView(getParentActivity()); + toolButton.setScaleType(ImageView.ScaleType.CENTER); + toolButton.setImageResource(R.drawable.photo_tune); + toolsView.addView(toolButton); + layoutParams1 = (LinearLayout.LayoutParams) toolButton.getLayoutParams(); + layoutParams1.width = AndroidUtilities.dp(48); + layoutParams1.height = AndroidUtilities.dp(48); + layoutParams1.leftMargin = AndroidUtilities.dp(54); + toolButton.setLayoutParams(layoutParams1); + + glView = new MyGLSurfaceView(getParentActivity()); + glView.setVisibility(View.GONE); + frameLayout.addView(glView); + layoutParams = (FrameLayout.LayoutParams) glView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + glView.setLayoutParams(layoutParams); + + RecyclerListView toolsView = new RecyclerListView(getParentActivity()); + LinearLayoutManager layoutManager = new LinearLayoutManager(getParentActivity()); + layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); + toolsView.setLayoutManager(layoutManager); + toolsView.setClipToPadding(false); + if (Build.VERSION.SDK_INT >= 9) { + toolsView.setOverScrollMode(RecyclerListView.OVER_SCROLL_NEVER); + } + toolsView.setAdapter(new ToolsAdapter(getParentActivity())); + toolsView.setVisibility(View.GONE); + frameLayout.addView(toolsView); + layoutParams = (FrameLayout.LayoutParams) toolsView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = AndroidUtilities.dp(60); + layoutParams.gravity = Gravity.LEFT | Gravity.BOTTOM; + layoutParams.bottomMargin = AndroidUtilities.dp(40); + toolsView.setLayoutParams(layoutParams); + toolsView.addOnItemTouchListener(new RecyclerListView.RecyclerListViewItemClickListener(getParentActivity(), new RecyclerListView.OnItemClickListener() { + @Override + public void onItemClick(View view, int i) { + selectedTool = i; + if (i == 0) { + valueSeekBar.setMax(100); + valueSeekBar.setProgress((int) highlightsValue); + } else if (i == 1) { + valueSeekBar.setMax(200); + valueSeekBar.setProgress((int) contrastValue + 100); + } else if (i == 2) { + valueSeekBar.setMax(200); + valueSeekBar.setProgress((int) exposureValue + 100); + } else if (i == 3) { + valueSeekBar.setMax(200); + valueSeekBar.setProgress((int) warmthValue + 100); + } else if (i == 4) { + valueSeekBar.setMax(200); + valueSeekBar.setProgress((int) saturationValue + 100); + } else if (i == 5) { + valueSeekBar.setMax(100); + valueSeekBar.setProgress((int) vignetteValue); + } else if (i == 6) { + valueSeekBar.setMax(100); + valueSeekBar.setProgress((int) shadowsValue); + } else if (i == 7) { + valueSeekBar.setMax(100); + valueSeekBar.setProgress((int) grainValue); + } + } + })); + + valueSeekBar = new SeekBar(getParentActivity()); + valueSeekBar.setVisibility(View.GONE); + valueSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (!fromUser) { + return; + } + if (selectedTool == 0) { + highlightsValue = progress; + } else if (selectedTool == 1) { + contrastValue = progress - 100; + } else if (selectedTool == 2) { + exposureValue = progress - 100; + } else if (selectedTool == 3) { + warmthValue = progress - 100; + } else if (selectedTool == 4) { + saturationValue = progress - 100; + } else if (selectedTool == 5) { + vignetteValue = progress; + } else if (selectedTool == 6) { + shadowsValue = progress; + } else if (selectedTool == 7) { + grainValue = progress; + } + glView.requestRender(); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + + } + }); + try { + Field field = ProgressBar.class.getDeclaredField("mMinHeight"); + field.setAccessible(true); + field.setInt(valueSeekBar, AndroidUtilities.dp(40)); + field = ProgressBar.class.getDeclaredField("mMaxHeight"); + field.setAccessible(true); + field.setInt(valueSeekBar, AndroidUtilities.dp(40)); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + frameLayout.addView(valueSeekBar); + layoutParams = (FrameLayout.LayoutParams) valueSeekBar.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = AndroidUtilities.dp(40); + layoutParams.gravity = Gravity.LEFT | Gravity.BOTTOM; + layoutParams.leftMargin = AndroidUtilities.dp(10); + layoutParams.rightMargin = AndroidUtilities.dp(10); + valueSeekBar.setLayoutParams(layoutParams); + } else { + switchToMode(1, false); + } + + fixLayout(); + } else { + ViewGroup parent = (ViewGroup)fragmentView.getParent(); + if (parent != null) { + parent.removeView(fragmentView); + } + } + return fragmentView; + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + fixLayout(); + } + + private void switchToMode(final int mode, final boolean animated) { + if (animated) { + if (currentMode == 0) { + AnimatorSetProxy animatorSet = new AnimatorSetProxy(); + animatorSet.playTogether( + ObjectAnimatorProxy.ofFloat(doneButton, "alpha", 1.0f, 0.0f), + ObjectAnimatorProxy.ofFloat(toolsView, "translationY", 0, AndroidUtilities.dp(48))); + animatorSet.setDuration(150); + animatorSet.setInterpolator(new DecelerateInterpolator()); + animatorSet.addListener(new AnimatorListenerAdapterProxy() { + @Override + public void onAnimationEnd(Object animation) { + processFromMode(currentMode, mode, animated); + } + }); + animatorSet.start(); + } else if (currentMode == 1) { + AnimatorSetProxy animatorSet = new AnimatorSetProxy(); + animatorSet.playTogether( + ObjectAnimatorProxy.ofFloat(cropView, "alpha", 1.0f, 0.0f), + ObjectAnimatorProxy.ofFloat(cropButtonsView, "translationY", 0, AndroidUtilities.dp(48)), + ObjectAnimatorProxy.ofFloat(rotateButton, "alpha", 1.0f, 0.0f), + ObjectAnimatorProxy.ofFloat(sizeButton, "alpha", 1.0f, 0.0f)); + animatorSet.setDuration(150); + animatorSet.setInterpolator(new DecelerateInterpolator()); + animatorSet.addListener(new AnimatorListenerAdapterProxy() { + @Override + public void onAnimationEnd(Object animation) { + processFromMode(currentMode, mode, animated); + } + }); + animatorSet.start(); + } + } else { + processFromMode(currentMode, mode, animated); + } + } + + private void processFromMode(int from, int to, boolean animated) { + if (from == 0) { + doneButton.setVisibility(View.GONE); + if (toolsView != null) { + toolsView.setVisibility(View.GONE); + } + processToMode(to, animated); + } else if (from == 1) { + cropView.setVisibility(View.GONE); + rotateButton.setVisibility(View.GONE); + if (freeformCrop) { + sizeButton.setVisibility(View.GONE); + } + cropButtonsView.setVisibility(View.GONE); + processToMode(to, animated); + } + } + + private void processToMode(int to, boolean animated) { + currentMode = to; + if (currentMode == 0) { + doneButton.setVisibility(View.VISIBLE); + toolsView.setVisibility(View.VISIBLE); + actionBar.setTitle(LocaleController.getString("EditImage", R.string.EditImage)); + if (animated) { + AnimatorSetProxy animatorSet = new AnimatorSetProxy(); + animatorSet.playTogether( + ObjectAnimatorProxy.ofFloat(doneButton, "alpha", 0.0f, 1.0f), + ObjectAnimatorProxy.ofFloat(toolsView, "translationY", AndroidUtilities.dp(48), 0)); + animatorSet.setDuration(150); + animatorSet.setInterpolator(new AccelerateInterpolator()); + animatorSet.start(); + } + } else if (currentMode == 1) { + cropView.setVisibility(View.VISIBLE); + rotateButton.setVisibility(View.VISIBLE); + if (freeformCrop) { + sizeButton.setVisibility(View.VISIBLE); + } + cropButtonsView.setVisibility(View.VISIBLE); + actionBar.setTitle(LocaleController.getString("CropImage", R.string.CropImage)); + if (animated) { + AnimatorSetProxy animatorSet = new AnimatorSetProxy(); + animatorSet.playTogether( + ObjectAnimatorProxy.ofFloat(cropView, "alpha", 0.0f, 1.0f), + ObjectAnimatorProxy.ofFloat(cropButtonsView, "translationY", AndroidUtilities.dp(48), 0), + ObjectAnimatorProxy.ofFloat(rotateButton, "alpha", 0.0f, 1.0f), + ObjectAnimatorProxy.ofFloat(sizeButton, "alpha", 0.0f, 1.0f)); + animatorSet.setDuration(150); + animatorSet.setInterpolator(new AccelerateInterpolator()); + animatorSet.start(); + } + } + } + + private void fixLayoutInternal(int rotation, final boolean animated) { + if (bitmapToEdit == null || fragmentView == null) { + return; + } + + int viewWidth = fragmentView.getWidth() - AndroidUtilities.dp(28); + int viewHeight = fragmentView.getHeight() - AndroidUtilities.dp(28 + 48); + + rotateDegree = rotation; + + if (cropView != null) { + float bitmapWidth = rotation % 180 == 0 ? bitmapToEdit.getWidth() : bitmapToEdit.getHeight(); + float bitmapHeight = rotation % 180 == 0 ? bitmapToEdit.getHeight() : bitmapToEdit.getWidth(); + float scaleX = viewWidth / bitmapWidth; + float scaleY = viewHeight / bitmapHeight; + if (scaleX > scaleY) { + bitmapHeight = viewHeight; + bitmapWidth = (int)Math.ceil(bitmapWidth * scaleY); + } else { + bitmapWidth = viewWidth; + bitmapHeight = (int)Math.ceil(bitmapHeight * scaleX); + } + + float percX = (cropView.rectX - cropView.bitmapX) / cropView.bitmapWidth; + float percY = (cropView.rectY - cropView.bitmapY) / cropView.bitmapHeight; + float percSizeX = cropView.rectSizeX / cropView.bitmapWidth; + float percSizeY = cropView.rectSizeY / cropView.bitmapHeight; + cropView.bitmapWidth = (int) bitmapWidth; + cropView.bitmapHeight = (int) bitmapHeight; + + cropView.bitmapX = (int) Math.ceil((viewWidth - bitmapWidth) / 2 + AndroidUtilities.dp(14)); + cropView.bitmapY = (int) Math.ceil((viewHeight - bitmapHeight) / 2 + AndroidUtilities.dp(14)); + + if (cropView.rectX == -1 && cropView.rectY == -1) { + if (freeformCrop) { + cropView.rectY = cropView.bitmapY; + cropView.rectX = cropView.bitmapX; + cropView.rectSizeX = bitmapWidth; + cropView.rectSizeY = bitmapHeight; + } else { + if (bitmapWidth > bitmapHeight) { + cropView.rectY = cropView.bitmapY; + cropView.rectX = (viewWidth - bitmapHeight) / 2 + AndroidUtilities.dp(14); + cropView.rectSizeX = bitmapHeight; + cropView.rectSizeY = bitmapHeight; + } else { + cropView.rectX = cropView.bitmapX; + cropView.rectY = (viewHeight - bitmapWidth) / 2 + AndroidUtilities.dp(14); + cropView.rectSizeX = bitmapWidth; + cropView.rectSizeY = bitmapWidth; + } + } + } else { + if (rotation % 180 == 0) { + cropView.rectX = percX * bitmapWidth + cropView.bitmapX; + cropView.rectY = percY * bitmapHeight + cropView.bitmapY; + } else { + cropView.rectX = percY * bitmapWidth + cropView.bitmapX; + cropView.rectY = percX * bitmapHeight + cropView.bitmapY; + } + cropView.rectSizeX = percSizeX * bitmapWidth; + cropView.rectSizeY = percSizeY * bitmapHeight; + } + cropView.invalidate(); + } + + float bitmapWidth = bitmapToEdit.getWidth(); + float bitmapHeight = bitmapToEdit.getHeight(); + float scaleX = viewWidth / bitmapWidth; + float scaleY = viewHeight / bitmapHeight; + float scale; + if (scaleX > scaleY) { + bitmapHeight = viewHeight; + bitmapWidth = (int)Math.ceil(bitmapWidth * scaleY); + scale = cropView.bitmapHeight / bitmapWidth; + } else { + bitmapWidth = viewWidth; + bitmapHeight = (int)Math.ceil(bitmapHeight * scaleX); + scale = cropView.bitmapWidth / bitmapHeight; + } + + FrameLayout.LayoutParams layoutParams; + if (imageView != null) { + layoutParams = (FrameLayout.LayoutParams) imageView.getLayoutParams(); + layoutParams.leftMargin = (int) ((viewWidth - bitmapWidth) / 2 + AndroidUtilities.dp(14)); + layoutParams.topMargin = (int) ((viewHeight - bitmapHeight) / 2 + AndroidUtilities.dp(14)); + layoutParams.width = (int) bitmapWidth; + layoutParams.height = (int) bitmapHeight; + imageView.setLayoutParams(layoutParams); + + if (animated) { + ViewProxy.setAlpha(cropView, 0.0f); + rotationAnimation = new AnimatorSetProxy(); + rotationAnimation.playTogether( + ObjectAnimatorProxy.ofFloat(imageView, "scaleX", rotateDegree % 180 != 0 ? scale : 1), + ObjectAnimatorProxy.ofFloat(imageView, "scaleY", rotateDegree % 180 != 0 ? scale : 1), + ObjectAnimatorProxy.ofFloat(imageView, "rotation", rotateDegree)); + rotationAnimation.setDuration(150); + rotationAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); + rotationAnimation.addListener(new AnimatorListenerAdapterProxy() { + @Override + public void onAnimationEnd(Object animation) { + if (rotationAnimation.equals(animation)) { + AnimatorSetProxy animatorSet = new AnimatorSetProxy(); + animatorSet.playTogether(ObjectAnimatorProxy.ofFloat(cropView, "alpha", 1.0f)); + animatorSet.setDuration(150); + animatorSet.setInterpolator(new AccelerateDecelerateInterpolator()); + animatorSet.start(); + rotationAnimation = null; + } + } + }); + rotationAnimation.start(); + } else { + imageView.setScaleX(rotateDegree % 180 != 0 ? scale : 1); + imageView.setScaleY(rotateDegree % 180 != 0 ? scale : 1); + imageView.setRotation(rotateDegree); + } + } + + if (glView != null) { + width = bitmapWidth; + height = bitmapHeight; + layoutParams = (FrameLayout.LayoutParams) glView.getLayoutParams(); + layoutParams.leftMargin = (int) ((viewWidth - bitmapWidth) / 2 + AndroidUtilities.dp(14)); + layoutParams.topMargin = (int) ((viewHeight - bitmapHeight) / 2 + AndroidUtilities.dp(14)); + layoutParams.width = (int) bitmapWidth; + layoutParams.height = (int) bitmapHeight; + glView.setLayoutParams(layoutParams); + glView.requestRender(); + } + } + + private void fixLayout() { + if (fragmentView == null) { + return; + } + fragmentView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + if (fragmentView != null) { + fixLayoutInternal(rotateDegree, false); + fragmentView.getViewTreeObserver().removeOnPreDrawListener(this); + } + return false; + } + }); + } + + public void setDelegate(PhotoCropActivity.PhotoEditActivityDelegate delegate) { + this.delegate = delegate; + } + + public class ToolsAdapter extends RecyclerView.Adapter { + + private Context mContext; + + private class Holder extends RecyclerView.ViewHolder { + + public Holder(View itemView) { + super(itemView); + } + } + + public ToolsAdapter(Context context) { + mContext = context; + } + + @Override + public int getItemCount() { + return 8; + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { + PhotoEditToolCell view = new PhotoEditToolCell(mContext); + return new Holder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { + Holder holder = (Holder) viewHolder; + if (i == 0) { + ((PhotoEditToolCell) holder.itemView).setIconAndText(R.drawable.photo_editor_highlights, "Highlights"); + } else if (i == 1) { + ((PhotoEditToolCell) holder.itemView).setIconAndText(R.drawable.photo_editor_contrast, "Contrast"); + } else if (i == 2) { + ((PhotoEditToolCell) holder.itemView).setIconAndText(R.drawable.photo_editor_exposure, "Exposure"); + } else if (i == 3) { + ((PhotoEditToolCell) holder.itemView).setIconAndText(R.drawable.photo_editor_warmth, "Warmth"); + } else if (i == 4) { + ((PhotoEditToolCell) holder.itemView).setIconAndText(R.drawable.photo_editor_saturation, "Saturation"); + } else if (i == 5) { + ((PhotoEditToolCell) holder.itemView).setIconAndText(R.drawable.photo_editor_vignette, "Vignette"); + } else if (i == 6) { + ((PhotoEditToolCell) holder.itemView).setIconAndText(R.drawable.photo_editor_shadows, "Shadows"); + } else if (i == 7) { + ((PhotoEditToolCell) holder.itemView).setIconAndText(R.drawable.photo_editor_grain, "Grain"); + } + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java index 1788e99b5..0c573a96c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java @@ -12,6 +12,7 @@ import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.os.Build; +import android.os.Bundle; import android.util.Base64; import android.view.Gravity; import android.view.LayoutInflater; @@ -32,6 +33,7 @@ import android.widget.TextView; import org.json.JSONArray; import org.json.JSONObject; import org.telegram.android.AndroidUtilities; +import org.telegram.android.ImageLoader; import org.telegram.android.LocaleController; import org.telegram.android.MediaController; import org.telegram.android.MessagesStorage; @@ -45,6 +47,7 @@ import org.telegram.android.volley.toolbox.JsonObjectRequest; import org.telegram.android.volley.toolbox.Volley; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.BuildVars; +import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.R; import org.telegram.messenger.TLRPC; @@ -65,7 +68,7 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -public class PhotoPickerActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, PhotoViewer.PhotoViewerProvider { +public class PhotoPickerActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, PhotoViewer.PhotoViewerProvider, PhotoCropActivity.PhotoEditActivityDelegate { public static interface PhotoPickerActivityDelegate { public abstract void selectedPhotosChanged(); @@ -85,7 +88,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen private boolean searching; private String nextSearchBingString; - private boolean giffySearchEndReached = true; + private boolean giphySearchEndReached = true; private String lastSearchString; private boolean loadingRecent; @@ -184,7 +187,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen searchResultKeys.clear(); lastSearchString = null; nextSearchBingString = null; - giffySearchEndReached = true; + giphySearchEndReached = true; searching = false; requestQueue.cancelAll("search"); if (type == 0) { @@ -204,11 +207,11 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen searchResult.clear(); searchResultKeys.clear(); nextSearchBingString = null; - giffySearchEndReached = true; + giphySearchEndReached = true; if (type == 0) { searchBingImages(editText.getText().toString(), 0, 53); } else if (type == 1) { - searchGiffyImages(editText.getText().toString(), 0, 53); + searchGiphyImages(editText.getText().toString(), 0, 53); } lastSearchString = editText.getText().toString(); if (lastSearchString.length() == 0) { @@ -320,8 +323,8 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen if (visibleItemCount != 0 && firstVisibleItem + visibleItemCount > totalItemCount - 2 && !searching) { if (type == 0 && nextSearchBingString != null) { searchBingImages(lastSearchString, searchResult.size(), 54); - } else if (type == 1 && !giffySearchEndReached) { - searchGiffyImages(searchItem.getSearchField().getText().toString(), searchResult.size(), 54); + } else if (type == 1 && !giphySearchEndReached) { + searchGiphyImages(searchItem.getSearchField().getText().toString(), searchResult.size(), 54); } } } @@ -615,6 +618,20 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen } } + @Override + public void didFinishEdit(Bitmap bitmap, Bundle args) { + TLRPC.PhotoSize size = ImageLoader.scaleAndSaveImage(bitmap, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 80, false, 101, 101); + if (size != null) { + int id = args.getInt("id"); + MediaController.PhotoEntry entry = selectedAlbum.photosByIds.get(id); + entry.imagePath = FileLoader.getPathToAttach(size, true).toString(); + selectedPhotos.put(entry.imageId, entry); + listAdapter.notifyDataSetChanged(); + photoPickerBottomLayout.updateSelectedCount(selectedPhotos.size() + selectedWebPhotos.size(), true); + delegate.selectedPhotosChanged(); + } + } + private void updateSearchInterface() { if (listAdapter != null) { listAdapter.notifyDataSetChanged(); @@ -630,7 +647,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen } } - private void searchGiffyImages(String query, int offset, final int count) { + private void searchGiphyImages(String query, int offset, final int count) { if (searching) { searching = false; requestQueue.cancelAll("search"); @@ -647,7 +664,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen try { JSONObject pagination = response.getJSONObject("pagination"); int total_count = pagination.getInt("total_count"); - giffySearchEndReached = searchResult.size() + result.length() >= total_count; + giphySearchEndReached = searchResult.size() + result.length() >= total_count; } catch (Exception e) { FileLog.e("tmessages", e); } @@ -678,7 +695,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen } } if (!added) { - giffySearchEndReached = true; + giphySearchEndReached = true; } } catch (Exception e) { FileLog.e("tmessages", e); @@ -691,7 +708,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen @Override public void onErrorResponse(VolleyError error) { FileLog.e("tmessages", "Error: " + error.getMessage()); - giffySearchEndReached = true; + giphySearchEndReached = true; searching = false; updateSearchInterface(); } @@ -884,7 +901,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen } else if (type == 0) { return searchResult.size() + (nextSearchBingString == null ? 0 : 1); } else if (type == 1) { - return searchResult.size() + (giffySearchEndReached ? 0 : 1); + return searchResult.size() + (giphySearchEndReached ? 0 : 1); } } return selectedAlbum.photos.size(); @@ -920,9 +937,11 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen MediaController.PhotoEntry photoEntry = selectedAlbum.photos.get((Integer) ((View) v.getParent()).getTag()); if (selectedPhotos.containsKey(photoEntry.imageId)) { selectedPhotos.remove(photoEntry.imageId); + photoEntry.imagePath = null; } else { selectedPhotos.put(photoEntry.imageId, photoEntry); } + ((PhotoPickerPhotoCell) v.getParent()).editedImage.setVisibility(photoEntry.imagePath != null ? View.VISIBLE : View.GONE); ((PhotoPickerPhotoCell) v.getParent()).checkBox.setChecked(selectedPhotos.containsKey(photoEntry.imageId), true); } else { AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus()); @@ -937,6 +956,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen } else { selectedWebPhotos.put(photoEntry.id, photoEntry); } + ((PhotoPickerPhotoCell) v.getParent()).editedImage.setVisibility(View.GONE); ((PhotoPickerPhotoCell) v.getParent()).checkBox.setChecked(selectedWebPhotos.containsKey(photoEntry.id), true); } photoPickerBottomLayout.updateSelectedCount(selectedPhotos.size() + selectedWebPhotos.size(), true); @@ -958,6 +978,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen imageView.setImageResource(R.drawable.nophotos); } cell.checkBox.setChecked(selectedPhotos.containsKey(photoEntry.imageId), false); + cell.editedImage.setVisibility(photoEntry.imagePath != null ? View.VISIBLE : View.GONE); showing = PhotoViewer.getInstance().isShowingImage(photoEntry.path); } else { MediaController.SearchImage photoEntry = null; @@ -972,6 +993,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen imageView.setImageResource(R.drawable.nophotos); } cell.checkBox.setChecked(selectedWebPhotos.containsKey(photoEntry.id), false); + cell.editedImage.setVisibility(View.GONE); showing = PhotoViewer.getInstance().isShowingImage(photoEntry.thumbUrl); } imageView.imageReceiver.setVisible(!showing, false); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index d421bccdd..4def7298d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -34,11 +34,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.WindowManager; -import android.view.animation.AlphaAnimation; -import android.view.animation.Animation; -import android.view.animation.AnimationSet; import android.view.animation.DecelerateInterpolator; -import android.view.animation.ScaleAnimation; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.Scroller; @@ -48,6 +44,7 @@ import org.telegram.android.AndroidUtilities; import org.telegram.android.ContactsController; import org.telegram.android.ImageLoader; import org.telegram.android.MessagesStorage; +import org.telegram.android.query.SharedMediaQuery; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.FileLoader; @@ -108,7 +105,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private PhotoPickerBottomLayout pickerView; private ImageView shareButton; private RadialProgressView radialProgressViews[] = new RadialProgressView[3]; - private GifDrawable gifDrawable = null; + private GifDrawable gifDrawable; + private ActionBarMenuItem editItem; + private AnimatorSetProxy currentActionBarAnimation; private boolean canShowBottom = true; private int animationInProgress = 0; @@ -117,7 +116,6 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private PlaceProviderObject showAfterAnimation; private PlaceProviderObject hideAfterAnimation; private boolean disableShowCheck = false; - private Animation.AnimationListener animationListener; private ImageReceiver leftImage = new ImageReceiver(); private ImageReceiver centerImage = new ImageReceiver(); @@ -189,6 +187,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private final static int gallery_menu_save = 1; private final static int gallery_menu_showall = 2; private final static int gallery_menu_send = 3; + private final static int gallery_menu_edit = 4; private final static int PAGE_SPACING = AndroidUtilities.dp(30); @@ -286,14 +285,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } public void onDraw(Canvas canvas) { - int sizeScaled = (int)(size * scale); + int sizeScaled = (int) (size * scale); int x = (canvas.getWidth() - sizeScaled) / 2; int y = (canvas.getHeight() - sizeScaled) / 2; if (previousBackgroundState >= 0 && previousBackgroundState < 4) { Drawable drawable = progressDrawables[previousBackgroundState]; if (drawable != null) { - drawable.setAlpha((int)(255 * animatedAlphaValue * alpha)); + drawable.setAlpha((int) (255 * animatedAlphaValue * alpha)); drawable.setBounds(x, y, x + sizeScaled, y + sizeScaled); drawable.draw(canvas); } @@ -303,9 +302,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat Drawable drawable = progressDrawables[backgroundState]; if (drawable != null) { if (previousBackgroundState != -2) { - drawable.setAlpha((int)(255 * (1.0f - animatedAlphaValue) * alpha)); + drawable.setAlpha((int) (255 * (1.0f - animatedAlphaValue) * alpha)); } else { - drawable.setAlpha((int)(255 * alpha)); + drawable.setAlpha((int) (255 * alpha)); } drawable.setBounds(x, y, x + sizeScaled, y + sizeScaled); drawable.draw(canvas); @@ -315,9 +314,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (backgroundState == 0 || backgroundState == 1 || previousBackgroundState == 0 || previousBackgroundState == 1) { int diff = AndroidUtilities.dp(1); if (previousBackgroundState != -2) { - progressPaint.setAlpha((int)(255 * animatedAlphaValue * alpha)); + progressPaint.setAlpha((int) (255 * animatedAlphaValue * alpha)); } else { - progressPaint.setAlpha((int)(255 * alpha)); + progressPaint.setAlpha((int) (255 * alpha)); } progressRect.set(x + diff, y + diff, x + sizeScaled - diff, y + sizeScaled - diff); canvas.drawArc(progressRect, -90 + radOffset, Math.max(4, 360 * animatedProgressValue), false, progressPaint); @@ -340,13 +339,21 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat public static interface PhotoViewerProvider { public PlaceProviderObject getPlaceForPhoto(MessageObject messageObject, TLRPC.FileLocation fileLocation, int index); + public Bitmap getThumbForPhoto(MessageObject messageObject, TLRPC.FileLocation fileLocation, int index); + public void willSwitchFromPhoto(MessageObject messageObject, TLRPC.FileLocation fileLocation, int index); + public void willHidePhotoViewer(); + public boolean isPhotoChecked(int index); + public void setPhotoChecked(int index); + public void cancelButtonPressed(); + public void sendButtonPressed(int index); + public int getSelectedCount(); } @@ -373,14 +380,6 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat setWillNotDraw(false); } - @Override - protected void onAnimationEnd() { - super.onAnimationEnd(); - if (getInstance().animationListener != null) { - getInstance().animationListener.onAnimationEnd(null); - } - } - @Override protected void onDraw(Canvas canvas) { getInstance().onDraw(canvas); @@ -388,6 +387,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } private static volatile PhotoViewer Instance = null; + public static PhotoViewer getInstance() { PhotoViewer localInstance = Instance; if (localInstance == null) { @@ -405,7 +405,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat @Override public void didReceivedNotification(int id, Object... args) { if (id == NotificationCenter.FileDidFailedLoad) { - String location = (String)args[0]; + String location = (String) args[0]; for (int a = 0; a < 3; a++) { if (currentFileNames[a] != null && currentFileNames[a].equals(location)) { radialProgressViews[a].setProgress(1.0f, true); @@ -414,7 +414,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } else if (id == NotificationCenter.FileDidLoaded) { - String location = (String)args[0]; + String location = (String) args[0]; for (int a = 0; a < 3; a++) { if (currentFileNames[a] != null && currentFileNames[a].equals(location)) { radialProgressViews[a].setProgress(1.0f, true); @@ -426,7 +426,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } else if (id == NotificationCenter.FileLoadProgressChanged) { - String location = (String)args[0]; + String location = (String) args[0]; for (int a = 0; a < 3; a++) { if (currentFileNames[a] != null && currentFileNames[a].equals(location)) { Float progress = (Float) args[1]; @@ -434,13 +434,13 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } else if (id == NotificationCenter.userPhotosLoaded) { - int guid = (Integer)args[4]; - int uid = (Integer)args[0]; + int guid = (Integer) args[4]; + int uid = (Integer) args[0]; if (avatarsUserId == uid && classGuid == guid) { - boolean fromCache = (Boolean)args[3]; + boolean fromCache = (Boolean) args[3]; int setToImage = -1; - ArrayList photos = (ArrayList)args[5]; + ArrayList photos = (ArrayList) args[5]; if (photos.isEmpty()) { return; } @@ -486,27 +486,27 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } else if (id == NotificationCenter.mediaCountDidLoaded) { - long uid = (Long)args[0]; + long uid = (Long) args[0]; if (uid == currentDialogId) { - if ((int)currentDialogId != 0 && (Boolean)args[2]) { - MessagesController.getInstance().getMediaCount(currentDialogId, classGuid, false); + if ((int) currentDialogId != 0 && (Boolean) args[2]) { + SharedMediaQuery.getMediaCount(currentDialogId, SharedMediaQuery.MEDIA_PHOTOVIDEO, classGuid, false); } - totalImagesCount = (Integer)args[1]; + totalImagesCount = (Integer) args[1]; if (needSearchImageInArr && isFirstLoading) { isFirstLoading = false; loadingMoreImages = true; - MessagesController.getInstance().loadMedia(currentDialogId, 0, 100, 0, true, classGuid); + SharedMediaQuery.loadMedia(currentDialogId, 0, 100, 0, SharedMediaQuery.MEDIA_PHOTOVIDEO, true, classGuid); } else if (!imagesArr.isEmpty()) { actionBar.setTitle(LocaleController.formatString("Of", R.string.Of, (totalImagesCount - imagesArr.size()) + currentIndex + 1, totalImagesCount)); } } } else if (id == NotificationCenter.mediaDidLoaded) { - long uid = (Long)args[0]; - int guid = (Integer)args[4]; + long uid = (Long) args[0]; + int guid = (Integer) args[4]; if (uid == currentDialogId && guid == classGuid) { loadingMoreImages = false; - ArrayList arr = (ArrayList)args[2]; - boolean fromCache = (Boolean)args[3]; + ArrayList arr = (ArrayList) args[2]; + boolean fromCache = (Boolean) args[3]; cacheEndReached = !fromCache; if (needSearchImageInArr) { if (arr.isEmpty()) { @@ -548,7 +548,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } else { if (!cacheEndReached || !arr.isEmpty() && added != 0) { loadingMoreImages = true; - MessagesController.getInstance().loadMedia(currentDialogId, 0, 100, imagesArrTemp.get(0).messageOwner.id, true, classGuid); + SharedMediaQuery.loadMedia(currentDialogId, 0, 100, imagesArrTemp.get(0).messageOwner.id, SharedMediaQuery.MEDIA_PHOTOVIDEO, true, classGuid); } } } else { @@ -601,7 +601,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat containerView = new FrameLayoutDrawer(activity); containerView.setFocusable(false); windowView.addView(containerView); - FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams)containerView.getLayoutParams(); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) containerView.getLayoutParams(); layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; layoutParams.gravity = Gravity.TOP | Gravity.LEFT; @@ -652,10 +652,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (opennedFromMedia) { closePhoto(true); } else if (currentDialogId != 0) { + disableShowCheck = true; closePhoto(false); Bundle args2 = new Bundle(); args2.putLong("dialog_id", currentDialogId); - ((LaunchActivity)parentActivity).presentFragment(new MediaActivity(args2), false, true); + ((LaunchActivity) parentActivity).presentFragment(new MediaActivity(args2), false, true); } } else if (id == gallery_menu_send) { /*Intent intent = new Intent(this, MessagesActivity.class); @@ -690,6 +691,21 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } }*/ + } else if (id == gallery_menu_edit) { + Bundle args = new Bundle(); + Bitmap bitmap = centerImage.getBitmap(); + String key = centerImage.getKey(); + if (bitmap == null) { + args.putString("photoPath", currentPathObject); + } + MediaController.PhotoEntry object = (MediaController.PhotoEntry) imagesArrLocals.get(currentIndex); + args.putInt("id", object.imageId); + args.putBoolean("freeformCrop", true); + args.putBoolean("onlyCrop", true); + PhotoEditorActivity fragment = new PhotoEditorActivity(args, bitmap, key); + fragment.setDelegate((PhotoCropActivity.PhotoEditActivityDelegate) placeProvider); + ((LaunchActivity) parentActivity).presentFragment(fragment, false, true); + closePhoto(false); } } @@ -716,9 +732,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat menuItem.addSubItem(gallery_menu_save, LocaleController.getString("SaveToGallery", R.string.SaveToGallery), 0); menuItem.addSubItem(gallery_menu_showall, LocaleController.getString("ShowAllMedia", R.string.ShowAllMedia), 0); + editItem = menu.addItemWithWidth(gallery_menu_edit, R.drawable.photo_edit, AndroidUtilities.dp(56)); + bottomLayout = new FrameLayout(containerView.getContext()); containerView.addView(bottomLayout); - layoutParams = (FrameLayout.LayoutParams)bottomLayout.getLayoutParams(); + layoutParams = (FrameLayout.LayoutParams) bottomLayout.getLayoutParams(); layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; layoutParams.height = AndroidUtilities.dp(48); layoutParams.gravity = Gravity.BOTTOM | Gravity.LEFT; @@ -764,7 +782,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat intent.setType("image/jpeg"); } intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); - parentActivity.startActivity(intent); + + parentActivity.startActivity(Intent.createChooser(intent, "")); } else { AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity); builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); @@ -802,10 +821,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat ArrayList random_ids = null; TLRPC.EncryptedChat encryptedChat = null; - if ((int)obj.getDialogId() == 0 && obj.messageOwner.random_id != 0) { + if ((int) obj.getDialogId() == 0 && obj.messageOwner.random_id != 0) { random_ids = new ArrayList<>(); random_ids.add(obj.messageOwner.random_id); - encryptedChat = MessagesController.getInstance().getEncryptedChat((int)(obj.getDialogId() >> 32)); + encryptedChat = MessagesController.getInstance().getEncryptedChat((int) (obj.getDialogId() >> 32)); } MessagesController.getInstance().deleteMessages(arr, random_ids, encryptedChat); @@ -868,7 +887,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat nameTextView.setTextColor(0xffffffff); nameTextView.setGravity(Gravity.CENTER); bottomLayout.addView(nameTextView); - layoutParams = (FrameLayout.LayoutParams)nameTextView.getLayoutParams(); + layoutParams = (FrameLayout.LayoutParams) nameTextView.getLayoutParams(); layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT; layoutParams.gravity = Gravity.TOP; @@ -885,7 +904,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat dateTextView.setTextColor(0xffb8bdbe); dateTextView.setGravity(Gravity.CENTER); bottomLayout.addView(dateTextView); - layoutParams = (FrameLayout.LayoutParams)dateTextView.getLayoutParams(); + layoutParams = (FrameLayout.LayoutParams) dateTextView.getLayoutParams(); layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT; layoutParams.gravity = Gravity.TOP; @@ -895,6 +914,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat dateTextView.setLayoutParams(layoutParams); pickerView = new PhotoPickerBottomLayout(parentActivity); + pickerView.setBackgroundColor(0x7f000000); containerView.addView(pickerView); pickerView.cancelButton.setOnClickListener(new View.OnClickListener() { @Override @@ -915,7 +935,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } }); - layoutParams = (FrameLayout.LayoutParams)pickerView.getLayoutParams(); + layoutParams = (FrameLayout.LayoutParams) pickerView.getLayoutParams(); layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; layoutParams.height = AndroidUtilities.dp(48); layoutParams.gravity = Gravity.BOTTOM; @@ -935,7 +955,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat checkImageView.setColor(0xff3ccaef); containerView.addView(checkImageView); checkImageView.setVisibility(View.GONE); - layoutParams = (FrameLayout.LayoutParams)checkImageView.getLayoutParams(); + layoutParams = (FrameLayout.LayoutParams) checkImageView.getLayoutParams(); layoutParams.width = AndroidUtilities.dp(45); layoutParams.height = AndroidUtilities.dp(45); layoutParams.gravity = Gravity.RIGHT; @@ -963,13 +983,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private void toggleCheckImageView(boolean show) { AnimatorSetProxy animatorSet = new AnimatorSetProxy(); animatorSet.playTogether( - ObjectAnimatorProxy.ofFloat(checkImageView, "alpha", show ? 1.0f : 0.0f) + ObjectAnimatorProxy.ofFloat(checkImageView, "alpha", show ? 1.0f : 0.0f), + ObjectAnimatorProxy.ofFloat(pickerView, "alpha", show ? 1.0f : 0.0f) ); animatorSet.setDuration(200); animatorSet.start(); } - private void toggleActionBar(boolean show, boolean animated) { + private void toggleActionBar(boolean show, final boolean animated) { if (show) { actionBar.setVisibility(View.VISIBLE); if (canShowBottom) { @@ -981,25 +1002,28 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat bottomLayout.setEnabled(show); if (animated) { - AnimatorSetProxy animatorSet = new AnimatorSetProxy(); - animatorSet.playTogether( + currentActionBarAnimation = new AnimatorSetProxy(); + currentActionBarAnimation.playTogether( ObjectAnimatorProxy.ofFloat(actionBar, "alpha", show ? 1.0f : 0.0f), ObjectAnimatorProxy.ofFloat(bottomLayout, "alpha", show ? 1.0f : 0.0f) ); if (!show) { - animatorSet.addListener(new AnimatorListenerAdapterProxy() { + currentActionBarAnimation.addListener(new AnimatorListenerAdapterProxy() { @Override public void onAnimationEnd(Object animation) { - actionBar.setVisibility(View.GONE); - if (canShowBottom) { - bottomLayout.setVisibility(View.GONE); + if (currentActionBarAnimation.equals(animation)) { + actionBar.setVisibility(View.GONE); + if (canShowBottom) { + bottomLayout.setVisibility(View.GONE); + } + currentActionBarAnimation = null; } } }); } - animatorSet.setDuration(200); - animatorSet.start(); + currentActionBarAnimation.setDuration(200); + currentActionBarAnimation.start(); } else { ViewProxy.setAlpha(actionBar, show ? 1.0f : 0.0f); ViewProxy.setAlpha(bottomLayout, show ? 1.0f : 0.0f); @@ -1075,7 +1099,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (message.messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) { return message.messageOwner.action.newUserPhoto.photo_big; } else { - TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.messageOwner.action.photo.sizes, AndroidUtilities.getPhotoSize()); + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, AndroidUtilities.getPhotoSize()); if (sizeFull != null) { size[0] = sizeFull.size; if (size[0] == 0) { @@ -1087,7 +1111,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } else if (message.messageOwner.media instanceof TLRPC.TL_messageMediaPhoto && message.messageOwner.media.photo != null) { - TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.messageOwner.media.photo.sizes, AndroidUtilities.getPhotoSize()); + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, AndroidUtilities.getPhotoSize()); if (sizeFull != null) { size[0] = sizeFull.size; if (size[0] == 0) { @@ -1138,7 +1162,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat location.secret = sizeFull.secret; return location; } else { - TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.messageOwner.action.photo.sizes, AndroidUtilities.getPhotoSize()); + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, AndroidUtilities.getPhotoSize()); if (sizeFull != null) { TLRPC.TL_inputFileLocation location = new TLRPC.TL_inputFileLocation(); location.local_id = sizeFull.location.local_id; @@ -1149,7 +1173,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } else if (message.messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) { - TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.messageOwner.media.photo.sizes, AndroidUtilities.getPhotoSize()); + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, AndroidUtilities.getPhotoSize()); if (sizeFull != null) { TLRPC.TL_inputFileLocation location = new TLRPC.TL_inputFileLocation(); location.local_id = sizeFull.location.local_id; @@ -1206,9 +1230,12 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat menuItem.setVisibility(View.VISIBLE); bottomLayout.setVisibility(View.VISIBLE); ViewProxy.setAlpha(checkImageView, 1.0f); + ViewProxy.setAlpha(pickerView, 1.0f); checkImageView.clearAnimation(); + pickerView.clearAnimation(); checkImageView.setVisibility(View.GONE); pickerView.setVisibility(View.GONE); + editItem.setVisibility(View.GONE); for (int a = 0; a < 3; a++) { if (radialProgressViews[a] != null) { radialProgressViews[a].setBackgroundState(-1, false); @@ -1284,17 +1311,26 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat bottomLayout.setVisibility(View.GONE); shareButton.setVisibility(View.VISIBLE); canShowBottom = false; + //editItem.setVisibility(imagesArrLocals.get(index) instanceof MediaController.PhotoEntry ? View.VISIBLE : View.GONE); updateSelectedCount(); } if (currentDialogId != 0 && totalImagesCount == 0) { - MessagesController.getInstance().getMediaCount(currentDialogId, classGuid, true); + SharedMediaQuery.getMediaCount(currentDialogId, SharedMediaQuery.MEDIA_PHOTOVIDEO, classGuid, true); } else if (avatarsUserId != 0) { MessagesController.getInstance().loadUserPhotos(avatarsUserId, 0, 80, 0, true, classGuid); } } - public void setImageIndex(int index, boolean init) { + private void setImages() { + if (animationInProgress == 0) { + setIndexToImage(centerImage, currentIndex); + setIndexToImage(rightImage, currentIndex + 1); + setIndexToImage(leftImage, currentIndex - 1); + } + } + + private void setImageIndex(int index, boolean init) { if (currentIndex == index) { return; } @@ -1332,7 +1368,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (totalImagesCount != 0 && !needSearchImageInArr) { if (imagesArr.size() < totalImagesCount && !loadingMoreImages && currentIndex < 5) { MessageObject lastMessage = imagesArr.get(0); - MessagesController.getInstance().loadMedia(currentDialogId, 0, 100, lastMessage.messageOwner.id, !cacheEndReached, classGuid); + SharedMediaQuery.loadMedia(currentDialogId, 0, 100, lastMessage.messageOwner.id, SharedMediaQuery.MEDIA_PHOTOVIDEO, !cacheEndReached, classGuid); loadingMoreImages = true; } actionBar.setTitle(LocaleController.formatString("Of", R.string.Of, (totalImagesCount - imagesArr.size()) + currentIndex + 1, totalImagesCount)); @@ -1427,9 +1463,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } if (prevIndex == -1) { - setIndexToImage(centerImage, currentIndex); - setIndexToImage(rightImage, currentIndex + 1); - setIndexToImage(leftImage, currentIndex - 1); + setImages(); for (int a = 0; a < 3; a++) { checkProgress(a, false); @@ -1553,6 +1587,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private void setIndexToImage(ImageReceiver imageReceiver, int index) { if (!imagesArrLocals.isEmpty()) { + imageReceiver.setParentMessageObject(null); if (index >= 0 && index < imagesArrLocals.size()) { Object object = imagesArrLocals.get(index); int size = (int) (AndroidUtilities.getPhotoSize() / AndroidUtilities.density); @@ -1584,33 +1619,38 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (!imagesArr.isEmpty()) { messageObject = imagesArr.get(index); } + imageReceiver.setParentMessageObject(messageObject); + if (messageObject != null) { + imageReceiver.setShouldGenerateQualityThumb(true); + } if (messageObject != null && messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaVideo) { - if (messageObject.imagePreview != null) { - imageReceiver.setImageBitmap(messageObject.imagePreview); - } else if (messageObject.messageOwner.media.video.thumb != null) { + imageReceiver.setNeedsQualityThumb(true); + if (messageObject.messageOwner.media.video.thumb != null) { Bitmap placeHolder = null; if (currentThumb != null && imageReceiver == centerImage) { placeHolder = currentThumb; } - imageReceiver.setImage(fileLocation, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, 0, true); + TLRPC.PhotoSize thumbLocation = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 100); + imageReceiver.setImage(null, null, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, thumbLocation.location, "b", 0, true); } else { imageReceiver.setImageBitmap(parentActivity.getResources().getDrawable(R.drawable.photoview_placeholder)); } } else { + imageReceiver.setNeedsQualityThumb(false); Bitmap placeHolder = null; - if (messageObject != null) { - placeHolder = messageObject.imagePreview; - } if (currentThumb != null && imageReceiver == centerImage) { placeHolder = currentThumb; } if (size[0] == 0) { size[0] = -1; } - imageReceiver.setImage(fileLocation, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, size[0], avatarsUserId != 0); + TLRPC.PhotoSize thumbLocation = messageObject != null ? FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 100) : null; + imageReceiver.setImage(fileLocation, null, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, thumbLocation != null ? thumbLocation.location : null, "b", size[0], avatarsUserId != 0); } } else { + imageReceiver.setNeedsQualityThumb(false); + imageReceiver.setParentMessageObject(null); if (size[0] == 0) { imageReceiver.setImageBitmap((Bitmap) null); } else { @@ -1776,6 +1816,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat @Override public void run() { animationInProgress = 0; + setImages(); transitionAnimationStartTime = 0; containerView.invalidate(); animatingImageView.setVisibility(View.GONE); @@ -1843,7 +1884,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat final PlaceProviderObject object = placeProvider.getPlaceForPhoto(currentMessageObject, currentFileLocation, currentIndex); - if(animated) { + if (animated) { AndroidUtilities.lockOrientation(parentActivity); animationInProgress = 1; @@ -1948,48 +1989,36 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat transitionAnimationStartTime = System.currentTimeMillis(); animatorSet.start(); } else { - AnimationSet animationSet = new AnimationSet(true); - AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f); - animation.setDuration(150); - animation.setFillAfter(false); - animationSet.addAnimation(animation); - ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 0.9f, 1.0f, 0.9f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); - scaleAnimation.setDuration(150); - scaleAnimation.setFillAfter(false); - animationSet.addAnimation(scaleAnimation); - animationSet.setDuration(150); + AnimatorSetProxy animatorSet = new AnimatorSetProxy(); + animatorSet.playTogether( + ObjectAnimatorProxy.ofFloat(containerView, "scaleX", 0.9f), + ObjectAnimatorProxy.ofFloat(containerView, "scaleY", 0.9f), + ObjectAnimatorProxy.ofInt(backgroundDrawable, "alpha", 0), + ObjectAnimatorProxy.ofFloat(containerView, "alpha", 0.0f) + ); animationInProgress = 2; animationEndRunnable = new Runnable() { @Override public void run() { - if (animationListener != null) { - animationInProgress = 0; - onPhotoClosed(object); - animationListener = null; - } + animationInProgress = 0; + onPhotoClosed(object); + ViewProxy.setScaleX(containerView, 1.0f); + ViewProxy.setScaleY(containerView, 1.0f); + containerView.clearAnimation(); } }; - animationSet.setAnimationListener(animationListener = new Animation.AnimationListener() { + animatorSet.setDuration(200); + animatorSet.addListener(new AnimatorListenerAdapterProxy() { @Override - public void onAnimationStart(Animation animation) { - - } - - @Override - public void onAnimationEnd(Animation animation) { + public void onAnimationEnd(Object animation) { if (animationEndRunnable != null) { animationEndRunnable.run(); animationEndRunnable = null; } } - - @Override - public void onAnimationRepeat(Animation animation) { - - } }); transitionAnimationStartTime = System.currentTimeMillis(); - containerView.startAnimation(animationSet); + animatorSet.start(); } } @@ -2025,9 +2054,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat radialProgressViews[a].setBackgroundState(-1, false); } } - centerImage.setImageBitmap((Bitmap)null); - leftImage.setImageBitmap((Bitmap)null); - rightImage.setImageBitmap((Bitmap)null); + centerImage.setImageBitmap((Bitmap) null); + leftImage.setImageBitmap((Bitmap) null); + rightImage.setImageBitmap((Bitmap) null); containerView.post(new Runnable() { @Override public void run() { @@ -2081,7 +2110,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return false; } - if(ev.getPointerCount() == 1 && gestureDetector.onTouchEvent(ev)) { + if (ev.getPointerCount() == 1 && gestureDetector.onTouchEvent(ev)) { if (doubleTap) { doubleTap = false; moving = false; @@ -2121,9 +2150,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } else if (ev.getActionMasked() == MotionEvent.ACTION_MOVE) { - discardTap = true; if (canZoom && ev.getPointerCount() == 2 && !draggingDown && zooming && !changingPage) { - scale = (float)Math.hypot(ev.getX(1) - ev.getX(0), ev.getY(1) - ev.getY(0)) / pinchStartDistance * pinchStartScale; + discardTap = true; + scale = (float) Math.hypot(ev.getX(1) - ev.getX(0), ev.getY(1) - ev.getY(0)) / pinchStartDistance * pinchStartScale; translationX = (pinchCenterX - containerView.getWidth() / 2) - ((pinchCenterX - containerView.getWidth() / 2) - pinchStartX) * (scale / pinchStartScale); translationY = (pinchCenterY - containerView.getHeight() / 2) - ((pinchCenterY - containerView.getHeight() / 2) - pinchStartY) * (scale / pinchStartScale); updateMinMax(scale); @@ -2134,6 +2163,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } float dx = Math.abs(ev.getX() - moveStartX); float dy = Math.abs(ev.getY() - dragY); + if (dx > AndroidUtilities.dp(3) || dy > AndroidUtilities.dp(3)) { + discardTap = true; + } if (canDragDown && !draggingDown && scale == 1 && dy >= AndroidUtilities.dp(30) && dy / 2 > dx) { draggingDown = true; moving = false; @@ -2141,6 +2173,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (isActionBarVisible && canShowBottom) { toggleActionBar(false, true); } else if (checkImageView.getVisibility() == View.VISIBLE) { + toggleActionBar(false, true); toggleCheckImageView(false); } return true; @@ -2197,7 +2230,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (scale < 1.0f) { updateMinMax(1.0f); animateTo(1.0f, 0, 0, true); - } else if(scale > 3.0f) { + } else if (scale > 3.0f) { float atx = (pinchCenterX - containerView.getWidth() / 2) - ((pinchCenterX - containerView.getWidth() / 2) - pinchStartX) * (3.0f / pinchStartScale); float aty = (pinchCenterY - containerView.getHeight() / 2) - ((pinchCenterY - containerView.getHeight() / 2) - pinchStartY) * (3.0f / pinchStartScale); updateMinMax(3.0f); @@ -2221,6 +2254,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat closePhoto(true); } else { if (checkImageView.getVisibility() == View.VISIBLE) { + toggleActionBar(true, true); toggleCheckImageView(true); } animateTo(1, 0, 0); @@ -2238,11 +2272,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat velocity = velocityTracker.getXVelocity(); } - if((translationX < minX - containerView.getWidth() / 3 || velocity < -AndroidUtilities.dp(650)) && rightImage.hasImage()){ + if ((translationX < minX - containerView.getWidth() / 3 || velocity < -AndroidUtilities.dp(650)) && rightImage.hasImage()) { goToNext(); return true; } - if((translationX > maxX + containerView.getWidth() / 3 || velocity > AndroidUtilities.dp(650)) && leftImage.hasImage()){ + if ((translationX > maxX + containerView.getWidth() / 3 || velocity > AndroidUtilities.dp(650)) && leftImage.hasImage()) { goToPrev(); return true; } @@ -2331,7 +2365,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat float ai = -1; if (System.currentTimeMillis() - animationStartTime < animationDuration) { - ai = interpolator.getInterpolation((float)(System.currentTimeMillis() - animationStartTime) / animationDuration); + ai = interpolator.getInterpolation((float) (System.currentTimeMillis() - animationStartTime) / animationDuration); if (ai >= 1.0f) { ai = -1; } @@ -2475,7 +2509,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (gifDrawable != null) { canvas.save(); - gifDrawable.setAlpha((int)(alpha * 255)); + gifDrawable.setAlpha((int) (alpha * 255)); gifDrawable.setBounds(-width / 2, -height / 2, width / 2, height / 2); gifDrawable.draw(canvas); canvas.restore(); @@ -2526,7 +2560,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat @SuppressLint("DrawAllocation") private void onLayout(boolean changed, int left, int top, int right, int bottom) { - if(changed) { + if (changed) { scale = 1; translationX = 0; translationY = 0; @@ -2537,8 +2571,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat @Override public boolean onPreDraw() { checkImageView.getViewTreeObserver().removeOnPreDrawListener(this); - FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams)checkImageView.getLayoutParams(); - WindowManager manager = (WindowManager)ApplicationLoader.applicationContext.getSystemService(Activity.WINDOW_SERVICE); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) checkImageView.getLayoutParams(); + WindowManager manager = (WindowManager) ApplicationLoader.applicationContext.getSystemService(Activity.WINDOW_SERVICE); int rotation = manager.getDefaultDisplay().getRotation(); if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) { layoutParams.topMargin = AndroidUtilities.dp(58); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java index 38cb6264c..5c9dcae8a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java @@ -13,6 +13,7 @@ import android.app.KeyguardManager; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.PowerManager; import android.text.TextUtils; @@ -45,7 +46,6 @@ import org.telegram.android.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.TLRPC; import org.telegram.android.MessageObject; -import org.telegram.android.PhotoObject; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; import org.telegram.ui.Components.AvatarDrawable; @@ -524,7 +524,8 @@ public class PopupNotificationActivity extends Activity implements NotificationC imageView.imageReceiver.setAspectFit(true); if (messageObject.type == 1) { - PhotoObject currentPhotoObject = PhotoObject.getClosestImageWithSize(messageObject.photoThumbs, AndroidUtilities.getPhotoSize()); + TLRPC.PhotoSize currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, AndroidUtilities.getPhotoSize()); + TLRPC.PhotoSize thumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 100); boolean photoSet = false; if (currentPhotoObject != null) { boolean photoExist = true; @@ -535,11 +536,11 @@ public class PopupNotificationActivity extends Activity implements NotificationC } } if (photoExist || MediaController.getInstance().canDownloadMedia(MediaController.AUTODOWNLOAD_MASK_PHOTO)) { - imageView.setImage(currentPhotoObject.photoOwner.location, "100_100", messageObject.imagePreview, currentPhotoObject.photoOwner.size); + imageView.setImage(currentPhotoObject.location, "100_100", thumb.location, currentPhotoObject.size); photoSet = true; } else { - if (messageObject.imagePreview != null) { - imageView.setImageBitmap(messageObject.imagePreview); + if (thumb != null) { + imageView.setImage(thumb.location, null, (Drawable) null); photoSet = true; } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java index ce0e88cc3..fe5284968 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java @@ -8,12 +8,15 @@ package org.telegram.ui; +import android.animation.ObjectAnimator; +import android.animation.StateListAnimator; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.Outline; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -24,6 +27,7 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewOutlineProvider; import android.view.ViewTreeObserver; import android.widget.AbsListView; import android.widget.AdapterView; @@ -38,6 +42,7 @@ import org.telegram.android.LocaleController; import org.telegram.android.MessagesStorage; import org.telegram.android.SecretChatHelper; import org.telegram.android.SendMessagesHelper; +import org.telegram.android.query.SharedMediaQuery; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.TLRPC; @@ -170,14 +175,12 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } - NotificationCenter.getInstance().addObserver(this, NotificationCenter.chatInfoDidLoaded); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeChats); sortedUsers = new ArrayList<>(); updateOnlineCount(); if (chat_id > 0) { - MessagesController.getInstance().getMediaCount(-chat_id, classGuid, true); + SharedMediaQuery.getMediaCount(-chat_id, SharedMediaQuery.MEDIA_PHOTOVIDEO, classGuid, true); } avatarUpdater = new AvatarUpdater(); @@ -196,6 +199,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. NotificationCenter.getInstance().addObserver(this, NotificationCenter.mediaCountDidLoaded); NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeChats); updateRowsIds(); return true; @@ -206,6 +210,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. super.onFragmentDestroy(); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.mediaCountDidLoaded); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateInterfaces); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); if (user_id != 0) { NotificationCenter.getInstance().removeObserver(this, NotificationCenter.contactsDidLoaded); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.encryptedChatCreated); @@ -214,7 +219,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. MessagesController.getInstance().cancelLoadFullUser(user_id); } else if (chat_id != 0) { NotificationCenter.getInstance().removeObserver(this, NotificationCenter.chatInfoDidLoaded); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); avatarUpdater.clear(); } } @@ -547,21 +551,36 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. }); } if (dialog_id != 0) { - MessagesController.getInstance().getMediaCount(dialog_id, classGuid, true); + SharedMediaQuery.getMediaCount(dialog_id, SharedMediaQuery.MEDIA_PHOTOVIDEO, classGuid, true); } else { - MessagesController.getInstance().getMediaCount(user_id, classGuid, true); + SharedMediaQuery.getMediaCount(user_id, SharedMediaQuery.MEDIA_PHOTOVIDEO, classGuid, true); } frameLayout.addView(actionBar); if (user_id != 0 || chat_id >= 0 && !currentChat.left) { writeButton = new ImageView(getParentActivity()); + writeButton.setBackgroundResource(R.drawable.floating_user_states); + writeButton.setScaleType(ImageView.ScaleType.CENTER); if (user_id != 0) { - writeButton.setImageResource(R.drawable.floating_user_states); + writeButton.setImageResource(R.drawable.floating_message); + writeButton.setPadding(0, AndroidUtilities.dp(3), 0, 0); } else if (chat_id != 0) { - writeButton.setImageResource(R.drawable.floating_group_states); + writeButton.setImageResource(R.drawable.floating_camera); } frameLayout.addView(writeButton); + if (Build.VERSION.SDK_INT >= 21) { + StateListAnimator animator = new StateListAnimator(); + animator.addState(new int[] {android.R.attr.state_pressed}, ObjectAnimator.ofFloat(writeButton, "translationZ", AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200)); + animator.addState(new int[] {}, ObjectAnimator.ofFloat(writeButton, "translationZ", AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200)); + writeButton.setStateListAnimator(animator); + writeButton.setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56)); + } + }); + } layoutParams = (FrameLayout.LayoutParams) writeButton.getLayoutParams(); layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT; @@ -580,6 +599,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (user == null || user instanceof TLRPC.TL_userEmpty) { return; } + NotificationCenter.getInstance().removeObserver(ProfileActivity.this, NotificationCenter.closeChats); NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); Bundle args = new Bundle(); args.putInt("user_id", user_id); @@ -814,6 +834,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. AndroidUtilities.runOnUIThread(new Runnable() { @Override public void run() { + NotificationCenter.getInstance().removeObserver(ProfileActivity.this, NotificationCenter.closeChats); NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); TLRPC.EncryptedChat encryptedChat = (TLRPC.EncryptedChat) args[0]; Bundle args2 = new Bundle(); @@ -1082,7 +1103,11 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. AvatarDrawable avatarDrawable = new AvatarDrawable(user); avatarImage.setImage(photo, "50_50", avatarDrawable); - nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); + if (user instanceof TLRPC.TL_userDeleted) { + nameTextView.setText(LocaleController.getString("HiddenName", R.string.HiddenName)); + } else { + nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); + } onlineTextView.setText(LocaleController.formatUserStatus(user)); avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false); @@ -1166,6 +1191,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (dialog_id != 0) { Bundle args = new Bundle(); args.putBoolean("scrollToTopOnResume", true); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); int lower_part = (int)dialog_id; if (lower_part != 0) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileNotificationsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileNotificationsActivity.java index e569eedcb..3675c7633 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileNotificationsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileNotificationsActivity.java @@ -30,14 +30,13 @@ import android.widget.ListView; import org.telegram.android.AndroidUtilities; import org.telegram.android.MessagesController; import org.telegram.android.MessagesStorage; +import org.telegram.android.NotificationsController; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.FileLog; import org.telegram.android.LocaleController; import org.telegram.android.NotificationCenter; import org.telegram.messenger.R; -import org.telegram.messenger.RPCRequest; -import org.telegram.messenger.TLObject; import org.telegram.messenger.TLRPC; import org.telegram.ui.Adapters.BaseFragmentAdapter; import org.telegram.ui.Cells.TextColorCell; @@ -162,18 +161,23 @@ public class ProfileNotificationsActivity extends BaseFragment implements Notifi LocaleController.getString("Disabled", R.string.Disabled) }, new DialogInterface.OnClickListener() { @Override - public void onClick(DialogInterface dialog, int which) { + public void onClick(DialogInterface d, int which) { SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putInt("notify2_" + dialog_id, which); MessagesStorage.getInstance().setDialogFlags(dialog_id, which == 2 ? 1 : 0); editor.commit(); + TLRPC.TL_dialog dialog = MessagesController.getInstance().dialogs_dict.get(dialog_id); + if (dialog != null) { + dialog.notify_settings = new TLRPC.TL_peerNotifySettings(); + if (which == 2) { + dialog.notify_settings.mute_until = Integer.MAX_VALUE; + } + } if (listView != null) { listView.invalidateViews(); } - if (i == settingsNotificationsRow) { - updateServerNotificationsSettings(); - } + NotificationsController.updateServerNotificationsSettings(dialog_id); } }); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); @@ -298,45 +302,6 @@ public class ProfileNotificationsActivity extends BaseFragment implements Notifi return fragmentView; } - public void updateServerNotificationsSettings() { - if ((int)dialog_id == 0) { - return; - } - SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); - TLRPC.TL_account_updateNotifySettings req = new TLRPC.TL_account_updateNotifySettings(); - req.settings = new TLRPC.TL_inputPeerNotifySettings(); - req.settings.sound = "default"; - req.settings.events_mask = 0; - req.settings.mute_until = preferences.getInt("notify2_" + dialog_id, 0) != 2 ? 0 : Integer.MAX_VALUE; - req.settings.show_previews = preferences.getBoolean("preview_" + dialog_id, true); - - req.peer = new TLRPC.TL_inputNotifyPeer(); - - if ((int)dialog_id < 0) { - ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerChat(); - ((TLRPC.TL_inputNotifyPeer)req.peer).peer.chat_id = -(int)dialog_id; - } else { - TLRPC.User user = MessagesController.getInstance().getUser((int)dialog_id); - if (user == null) { - return; - } - if (user instanceof TLRPC.TL_userForeign || user instanceof TLRPC.TL_userRequest) { - ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerForeign(); - ((TLRPC.TL_inputNotifyPeer)req.peer).peer.access_hash = user.access_hash; - } else { - ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerContact(); - } - ((TLRPC.TL_inputNotifyPeer)req.peer).peer.user_id = (int)dialog_id; - } - - ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { - @Override - public void run(TLObject response, TLRPC.TL_error error) { - - } - }); - } - @Override public void onActivityResultFragment(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { @@ -451,6 +416,19 @@ public class ProfileNotificationsActivity extends BaseFragment implements Notifi textCell.setTextAndValue(LocaleController.getString("Notifications", R.string.Notifications), LocaleController.getString("Enabled", R.string.Enabled), true); } else if (value == 2) { textCell.setTextAndValue(LocaleController.getString("Notifications", R.string.Notifications), LocaleController.getString("Disabled", R.string.Disabled), true); + } else if (value == 3) { + int delta = preferences.getInt("notifyuntil_" + dialog_id, 0) - ConnectionsManager.getInstance().getCurrentTime(); + String val; + if (delta <= 0) { + val = LocaleController.getString("Enabled", R.string.Enabled); + } else if (delta < 60 * 60) { + val = LocaleController.formatString("WillUnmuteIn", R.string.WillUnmuteIn, LocaleController.formatPluralString("Minutes", delta / 60)); + } else if (delta < 60 * 60 * 24) { + val = LocaleController.formatString("WillUnmuteIn", R.string.WillUnmuteIn, LocaleController.formatPluralString("Hours", (int) Math.ceil(delta / 60.0f / 60))); + } else { + val = LocaleController.formatString("WillUnmuteIn", R.string.WillUnmuteIn, LocaleController.formatPluralString("Days", (int) Math.ceil(delta / 60.0f / 60 / 24))); + } + textCell.setTextAndValue(LocaleController.getString("Notifications", R.string.Notifications), val, true); } } else if (i == settingsSoundRow) { String value = preferences.getString("sound_" + dialog_id, LocaleController.getString("Default", R.string.Default)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SecretPhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/SecretPhotoViewer.java index bf4d87784..ef77d39e2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SecretPhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SecretPhotoViewer.java @@ -256,12 +256,12 @@ public class SecretPhotoViewer implements NotificationCenter.NotificationCenterD NotificationCenter.getInstance().addObserver(this, NotificationCenter.messagesDeleted); NotificationCenter.getInstance().addObserver(this, NotificationCenter.didCreatedNewDeleteTask); - TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(messageObject.messageOwner.media.photo.sizes, AndroidUtilities.getPhotoSize()); + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, AndroidUtilities.getPhotoSize()); int size = sizeFull.size; if (size == 0) { size = -1; } - BitmapDrawable drawable = ImageLoader.getInstance().getImageFromMemory(sizeFull.location, null, null, null); + BitmapDrawable drawable = ImageLoader.getInstance().getImageFromMemory(sizeFull.location, null, null); if (drawable == null) { File file = FileLoader.getPathToAttach(sizeFull); Bitmap bitmap = null; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SettingsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/SettingsActivity.java index 0296a89d4..31efa3080 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SettingsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SettingsActivity.java @@ -8,6 +8,8 @@ package org.telegram.ui; +import android.animation.ObjectAnimator; +import android.animation.StateListAnimator; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; @@ -18,7 +20,9 @@ import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.Outline; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.text.Html; import android.text.Spannable; @@ -31,6 +35,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewOutlineProvider; import android.view.ViewTreeObserver; import android.widget.AbsListView; import android.widget.AdapterView; @@ -596,7 +601,21 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter frameLayout.addView(actionBar); writeButton = new ImageView(getParentActivity()); - writeButton.setImageResource(R.drawable.floating_group_states); + writeButton.setBackgroundResource(R.drawable.floating_user_states); + writeButton.setImageResource(R.drawable.floating_camera); + writeButton.setScaleType(ImageView.ScaleType.CENTER); + if (Build.VERSION.SDK_INT >= 21) { + StateListAnimator animator = new StateListAnimator(); + animator.addState(new int[] {android.R.attr.state_pressed}, ObjectAnimator.ofFloat(writeButton, "translationZ", AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200)); + animator.addState(new int[] {}, ObjectAnimator.ofFloat(writeButton, "translationZ", AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200)); + writeButton.setStateListAnimator(animator); + writeButton.setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56)); + } + }); + } frameLayout.addView(writeButton); layoutParams = (FrameLayout.LayoutParams) writeButton.getLayoutParams(); layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/WallpapersActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/WallpapersActivity.java index 5f0c6a45b..5b428a431 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/WallpapersActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/WallpapersActivity.java @@ -225,7 +225,7 @@ public class WallpapersActivity extends BaseFragment implements NotificationCent Utilities.addMediaToGallery(currentPicturePath); try { Point screenSize = AndroidUtilities.getRealScreenSize(); - Bitmap bitmap = ImageLoader.loadBitmap(currentPicturePath, null, screenSize.x, screenSize.y); + Bitmap bitmap = ImageLoader.loadBitmap(currentPicturePath, null, screenSize.x, screenSize.y, true); File toFile = new File(ApplicationLoader.applicationContext.getFilesDir(), "wallpaper-temp.jpg"); FileOutputStream stream = new FileOutputStream(toFile); bitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream); @@ -242,7 +242,7 @@ public class WallpapersActivity extends BaseFragment implements NotificationCent } try { Point screenSize = AndroidUtilities.getRealScreenSize(); - Bitmap bitmap = ImageLoader.loadBitmap(null, data.getData(), screenSize.x, screenSize.y); + Bitmap bitmap = ImageLoader.loadBitmap(null, data.getData(), screenSize.x, screenSize.y, true); File toFile = new File(ApplicationLoader.applicationContext.getFilesDir(), "wallpaper-temp.jpg"); FileOutputStream stream = new FileOutputStream(toFile); bitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream); diff --git a/TMessagesProj/src/main/res/drawable-hdpi/floating.png b/TMessagesProj/src/main/res/drawable-hdpi/floating.png index 419d0b8219c49a642bb0b8130eeda4f8d57409b2..99fdffa700825bb59b695ea942834efdb02922e5 100755 GIT binary patch delta 3094 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 delta 3500 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 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/floating3_profile_m.png b/TMessagesProj/src/main/res/drawable-hdpi/floating3_profile_m.png new file mode 100755 index 0000000000000000000000000000000000000000..834d0195a910fe1cc74d461dc52b045ea3f9c5be GIT binary patch literal 2124 zcmaJ?c~lek8V!pC*{l|{0zw)sG$>hs1QLNjAXLyGCdl&G49NrnBoihB1Z0s-9tuTT z6c^G0Dm}p>Xx$1*6vaxVNJRmyvXpuNS!C590&il)zCRvs&dmIlx%YnG_xtWSlkeyI zm7$)g9twpr^xomgMn-@2qpO3w&0{~gg$x^EW)RE)1#l7<0#NRJFcQFci?~q$8{qPj z<68h{6iN##^bdlASi5LEP=x2IF?g9sg0N92XSz(n<;4OpCK8Aeie0d;8kAU!kne&G zB(sPti3boZ+>rtSoD^SwUP>&F%E!`OG0rj?A|L`_E=DGb6H93_7wmgo8ZuXJ6R?=~ z5IEKa`*%`7EI*6~2mu%}-rkl+B#|%_3ZCRZrcg-RFm^*xA`42wQ2g80N}s#nR2o z3Z8(J2MHyx5ENt7irh#r0d~P6nf_gZNb*ruEd6jy$bk`LTnT}MC#p+Y2C`WHA1V@k zL`z{d@K3(~Q&{SsECC2?Knf;6Jfv}g&FWARng;}MVG!~M!MNp9^os^zP#O(NFdiHV z=F32#m=7jNaqsag7R_5Mg}GuL;O*&xMHKKtA)m%@ac|6MTImG0za3)?m&WUd1?T6RX>ys2tUc?;ZNI?i zcemflJz|wLsTHetH>U_gu3;6JXg)o7r(h{#u)tt!S8ta*85Fe9=dA62Yn^!>(f0GJ zo;TwzwN`T9otlrd>00zvbj2&n%+e+A}1X z*>#ij)na(2!LeUD5vu%f?6^y6?tBGo(>(>RPUl8y}gwd2y>s*CKxIHh%uX+=N)Q z;o9a~L}pQqM^VC6i~W_@OTpV0S?urL8jW{;9yGf4X$|itl#5FlrN@LsYSGp#YL91c z@R^IPxblJ{3i0MNu6NZ_esNUst;E`SuU`4=1Wv_N#2Ge$Fa57ZyOj=I65sI8OMj@i z@G3aqh$~DgtHvI$6tRSV$Tb1$1?u(S>fLeEYn9eEN;fJxJ*+yg)<(-ZZK%OiZdLr| zdXP*b?6g)7jYq9f_8U$dCF1D2=Z&(HBNDCOw-vXXFUKiE?E)iT7Dj}} z*D2RqyfLdl8&(a*O_ulS0zb@WZ<$XKtSjl9Q4X0@%o|oIg$)-^+B3RFh%E=+7Ckhi z4L&fdxS?Y&DS5sAkYBjB=~0z<_SiYu;gqvOCW>deV-CkFJOyEM?8e*OIRW#nB~kYl z1q)GUzU{D)Z8NJ7>DW)T48M3*0+OwYAD=umr5t(p+&H|fs}|F4J@MzsNlB%k>K$#M zZ`X+KrDi85j(#S^41E>X8*N^uD0Z_X8?{|3b1OAPN5x>;|AoNxos3v!=%mP;9(x0E zW)I1r4emNn|M-kX!nxI&3mr~Q9Zs2Fe};~#_byKyZj+y1I|LxC($#P`@~Q5*X1t7% z703r4${j6=6I{1*D%(CQx_43#t-tA6bSDFiU)QiNlyP|UF2wncCJ1GW$X@5#MirdT zy1#KQ@6)^1b-p{=#6ZY8iv|82$j9Rey)|@Q+vPuT1Am1mLXXd3OD>AYi>Eufu9#M( zDkrBN?P=l2Td!ChVa zP?^L6RtmYWFB>1N9b mLsdOLfV*aRK4|uPlokqSyt8pT)b)q@|L)E7^*qnmm-Qd6IB;PA literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/floating3_profile_pressed.png b/TMessagesProj/src/main/res/drawable-hdpi/floating3_profile_pressed.png index 916e21b9e6a3d6d04ae32bca5889c68a79b3c1c1..82f31bdfa5d560fe66ca8b447d23f519fc8f9fbc 100755 GIT binary patch delta 3116 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 delta 3204 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 iUh?fCzC!k}$^3km<=ml{A diff --git a/TMessagesProj/src/main/res/drawable-hdpi/floating4_profile.png b/TMessagesProj/src/main/res/drawable-hdpi/floating4_profile.png deleted file mode 100755 index 69e720a6912eb834de161e9cd15c2706d17e220b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4136 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/floating_m.png b/TMessagesProj/src/main/res/drawable-hdpi/floating_m.png new file mode 100755 index 0000000000000000000000000000000000000000..7b5f02ca52ad8676f2e8e75838044932d6555c15 GIT binary patch literal 2222 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 delta 3479 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/ic_directory.png b/TMessagesProj/src/main/res/drawable-hdpi/ic_directory.png index e3dccd29834b99766fcd9ebd15279b56e1383e00..f0cc429d5a83e963567374f99ce5f8569fba12b2 100755 GIT binary patch literal 1593 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|(=tOMN+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+WJvVozYf|;3~p^2%P znW2t?k%6I+z5x)K=^C0?nVMM{nJYkn6417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM> zv0i>ry1t>Mr6tG=BO_g)3fZ zE`@j@x4_pIZg5^PG@yV%reBd*pl_&Wpr4xy@)uZjaY;}r!Wmdq7l%|9r0NHy7U!21 zB?IFlO&O*c7&4a6BsFpIWGChrManjC7v#}N7bgpIXLDC0 zXLCmrR}(`+M+0M57iSk2HzNZRLsK_rm>Jmgx|%qdI5`;^19iF@8oHWT7@M0oT3P~) z18TH%bA;*j%quQQ%u7y%*_#Qp7pm6?uU;$XqSVBa{GyQj{2W*c2*}7U$uG{xFHmp} zHdD|D&&*57FE7>vMGwTcE~!PCWvMA{Mftf3;PAD|#9}{Te?#=9kP~M5K*#8V5(iRZ zfe8UqAczT1`aljm^Q7hhb4(F1Ys?U6{>#9?l7*cWT&1~|uC0gCz z!fd@aKjnC%HEpK{|JAZaEmMKGb<0gBbqg6t@NE0+z1TxgqJHMb8HG9QzUu9_x{S~4 zTg~fYv3kYSIf4`01)QqNvwRq*9M4g`DdzC}%&Mh~yRVqNDdrNrqW7ja?7>P$>w}?; zhijw7b`^6RvibRVuH22}4Sci09cBeQsPRf*h+Ukjnfzce)8SI<*5uL?H|)BPY**&k zEuT1RW|Tp1ZMkEzbAsUO$M+UaV!W5hblUm-tr>;xO+^#yiX!h2%3F7s%1qCmnj1O$`zGtQ z^1}u-b~1eHw>(sz`1-O5Z~yV+6*o?^zE5;Nw!1c=e)FRD?13VzU3=erI1p5vCx1h7 z;dPr2I?3UNTcX>IZZ!LNFTboA7W7g0ljQM_-U2N7%(H(SvJz!4d0}&@M)0JFcoZZ5 zS@9_5)6@DR7O0tdN=OH3aP)UrZ{R%;#@W#6y5|XB4s$`OU;*oarLG5_%HCj0@Q7+< z-N5>1bHx6N2*#crUYe6*I|Izt3w*NsaIJ@Z8dr8i*+SW$0gT+|rKHZS2(&n$bp76i zg0{Jg|DAUA6$&3O3OsDq=qS$IsDCzV<;;^s%?ZW#c3*FBT&c*)ny9maTcWG;2t&e+ zHDR3$%3{}M9@}tpt!`(ow@v4=$lV#;7uK1s-JEum^~={g+a&q9dH&@4E@<5*ch7u! z*@;zopr0Co>arvLx| literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeOgEbxddW?^nVhJh{2^n%&MU+`=hB%&1n8%7|2M)dZQlR*%m(}^IJMyG?G0EG-vNM!7$dx2C2jn1I>0PijWriLgY z8KE5BJ1uO*Bt)aAhCw35#l;chyooRpMFRc&{45+4iWg?#rHxmkGQF2t>psrFfwXc& zsX>*n8n7_RB48cLBw(J7g`m=iMDK~!+INY?Zy3uFC3YyXSPm@LsUS5f;4lf;7otL`U~qzb zeb_!+3fqT880)kwsFN;m(f__|Y zZyLv!PW2wg3e;Lurj|qFx=Kv<9hUo1EQ5_eG89I{FdREx0V|?m6xK$=8i2iu4lE2) zsuggYc9G?H#-imwh;j?0;32RIc$;5_@&o$+9rqYk@qcng!ki&lisN6!GQNdXpk?~L z^s&YJ=7H2$#~@g1@aJF5#yT!dz+s8?odbu1n>xu(hTJT>bJit~ycXBF8fK%xRnnEE zr#p?+C%4{WPS%<7_}%3`hNXb6$Gv1=TZ7Sw&wN~YJ}(O&!48^n1Hm=CY82M@35uNJ z^IAfCckSvawR(W`FKaxyM13T1^M;XMSUX(|t)(u`!!|8TJ=4o4#FQVDG&-eE`}9en zRikYNzQ%=oBrNFm)g6XI@Lxke*tJbrJ+Ivr=nn186-se5{^jdD&GFinvq^P{FOMW9 zPHm{(f3U=L!tFh=DazQnHpTbtJ?p^LE{g?*#+fPo#~WooZc0mS!=$RQk@!_#{(g+lVtzr zu~LigMJaL~uuk0`m=Bp9rRm17 zN?@>JXq&x>ym7%$=dpeuhwf2V9R=(*KX{E?T7P%bg-s`Jy%ODgIhqu(HLYh|ahtnM zqPgO9`;(eS(j}~>ha9jYJG4)@ZtBF*%(}ce`L`cC?+tUgS7l$;F|j=OyPNq1x@t$8 zfL?Q_$DB#gYf?&bHu$lv2JC9uV=KD8^p##{J|leNQ^akWX1jHAjFqg%wl?3xYSbvW zgTLl>IB0!jbx}R)`19Um)%tz44hf`ryHo3=gA4F&Rh79R1@&{Xqx$a51E=ngpGsDV z>(&w%>Yuvg3{wvY-*CQHoQho$<6w2ITrrQlhy5_$J=(gErlA+AD@KL5!5p%q>DVJ& zq3pQZ?L3lmYjVb7%7MLSmX&R$IE5FUS=MgcZj+vu-6fgXonkTwGKHO5i8_-ya6bk9 z=_Iq4ok>l?^(JQ;M&f$?aaG$M^p-F6N?$(Y>(_FYUAaFy*IIhmE+n?C!ENIwhkA2H zelM}>Px4fG2yy(w&B`9Z+(L6h>y->+G1PUjMo?x}BrlaUe+%?$x9o!a-L`@g`)sC+ zxR~-v0u!#@e~3>mG8tIF=KP$lthoy&39;)w`tT?`qpdJ~8SzCb$~?NH7FRr2aNdI_;%@-|DsHMgRZ+ literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL0wmRZ7KH&Rg=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWO>_%)r1c48n{Iv*t(u z1>btQIEF+VetRR9tI0ut{e!L3J+)Uyty%Vo#wIN=*}gaQ;!-6IjjcY)OM)`((^Qgw z?BAjE@5s&2GM0{aN)oT-W;g$mii~->GnuRCtc*gz;cK@-X7adwn_;r(R8Fp8u~z$H zS+Q{QfU7%;p4j*QJ-#9?l3S;)GAb$O>$fbAjV~7SwM2wyTS>*IK*I6FQ|?SxSofxm7EPWV_kZZ$kbS&q;f4kIx^sXY OXYh3Ob6Mw<&;$S`d5fk1 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/ic_storage.png b/TMessagesProj/src/main/res/drawable-hdpi/ic_storage.png index fb446d7689a213d76b053a9c5f4daa1c914b10a2..6c2c8e92700dbb0791ca080eb9c7a3aef0708804 100755 GIT binary patch literal 1595 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|(=tOMN+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+WJvVozYf|;3~p^2%P znW2t?k%6I+z5x)K=^C0?nVMM{nJYkn6417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM> zv0i>ry1t>Mr6tG=BO_g)3fZ zE`@j@x4_pIZg5^PG@yV%reBd*pl_&Wpr4xy@)uZjaY;}r!Wmdq7l%|9r0NHy7U!21 zB?IFlO&O*c7&4a6BsFpIWGChrManjC7v#}N7bgpIXLDC0 zXLCmrR}(`+M+0M57iSk2HzNZRLsK_rm>JmgI-8msI~uw=0d=|>8oHV|8k(8Ay11Ac zJ2@GeIGP&6^m^tMmn7yTr^4*b1lkML>xfscm2**QVo82cNPd0}ECmE)=Gku_A^g)RO zDY3wWfGH5fgeQF<2cCIS^ME;~2$(hO_AQiPU|`Djba4!+xbMZ*i|S;i+bqdseDvO~_&9kM6hE5I#rjS}qAt($QPkg*-1)wbW=kDfC!1sJ z%)M=6u)GO3%d{2gF~OSB4@89`WUHWEEw*0K zCCV!!jcHC*K*)|)*Dl#5*d^|?Xc2mudXIIF!o$puTr-r*Gj z*nG35{=w5A_GR1do&8)>f4(Yn*XIkTMNXY#yHs`lZr=9lv!AW`ouwu8*QjoB7R}!m zAbz0zaN=`ogV39&J&PYa+?AWFx8hWSW~Z~I^R<7G)iWf&98v5nobARK_^>cvV@-pg zsNB0oK@mCg2Q#j{-}_5IZ%@yH4-A~?2Ryj=85hJ0zC9|s=AqRh)fnaiQNe<(A%jCHq>ytF2^%r)cw%xjX7zd6oVy^}hY%*Oq{h2>Vp zmk;$jwzyyH;eXwglPZH91W@p>v-i{Fw-x^oDtvvi= c9jgSxx7xqYUe2z(0xHfuUHx3vIVCg!0M)om8~^|S literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeOgEbxddW?H@w58Pkq`Y=4&@;qhsfI+$Ynl+AF`Q>!Q`7t{5DiW}U8pJX)2 o_)b{NS!CkacYwu`hnI;VnL}^p63v^pfF?0`y85}Sb4q9e00~hv3;+NC diff --git a/TMessagesProj/src/main/res/drawable-hdpi/ic_storage_gallery.png b/TMessagesProj/src/main/res/drawable-hdpi/ic_storage_gallery.png new file mode 100755 index 0000000000000000000000000000000000000000..7cd764da3bac06f1209c11386ecfb067b5d18a2d GIT binary patch literal 1899 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 PP-*1p>gTe~DWM4f&1t@9 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/media_doc_load.png b/TMessagesProj/src/main/res/drawable-hdpi/media_doc_load.png new file mode 100755 index 0000000000000000000000000000000000000000..35678c12d43d6e3678b4a0aacfa9c82a28cf35a8 GIT binary patch literal 1022 zcmaJ=PiWIn9M0?*V=!U<8B9jw(hUmqE$DPE(4vOsJaWG%Hw)0>ON!}m6@B97U@Atj6nd!^@ zeP{Y8it5iz$$2s!C*MGC5BdN4wDE)tLpWQ)1ysRx&4pCjKxGJWmNpObP&1Zqe1=Ji z3eje~NdJSSwhV!PKqW9jtr-5mt=-HUcsZIt~&8Za^ z7FMQ<`btet81%$Nkn|-YU_q<_-&(Xi$xqP@U5U(tZI%WN2(G2*!=y^;49FlCf*2DC z>m1JmQDpdNOcePsAaK0Ea^w}md{l~wk}wXM4^5)EMn%fYN;4K&rRXZgj>NL{dY!39 z805~gd?JwuGz1|`5MgiG#+o0tz2TOE3_aa79c&^S1d3W2E#VYRGCe$k<+NpOuURHi zFxJ-`mS?!&NG+hM{vT>tZM28;@F?GZ3VX$62eNtSp(R%*jjId?p&TjWLJcFgh|prI ziZfM&kyk|y$P`2{GHcofs(YgiysAn$+ryfz!-G7S}l9#yfHYD_9PREJN442@S!{b{ z8l7_yJ91f)3>!4|uSU1Fho5fZrT z`{(4ReFDclUOz1l%$32(^@Yt3!2Rq+^kz40C-wr(QseOxrE8o9%9~+CG;=$F+JYIXPQ&j*8B Q(cnhrveWX*$+^3K0AY(m?f?J) literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/media_doc_pause.png b/TMessagesProj/src/main/res/drawable-hdpi/media_doc_pause.png new file mode 100755 index 0000000000000000000000000000000000000000..364c6d990500c02f7a8bb016e31f4731547cc3e0 GIT binary patch literal 951 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/mute_blue.png b/TMessagesProj/src/main/res/drawable-hdpi/mute_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..27af0fa13df8fb80960de562b7532deaec765edf GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y~q zxpJP1F;L|AN69C=Z$wVDtySN!QU(ksr*D$???%tAbY||FO9HIEM|Ysl`PA< zJa=dLskQl+_kMgS(X-RShG&h2)I!c%5{hA4CzPxcyeE9gsW@cP9=q1O7q8iOT@a}a zh-nhs z>-MKE+_z!5d}^EeMoHx@%XYa>OEHSdPTVBE>xhY*rC9v$dBumcUUa2T5_^*5KjrJ3 f{JZS8{Tmn=4lx9(2$<|J1{D*Yu6{1-oD!M<(q54Q literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/mute_grey.png b/TMessagesProj/src/main/res/drawable-hdpi/mute_grey.png new file mode 100755 index 0000000000000000000000000000000000000000..57a0acb9f76ff7b5cd5ac909fbc72055aab7aafe GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y2=9ZF3nBND}m`vLFhHZsTY(KatnYqyQCInmZhe+73JqDfW2&$iQ6s4IL(9V zO~LIJ6P$YWfsWA!MJ!T8!-RmT2gHOYTObFX@Kf`Esl5o8to7!^ure?(vU<8WhE&{I zb7eo@!2prtAGb;6C%7d&)a_AubpDcW(j(rUSGqn)IlNhpNh_x(WF1Nn@=thJKI`(6 zWjo*Q^}X{%dMEFEnb7NBY|bChT4=iH>`9FcGRHgPb?*rqxm918xMzRYyBD)r)h>wD z21GUq7CCO+b5iIxJjS zjeo?o*xWQQjqEnm^*EBJsgvL%9h7)iDIoDo(4SSeBplz@C$NN0(9B%f{BxgtvfBUO zo2PY)9hxV1%F18Jz%3)bv_Ix#%9g%EDf%LjQtp0I#w=^x`8CfiIdRQqKS%Wc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc&_u!9QqR!T z(8R(}N5ROz&{*HVSl`fC*U-qyz|zXlQ~?TIxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7KMf`)Hma%LWg zuL;)R>ucqiS6q^qmz?V9Vygr+LN7Bj#mdpr+}Xmy$i>pa+1b$06&T=-W^PXAE-prf zMy95&jxfD0`N^fZsd*(Zy(tL2t~m9A(n4+l&}Ns^qRg_?6t|-MTm`V7tuk@D#R;c* zP`xR*-QtW>uRhQ*`kYNt6FZ7veh+&t6>kqMoE5akHkKNhKaaS=vCrr0av1z`k!*4&OAA4SQg{AlA-iixR z%a2#K*LZkuA?uxq+G1|;#_3v}7d+M|-(;9B-z&V9{mCZx&bFyXSf+bS;iw7;oc&s5 zOX0k)9VYYFoSJ7?ar{Z_r1JA0-~710`LXr^hB==v=x(o+^8pn!p00i_>zopr089$G A*#H0l literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/photo_edit.png b/TMessagesProj/src/main/res/drawable-hdpi/photo_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..8768155c251bf4a8a2ea2bde5d15b5d7dfd8defd GIT binary patch literal 1186 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 BLa+b; literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/photo_rotate.png b/TMessagesProj/src/main/res/drawable-hdpi/photo_rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..31e097a2e121f31828d04375cd3174119b44bbef GIT binary patch literal 1430 zcmeAS@N?(olHy`uVBq!ia0vp^5{{auq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1Ffc1;hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo~drKfuV_lxuu?= zsiBF5p^k!)fuXU!fw8`!v96(!m4T&|p{W8CC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)VF`a7isrF3Kz@$;{7F0GXJW zlwVq6s|0i@#0$9vaAWg|p}_9 zsl_)|e!LNJ!esKM4U$hyIXk6-#N;&lU)Pr`+voS)ve^Ict2>|P{`~)b&gZ$GV^^zq ziZ!p5+;L#hypx%1N4*c|t+@J|S((jGfbpe5+BQc)@$%2l#f^Do6nJb>*6@YAEJ~QY zripou*QdAaM-K25XlJhIw04ZSbp77J8G+4A1xpkvSo2bjH7f+KcWjcCTo^ckyGB9l zh|>YB^b727xYTYponYy_d0>qIe+L_{%?9>QqCVR?4ovZ>2{OoB!ggH6V9}-+&dHgr zKh!REs`2b`G7HIib5b%Q*z-02qVU6fQRbFnuOIk4ezB!NwDpGZ4TbY_&wOpN*!KE_ zmhP>NxR#~CwsSV^Nam=C3d(-^K9J>IV|aM*-b}9GpQ@me($m$?Wt~$(69DE| B2Gall literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/photo_sizes.png b/TMessagesProj/src/main/res/drawable-hdpi/photo_sizes.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8c781866c565a75086a53e66734771b34ca6af GIT binary patch literal 1057 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/floating.png b/TMessagesProj/src/main/res/drawable-mdpi/floating.png index 11b10cf31316f918cf7eb64b4e2a3fd8b1b7421b..4f11fc26445925bda8d8d7c7ad59e5f71198f973 100755 GIT binary patch delta 1874 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 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/floating3_profile.png b/TMessagesProj/src/main/res/drawable-mdpi/floating3_profile.png index d2e829c956a99e2b83ab75e5c0ed747ee51aaa0d..35eb5bbb678c945095e14f9bb163453e8a1bed98 100755 GIT binary patch delta 1645 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 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/floating3_profile_m.png b/TMessagesProj/src/main/res/drawable-mdpi/floating3_profile_m.png new file mode 100755 index 0000000000000000000000000000000000000000..652630fc41d43e3db528e4f867585161d6cf61d8 GIT binary patch literal 1671 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<3+_$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y2=9ZF3nBND}m`vLFjeHsTY(KatnYqyQCInmZhe+73JqDfW2&$iQ6rfIL(9V zO~LIJN1S@~fsWA!MJ!T8!-RmT2gHOYTObFX@Kf`Esl5o8tl1bI&Sqd>`t9lB7*cWT z$?TKa!i6Ho=YN%7ab@wnwb$jcy6&-5e_kZ# z!u3sMQIpV@q-a}{yo0J8%Q)7a`0;m^xkU0LKefpv&wf5|cDC}o*KR)ZzLCD+@j{gc z5iDg*c^gD?m|h+$O`p&G(J`kKH{2YEW!L*HO7#)uW@A*i+K}!!qgUHyC&ub zp*xvpY3-TO{CTgy>CR_n>vo2PI`ZA&cm6W>^QXCY!n2YB)-^c`P7*#_dLoMZe*Y{I^?7mQlGepON!iVtkBZu)JNR8m zT(G05`=Ip&J+nu~5!}!2aD9`QBwYGZ)5i7pk+?5AmuGCAw&m&!1%0!(YaZk^7ri^0 zCeHf3ol4y~znBG-MkIg55|_C4E8?q>d)q;+)4Q-Q_K^jGZ^hlJP-3e p=dYSsULW?sh3Q}9L48IxhUeb{Z!fuUM*~zfc)I$ztaD0e0svvhjw1j7 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/floating3_profile_pressed.png b/TMessagesProj/src/main/res/drawable-mdpi/floating3_profile_pressed.png index 7689faa1791cf37f276eb25ee1e13c24a3dc4bee..fbcb4da6bd298e9de7f33f993c855971ce80fab0 100755 GIT binary patch delta 1934 zcmZ{kdpy&N8^@QC5W2V(A(y!=XNFBiz052tBazm&YR#BwF1d6Ozb`tHHY%2pqo~}9 z847b8W`sz&<+57G{~G*aE4 z`CFH~4zBr)jTmBT-a01ju2F1?l?D9F*oXQkU0R7yQ%oMNCx;WAHWvPgqmym9aaXUd zbX@!PC3fM1U_d8USUNE{ILMOAQ*!p7mgI0rUf+|L5%dWYB^l)z)s)#l9D6-Wb)4goSe&#%Xnxj+1|Z-e}LK|UF=idi^Xl` z=H_dCTUpBD-)r*^B@i1S3xs(v9*-Awb#-Z2A|pI5EU1Km^-(gJEX8NC|4zZo=;&x= zLDQGpDdDDrGBqnJE2Gv5z=Fx$O0bPllTnp)G@olT*DX2IQKzh3_ohSi;nG(GeS^dv zi^0&?H%Hf!3xt~^ezMu@%KdAsKy|&afHME-yXWzCY+n5In|$KUlnCloy=?+I5D*Zc zzwC!@hiOIG)xVSyjJ_$f?x(4g!Ja-Fm|ZR@D$1v~Qh?y#V&IU4#dPwyNs6i(4Sw2` z6pT!q+)Y!x|J*a!HreFCOC1WucmHntKzr?}qT=F!>M#u!OrE?&jbeQ6HG(2CyRuzR zBB-lF>TVsiVuG;{+R~pd&YkC>3oR%3UyYe$2+Rkn(<}_2M9N$MgTo3LES6ujw%!OF zoW$^ys@4JuODjM9Y4Ok-jQidc8`$j*mL~hWqE3x=4*Q28xE=Y4u-!m+L@sn|gOiey zdiD`g4~Eyh7X?rtc}9A};p@RRFn&*Tr)rAPNMOxq@rdeNjC09aAoVbRm|DfxxpMKM zTvH>rA>j$XFT{Xu!*8K{cik}}dG{_>(jihe0y+mJk_xHI2dX^MoAt<2k&E~7(L83B zX^<_b@wVkQtJFmcKPMFMN15%3mlPHqYpuL;{z$^f+?K;5A{LTM#?IeGUAv<)>clo2 zy3Qbyo!sjlT^sgZ#suBKxMb$$t{67hLn?#}BIg4F2J0261nRpvsCf~X2JOIS z_c4qMufxp8+xtHcIh?OYp#yJvdL+lK?`cO~GkOy=KE9EAvtuyq%gl_EVRw}m^_x@m z_io?gDSNCf($mxT`IY&ftlAd8x;)>lq@<)Q9hx|G**s;<`nRE>A;UUih25|Olh=2N zw#^^OhhFr=xBoubI~#MOhW-}O(%ZEYu;Clt?npvBp6}cNUE$StfXVuFSrFIuOk8t$ z`JCQtx<~YfxXQDC#qo=ar&O)ndBzV_1T5tQz_4j7RVtM}_C5PFKEzaf3t|81(n+pH z;Y$bpUooedM zUSD4~-CSWclSWgn$=Zp4fyEh0jSUSyx^nI5pXV>F&S6`V)v?cuo<9AI>KE`Ux9Y6qNu0|*;7I#QgQ)FtrL%d3Xyu-KM^aIhqJS@tK{;F&F_i06H#}~x|l#h z5?I*xF2zic*6F@OTDAGWCmI_YX}MmImgX(J>hoeeBrAwY9j|O@X<03Jbe*Gv5;)_| z#40C;J1t^V7vrOX9yryY?I8OapJcst;kvsWa)f=&GR>!0MMdrTW{`O%K~bzb`^Bbu a-9`v%dc}BB*k>6J+AN%hH-?9%B>xM8-j@;p delta 2024 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 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/floating4_profile_pressed.png b/TMessagesProj/src/main/res/drawable-mdpi/floating4_profile_pressed.png deleted file mode 100755 index d1082b32dd77654644fe9d2000cbb453d2edcfea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2988 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

    e#Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?_nZLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ2+zz*$uBR~ z1grP;werj>E=kNwPW5!LRRWrzmzkMjW$fr==H_N(=4fi>XlUqaVrgb#;b>}V>gZx* z?rdS|2Gi@3pIn-onpXnTn}X15j#DovDdZLaZFWg5$}CGwaVyHtRRDY0DigO`OmLb9 z)tiFbEv7j2>H{644~kf%h=vIPQxAvpN$k02fQIoJ>r%H88{O=73ERznLUUJ|@X7l6;$Kn~d1y~pj*e&O6nleG_brZ*p zMq7&pUXITbXP)Ayo}*m&=4GV}&&!ez-227WIehW`*1^K@QEH{!y*kOw9xIxaZ`^t^ z?ZJ`kePUrd57|WQKiM^B^Iy&i7N=h_**3m&tCtm|s$@58$>G19aESf)nF|N!H7?7T w{M@-pR;0Qvh=3#^fkd(dFysLN!y^PiQ86S-h_DZnB?M+bSx3=Q zpn{4NM{Rwfh+=gR#YZx>Rjfd%DA=MPiqXMWXSC4HRJ&2J{ZYEJyWeBZIrrZ0o}JyA zln~=K)oUt^MsridN>$Vt=6GBuQ}2e&;d7~BHX%zVQm|~IKx2eyVjY$R0}4c=hgGmf zSGcYn7SU+Vph2BZq$`&~S`1-p92m9*!6`P4CW^A)8f`9209ml!fJT7N+b)5CK^Fn0 z@s+_!Tmt79VvCG$N>PGZTa>F6>cFT-KxBa^0R$#AfCb4zO^_u5e5(slbH_FZ1l~f3 z+z9YpQt8ShK!O=zfX@zLX@j|3KpK3rLp%7mH@fHK`FOZ66 z)MY~|sr-E`Y83(I5Cjf!I0Xd-?1B(BX4G@ILZQ&1!Q-(g1j|&25*iB&HTjGyNMV!K zXut^rh5`;nO%|3IXzEMjxF5AZu3Wp>{SVLe&HHPJlpJGxDMqs8K3D4bfaubVFd)IB1>VT!3^uzf$mS6ho2jWvSpI#YQ*6P11 zYP+?$f76lt2AmSk81B^zUPu zOTC&IW0rdQnA;(%{>9vBq^3FVz{!hi0Q;NX+rGmtO@pGacHY?`t$D-cb9O}$O+>4* zRo|>!?s1Gh-F@iFG6{BF_;BHtQnVy5aBj_sUulqy{-{~OzER(6LkMHNY`Vxfa>K~J zl^&79{kLM!wl(C4ZPklUdX5h17oPcS_+npRy4z~9Ij}gozjkdKeWb8Vc}-{-ioBWO zaqRv`O{S33bJ$k?+db$MNvtcG)DmFd{HK7{?zNx1JL4n2LzCyl7FD>Kg-=3iyY$~K z%Cvd9tDnWY$DD-uwyExE&y?QP7gv(KR`V>TYT!in%pSi^G?5;2l2-|yL4km$qZ4$gNN=6 zfvaa8V3XU(in+D@GwPHq2I?8qx`|#)x-1gKnX7%nIO%vPeLcf-_d*+obXlmt)y;$c zj7o;5w~wutbjjQ{IL8a|t=zX}3;l8KP)RBISFz1nZT|YXhksw=o$i!9iK)M~}e4H-81i>k!%75MAUTJWjf<>j0*I6QIV8>eYBKiA`f TIp37VJN`EcS%UO<^cwPSIj*OP literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/floating_message.png b/TMessagesProj/src/main/res/drawable-mdpi/floating_message.png new file mode 100755 index 0000000000000000000000000000000000000000..8d5f07d4ef5f04f64dd3dd1c2ec6ffbe8905614d GIT binary patch literal 1001 zcmaJ=&ui0A9M7ms8LJ2moPzMk7&x#=UfRSpE^b}Zy23KIuCQK&=ErLrw&ca+&1S=c zdJuQ;B8nb7c=Y5y;KAv<%=1L>=&c9Q!vs&_OV@TDtRcz!!RPb&e&6@|c{|HX*OMa` zMi_=kmKL-!9mnGD)G+-&+PRpd!+BDul2u$MEh9io&c-GJCD&-6GBWI~Tl;8+VG^uU zsgkO`s94zLj2Od3u20zvGcz0chP93eFj2$tRQCIuw=8gMm0go`LHF~h=`3sqXmxw3 zVr{QmS(}}`24*6K3b=?EAaXanP>EEwqpQ$)yv?(q10m}wdz4gFUj}&`ARuw+lqEn2 zWSN5*NtWSdAPP|A1^UV#$+n}J0eSD%PO`AR-O2EjoE-SM>0G9eljIzPh0Jt8EKEbW zC`##cRuVHku7<5m7kQ+|wU4>Qf!x>%u1_OtC~$5gyBJ^>bdIbzgLBCb)a!EX!MSJy zxjapVj~n|}qkCJ_J@K?}Te|2QA9>X60k!qjJKRrtC2p3qTqXKqPI266yH*CBmCj_qn7 zCMiV(MM3ovbbAX4d?+cX&?u>(An5jLy-N5{4~CsFS9@q1X6D?!@B6RkTw80Cw|HAI zMN!^Fvy>!bsrwZblK+KsJG^AriW}3o9d+W2VnZsbp$-TVhSCL-P|^BNOv5^g^3ZxJ zjnnc0QALJdaWVd^VG%Y()kU(FqV_-xI$)P>hUwWyPiUZPVfsi&W@Re|yY=P)8@3O$ zrqqERRnX|jeo&VciGTsI04@1dy{Idaxx3BKU=f0Q!t@`f(sCP!Asd2_zs9Gs z90z#b&jmv~&sBo}%LN#gyu6PKiXmPM)PkjlCf01NQ%p+nC0k?_rn@n=M25*^GX6}B zAK6_DCkTS85eWDQ!sqmxSjqZKry{2yK}WT93+u=PuAO;v837;nwEmx~*VX#Igi!{Up@lHZs6s$fBO#mtbDK zC9am=mr!0VL!4pU!v0n0+!pB`ce>oRWU<`%&?Mb%leQkeRC|bAiRTF^n#z9em|s|k zcve5%(z0vx{LuQ!&8L1fQ3tQ>ofw^%e^GE_ru=2m-I1Z6#am+gt~akAF9(Agr|RnO zd8V4)%}j3?zgk~iR2JD-HV2-+I+}jGCXgyPe&17dY4{CW{_xD$jZKsFV7Sy1UR(a{ zw7l!EcM^h6qe{(1dh)IJ&PP`B>>wwJ-ohb{Z=YmKM!&)n+xtJPJNw}Bl`l7UM{d7| z?CVvbAH^ketG;`|;F>8p-LmNxRWWjyDx`{7YN&D+KifG!>t6CiW2-dQaBTQD2`OS( literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/floating_pressed.png b/TMessagesProj/src/main/res/drawable-mdpi/floating_pressed.png index bdcb34f27f658526c3ac7af1396b127137c2b304..0ff85c17df1b9ecff080467bcbacb3f94de1ade2 100755 GIT binary patch delta 1881 zcmZ{dYdjMQ1I8KAF-u|YC0YxGxyF`cZ7XM#IIXp<3|mJo$t}~SxhD6ukS;E%`PG@Z z#Bwi2%Wb^Xj$D!u4%?XCiY%Nyyzj@JkN@ZS|DFQ9&pI_20LdO@k9J1FoIISIk#=@y zN7tVKiE^>WAf24;J&-W--L&w_-rjIjL{Mxv^-_!{%FX;Iv7ua~!2jnu|H{2p4uJjt zz~NUT^WD)gzSIkF%C8R`f92k?Q9&}T`yfY@l+-SGqCEbfjefcp8m4<%_f_03gd%wU z4e}z^gLuTl3JpW^hiSMncUHVZU{Jdy;t&xs3i*=*I`g4bVIfe-KL8)ewxp=}@ zW_~(xFVd3iPh1OZku6FWrP*^Vgv-tbYQy+5#55%C&$^xuicL}cI3hZo&4l#GnQ;7% zZtFEF3hvInjkcb+>QZcXch=X@LFHO=PWim53$g6C|B%=g@X7a98A)r26ZEQ>(8Zbi zg5NE(?T|w$LXLb7yWNdE3EKO}cw^_QwB1cz%QO!jCK<^xiii-Auk z4qZ#ls$Ew@zDu5JywL>wl9muS0Taf-h6IzzT86_T3^O}LPU)3s9MMT+P)(D z%EHqy95^>4D9;EMIgvgE9ekX^-R!^I1|hY%KyyJxQP%@yHC@c1!cPv|^R{E#Y_4n# z41a?!&@(Z1WMmP1XKkp0wTQ=Oo4>w~?0YnlmHD8nGNYndgA=yNcjuO<1<}k4Ih$3k z6z|?{xJh^otqdwIY?`HpqDak)A5Zu#`~cG*R2??p)$J3j8Le=rJUbB3fDLd6{rh^u zq}41&k-x)nmRW}T0f&$iIRS)KlhCJ!xOd|1gSUtz>eJ=wR&H45geZNAz?^5j?MU?G zRF3JuuHf_Ab!nuiW;KKJkaFtmf+fSxaNt2@2$_Vt^R-W5dr#BL5Ykgk1Y+4`Rh?>{ znvF4iT=K0XPU6QU@qSoMtl2|tm+kU+8wnV%%gCYm0Y91 zw0Nvx-MDltgIPP8bN%{d9gJ+RRvLe~NkkI{pJ=3it>EZXjMu%xULuDr(he9!jb1`e1Jo{Kjz?SA>vyX0ok^VQc|o>@A~-3!-o z$eE42cv;!2LFtPIV+ovBH@+CQCK1nM+MfJYFYdcEhGnwZd5}{xs}F&dfMaJ4-u!gI zOus{5;9dAA`=#eIF@oJVOf&AhV-2H%RX@nSeY?_hb*$=2{raibdUCqkqx#04JNsf! z`=sQ$%9Z4pD4a9n1lIBr{041DKGTt~JbvUU7gff&S@PUm;ttSM YB4+80^R-@}6O?|&6MX_zg(N5c3!5o?rT_o{ delta 2174 zcmZ{ic{~#g1IL}AHAk2^U)Ppm*W|&F5578W<9L^GMh1FD#yAokKIEZXM0sphZdbU<)`$-gY(cWe$*2>!1C zYxTR4ruxY|djZ#7)mUj1QG_RT=m&!XHtC zbwqRD0iG(zWx#|az$Aq0y}k*scDhQMvmP~7nMevGOaDl*0+cR1wqxh`b+ z5oMb4X?x8w*vwQk##~0O`_^$hD3$cZKvM=eo3n);@gAL;^uv%%13!(ax#IdMfM8!+ z9X#PV#eiP}@ljOc>g0*?%c=cCM;(1tK|M=7&mw^BAWzvkpuc!ouF{#uSfi_7?l3K& z<`fBlSDL(T^42-}@j3|(%YXmIKq2zN23Gj9Qdr9A!%w58nHCfp6Ow_Qg;xp}32A3+ zxG(wIfw|ZSU&#R#p`CY%RZ|yTv6z$MQP2y^_^?atF-lxMBAQ@zLthtnm=QQ{SxHA<&6@Ny5hkMiN3V`Au(I{~x;{)T(N%?nKd)f&!a6ZeaAe z<3t2>W;r}Vq6V!`;c?QsAZ~3v{=NR%f@QMZy~{oy!+RKL_}L&M_%U&?XT00ufNrGS z&^Hc5i!^YodgjZ)I^Zl_x4|P6_vb9!QnF!N;@E`!kUO&iXzT@XveQ^S`3TVwhfD7SLwC((2 zuMslcpSXX*&#{9MI{pNaC*ej+px7Y&rJpPV90{j+c>IR|p4nYSmTG@Azq=tH8bqiO z22IDcP*whcIpU6{s6FQpp~MAVVQjE%*`54_oTz&V(%ykBs;1qg(lzGKz=TxXq|Rj` zV)*Yz--Y7*6NIK4^(1oH(Tvz{UY4jI<*Eb+#xQ~Kybo5jV!R_^R2@g(4M1PG_7{4jt{xdg%X3_E5?i*e2QP&%^dChfOaOylC z)m2YymXg$}0VqoiO}Ue~q+7`;Q`5A!ijzUjU@}fi&k#d?1`xYU#E?h_<&H;mQb4q)&QDZoRF2hsv~FAtpV%@>=PgSeBRUif5PI5*BRFtcw^ zOAwT=RDbZrC}AW0mDb#IzyMXLwsP&WMJB=lqN><1HY`lz2@-2?BIasxl(N|93x#PpN;Fk=Eg3K@-qEI)KxBfn#dFbs$d$D;V zhA05yY(($0%dMrZ*&Z%>YP_)zM~)qvroCi852MBFer{m{*_Wll`|-NvAL5#LVIso} zUNPlbGu+&ApSluWvR8Sb8r>l}`+fUndkY!)%ER1%v_xJK6x?!ETw4v?MW1^*)7hSQ z%h6SZBvQ*LAX%#k%5qQ(vzwzOzz?mnr`{;j^H_z1>cJQqZp_y3s+ur{Jt+;?v5l?g z@+wZwX4Z$RVr$$yJws0(MDY|Dbkgd3orCUt90N#gH+r!8V~+UMN0b~2a>=RpZ9D=a zJ?q>#5N2eN_#9!eecahjNt#pxuSzoAA-(t;!Qqakaa4&u5qKr*avdm?JKx86j3YOj{4U5IC!i1Ra270Y=M7Pta9Ccx64)S9m6z^LlYbvVWB!6 zu119$>*@L$QT585k|8hlX7L)4?=J!sjL9qA+?XFLhnsy|Y7;nGx_Tp&oz&7?a=7R_ zc5XAG33awj5swd8Iq@LiFVO+B7AG~i5>2K~P^#6fSCeI?9Jj>PfPdb4S)r;WJa^14 z9k_q@>5cG?tP1v=pNNNntBdU`k#G zS#OY#4?g_Rnt5JphBgFX!yH+-rZ6e0;^}3Z{jg|81P!AP_ElD-R576`2paZOA^mma z>%k`I&6hLmy7iDc@|DB3im4!^^6POwb!*vzi1$XoNph_#QkE7*@ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/ic_arrow_drop_down.png b/TMessagesProj/src/main/res/drawable-mdpi/ic_arrow_drop_down.png new file mode 100755 index 0000000000000000000000000000000000000000..dc801dc1a1e56af0ece58726b2bd56ce1a37d47c GIT binary patch literal 993 zcmaJ=J!sTW98W)xQY#E{lpR-d8m-r!NGtBs8657rxB47!vc!A0uyxnDi=c??2Wbsz0p_(_l6`}d9 zQpMR?b!3;FoB-pALIr$8Y>@bCL98Sy+t5|$IlYD~Xh6uS${q$)wdR0^BLpN)$~e3* z3UV?hNWy4dxB^68$U;5~g=|I;6<$^Z2{b>JdW+m;rK}g5zNn?LH9|rK!g{^V)w3Lq zR-houGUP=liW!Q?#G3)JlS~kgv=np{JCPR>4+kJsw3qM(QCS-4VG4fOmJQ-&nP|aa zVuw)R_%x*!(6asy_5C(FCS`OK?>~j(%4UdQ8O3-ba%kh0M^aazqD9CiII3X0)~e!M z4HF#Ka0oOFT(oS*3sU=1gJ4;T8N|d69AxS$OC>nZbCq0y7v+4Om#2#bK`>~+M~jA* zH$*Kj<%)*X;_BGh@KHcoT=$48bmXS9;D^++jw0_Ca*Gl6K_h3y>ljPU=&0A^x*cQ5 z6+3bv4F;y2{j1ZhD>^>uu|2ocXiq*0=(tC8u0LH~draR%#nh)O$=>%bLO%nJ_e>35 zc=B}S=Dj`TbnmIYH=obly>9M&eEo2^tGo9%v$#`Qe`jaLUOYRW{5bi(aN^N}?y>Ft m8@mY{`sTcx816dg(e89HgU^4;3%9RLrH{@uO8Tq9;`SfYQ8g$4 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/ic_directory.png b/TMessagesProj/src/main/res/drawable-mdpi/ic_directory.png index 1028bfaf31b100839e727fce960ae5f01f111529..3000004c81116939b744e7659dd5848bcb1a5da2 100755 GIT binary patch literal 1448 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|9#g}Jl2 ztC6$0qlv4Dp`oLJv8#)-i;J6)fr+81n={M|YKL?fq0y6ST@{2R_ z3lyA#%@j1kGxJjN%ZoKZ(F5_VOKMSOS!#+~QGTuhIDD-#vDi=8-w?ei?JgIrW98(0$8atO0 z+*%^HZTqdwYr^FkZy(vHzp4FJnZqp;fhlQ)*=kGo?Ez9tqmcdUw8Z%i7Y_FYak8eCy^o*DkQh=0hxB z$F(l?h-x2?u#5x0gbv(Td^P8qPMZ#=*azz<7R8qC7ssFEXKswquyDNJ#ptku;h4#L zr`2;`haGTjuuQ)k6kTY@!m%vgp!vep1g4&Uic@?7rHlI+o}O7}x-+WloL6a+_vJ5@ zTch^Anm*s>{OL_T*I$>u;udP3GWV#Vmh_#vK9|5rsgaMeLm!8*SoPl7y=UXioFe_| zIYIL)=j~VV{A70NYcw0*iS|&24=eUg+{selDJEj-DQ8~VV}1~8hIb89`MT- zSX}eiE;ZTaMayjVw0D0mHCW#?Oh3x8&S^)TUyu>!t*!{aNy}>2wlF4KTx;;<`=hF~ z@bJG$lU{BJ*s(6_{3>5L8LP7*jm$s7ctUop+xDky%0JFytY_*hn^HM<*r!K|UF_9d g$nnAa$a)5524|Tqdvv-4w}8q{Pgg&ebxsLQ0GsCyF#rGn literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWO=~G=WkM1 z?&;zfVsScIBUORdh$oDbP0l+XkKXBs_L diff --git a/TMessagesProj/src/main/res/drawable-mdpi/ic_external_storage.png b/TMessagesProj/src/main/res/drawable-mdpi/ic_external_storage.png index 630eacbb4e6e3220924f4fcf0a4aff520f2ed3f1..97bd0b6155f8cc15517783acc1560fef7f5301db 100755 GIT binary patch literal 1610 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 Z3=eP5QI))|T?8rvJzf1=);T3K0RRz8@{Rxi literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWO=~G=WkLM z>FMGaVsScICsl#hfG>>qe`jd#n#PG7y;Cw3PI@k0Xd>n1tUe`UB_qR&IkJM&M5o39 PH8FU)`njxgN@xNAg+DC; diff --git a/TMessagesProj/src/main/res/drawable-mdpi/ic_storage_gallery.png b/TMessagesProj/src/main/res/drawable-mdpi/ic_storage_gallery.png new file mode 100755 index 0000000000000000000000000000000000000000..3dc4bd980b4a240a7cd6f8834e6b7fe0f33b5a1c GIT binary patch literal 1643 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|9#g}Jl2 ztC6$0qlv4Dp`oLJv8#)-i;J6)fr+81n={M|YX0!1Q|N6_+IDC8xsd%>>#D)oX-Tua$FAYGO%#QAmD%4lD%(WaO9R7iZ)b zC^!e3DQJXe=B4D97i)r|2jW|o)S}F?)D*X({9FZa_*!LRv7fNNA$n8D2{V15WAs6Z z11Yh2ZF`?;II8?* z4xO^D?ElxjC1yF>9;cP1-OZ8Xv0k@%v;F<*&uRB2XMEbkm^(REGrOhsxx?nj%?oC} z`8D67PxyzBkPw&RwgpQg?0Xc}Fuvt~?atNlxJ)8Oq-jETea)+e6>GP&Y|9r`xy*PW zfYHZ&#a4yfSF24tnGTfSRO)ap5d8b>=4`eMJw1!wz1qGU7hM=GpLzdC?D}>Q{WvVJarY)!MgD|7^F^zrVkcJlDJ$vU2re`DXu0l2 z#u-M-5{7cq86h_p2tD6r(Rz>DVN!y_q?EU@`l;%#JQWqrD=NG{92!2it4dfxa%1lA z?*I2ntZL)5rrtaI{Bw9$!#1G>sgd$pQ%^ZxHu1k(efsGq-2-zI_ebc=lW4mb$ht-4 zY{kX*-{c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`ZtP-eVQFaKXk_ASXy|HUX>R1~YU*Zb;ppgS z>gZws)9aF-T$-DjR|3XZUN927Ko+*cT6m*=svxq&xaZb}_gN7rF5f)6ZIIT)tUO7oRa4d1s zmfA3Z%V`3;_aCREWA%C)}q*lo6*k~Y#T;Z6GsrRD4A`y}p+y3f9qk!MQF zjs+i!DkHeA)om1zd9-MmW%GZJKIOIfLOh;H;>#6JPMI0)5mfp?=%j{R>2r_bjjENC zBvL%x%U&ypsj|B4oS=6>r6y=gqssecz84K}#LrybQftlpM%Yyl84NuN% QRDsG9Pgg&ebxsLQ0JrU%MgRZ+ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/media_doc_green.png b/TMessagesProj/src/main/res/drawable-mdpi/media_doc_green.png new file mode 100755 index 0000000000000000000000000000000000000000..42178e34a250894fdc470f2c018f410b331e5ab8 GIT binary patch literal 1183 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`=4@zTXlU;2Xk_ASXy|Iv4~Pj*wm=R%;iu*SQ+p9GS?@XW&W(YAQP|VPF{I+w zo9i3-nhXTk9x!vU@&vSg|G--#ZZ0f;(((S$Bk2VyhJ1c}51Is)G;zEkmV2;p zPJoM2xMHq@$8BB7={qNKbuw+)^|cpB{W&W#iKT$clg*+{g;mDMXo}iK9aSUYn~U>a z@$TgM7S~jIf!mAqb2Xo9WY$~Pl?vZ2R0FVdQ&MBb@006j(;s5{u literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/media_doc_load.png b/TMessagesProj/src/main/res/drawable-mdpi/media_doc_load.png new file mode 100755 index 0000000000000000000000000000000000000000..6ea401f9c6df142be329a36df3418a5144a91775 GIT binary patch literal 1020 zcmaJ=PiWIn98Q^=but|Y%I1Vec2LnKP5;C-w(HuYT?@;oU19YgEKOe5uqH1iZ#EmE zqL=AKJP6`RMDU^>^r+xLJ?L#$#mi){gCbt^;Gn*AZRf!nlDt2B-}n2y-|u@j3$xQh zgQJ5KMGfV1Qjv`N$hY4=K>kn9KR!x^5u7RGIaI|B#fDT$Llp?}hO!8YP|;Q{zK3y& z>ZA2i8JFc5K}80mco@btEW)O!c+#~LbqQinfs4ACpufL-O#@v^(DP9_C|e?|>A6)K z&aKXt)YT<5rqRhs5O)P4U_h(@*QlG0;3nvnu0ZDAHcNvR1TQ7%outZg0f@+kAj*UT zYLMdq&of*k%JbZ55DIc3Hb`DRz(s^8FNDs3_Cu3swpJC2Qnnq7tP*q$V@qJ!Mx((r z!VIz(SuPffc^aWmfFJ_Siis6BU^?R+1qnK;ty@?}Ch!!M3R=bqnq<0j1jFjenohe+ zq+qP8SS-f`y(4viviyIjVRX?BF2db>|0(R0RxHRCp@Wufl{Bt8?uD`h(S`~}b_t<+ zr;3Fd!pNy13y5<(I5DrA8frKvTX~pZN!)G|TYq`+O(j>t%1fz|`?0d!Y$p5s z_t+~3AA&LeLVVZ@<_hHvVckBU4Wdo{E6 Q>4JA3^O;%cS$g66A4GgY@c;k- literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/media_doc_pause.png b/TMessagesProj/src/main/res/drawable-mdpi/media_doc_pause.png new file mode 100755 index 0000000000000000000000000000000000000000..e6c1682457446ec881f1554fc56c9d398a53e978 GIT binary patch literal 946 zcmaJ=O^ee&7*1JObeDpHi>Q|&3!-3?Oxk8Qp|Q42;|5IWwuP;DF-@jz=q8g*rY7x0 z5f>5t3En*^c=oVo5B>rD4|?$jIO#TB57v-mK6swzedm3jdDCt^%x~S?Vi+cG9B3Un zUZ&snrA_+(`1r#uI@}=5KI!5iiLDSZH3tt6Fg$C7I>>TnCtp#8VK!K|*C&1Rkz!+y zvr-I~cmZWIOr@FxmOViP4A98+Rrc4HGZwgx${v+X!3-K`>>kWR)Sb6__IzT?4qLqs zDv3e`JVY#zc*lOEBr3bmRp>n3=2@_SkcrBkC)GFGpn*dK%3QHv3lIWH;$W#PN$?&J z1t{_YeWd~{DP>6!_rUUDX|&K8DjiK<#-b~g9TO5LJRip~7Z*7kj(8}`a;hPU1&Sy{ zGoM&V!H;$`1r0@Z=mx~aK1da<0iF_-rJ0@|!3$QhezYtTEf}9z0S`GLJyHfV&HqC^ zZ-tIX2VLa*PvNLH3lQHy5uS!NZQO7-4HYPj5LpC=J&cdDDz?X%;Ao5k(CA9w&XMao zIF9Zv@TRF4enc$aMuw)cRDp9{N0Ih5sMlp!6H6L|%~D+!_H?-}7ezr38$}`GYS^B7 z$R`=sx!{Uxxv3SrfJW9(=srV^9%2tHj;y$AbJ^F|>Mgm>`doyyT%IPwr;Yuq(b*Pt zPdZ)MmM&JtM?Q6XNNs(3GI>s~#BD>X^^)&{(v#mms~gwezuR$Meg1a+?Dg9sypq#* d4iB$Bc#&fwb@NAV`!t{4BBR;TKGmPT`~wneACdq7 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/media_doc_red.png b/TMessagesProj/src/main/res/drawable-mdpi/media_doc_red.png new file mode 100755 index 0000000000000000000000000000000000000000..478351529a9750a2198fce937c8b4729c7f7cf85 GIT binary patch literal 1207 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`?&xA_>TG7@WNKvS zW@zdR)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSuc5##K*wEsO{I~^bk8>qayu4 zS4I1Q=@JXJt-4YRf7|XkIYWN)|EiSo=I5(<4mlkEJR#{@)<>?_XP?=rvl{e?m`HQZ zo91*uw^L_&;F1OR9#v0x;@zYenNuh?$@k11r%k60W_y%5{uR$$!#YjB(|Orfwp_kN z^4gjU!&ZJ`-L>k7VZOp?)sGJRUts8uxk2)q(=r98L|*z#Zf0O+FsXE6kSV*`2P#TD MUHx3vIVCg!00NesWB>pF literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/media_doc_yellow.png b/TMessagesProj/src/main/res/drawable-mdpi/media_doc_yellow.png new file mode 100755 index 0000000000000000000000000000000000000000..b01e97d6509b01236ec2b8e17288c2c67aa37556 GIT binary patch literal 1192 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`W@2GxW@_%@Xk_ASXy|I<v4~Pj*wm=R%;iu*SQ+p9GS-;&L*~q}aDC6nk7*cWT z&9%K;hYSSRKX_jXi;m9x${7>GDsDdi$kBt#ivm8xb~W=q(9l?Sl>f@Y%&kq$D|}GB2>g>~?s>WRec8?Y!v_~_nHJuwopiJAiN(dJjw+VD_DVU+DEFhJ@jTsO<1`^>bP0l+XkK6;PVY literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/mute_blue.png b/TMessagesProj/src/main/res/drawable-mdpi/mute_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..365d4cc78edba222d7e26d830406a853de88a892 GIT binary patch literal 1084 zcmaJ=U1-x#7>zn)o2@VrVTu?sVb0m6w@tG(wrba`Tc;hP>vZa-X35=_b;*s%t?hn5 zokJW7>WhNlKoBNF#3vtgq98t~FGJD6o}3Rl^+5zh1pjX8I(@K)B=?7N&iCE#J9n(5 zxxrbwwv?hMXRJ|7kkMg(#mmWmce>*Z8Om{eJ8nhYI3t;m3M;4!(lJfyfe9!n1BV~M zAVn=>)MPtukM9y>q`4&<{0a)^Wn}thE|mjv&SFz#El5- zRT~FQ*gDvplm}CCKw-9Tqk~z22xt&XbXM!vEg>6Xa=HSU+uJNd=O8#0Vtyyp9&e!| z$b_`t?Q_W<0BD|f1J2L$U<>W_059tyFYf}J;O7Nz4ZZL%B$}yo3kfm05R0rrOfSZU zz_OW4#+~uGk=et7Kpmyd(2`Bnz$(&dTT$vlX&homroWG% z8H=*IwNNHfFg7b0EO2}5Bjthd`2V4rwurWH0{+SOpTbshz<_K5S}1MGq;cI9b|^!L zm{7vVOd`~uuVPCt!pQ1H1|4bT=}mi7T|pVEDu<89g_v$(Ntae#I?i*IKU}UL*S3OYkjNr5)gw@enn_vRE`e)QQ_oV(ZQ)qt)a}+>D9g zWOjD+TxaQ0;23?jdHj9@nmb)H-ByO?%ht^N+&W+NY4ymuN^jk!!%jzRcKGrwb?ELF zQCa4^^0_ZK$n3O+HeP+vcYW{ou`{n9&XrDr+Ls5a!^*g)K?q++y*>5K6)d`V;@-)# z+xX|fr3hsU5fN`y8up7H`xY8udiEd(>rd_i&tV(TKS2eYCMawqCEO}c)m%Ny~+H8o5 zIK+ea=b$iAm<)E1P6R>4gAPSeJPf^U7k8P1F&v1up}uTu=fN71ygz*3_xruy?|au0 z@gud)olb%vYGdtu5|1_ZSLML}lezA1c-Vm=Y19FGQC>6v5t3mKAY-c72a-UP2hM%~ zZ3Iz4DXBC{3&%MLs&3K7xGh!3Y=USzWa*-m1&HhceTo*OzQ24$k%}CoPWc6opoc+5 zX&*E|$6!1q4Q8c)OdUE%wpkn&PyrH2OYPT8&I(e?x*VR{+cZTkLr^wItt6Ee5@Z+} zfb_e4F3H0%B+I&)Wxg;N5jfGc1Dua;D z(R4nacjtX>X!OxcAP}%Myj~YZxXb|!iIz(<8;S}%FeO9LkpeZ+Rup?+4h1Qk>BM3%0DCJb3p(0ma<3`JJZ7Zlcj?4o?IS1sZ0abGO z$edC>mvC9VRjyn<7rrc)#>vojWB+P&aSOZ0o|bHj7bW8Z4ZGdIwtm0Yn8a7&QH&3z ztf?zE1?PIEX6Q@fgV%4Yin`p)_Uclg-c zP4fcPQSjGa@05i36Q1F_wfV%2iJ^t-+bXB4yGD17z8Jgq70%Q@?_Tns|MaA3)6u!d zj{AkXlM}o5&!Vg6=1vs0KD*<{ITp4LSN;ku&9|)2O#a+M&FDY2I13~7XmPWDtoGxE jr_Q?0eHUMMU0O$sZan?)SkLV#`zpsGaen;pnah6wFV{-g9SjfRm;>1(1JPmgug%uPWi?AWS1_Zr1?$PB$!i<7!EA~KMvcoJ`(oF~D<(1RzjzI1EnVKeaZ-uL)^zwh_`d3Or4=llDH z`Y4L(&(G*ZvJb@TP%rtvdAe|xY{zk~f=j4|n`Qth)kaka@~&BjMQGYfSKh-3ib{+) z$Hk_H|0G5_# z%hvL|CE0X#5==xgA#fo!LF6uYp&Ti6n^z|1_?o3b+Xc@n^tPyqQ2-hWAP^ZbX>oiS zj7tnJ^63nJ1_&IVV!0H{r;@xNbCS%9VCSPrw7{;(MSXfF7O@n%fw3>MY_r*9nkfba zb(WVTiRA=V5R$|r87_I)jFMhB(qYhHXa$as9pr(S(X66Htk6X1b_%ZFrS-y{GLeF@ zk?FHM!^J6e91Y|DuCCkl4sj9g>fMt#EHC+xEy55j1{P^tZ6prm%US?UjDj*k3!N$! z8VIAXfqbB8;FMunju+df+W^Cm^InKe&w_bfp$P@!IJT@x<60&oh*Cz=cs@r8u8vJl zjqAF=3!<1)J6IiAi!StV2W#(Q$M(g>v*7w9vJM01Dzv8q3y}ZL<}2u_Mc97uE_Yr$L`z`qdWP~BjX;BxlWvTksxoPp4ZiK^tt-G z)ygJ@t{>)v0<|*O=(+V^z4eiM#=X6L`M{Ix+R2SprFta!^Uu-Eb9Xnte(No*jy`@k zY#h7a`|0D{!05_)=8O7c^__5#-KhDa>8;Yhy5NdzOKnlm{M>aXogZhe?Pw4s z6j>2PFFqRfPzXI3RM0~|2o*#`5JV3_5ES(wzC=W1cWl=pBpSGL&$*oMobUWi^!Ig# z*KS=)5JWiJBj@qGAvpCR{NMNd;(mNZQM!os+9gy`Tu5~3whBSkR0d!kD*EW~Q`kWe zt9KiPA}Z#3CCxTzC9t7=)4^zh=;-tvMH_?&sBplr66E~7`y?>*1i4?xu{kFN%SO+b z3-^xo6|}KIP1MQGJ)pyvumck!1^DKWW9;U?P#*rKv7)tC7Q4Qu?y z%KyYlDHkfpb_=#WRO?=U*+#ZkwjGd4ft@);Gps=071Xv$6}rYTsApW;1WUz{jK2s3 zPNZ;@z0Z%3THjjrw(Qv2%6wb<^4V#BgWtg+r+m-@8vf1;d*{ zFHg~tTg?mJ$*=2g&=aR;2Y*bD-?=vSfr&i68vPPJdw7DIYoK~Bg=dIpviHbz)A&%a zW%l5Xj#Ho3%zb`Qw<&a@ZlPgg<2HI>?%f7|a_aN;SC{5ruX|XE95^%8B;VftBsAKu z);|NuGj|)Wl%v-bET0QMgpntaO8)%j(9tb*kBC(v;{D`<`ESO)mSCr|=|1^p^2qp4 DaN%Ur literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/photo_filters.png b/TMessagesProj/src/main/res/drawable-mdpi/photo_filters.png new file mode 100644 index 0000000000000000000000000000000000000000..890d61d5d2efc1e7fce2f20c122611e95ff33a42 GIT binary patch literal 1308 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8gy!3HEdYt9+~DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49v=zArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XR4cQU}&OXZmDNz zYG`6%sH0$HU}&swV61OwtZQgwWngJ#XsQ4ONh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+SwX`$F*!32 z#McCC@b$Iw%quQQ%u7!7bg@+e8ljh&nPO#WYG!I+Zscld;p}E;=n4#QM>97ka~BsQ zLnBjDS4Ws$m;B_?+|;}hnBEkGUN@Y2L1`hk0BEyIYEfocYKmJ?ey#%8&sLeZ-QtYX zJgD9j+-`BfsaGH97=2L8BE>XJ2$+08OnABla^NXHH4m8Fi-76+9Z&lP1_s7{PZ!6K zid$2r*n2ZO3LMo>KXPOSGpn^{u3|()N2?oe6N^fMs#ure)cXz_zG-_1L~k|hT@+Dy z@Q@p~HE+|8?OijR0zEeFo4Q=*_1k-Q5A@%id$V$Tx$$;R#TMbD<^;Z;f?7_#16xhK zxuPYQ_x;GXOFkAeJHxXj`s9@P1~pxbA6~d@j=2zbeM9Bl&b-@>=TaK{?Q*UusdSgI zojb_>!9hKvUGzNje8&5qS#{b(e)lgBuK%c_d9<7{&7u3XssUrw0b2{UeJ_tVC(QUP z{B+6s1+)Jt?JzDmA^76*ZQaAy*B9EZRXKAxyyHUM_A9>x{hD>zW-aJ;YX5SwQfP~d z$>gZanOhdImQ6iB`S}i=N0E`+u1yKs!@A*M<=o_ho#~a+YggQs(!P7X)NI*?=TUXB zKPOMItnbtOqtg2Q;OxZ18proaEDBovEqY1ULXP(fnyX(4a))1Be|FW<+LS%wcUn5a ze7}Fx%E*{~Tj6+xSk5QkkZgnNRr3B#O79~p(_DSr z1<%~X^wgl##FWaylc_cg49v=zArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XR4cQU}&OXZmDNz zYG`6%sH0$HU}&swV61OwtZQgwWngJ#XsQ4ONh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+SwX`$F*!32 z#McCC@b$Iw%quQQ%u7!7bg@+e8ljh&nPO#WYG!I+Zfs;};p}E;=n4#QM>97ka~BsQ zLnBjDS4Ws$m;B_?+|;}hnBEkiUMDwm12;2c1Dtw6X(6`&XtPUdQD#|cid#{Bt^(N4 zR++fng4;Z(-V`iuf%?M`r(5)aj?o9jEK*Fvgn-Eh#Du3?AP1iEQ}ckyy$G1DSF{8+ zF)%Qm^>lFzskk*|inoSKpv3X_JV{dPT2l@$$6eqcCo-y^(l_{H) zt)(xSobobTrkT0PFm9scr5u&8xSPG<%Bhe4Uo|h?b=Ug)y!CZ=KmVCq{O;$wt)^=B zqLWv!J1>~|`g#KYoxrEdLa)vZ$xzB=KYc)VOK$_C0F$_z@Y~8Ib_MGuK09=_)-JNp zv_tcmV76E7)e{}!BCj`QewDqPw71fwBy;(ny3Gzp*L4?k)~7uR3RrsiAKSBo+iqw~ z7Tv#Rve3e}Twfaa*ZDX3-C`;G-H|TCEz>D9d%|(v1q@3LGJYtkX1l=px1nwWTUM!= z2)l5Ef^ytE;Ux!@u7|g9Zr1tQP|K|8D(~@#<=mVbjA1`tlA82Mxx|HI=VduHcP>&{c7#ug=TlMM{6^vKM+!xj6Hh

    9ctv_eX+9Nzd{%`ZozhB(F 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 S_=oUrkA~_~l?r9+i2nm-8X;={ delta 6959 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 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating3_profile.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating3_profile.png index 7c8114578f3b6e678dcbc429e15c0171f450767e..3715273b0bf7a6f3528f85a79abcd79bd9481d0f 100755 GIT binary patch delta 6753 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 delta 6920 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


    FPF&i?7292ER-UDT_wLMUN>9(4wxIq zx91lZ5qLK9Mpl5875a2{M&AFh_ujYCLIN^)P4hY}jwqhfU(x5%gcE;PS62_>;^MZ( z$HzY|PQLe91EFT$I`HIoFGx;aXt+tjQl_t!t@lI(2oa1dRCb+w;TGRq=URI}yX=|X$q zudPrVB3UPw7PS(!7G9cN-Pp23cM+(`LfJ?rz74G@Sb)ypNsn_gzOX+fp&5O~ z>U5PX#W6tG*;agT+@!%@jlHWdr^ za2y-pzqi#ovbY|8Cgw6-E3O<#{wDg(n=L3c^*D))pE`CA zd3ANAbchJEY8Q(H=0CCM$LQ~v6%L@oD@&0b|Cl^)Za04R%;#>R7WR`w-H~;Bz{Q_5 z&_tdBD(U72%B&Ln2RfWo*($Rc-u8D1>PJH>{qtF96Pb7+8Lia?OC@`3kAmQO*^4PR z=;7dLLEN&U9UisjF6<5!i223xHhsmkvy;(Xq3^vc{sLdA@Z7j@#O^e_!D-U$DX#h^ zqBWa-0uT!uw=F(YL@iFjW}jgVo!GM!xFS8?-Jdnz{?w~9YZwBTds&B2>Q1nPpc(Vm zLgQ7I!x(xV60W9`H*jsJ(X^PZsKC?78gg`y>E{v?G`S4HuB~BQM0%C(DAym4q0EEP zlm}JqxKAAING(TNc#>sz%98HxsMX#~?)j2J7=lmnSF2U<>g@GhKR`g8k_-kB#?Vk( T`pn}&z)w?EPo-MPHuQf03hq6k diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating3_profile_m.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating3_profile_m.png new file mode 100755 index 0000000000000000000000000000000000000000..f9b8bc1f563842ed9a259e8b72c15c6f716a20cb GIT binary patch literal 3631 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating3_profile_pressed.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating3_profile_pressed.png index 76f2e6b385e99c48a8a95825d65ef673d59904e0..291e574fd4910c98d62280333778f8438b91ba26 100755 GIT binary patch delta 6616 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 NhYxgAt5j^l{|9kLipBr{ delta 6781 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 W)yJgTPXi$k@X^&W)T~!`c>F(4*5MWa diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating4_profile.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating4_profile.png deleted file mode 100755 index 97378cc07bb7b0699341160e2c94b9d987c0f57f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8622 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 E3r(5?q5uE@ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating4_profile_pressed.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating4_profile_pressed.png deleted file mode 100755 index db33c079c7da5381b734d060a1a1343a024b2eed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8495 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 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating_camera.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating_camera.png new file mode 100755 index 0000000000000000000000000000000000000000..ca6d5ef98e284710ff19e9ec2e92f11c89105843 GIT binary patch literal 1861 zcmaJ?c~BE~7!8Psb|OVV)B#+gpj2`Z5+IUjNP@%?N+1YYJVLU86*jwO7ZO0NN{fQE zP!R(f(1ov%9}z-h1Eo{l2%eS>a(z z$x~)eA(2RANr)(d7z2riV`ode_s5Sq62mN99D_$9YFww#f+T?oi30%%tcV9AK!qxG zeFI1^CQu-G3?3s5hQWnE;1FWBRf=9Huwm!(jT*8N|(@GJUyh4%f#I_;^u>Xj+w; z8zBn*7>ii(CktT0)^*p%zr&h*pjuNn@uNo`B#8mVlsuFp>i-h=w#OM2C5O zz)PiEi3Y4T4l$hJR3SkWeHLusH%IQ|#+64q^oP1^BZ?e!*yqdDymJAtxg}ZDd*O7lGGTQgSxgHO@^oGi_B_TNyb%ab-@XfS|g|k=9vumz8 zy~CZCwfDgLZI5nO8d#?4_!PBn)M&3rd42uOu;FD<|Dr2r*D@CPmdv=5xbB&aKawK! zcd5L4;9zUtrk!d@cMZRYe!O`g3>Ch#FQ|uK4D2&E{muz-9?iFEtMM$Kx!T@sYwG2I zrb#(9v#ZG6Tc+lE81BanIC|$K{v;CjhN2|-R_luJc~$j-#R*o@?Ol&=@mxsdHDLH| zYqbQcwY^D73pyAM#1*8yX2#5qi1r;WuECGh8vXN|g3r!y@zI+`#rd|A7FjtuXWCN*9TNXSxLe4hD3+Pv)+asOM8P2b(7C0QZ+K0VMjGFkS$SHeCN&{@1 z9@wrjj#v#FR#7Jor<$%jol<}|qub(&$ZdVCF{R5x^Bhbqv8?tJ+v~6RhUP!cKJfIU zncr}3*DUMZQPk-}zxD9_$o9+1oS@hTAWW`?Vk$$Qtn+oL7`gubRYhbb=+RzLKm1qH zVButzVgC7hrMD`6Dc#^lc3xJNJeW4C{Nh&U8O4PR=NFxtyJJr^u77}f-mg7%Xd2=?!r#I1>d9aD^zljk*DGDGMUdmgr)>_#gw9#f z*1MvyEYtB>`Z?!Dqj%lF+>M<8w(HuWGo+|%g?Dp1-P-QPKFN2rZ_CmjYsoyA(UVrT ze@CkvSXcDCD9dD%7y&mCmto&)EAuIC{roT*)!fwvVRV{-fQuE z)kiJrKe1?UShwQgF+0_AvDH&r&g|0u9{J!BZ1iwJ$FFD3Gzp(2xqesGp5=@UC1o8N zhR|%C7iAkXq4SaP?1sT%M(G{1ZrRmd_afUpOvxIz(K5HNWyZ(+p+)MJ>&bbm-m0qW zmS!Tm%$@@slhltkcU^VqnA&l)y7e^bAE*#TQRQ_v9VF$s#kV|HZMNnaa**#^>G)s{ aX#z>gtnwTBW6yodk4+*D6O{$6-TF5cX!m6R literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating_m.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating_m.png new file mode 100755 index 0000000000000000000000000000000000000000..6a353103a949af57d51bc85c87455385760cf7c0 GIT binary patch literal 3641 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating_message.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating_message.png new file mode 100755 index 0000000000000000000000000000000000000000..40451f2988d4c2249c783601f852f6eea5f9f3d3 GIT binary patch literal 1190 zcmah}TWAzl7~T+#5{)mxiizMbz8LDxZFi>G(KT##W_7`dVYA{|AKclQv)N%YbH(^4d7P!G(blInm!Oour@Bu%v! zq=2dqY`+RHqn+oziDJd}%3-6+2 z0U=wY=~Aggl|mGBdTBNiiTD~E7sQC5J76Kz3tH}qs)7Vu%`t3bK#TAd)g0_cQ4(kR z?h2+oD{HwkWx@rcJ=LaJit(>h1uDvip{6;Dc2Nqv&-Z_Y-SmJB=oD~azoX&CDa*=9jASp#jtUwutF7oY+ z9AP@S7%#+FRt`s4S?c6DhG!Fz7$db;xf0a+O<vgffjNDuV7p27I*Fp2a>J|Aj$twJg(0T`sHUUH;-JHH+E*vX#M1!P24|wQ{mW`*^O_mJwMdJ#edtDs!QD}KA0Sp zf7vN#Ukr_BUku7>M`c{STak0yD&x816t(6`C literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating_pencil.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating_pencil.png new file mode 100755 index 0000000000000000000000000000000000000000..a93db5735abf6618694a63baf0acd66babc81efb GIT binary patch literal 1475 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|l`=yjN+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+WJvVozYf|;3~p^2%P znW2t?k%6I+z5x)K=^C0?nVMM{nJYkn6417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM> zv0i>ry1t>Mr6tG=BO_g)3fZ zE`@j@w*YQzUNJP7fB~jokyxN_sAmB35=^15FMg%Dxp39RB|)hO_hL1;IHa;5RX-@T zIKQ+g85nVC${?!>telHd6HD@oLh|!-V4)b0kzbNuoRMFk;2dnGpb?&#my%yztO-`{ z>ucqiS6q^qmz?V9Vygr+K`%2i#md0k*}}!y!r0N&%+k=%)x^TY!qURY)WXQj)YQ=2 z&=jWEB|o_|H#M&WrZ)wl*950tP*TV(0NU)5T9jFqn&MWJpQ`}&vQ;K-w;19y52`l> zw_A*G>eUB2MjsThND&Pa0;V1i6P|2=9C*S{%>$NcVM!i$e28EjJYSmEmN zr^Ci>`FY{9kLNA_9`pXz`?+zSdNQ_7;K)1NQK5o_|wk*MmJ_PTWG*YuxsVY~S*o`xVPm zi}m_mdHL;+rui*iJS#WC(bDyH_08GdqN|1WHt*7CY~G-CfoJxbxz4h;IezhPyP6QV zhG$lHuBwHW8JCs7ZLIDle22F^I@oM`J94kJlb+_<4SG7#%U^U|ns%-8uIuC%bGc^7gsIO^2@{{86UIKnB+S%8wQ$#s zkTqT#+GUsbgt7va1$TxrUhAD3(3vZeBeP9#!^DWl4I3jQH(b22BB4!pc26(Uw+)q( zH!ez;d*g3flIww88;_484xUF&R5w=F_3%hzFVWDB z{Ez&cpK)14hrg!Hj^$bH(N*;=^IVOWCER@RrPk*8x?2Tnex-GC?Q-YOD}Nz)cR{px m-j$B+_g7qHyKTCURf0kC!w$J+rzTDW6|0`EelF{r5}E*Tpeg78 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/floating_pressed.png b/TMessagesProj/src/main/res/drawable-xxhdpi/floating_pressed.png index 37e2a6f100ecdae11306934282939a78f3c76728..26d91f19885c5dc05d42dad95d1b36998010a1bb 100755 GIT binary patch delta 6415 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 ``}YxG5w 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 OJ?c+%9#^PXg!~^S=N-HN delta 6985 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 Ib*H8N2Un&t_5c6? literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6ujf<;uw-~@9j-Pu4V@T)(dOD@Kqhzkn#EV96f=l9rIKK1iDpbD_!N1y8dQeb4}gX z-Ny~C_B2frbro=A5p)r7{NE&$5%aMja$<2sKwFupszj#M+}XnF3@6vAr}vdliq)U( z5a(I8H=m_a<>uF&l27Id@_H>fy&&A>g1K!`q(U=ar_KaNMcxo^X5LE&Osk$bKGjpO<@dVi{(OtKyML=pY>MBv*S1p^IrJ(X(h9%u mt>j0bN{2!dhtdm<1^h<@CUqOxiLn9w$>8bg=d#Wzp$P!+=6MAG diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/ic_external_storage.png b/TMessagesProj/src/main/res/drawable-xxhdpi/ic_external_storage.png index c924710a42eab8f051384cffd1b19b770070966d..f1971d6be16d92748d23ebd766752a05e824d27a 100755 GIT binary patch literal 2597 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 Cw-^@y diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/ic_storage.png b/TMessagesProj/src/main/res/drawable-xxhdpi/ic_storage.png index 0c75f96fa8e14aa07d1dfaee0e6edf0351445f3c..3522701328cea942f3a3a6fe38dce8b633c34463 100755 GIT binary patch literal 2247 zcmaJ@X;c&E8lJF9DuRkYRV0m8ktGXRfItk81f&|IB$ptOB_snxl9`wcB!COz1r#Wy zrN}udR}l|_tnPRPiAAo8icmmy6|{<&f>i2;%AHuT{c*i>X6Adp?>x`*u4m5d3keRi z#4g1G0ALxko)e0$TEjEX41Ie^>A#@Mmk2i;;lpu=Myvt>KPemw;(`?7crX+cOH;O8 z2Ymp*7%vlqBjLP_3<<0thz%HmR-r`M0N}&YD#emS5W&TQ@iK^spS;+N$H}BjypYBt z@sw;ZLAE|s1@cpa1(MW6iI)`5T8Hz|GEe~ph=_4og&a~dv`qX5T?T3!j){2O2MChL z#QzyoI4=aphE*VrMxeM!NMtgOPA8D5G&-H^igPEC-H9ahrn`};3>ux`?t%Mw;ZbiY zX&fVz6Y$X&x?|!K5Jbr!5;YnPK|>+Hs(2#V%gf84;qLB+BHYv|5F*yPLF$!r3LH=^ zQOT5u42Ez9MR6>ggfQ`Fq<^NMP=1ny)E~=)7L2GBD~V(R$&k_Vn_l8ahP~ifgqDf8SWIae*oFj-H*!UlF3}E7sa3EMe(GPXda$q zf4bKkmjg?Z6d;7maixE8DWByUMnR!OJ##>nEE$vrs9*)|L&^-<=VKv#R_`NM`uSMM zpXCzKV2Fms{;kn-N9gnz%ui#BZaxh@2%*!iLdQD1hK&ILQ|};-pFlgHFZm8SNV3WN zj!X^mmcjk;Z377OnOlsskFVAo4lw!{uQxlo>eB!)W&sF9F=d$uQUza}Y$Z7A*0~UWnuynpX zWqFprV1dV%zBTqG$9Dybtf->C<(R>1HI<8V=g*HF%)&WdX!Ts9vmINEX+L?bs&cdL zu*vdtin;eszTSi*w|<^|8DQNfI$}kQsxzuzU0)QD?K&2(`h9nKR4k^~+*r1*jc|0~^{(+B z-NU3;mGxCiF~xp|pUm6$>`;Qdcr|ZFe1lQ#mz=I(@ZF7H-ve1vfH%@-O#YP~*)(w|cPv=!(`K4$06_L(5QRYGW4HW{bp*x4L zePKzoH>ubz)rYIGoYgl7mm!_9ZPXX@(eSdxpcmUn^oUjD{3e<1e1bYhZ=>`sASJRcnm;}G8u z{Ik?aBs#`&itl((uxBI+Ls*eB=Kt%=UDsmNK`+$hH1_|C2%J0-{qti6qMIa&fJ@5?N4{vG|-++8{M3|F|k2-E*E2; zUU~>~{O$Y8c4BVeq9qaH-V7V%)HyN{DRg}3mYftG-hoQ1%S59Q_$-Ggp zr$4WyVtQx;pLX-wSeu4+r{ad z#_Y(9NaLZF*4WVt&1Uul+ecB&IWJ~aoiO!C#J?h$yD-(0?|`-&O*?&}jpa!k7FY%A zvyQ&viXZQSw%&g9PW?KYZDqf%GrIqYGi68Fq88)5c|+a;?bjody zCYsFq#?#+R>RJlYt^yE=7{{7yN=Zw(>F)3}R=@N9@tqrg&c_UWbs{C;^wN{zD!u>3 zl~_V@W>1B8K0hpUVquT`XbS7aRX#B2`O0^eP-{gKJIr*S?O2nUy>P?0XHr<1V`Bzs z1(7ll9NZD8q3D;KyLe3C0S;MW8rYphjTPgeM#(>%44e(@-PvB?scG44e64e&J>tpI z*uW8sg0jmc@0R1b_kZgfH_u~LjQMMa%wB!Qc%Mr;R>Ig pC?t7gckoB21H#XR6&5D-eQo%)2;v5FYW-s}{tHG4pkM$1 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6pZq8aSX}0_x9RpK?VT<7f0bOKRBB{t;`kta`c>ce*RttMi5xra7>r=0$%{1Q)5F` z)18I-4%g&3JPes4s}&UP%K;gTnr;f&{47f(8by=^fFMBk0*ftIxS{VvdsUz<44$rj JF6*2UngBn-JfQ#p diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/ic_storage_gallery.png b/TMessagesProj/src/main/res/drawable-xxhdpi/ic_storage_gallery.png new file mode 100755 index 0000000000000000000000000000000000000000..5ec0a940e910237e6565a886b945699a53d3015f GIT binary patch literal 2935 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_green.png b/TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_green.png new file mode 100755 index 0000000000000000000000000000000000000000..f428e86bced00208a96c5517899e01e743ccc1a8 GIT binary patch literal 1389 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y2=9ZF3nBND}m`vLFjeGsTY(KatnYqyQCInmZhe+73JqDfW2&$iQ6qsIL(9V zO~LIJXPkQVfsWA!MJ!T8!-RmT2gHOYTObFX@Kf`Esl5o8tam1gbTBY5KJ;{P45_&F z=C+}iQz66g!fKY4%}*{oU|ghaB307lCs@Mr{e_9F0#oxgzXw6i-OkMm6SsY>e~{DM z_2c#D*858yJpTXCR^ZEnUq6=xTIufA-mUZ6WXr@V^}WX)rGGS;>8BUAH+}9g`Nvb& zho`2e>ZgVmn8$x!ar1rIuEVjlb-XpvWj#v5JEQETiFUZB`&_t{EI7FZZPC`dVA z?WT8sa(ja!a~sc(cqL{&cQ%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?_nZLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ2+zz*$uBR~ z1grP;werj>E=kNwPW5!LRRWrzmzkMjWnf`!Vqt7#>1br)Vrb}U;^gY)>Sk!_VqtDz zXy9V#2Gi@3pIn-onpXnTn}X2mh*K{pDdZLaZFWg5$}CGwaVyHtRRDY0DigO`%yF6r z)tiFbEfzTS>H{644~kf%h=vIPQxAv8`-4>cNX4!eo5oP?SqZMt!ou%i-#8_$0+#w!xa#3r* z=YNmAdKEfT6yjVLx~^XE?2r1CFaMbebp-NNE-&g0_*>t3Hhq7C1y4u$q>PJxEB3`N zNz0nhrl4Twu*8*p!K?a-(M>hXN%0DHehzmFSM184A{HLsa6`D`{G$o>+*AKMt=;rd zS)iKXW2(u=(*Ym*ujqB$XV}OsaKGhKzSGbAjL=v6o1!*wd+k?pHFjuVWbkWp`6rn; Rrx;W?c)I$ztaD0e0sum4h0*{3 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_pause.png b/TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_pause.png new file mode 100755 index 0000000000000000000000000000000000000000..c4d4125d72e20cd50860b785bd253c8bc7455431 GIT binary patch literal 975 zcmaJ=J#W)M7&dCuqKfU zMNAbE3j<eb;P} z^*s45o?a#Y&GLssvYf@WE^ebfPV5L$x{G=c)O~vZThMkVci+PbMXk_Yr;EGRp6Vc< zu`>*l`XOOcRHd4Rwljhl^x(h?H2T-;H#G2EjovR?oD~{y= zDyd2Ye28t3`UgR*rW!rdRf(M)vox4N@JOSNg6djLV4w(sG9#88j^}|aGrUxmW&Sb{ zI9^~m^2#M%Qp>U`Y=QYh6K|2*S6k-J+!xtt^bq4vW!WT2m_%eyG+=o}Q8EodC=o;{ zo&?xVOF_JmE0{2LA}_=q3P7f4_s|$?G>P;m1wUNK2JyU1q+o1nhb+%FH&(zyOc<|s|208ivwe-582duMRr o+2cnyVs^#qwTAif>h1e~0kr@!CjbBd literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_red.png b/TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_red.png new file mode 100755 index 0000000000000000000000000000000000000000..863e477c5de506e67e9d532613d33cd93229287a GIT binary patch literal 1410 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y2=9ZF3nBND}m`vf$23eFulhdz$lP z+17MrW{C;kFk9qm{4H6i|py&XT4iq)8M!=B71_o{j!m5&q2dc80!GDe7w(n9u z?#U(XUfsx^daO(^JlASPqkHPF)V$L^Z=aqw|GV+c_I3Gg_nCMYlGpSb9&j(*3@Q~p MUHx3vIVCg!0N-!$X#fBK literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_yellow.png b/TMessagesProj/src/main/res/drawable-xxhdpi/media_doc_yellow.png new file mode 100755 index 0000000000000000000000000000000000000000..580af5c562b55274441ec0a8a5de06387eaf831b GIT binary patch literal 1393 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 ZjbT$v(t@>l^3y=2oTsaw%Q~loCIInj-SYqd literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_contrast.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_contrast.png new file mode 100644 index 0000000000000000000000000000000000000000..78aa2b414d4574e6057f13a062b728aaacfc275b GIT binary patch literal 2358 zcmaJ@X;c$g7Ont63QEXhD1B%s&^A|N{?At@n-EG7jBs}a-|6&J+T zW^`B-+*-yX42ravh+`|Zp$A7nQB1>dP!Y_uva}#hpIm}0O*J{>}Yu8&%Rcc@VEbnIshJ=p|AufM!peJ3zQ(h6v@*;OoUXB0Y-xY zQSRnjU?2dPdx&Ebpajl3x==192xff<8mR(C13+M~Mj;SNKnRl#W{71$*q5zWu^6!^ z2pjLqA#oHeFjKrHPYK54MaByABtn`98_d82YUnV56odpAjWkQ9qHBV%?|JF)e0G_L z#k_ZcBth5@q7pb<3`?#AF}?&}ypTkuV*F_YvM-q$KwgERkjOqnk`IyWgC|qyBpRLU zi~0Cq;b=LT zFH?EUF|a|EP$^bGVz~@6%P2^fXG1|)Sm}opq>4|pGS$apf)9+S5h#dc0%aT_Fe=NBMWv9*VblP> zaGx+1E6k4>M)4uhsB>7hT$n8dWzZZ}1Y=1oW`IALNrAD{&thkLL8^cwvq7ae2NZ=X z6^kbKp}0YndS~N3zH3i~sUTl(r&sIa z^;H|ReM>C*PzJ=`jZX%j(jVFPA$S1K+-@*cTVpgcF-)AI&{Y`EfyUC(BWF`<_JhI{X z+fg6|E3xEgz2aigBF+g6EQrn^(lt;|Ez7t7Z+@JjdThrgPrr`u~q zdq{2t#5-n+=03g>a4%JM{b@+w3ZwGCKO;IMDDLQ#z+l=Fu zo?TW$jb73Ux1+>~$}^6-nn82cjdr(DDvndIK0GPp_e!aKT!}R)gi;yT9Gp&;N3dVr9ox!d&u4SScuWdZ$_V4_)4>sI5SnsIoG2dHfF+4vaSyw>m z9O|qs;3ss&?LUFEu~Zj(;9dm2{bjU;Wm76sP$v(|5u-r2^9#;@)TKo9?uY8=pXaxF zx<4h9NYTg?9(rd>8*71o%W|9Cce$~>>1*SXfOk8{_T^Waw5~RWmo~=fCT$_PJ;Um< zfj?YbFp$J^e=5R__(@KkuVNMwt22Bp$a$U!+VjiE6p^AR9y4@uKDys^$UU=IKkn>Z zTOdpY?pC~V94lOSj$skd%kQmkBlfRaZnnp-C+Ez|-I?PDkef5|lh#tIsUXv)?+J8S zf|!(6+(7kur+2mj^R7EZBE8sqEFzGn9y@Ke2v~PzV%o;O6=h@se|xtqP2lQ1{-d?- ze zm_iG04m3NoaZl=twnSFVMDA+&x?Gg;$fcxAy%T+>29ONQ9G4k5d)a?g9c%*HjJT3x zyiGF0zwTb8H@rI73}6eH9+TEC1;5rU^nTV()4Vyn{@P<>1Fx$UH63^yuj}|G?@i^V zX-Qf{U2SxQC1OdGcEaVwbnUpODPf0&#{Ou=0K55{#RY5Y{BNzSsY3-?>6Q?q3clN& zof2MWR$LK|Sd!H6^?6`Vvd-yN%K6e^T4(bSx8HF+kn3dm$Rf$D3(pNa^;fq$eyJ_o zisUOEbi_Y>=YLKq(d_S+nz9p{%UREo3C9M`DpqE!PPsHz%-B0{|F<<|i960-JLmu4 z=bTV$?y?oJ$(Jw1T)TVRC|`!Wnf0u{gL+7Q;bH&d)N+~|@5k2U(CbyAiyC$72-T;| zY{A?3wxaplpTu`0XKBLy{RfBlt#0YF?R4KhsWp!u>qm{`hte>dD$@7f-cLN0Q}Y+i zFm&{;s3YwDb-2ZCMnQ0=8#+?MNFzML-1SJwO9<|dG1s_yUY&Uox}xaDrfqvxcJzAW zpNJW)Ulc6-M_7H}-uf}iF_sLcMOCM9;d^mAs@lx!kLwW=JQ=S=0HaIY`1pJ0cg+6D NM1)1M8$$WT{{wVW!~_5U literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_exposure.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_exposure.png new file mode 100644 index 0000000000000000000000000000000000000000..5feb667aba1c5b7ac2d96201debf6fb13b686c4e GIT binary patch literal 2300 zcmaJ@dsI?+9={sCGj%Hq(U$XYG_Z zrnYO@%NnL}weqB3v+Go&wK`i(54FdtQ<9X4_OKS3boP&F?>YDWe&65uem>vV=iYPo zuv6B#yZX2S0N~C{q;sq**LFKQTAz;&t4P)b2{SU`G$SR^tTeE@;O?W@>83v4a2EDhi1T`q59}H!QH2Z z=krSnzBjEZ{n4Fx=$YLaBU8VkFUBs$V_@wQQ2@z%qNK)QnX$d27x0d*-?m zXMeM!M>M3J9Nlz&gLr5uJ7nOeKf51y?Q7#=K2YXq&vsot*t~C9t?{<;wqeAu`r?eg znXG2+CJvrKPBpT2M>V$_iT5`l1|2p?vXWA}eci7;_PyYi4eDi^oeFg;sfr4-=;?fm zU~#2X?b6wJsjwdw#!!JK!v^C&gPmp~NZ!Y~3tCfI{yv(JG?#ZhBP$I01R&RNYf(%+ zP>C3pe<6KpX*}5d^`a}9BYW@6t53X;#`HLaWxdTauFzhn>C(1d+%%!w>T;l>*!KWM zBc!I|clh5&Xzd41o5z=g=ik=F?%Wclmdn6z`zX}OkjllCgptTF7~)viZe{`$%-BWKI9 z+a(Ql_b_j?v_q)lIe#C0yVwhrT~_kSQ~~5gPny!bpJ1{*xwrl{j`T9fd`N-zK?T30 z4fZ;l8&7o9Z7$QEADR-~gN#^^8u8V>sdl`)y0!7wHg2ur<l=l>w`Q^sWA7iR4 zC%!GaTVz?{#RUoOn@_R0=(^YUHak;TfhU za(v$UYr3p;?%IjUOGWtWlZ|_#j4y)iV|yc(pK06^v0&u+`t2mupn`Oy)}nr+3Rsgr z(A|HkB5`9&uH3I}F!dqMgqyH*osX=qw=gPtNBd1_ohQx7$9gbet$0XPS8W{MIDPL6 z@O9uA<`_C~_NC73O6qDlblF_tvA*mBw{UqVcZw}+>JJ(H3sS!{E9b6iSxInT zV6}z8X1`cc=)aa*jBk?a6c3*k1uSWk9YA_M4{7ag@jyCv@R!jDCezrxV!LZIo31~( zSf^zT4unt@rI-JMGdKmm$Clgaj62LJ1ke5fL#esYW$zZ<^{s+z%(bl<_lLg+;3yfP zuW;`K+<%x;dB|P<1r_CLa8q|ndBbIbk<#Ko+j literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_grain.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_grain.png new file mode 100644 index 0000000000000000000000000000000000000000..297bc2dc96fc8a1a39f6a1b9b638eb69810622c6 GIT binary patch literal 2648 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 Y+eeUPhlg(w-xbb%U4`%76umAu6 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_saturation.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_saturation.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a14fa759c410d437177c679fd181bc6997dcd2 GIT binary patch literal 2738 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_shadows.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_shadows.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ead53246daf19cfda4134fb1665db435e1fbbc GIT binary patch literal 2618 zcmaJ@dpy&7AOB6uHHi{adCi=V+pcEY8DXa68WWP3`Hf*0+t_HiK2B(*-#GR^xvSbYo-eT zfWG%e&mi?2z3^&ls=qJGL#3!Ca{8jD0>k!Y*~8bd-6NoXhd*9W2Y z#*bx^f;_#x`cm&)5b;7GkAy^uL?TBK){)DPL!ya9A`*o`VlWPB3kN|OM@Sbta0Hg$ z7(77%gU{j#SzHc$fsr1=O%b{v)Jp#ffzA6)%MpA{lR9BYF`b7*JE9gs`ex|o_y0}V z?C;hBVG#JY-hU(((9(DyG6)oKQ}_&Z;h2^Su6QI0AEXPpd>WUV^eu~l@mwKS5YOeo zDHOPkADzMCEbP~P0r>fmyg33Pox=dVJzWrL3P%f^tU5*`z$QK_pN&Kz4Jkiy50HezP2}ZiU0u3 z25(Pyns{KWA|lC{YT9|>RZT-f9lUN&Gh$$OeL{rMmGf3ry;aC^n`O&`6>H5b6WkQJ zUQtquD{1ZtB{!gzS8iBOQ%_dA44n-dKx~BQ=j*IUC~CH)wa&E*@x;~b{Y`N_6Juk) z%@)hLM5(E9ZS(zy`qjf|u*HGV8-83T+pt4Bx?4LMief@h8m3qcQ-~A>kpj0K^>4fP z-dU?TJJAgruTh#yt+?G*-3vbEeyUfI=-KB!Q_o&*i9pB(%)Vj4r;O+ zVs7uCz57`|_d`xyH}_$cZ}DEc;Pc|@6?b?-nCXEfr@{?iKr-fMx9`~G;(HlwsP`%) z@Ioy-#878hsJiM(1>{nlu+*nsM{U4M^R>9|Ht) zzuKm|v!z_P`(yvqfwbtnPRxbl@r$;?WE(wlCu?20XLgy<sTIrBiGA+_KK*1h6vW zGCm!eatO6>Tcr58CL5qHjyk9!C{Bi2bWo*}wRM$wFiD);ad73yWmP#-ek;S3cl=Rp zdbA}}p3Wwm_T>iDO!m#|J!?AdRj)sjKR3Jgo&n-N8BoH#8QbONlGCDK6VH&b4O!kr z<2ea>b~7ca$Xo3{*+Q&LWg7ZWZM&JP#p!<<-Eyw?$YMw*V|)ViM&61aF&0T^dB85R z>l$lTd`ua!{@~P_Ef#?D#KUsA{6Ml|J`~$VH`Z8!X*1SY>YCEpt_pj7?Q`Y!;%N`7 z-$js?FuCD?9&Ej+qj~tC1Vf*fbf&{(!O}BP7}phIV^0-YF)9sHhu_}C2wy+tob_^Y z3wNLI25!OGk2;M5$$eW;tn#%FAFrbMch^kKuTaQJstkMm?;IF^C`E#^JFSbWju*Jk zye(f`M zh@4z+y|ZaAvng^F%dl6oEoa}?oalHY zFg+(2R8{SOg*O)_4ma-K_r7{tmgIutgvs=~V&JsTn`elD{B8A;(U&&($?f{-_LGN2 zlP%2lf9=1N=Io$dy{GlxH_%QosY7)!_4tOD)%RN8cCA{I=F67Q-Wj>#cBg;(_{OO$ zbdw-5sfk^=nge?Z;-shY^@t|w3=sT+$!9X&=-omdoww+&}+6f zWg_lWJYvcqgLw)DDZJ5L`iB(o0vKL^Wfs~p%dn&D`{hvoU~YLda0QlLKKzuNyYM&X MP4)LY?Gc^xU)(KOPyhe` literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_sharpen.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_sharpen.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6687ba8aa23c2afba74f643866d81d46678854 GIT binary patch literal 2162 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 SzhY(epVOC0r&MiYr2Plz7LC^c literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_warmth.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_editor_warmth.png new file mode 100644 index 0000000000000000000000000000000000000000..9b9a258edbe870a8439da9653452d7c9665b85c9 GIT binary patch literal 3258 zcmaJ^c|4SB8-9nekI9y-8H1vj#UL}1F~(R&lSZkCF$Pm+F~(k*qsUrO*>`0rbrJ~) z*&<8Rjy9Air#Q4o$u~OH`TqF&-skte&vQS&`?~J?x$oT#rfh z-wuaAKYlXv@{?_oF=42F^YsUy; zI!5yt+oRp6^yvL`tUugl3v6>FPDH?B@M*9}Rxmph7ikUu&WjVRSGJLG*moEHerxzY zNqLefFgp&90W(LKo6u2cGuS390&R{qvqT%iOi^eI5`{scF(znJ914p=o5OxQa8Wd# ze*n&%Ncs^=WLd+5_iXqJ@Q>85WJUH?y=L zVeIYf>@95VO))5}*-tEyLl0vy*!-VZ|9`QYev4hv0*fn(Ol0tw;S7HgkHdm}KQoT` z`&`U^%l8B8|NC6be~U$ml0mL?_P;v)b4w(jmE|wpii}^%XRt+b=ZSP}<%&vBO&5U$Vj9J%)EJw9z_zMu+_Y*S3+794j*37M*SpZXlbf0S&)AM~kjPIO?5dW)| z0`dVh#dscb?bkc?*G^xJ!L)ncO{yh_8Zn40Vx9yl=S9-w+E^t zF(Wi}OGQSJN)?7quZd}egD>b4~sS1<57VnGx zB(|0~zER0u;fRfRbdC)8YvtVGQJ|)3yYv*(8EN;d0@c3h!sT=wXVlr5j^`JTUX#mp zqqdyziobOn5i;d0B^p3OK%$4S-W9)=sZ)fIHv(*bKGtJQn@(<;1iT4T{T8pa zKzv9^ZN`El)$=yB`(fi44{y9f)xNr_`NbJ0p93Y+AQSzs1FH#vCdKMy_p*xZJKuby z<4+NyvXnj+*51kecK9UP*BF-MSX4E8EDO+1das=Ev?|B7HI`xuYjNlomU3YpIq{Tw z1Df~37Rg|PmV}AqnV~-8&-ZdB?awz5r@T&3w3tJLex9`ONy5`UZ?$=?2wNuPUe)EC zjNbQEjY(>)aUD5J z&vk-F4oS1jBLcC9E{c=T{&~p|*xk-^^OeL3o%DL8g5uIz&zhO5e$!=#(m?1=<1-Jt zB^TYswYTfvc0eyJODDOR-dj3z?b6AB%#EI#3L|WHbs7_^Rc{X!UmV~$&wYI>sa+nq zqx9ZsCz~F%bI%8o0yZXhguksYg|-U$%Ik!_kYM)12N=fuk!x~Fa$M5$=< zpG@i@EJxMS!z*;4j-gdspZ4(OU+Cka`h(wqUPayUt4E(-I0n_m59hx*DsH$q)|~d~ z07v*ZS`K8CI_Mm**pRKh{YbTMcLF1!7PTohpql*=>64>F1sjB?C3fSzoXcGxHr+x{nOXrKVs7SQP@Hvm&g!C^RgOE_ z#zadkeUNz8!}+6xB>E4Z3Ina>TG#lunZlt$tF}Qkirbkkt0|Y`nqf!HE5q8oNDh!{ z9n|AfPb|i+3TCn!znrwVrG0zWz3@2brnTpY+)Iq&tvgEl7QxDkJrn8eLc{&Rg;uCO zb(`IIne8i`@d4!OJ*U#zyj=}fP7%kpg;Yza^yMlZxukLcZ1BTyGl%ZEzQcFuX<#^B+tshf@Ila6RDVoi##FUmOZ!?S=S83-RQ<#mHF>w* z&~%ObjRf&km;=zOI>OU5!XxLo*SD!p#O(9DR}F?a7hivY+U%{cZ${Z`sY9t?urun} z8-+>PCWT|FXi^g5NJXpW;5>+}EsTV$+L~xB2vglN=pZ;R*w99h!(9M;N{{tSe(vVt z?MCHa^--=TJkT^i%bJzi3vmT-mRQ3*};Jb!v)gSj};?g}qtKM9Xu56qUay> zx4W*>lNg=w$qptYY+sI-(JM%8NIJ1Y8XY+6q9 zP=Ypv$S1a$YUOKwOFJ#Cuc}FSU~7(=f(E@WU3S`Pg}1_|gbTt2s&9d}fXTlXlm)|O aSrj1V1j|owjq_ajn{cvsBVHu<#{CC!$zaO> literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_filters.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_filters.png new file mode 100644 index 0000000000000000000000000000000000000000..29abc7eda64d34a4b4923df6b9c183b845984c5d GIT binary patch literal 1870 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 WL3jV4i=Ke(cPomN2v3Elm;44Vk1YWJ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_rotate.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1a9c772ae9c565f81f813059a80dd9814395ef GIT binary patch literal 1825 zcmaJ?c~BE)6i=iEN}(bsA|9*(5fzebLV%=12rMC?M8Z*}D4Hc%BucVzvyfob8tTEJ zP>qxTa!y51JlZm96+CDdxfB5{3aEfG)?+;CSq13^Mf-<#XLi5uy?MXi`@Q$QZ#Gl1 zIMmkK*_uQm*@}cv6tOahmt#dCzG~a52x6Izhs5I1XdT!KJ};4q+5CaW}D9gjN3%O&<^H=PQM zh2U#=)VHEy#S$PG#Snl^V|&RMpf}*lp@D4B+Yj^vm<*6bXRzoX%L`<385}Oi2HrhX zA{!=8ii-uyW=pcu~p);6tCew?E@Y1BIa9HQ1(zuQ@ zK!`?$Db%ma%>C zX8$awi6i~{ZZGT#yT9|o&nII^!DSYn+V4inO#9Ax|25&juy8%1I?pU@q8#&g z0*-ES*>y9NAD&qD$Hl7$GmB>1*v)lxzo4f4efDte1r}|q1Fvxg;mq4L0AkD)jCld^#Q!~#Nb&{$Godw4NbSLWz8B*r{;Dg=UZCr zm6mj*HY7=ZymRTGw3zW_gzq_w)hlfYERXeQs|edk9;|Dm#C=}!KK~I<8x>h6@UM>>mPU;XQn*6#-O6Nxa zmTiT#?MRD*Ro$5ZHdgTbPB?hvCq*e>vEiu_ZFplh-2?6k5QH4+^jsYzm(J*VQ(|Mo z3h>$76zJNuNJuHkm}8hdBQV9v)XjWIQf%Z?PKio_Lal6O<|U_`s!S|bRd%hAOeuSb zU2GUm?KQ@=<*ko;PO05e8Q&ml-ZsLNVOs0uvORz5FO&O5T&44#^rkQhO8Vl-_UNuUhDNrOLK; zzlYj8?$*Q8*=Zco2tpqv}xNH*0_AnZgQAgO*Ryma`b7DxoaGX zL`%6bLtCs(m51$j>)k7F@E$pC-?R@Hc-AmF(TS8Zlyo-47`n>*(-MU&h7JWu)BgoU Cqtasl literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photo_sizes.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photo_sizes.png new file mode 100644 index 0000000000000000000000000000000000000000..40a564e6a2a77473f1362e008236c89763d4f150 GIT binary patch literal 1203 zcmeAS@N?(olHy`uVBq!ia0vp^4nSDSr z1<%~X^wgl##FWaylc_cg49v=zArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XR4cQU}&OXZmDNz zYG`6%sH0$HU}&swV61OwtZQgwWngJ#XsQ4ONh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+SwX`$F*!32 z#McCC@b$Iw%quQQ%u7!7bg@+e8ljh&nPTN)V(w_<1`Hkx7Xw2>S73lUnz=cdySNw` z8kw59I>Pk2dBEge1WebT^O=|!7#P(&T^vIy zZoRp-G3!u($gz)4f^s;{3jg48THXAEN6BLL*`;M~?*5YKd&|tCZeGi6tl_8U*Ee$# z-}km_b>WXLEo=_n`P}+Lyb#NI{f|j2w(`x&TqthhDEmd=hpFhT#jI8C*JAf%=WV;l zWy|`nuX;iAGEJ$4le6aSd4Kx9-1gT}cdZ*{Zg{%>bH_Yc2dNWtuP}aLVJ=yp-f(5- z9L7cNHVwb!1*-PkpPA3V$l<`i^vCd_ z`$G`HDtPj$XBBTA6uYPh1rY?1`lEk9QBm;V)yZ~u>%ny(nRzqc_q{joy}6N}INRNI zyo+I&?%cRmpmQqvI%D*IGkbZ5PQ4^sB9pjGs)mo4jD=?q$T`L=Dj>sJTG&Fv40Ev0 zE|y41Kc|@3;fx5wg^owr3^P0udWJcN2$(^$wwq>uJl$l0ZKc_Zk}l|;iYoT_vX3U0 zCyM6soGDxE$QdvkDpbHh!~mf)?*>YkX6w2NT}RtI3+fOumuB~ZD(QKkVjlsClM!-O`xv-AL=+QbU+GdKi+=|2gM~1@dXs%Mc<@_EB8gNJVo`9L9k!Mc)pp% zd<7F6RImqB6`a%!({>~KRGpyfO3n?4;hHF?rCBP$*|w!5GlQwrkgUo>ss>?}COnfG z8y(a%5sH$O%`~|hHWwY_k|x*M=W1=aQ7q zWwb4qr@`=1W&f&lbBnf5v~2Y)HCmmIT-xqF?d#HstM}-e@N!zF7=HTpVe1G3Iy;2j z&B}w?^(Swy9eDL~W#di%?ekyNcfZD0R##UyUbtKLk6x(JajW(P3WD&scl*xk&-hS0 z9^d}n^GtfbMqyLGr|Gy-oS7^|qD&P^m_4=UKEY1eKEt6kT$TbUW7E3CSgX36OqyIhu>+6$A( z_B0vD7*jz9-at`Q@PeX(eHk(z_UM&8_^QJS`X-7eUEBF!4V;|wAHMJVuV;2}px4&e z(uiT0Ez-wE(e5=@gBAVfLMPYIwhxBla7azUEUyDBAgZGPkI4KOhyq^BPpp70470RJ zu{ex##~4AC9lVKgWL6DOA3OX1n z48(*&TA)S3e-!V^F-SlLkjHcKxMDClA5qq2(Am5u3A_w}X&RGb^cgQ^a2kHcdZ zoK!pBK|3f9)!s=R!Cg+uO*-8q<+f8U#z`}j2d{ht@}`SPCd!5@zL4c3QV?nkNoKQI zN7n67^)Zs7X_|DpNSDiw5OyQ4Kt5+zjJB!*3k*S*G$^SGZYuJlY6kiU6zN6^vR0E- zj7phM!N?r1k(9$}rc?!T-2b7nTtgc$3O3{Yr?3&rYk-UbL(S*{YFx6-bfqyt9q>@q zW2!n{t>R!xg{qNKH9Q!^4{^L8DW-k6OyD>sq8N}@1Q20;1d?z_lE}CN9bRu|z)5!o zS&9mwf(N|eo(`6EQ7(@s6sU4pRmjLdfmN=!$))OY%~_B&_-|jBxwYJME>FFfT3bo}et6*Sa_P(a z$)_cSNhA`FzsDn2KhMrR+V5Yu-e9$!zjStDekwD()nfU0aCd*}*X`N9-knWN>nCi_ ze*9`_Z*G3~$yP|eUi3m+3%dShU0S@xzbY1s%G#AXrORam-3s5_m>iz5S}grbp)*^s WVsg*qgmL=5`Hmx@0rp-`V)_qza$w~E literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/tip1.png b/TMessagesProj/src/main/res/drawable-xxhdpi/tip1.png new file mode 100755 index 0000000000000000000000000000000000000000..5d9960e33430fb9bb135942c5c01c15ed03e2f25 GIT binary patch literal 42494 zcmaI7WmKF&vo1QgLvWYi?ry=|-F)?!L2T z)+?*3y1Ki%>Z$6UC>14X6hs0<004j@D06_5m`@zG4-%JNy+k!9n?vgt0>Q0vK zUZ$=! z7jI`%b333rnHkW^#!-m;y0eFz%*H~9T$@XgRnb`-Xl*0o>k3r&Rnjo`wKM0lApasv zCg{x%7T^GMHzo6Suy=Ih_ZA}mFS-2S`+u)l$jSbT#NAGa{QoGWqo_hA?&Jz2<6`Du zGG}FDBje^~X5-}I=4N9gV`pV!XJG|@xtZ8F`MJ3H*?GwR`$GlzuN*o z36Wd7yF2r1PP#MJ{(lN~)9`TyvZw*woIG63!4qdm@vkXoesNczsk@V_hLe;1e@0Qo+R5F? z&DzPCOkACtj8@ym(Zb2gjqbnb6&3kq9o^hb9nFEV5<=u)3CuP&7W@)YJW`^3ypp0^ zd~9rNlANLvQk|#;a0a(50d%$T z1X@VBIysR2SC{#1{&!u(|5thc&1><$>mu>L^0I)HVfi<)|F4Pu&nvL?{JZ@hvjso= zkKqFy!Pf2yHfv)0sA2%1z*Sa4RKt7i!XGY(QgYQ((`$NSXnYuE&gH=SKs?bxk`h7Y zQ#|RX6y$<$(GY)jB&b63f(poF5`RO`=LOJ~;fXZJ!SW^0?mBu|cAVE9`=4K4W#p`O zd3Aa{?D6_>2oci@K6KTS9}bSsNc{NyH`d9FB{XG(Cpb+sDD7&$GXcOkKkQ}HI z2JqrbAFE0}s*RF{qJ0liGO8FhG(>kF>jAn=V3_vXSFR`_qsseEO4*C+rni`B^NY?o zQD0+MDib@c5DVk=qd3fGCO(A%-mYpj=A!7bOzzQCjn871lzO7BOY1{0~MQJRdU1dkWArgO|a(`k1l)6#U zzZu;9y`3I{`e`f(FBTL8X)OV552HtPuzK_N-e1YCNRAt_!B?bkxe7=fZoKXlxyqnG z(%J!2ht03Auf-Sq63x?YFw~KS9z{kOlE|T%J1;Fn_-x+;ikGZYJwsbAu@WF5rjtLT{ zqKM&g;OZWs1x+t2LWAYdzyNE5&=~O!fcesn(ejaqb7{kSAF17?Y;%$(YOMAyA|R

    >~QQ*qJtXx2Lpfrq_ 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/tip2.png b/TMessagesProj/src/main/res/drawable-xxhdpi/tip2.png new file mode 100755 index 0000000000000000000000000000000000000000..bc35c8e0c40a55d465bb2a87e41c00965c5c5943 GIT binary patch literal 20814 zcmaI7WmsH6vo$)nySoKwh1Hpn50t5(f zciwZ(_uU`&TpoCsy{EgnySlr&s@Cd69W6CHY-(%}2!yBpTv-nULIVH$!$b$(OoyMj z0{^IdR7`yIJso}gZM+>o3ih714vgyVHck$D4mS3IUZW1uAP@?(i-C!ciRMd5J5P5$ zn}22a0^A`$Z4gLWE&yU<_u9dS(bmDq#Y2Yqth1My(Zybd*;rIlKog?m;Oz1|$lF0b zNXx)3=(U}MJ+quFqjZ2IAi&+h$A&S$-OU3k86d;_AGwmi=YOyHnHm36#OJjP^M7^9 zL{o=R$3<4pYX1Khb$9DJ$*c(&YloPC4DhQ4r3P&dryBT=YPs;YD%hmKz(dH>>SjUWtag8d@e5b zlFG_TV#2~A;tHY?f`Wo7B8uWF5=yEnq9Q61iom1t|I}6XwDWa$@bLMcy7vFKF8F_~ z`)?_@Lx7f*9lTxq9PCxSJ>41qGh|7Z|Gh7w|Es+Ju516l_eJb~t;-K|hX3Eh{=X*r ze_jEr=ikTwvuuHf|FiHNJb=~i4J_*~Bj~#zkY>NSvVuXtx8p*r5R%2a8|}7Jnu-eE zU>B8Z6;y*HV^lQd>tHmpb7l$^BBJbIvc{yOvD%w2Oni)goOB5rx6u>zji8z$s@;?A<~U*^OQ@0zr*> zc6Kh2X@ZpGr%SY%I=)AOSVefLeIbTv;*(R~-eFs1M9Wy$WYlC7LWv1+e!my_asZ?; z(4ozJVP20TKbAE(>b`Mi z6jT$62}h{?dF9BGKB&j?*OL1$k9huM_8Zk7tQn&|)opFp-WC??6-h}+<55!&=K}<2 z{r4On;jH}={qTu?Bu0uLBk9EGTUs@EEYnPZgdi`5a~rRel-W)3)89&q`|Fd&m(QO& z)6vj;SB)@vjbvGmn$Sv&MCOddi1w$DoH4*OVzYW|Y%IgU!J#shK`!igR*hj&%4<7j z6<+`cBY>P@iXbvRLJ3|?=xT~T^SPk7?PQR`>Lrzs{qtqV$voerw6rryGO|T=&}vry zX<5{50Or133aH0UR8%y6e0)6390u7s7vBtlT3;Wp4&wf<(<(7OJ16wR1WS)a`n#C2 z%g_7%oMW|p{CjKB2-{AQO-xMeE-x={Bf%mYqNuls$+l3G}~?NWsXU`nFWjtN&0ah6=2 zZOYx%w{P6NI9jUrBsTw+f*xJUOE0r)FGBr9xVC;%sa5#x4;+QyFU(>5y(>GM1yc&B zE4q*%oPFKi`@nnMv0p^9P^OZ+g}mS~=h})D@H>P*c~FlH?(rj6*r_Mz?q{WV=&w=s zEWR~5g%x1*<8Sd5e7E0cWszO{tSsJ0&&`!!Lymq&&hdf zKmSp4d?<~fn0w8^d+#u&*|x7dE&@lqX|c1lFB(IQ-=xV}`EqZPU0F@-hGj*Ag6GrH z!h#!#;tJV(rS_BeKpfs8t#N#b5!t@CUutS< z&Qj@R?)(}pyTd*WOe%Ls2uI-~QD|7VbhPqWd{GX4yxnIpYjqU`PNXs#`uZ7TU@Li6 zY8P7yxGq%jP=X+sR))jp} zZwTt9XvqHgda(r5k*xp+BJLZu@{yHw}XlibO@vKFW59tq#Wg+UrIw<=~ls1LBn3S8kIOKJ0a!k-=m$Fup1XMlD73VB87 zoK$%fWMKpJ`85fclxaXevYc$miTY(s`iSol)?7)K?L z`5=69dOG~#u(r`s-_p|KS&DFDPJ%rAcChs)2aKxCWBr>km~&rMRn;;U7>C*7($XW> z-{!ymT3S>12znQ3wRjILHiUrPk2{cS&O}uXT}sf^qVf0lnVDVljaI#_nBtjwQBbTY z&aJf|iYY-@vWUIe&o|slT3@Jp4-jkK?rkJ>(EX{|&5+BqRD|xUS%XnNn9SHx==CrW$7J@-0U~xZh#~5{hL?Lc&4P0KqQ*;^HFR3ZR97Xmq^0 zMf$c+DGxSSlDN9v(fO3As;RURLe*7O&ZmgJ=w+5Qok#KlC<+F?Il(?-LGsI$8iy$h zQc0MqwOux9qrZEn-wE|hcks;jv?72iJ{RriGmtHptZ43 zKl*}BKk>@SsiP)8sLf9VI1zP)S@w1(1D{3pO+=RL7sQMLTK?hTA%5t?)$&a$ozykv z+OyO`LZ)1YK_Q}jCYR7H4-b#in2CuAigV=AD(m+G^tHb(FP)qm970DT%|~MED9a?{ z&AyJjWg)To)MnA?*9ho|2~so+@8Btz$9V*dl7fUfD!V;iK7K+I1VYSIZL?ToX#8*I zg)%)md833v7R7Y5CHi{lC6!#*U%|Qb2+Znq(PJe8wp>O>b(ZVXb*ay0?H-;#1~YU^ zd7Q5#Aqe<`Owex={%kktC>d(uSs`1lT2n(YY0JvaUeM)^im32d!( zK=&;>wv)Im>#M4&m{K3=6!1El3Zm_dK-G=zG?G5f{i`ibn-qv^{ummrHy<>$wVx;o z?gh}FE9o}5uQuvf<|>QgpZ3%faC|EEzvrKUDC!L?`roLZd8tj4-8~O&w0@e)6Q5*! z8Yxf|Dx32^}Q;}wh9aEFOYyvy&a0}Q^>Z#CksFwR+Ej2s$ZHd{o%-2j zr}dm}quS**ybAuQvX*p}z!!wx9PMZ?4%2AFJx;Xc9(-iBZkpq8cNCE!q-#DRYeS8& zAB|M&dEs@lu6Z%riLQ&UM$7)P?zs6frJ802qgd6tzstzDym-r^_BbZ5MWK<769iw~ z`slFbx6ht&s_i3~%D-;3b~+L2i0 zZKkUKOogz*N*P}}$o-+%TKkkvCwFpXQuKRpZQ)KXjEoZ)x=%SAl=(x?7U0!^UwHQB|_WEk-rgqCKLZ1a0l%F{<%n@&wlq# z$l-9IdM8DEBVf+9y757Db>P(tVAGQFGmTD8Ue(K71?k*&;HP4UGts8p9=-EwR2@=F zC5R^xV-X$b;B9vvl@lWJu9C~j%G!l=TJ?t6uYPiPmqvzYt0^f#*kp_vs8Aa{Ypz!< z6WQrPE8vDw8Q^P;b;Oda*~iwJ;=Ic2T|w{A;Y8nPbEmm^T&g$AFse5VY(0y{Ab2-7 zr&oOZ{rmKO1H91p=k~gHoN2vZ$oPBS(a{WchBDkYlcT%4ySHCQV?z_T(Au${@_%FZ zr~IgE4UenU|E7tLHKLg(k{H}8EWSO}6Bu#7FZZN=+I_PT5hm+j@%4g`i5;}z1B_lR zn#x<@tvv!hX^Aa#F$gJwLVxb~yiY$10PREXe!HX<_j;^L@~tVVgJgm-j?R4~*JEfr zU|X-|V3a1@@_Zb`1U3E;JvwX>x%>Mcv+A?{EJNl>_>%M=+wzG&LA^no+J#GZS4T>Z zwC6*!Sfz*EXlQ7L{nOc1oqeOP&_;+_r6dedQh(}Ho$+=Vp>M~4{HGAjES3t&`!2F^Ia7ZIxtNRDR$PYy;>I|ex5p$-=n zSc;X`@Si_#Vw{M~=;isWAl|wD@w7XP%CS0R{rvu)T^G3w!}-D|pGI{Z9rs$)QfWKZ zn(frU&LENGKl+pD`n$BWXySM$YjM4@zw$mTX{CSaa*kez8h#8hMnkMP~)qmRj-atBAk>0{iuZZV; zI#r?Ig6YN~j$WZ^cksRaYP?wbHR7Tc?YmFr(Ka{o-pD}d z-Wt)!h5R`u*awcmor_@xIo7EN!uwzQnBZjyw90q#Gr9$ha)$Sv@CD)8 zs$m4xdK~H{#2aaNs<-dbd~y_tvMA)2di*^?)TUu#bw^hIE$@zD8KZGSCKq!bnP^d!1?>*7c?oAPdE^ud*G+z5^1=AS%Sy-k$2JKQ6@Z2PbI zP)M=EP+(wg0)H`&~vFYz zWgM1=JG$3P$%6&djtG=g)1<-D9RD4&a*UzMVYyVyU)_&9=$5pZbObycC2Ui<0j-|W z&ZD6+#u3p^c2cZxv@d3JWvbnOe~r)NJOu#m6vijMDf$L4 z8nBbdXSYq&plL)Is|KEtq1Bt(d+#cg$ZH>S;O5kL;D~X+EjYrEHDh6Kzn-Mhu}OWi z!QK^z$tt+or#MSDT=mg0Se%rGg5t(cU40Z%KFcvRh~_3c)yTvpdbUTH=dsass|%== zz3fF1E_(NgDP_~EkS@bTL$pCbqL$Ln&hdkB$r>+5S|UD_?$rn5IARTSsi~?CmB)1C zh+x4(%o+C(w1?|G57*zrcuhYCfSOsY1ZM@Gi4Dm)8aLt;jr%oG=@JRq7T3%*dA%3i zozzDQzKN=p6F^uFo+Ppt1t7k?Zah(;UPfko^QV6^78bk%zSP)0Vop_voxYle) z{(&UAutsy1hBDpUzY-^?MXjOs`4QjnfvRi{BJ8&Q#a9Q2gsr?xxIi7wF$JU$MiB>$ z;&)A3vDI#o4eeNXqK`~AOvBt6NPU!>fO)l^(~;a>)>+(-_!0Z@$56_PQ^0VJgK5d) zXya;AgtFY!QJzs`;*xE(ngldAQYAq>z2ST{{%0GP))N@a23MR2aLRA7r0HVd2<+<- zQxmymG*=msz*7jF-8pqFF3pkIeJBN0;vVfbM^Fp}4Vig%Uy)7^x`faM{b5nA;HS3x zb9dBu|MBBTE%|4+_}-KsH<-V>b25o_^z}G$)Y10i=m*A*2(SuR!$C9$C49PT{}LH$ zfWf#INWYW_4>3Z4V`*N!di81+2rBZ_qIRO@`>-W+3=PSeiC>%0qiiHGG!zuJN7FG5 zA4THreiMgyVc^p`|LzEMkPz5oVPUZnqr?@bNl`V~SbN#rZyQ@S#pna^nKb(vhez`f zi{TTC?TGf4D85BkN+E+7V-?at22DUaVEY-@5`^#!m_V$f8m_ln{=JvZQjS zI){o<>|bfUa#HV}y{j0u;pXED>vWm_X!qe7x@qL*cph8x+O-SYxHQ9Nw`n(k(E{_^ zXTVcHkH3enqPoac8%I?mf$42OAu(!azc=p+xM<1D%)F1adVP|wi~DLF&(Oka)))%; zt-%xr94No2kvz)1C{c$-Be`n1F0B9PbXCj^RNNSN!1%CDn*2__IRKe}?|f?_Z{uFz zbMxrSX|7SfgfnF`LON{RInby)qK-tJgX>Wv;Y_ zAJ}q6*nrD6?z|Ok9=lmB$r$hJJ$AJD^ypvytx<;uPgf6)YK^kRlUn_O6gZn-q#p%c zA5-yuU4QCt)VJ7jHS{IB&^40fK}D+viL8{IWxCg4?C(tiu}w zR=OUb=hiXsq|Sz}Ut{ej#{#Rb$`X<!G9+8u2++79&G z{cH(HM*LYsQ-V>u-yimO_%B){)-IK05;bkF`)_uef!2@w;&KucsSG{$5i1?y4?x_O zZ|~^15p88ApnxB2tc#Qy_U&^A#tM^n42K9srSdz47oF{amwW51gc4M}pBQ6k8*txX z7bL$x_tS}(=jdbi^n+U>>nxY6r5&`nf8R*4GKMJO$708z`n^PoOOF%NZtSG#V*Q}x zZ8Mle_TzU@sPNyKC>rl(m@^v}h zDRz2tLp&`xO8MXFy1F_}IB~zZz&Cx0eNFN#k8zkV>1Z1{rbW{&yn_$GljL8%ii#eVfg^%Sq5xYC9trb1*5(MmxdR6KFFtNUv#^6A@qPYnMN z#ndou4g(HuQBmK8CYynG3E89Q+O)LYv>lH?7}RN4InRoA*@voAFL#?V5E|~{720h_ zy|m=zo3OrrvjT`7)ABA@j#_rSxw-wxKl)zSjPA6P8Ee46AmF*R#^0{MOVzh=9uE(&68yz$??=kMb&_gKNVl zd>cxpUt6nsE!=B{gc-=hT$dZx!CM&S7bDN9B|nOs@+ACJCvSbUo$~CtbuPU$lN@oV`xjTcrR?vSGA?-Q@Z_E$A!()>@d1zB1L2rMI%x!S~3!n z`Ou5)!NQL(b3aW_(Z=Jb-ZLv#EQideP>UY=5i3$;NSIkTbB`0Em6WfOKLfRqyWiaT zhH=XxAf3>8t(}Su=qO$85BF8mmuw|E;fH(qo;@kxHjj=$o(}v5U2i5C85toK7CW~p zI-Q*R!}oKGeKv`uoM7n+%W@Y3eX~SNy0&Z2w|3u^v;E7SWxL7Vl;d@A7=Sep6C5`A z!KZ5yEW6wG@ztj@GfW*#K0oKeg1Ti{NeQ@)n&dkw0+XT~FU}ZNgerWl-;;yLt#1q( z*+(fQWN~?a*wVeb=gp$p{X* zX|dNl-ET9M=3I%Kk1j*(%~AynmG^4_UI@)pO!cSA!JU|@l>T`j`c|v>@BtTpFnV;U zO5(58wbkf`#XV`L%yScYbYt^xw2Vva75?P{R2%a-ZRMk8Y8yks^khcFCQyA~+RFi~ z!*V#T`m0J>jX6eTg_!f?VdMPIyqIs1sPU@P$<2jm0@`9ViJqJXK%E{= z=w*UXclQtGDsWyVx<50JDIkt`OJ=3yKR8hJTVw}$wsyC_du5XL$_ z;wxjOkMTV}1EXE+jB&v}O4Zci9pfus+g6k=MsxZNznlSRV9K9TJ`l=@d?xX+K9@bp zN?%*}Q`lUkHbbMla&OVQ2ozZJ{Yyg?NK1 zE11~-w$hTiMmvXGy93s%dv;kkHc$|gb&y(=(B9Oa{LH)42ekxiozUMhP%TB+xdZt#V;m1Jg;()hrMlK6<$2Hx|Ux%F}*NtiZy zLO6;}DGHomqfwBq3i?FG@l{>Ij|M^8vhmNr=nm%gCqA z&o26*0jP~=Y5H8|6?94L5z#m7ir@l!CjtwCeW91WS&1c$rj2G@0bctF2?^<(Ls9Q= z+xGDK<>{Zp183dMZL6?fa0W6%5~j~w3OF75(4U^h9-kz^V-RAH^-7aXoBK?OLR*KJ zHv1To387ySGNfO2wMnb1*w;*BTwkXd>bb>iO(2i}cGMHyh^g{9s|F_Jk*SrDDki%L zJ>R^qAipJ0-1uoaIP}0dBE?vlHZ^r}87f)EjdFGJ-S}5CNCJ|aK0#=+lZ^W;CJ({5 zj^{pL=!c#-dBZng(4Bm45L3Y0m;V0!`{;qM;)*%9mLhBL*2Jxbmh%;gvOcUPZw!b= zzvhJU{Mop1@hi?%Dv@Gvo11!EwfC5^o6&jR>xRVSw6tFAcq}dxv{$M`Y>~7h0>#G0 z#!fieNCF6+E!mFLH2h5&BzlrY^-E1q@-Iyv<2?&a*?EP^| zs0g*@Gkg+*ChUGKFMRE(9a(z=m*L6}C4Oo6g}ah`L>fN72I-IpnUZ-#Z!n&E9Ve+5 z*#sjLre$u-t(c+oT1UuXwgELRn>`PrU}c>xW-%lL)=TpaFg3(GLa|d+yXA}RDo#u} zV!;{(F%OErL4IZ5dYHuBaPXpPEkZc;Cu>1|oG+vw>1Rr%441hw1=0W_n?`Xg3#L8W z-KXuOjw_g1p`;%4I6()%jJuFVEIAAKChrdHOBUM7d_^DC^`&`Pc3a2%- z4N1uF7H3c&b{v4}aLgAz)7}QBe9XcDq5ERvTuwkStMObg<;A z{Pf`M_inTdR54$hKvoLKm5NVpZmtP^6!t5af?+QQMC~yypTp7#1y9O~ogzvXIsXe` z4OJutxI5!~0lfnt511#$6O*~x3V#F9FKxt#>8BVtv*ucIM{hV)z&aRamBP59X5P`|(hjYABHX5)F~^ zJ4Q%qKs^07%PZ#Xd(6*|Vr`aoB{ zY$S@hL6G3!E8ZmqB%QB$a&6MF4S^)V`dOsM`fi65y=jKEMys+6V37b%+YC8gr?YY( zhT@H7z@YT=LaMasH*gOM3ZkJUuhJo!<^|(q1mKS^NA+o;XsMSVn}dXGhvN*2tNHhz zl~R!JZ7L`9`EO5PeeqsVio@;rmFrZr3XiG0NsfDmypVwl$rhSRc50d3Z;KkQ?llUcuQTrT zk3ql;Hjv6zS&@I~@;pKb@T=8X#d@{#)}!TIKE`?EbV`&8q-wj)2!a5BND|C-N&O4d z9TRCzikO6CE5!iY4DVQP<)t5nlY^2$d@Nrqg-c{55;j?$w>Z??z+i{)lxx?d8|xu< zUz|OKqNk2Pmvvk@hTWBgnYjsrELL$*N_Mupy22e7aBG-_#*`19X8s}JRD9lvilqmH zhUzyTV6y;7g5 zcj=vUvq}A*Nwnud^+lhP+|@nYW!^kfWBY-mP;KgGq|TT9VG9h_^zr$;Iqg=}F?JfW zZo@&U(Q{n4ExPs^So<6#iNi|qilqyDQnfJdBxg>TL`*f{-y#vvVaMuq9@n{k6`+Qs zm>2X}%VPlL4EQ4rv6LN4Js(g2@(3x{bI`t!vV%o|QTeR$R;f~{j%zl&=K1#ar%38V z_EH@V0|8K~(*lgC=ET3-k|8-BKUT5Y0=d@q`44aLN+z!5MW9S3HY-)4YvGD49lbay zHW{#Yr^s%pJH+daXj1-DVWa0^l*?o1Cy%m9sZLdi5cHFh0V#GYc91{&6@z0-2Q~o# z@T3kWI-E1(AjPgQdd2hJwH=9Fx*Gq#hEZo!ON9jVUUBJbAaPmV1q^7lb=+Raumca= zvTFXHR?rj@Ot~o_M)!_HMKS8=fS4dG$GX(*>=zhLt>1gRrG0?mVk#O~XT=IRYta>G zs+JS|llf004$^TFz7StuUrg}7db)Mq)MazmQ&ACsLKINJIPrE@fFs*!WN2v7|6kh1 zuRRPL!qIil@C6u1g8>JC7QQ(+Wo1FI!zvUFj&{ehXZwIoF4n?ef0!rvEEC2Qr%ZKp zbYlKXgR!x(gCd;=PxJcL(1^8ZxhHe5@1a3&&+HG1l%1o^+UGX0xh8dg2Guzw1XHDF z*5!#=yxjFjUB9=vJ4rxV9<;1D$d*LY2*qIZt}m69l|wW&CoNM{Nw(6&0}+aJx6{)V zm||38W6#;pYZE7q$rQG6F(nNCjJdW_mzR|Vtq51oWSFwJ&8&jDe;e^mclWVL_vx9L z1@~Eb{{Eqqg()s>zi=>m6nywxg^pgt;E#s&LZEe)a)N7?Yg@a+GgJ)!B`eR*B@;25 z@AHL_cEajeb^-Z08rB9(F3$6=&n(GXi{k!qvmUNgC&8*RaceaHzOU)(`YV!V!Goxy z9eD+qM}vrX0WjkYn<740+?SBsUoPlwBIAcGRdvZN3a3D(oc)3jJ^qa!`^}6Y(K9|| z5`w<6n~mVEZ55e|`V*H@E;`Vq`jxBxDE? z6(zTvZuZJ~j-)dMkfXnXC9N(ZX2{k4kcE(hAwl@+Of=P$=>GLm#i1u_Q&E3&(FsAEyiWin4Re)tVl zw3=`ZliKm>B4H#gD0%WrqRk|b>K=?GgMI$)*<1KBPh^y-Aa>K{@idmg5>CQ8@*AMO z(b)#7*jr{OguDv`a%3ux$LcD#gx)iquDFl3)*A&haJ+t6C#{zuxYKxLQ7_=ntTSYk zcl%Q?z}zlt*VcTToDvc7BFg=XjAsFaFBD8hCzFtO0Z1Jre6Gfe`cUL4X71%$?*k&rl*Ih4~ zf_~T!1@yAe;kE=l4XgKmP_>HH%Dv!}OFu;ufxvT#yyc})jK~*?u#Dp)=*XxSuu-R_724Gm?vydxJjIOrS zW+@Z}oI80sFrwl8)PwwJE$u)7TbfL2A)P;_!!K7<1Fgnwn`s+rYiqY-s`xT+&EZH) zI5;>rjKqp0-c8Pq9QMXauL$!l*s{BT~()jSuFC*?&{H?xp+^9FCjZWt2?`0?IYm@j&Q)i8W45g83ed!1= zcS_{_S@(_Q>bbqB`!|u%P>fF#st`}#Y<{baL6Fv5pTrBH8Ep{;NuR1uA3oSyd3$>^ zNUtl>coSUXrc}KDst%DLwn)p9!>I+ZWXaIfwPQAdq6Q6lM8NFX=z2_Cr6fR~YmADn zeU`eaKl)k-j6%zlN`-w15G(u{5sD1no-x*Et^&yz1QkoIKTc>A&5Tpu;AMvz+E4uB z5}CQM5hbz(8%MC<(rvvn-opdU#aFvxQgB-1gq zy!j2FfssqCylhy@Cq)EMlr#@^YD-^yosFjtItVc^FrY5-D<$Yy4ikMhT8Q^S#T=s8 z;Cr;RhUH~)A-;02z10$%@9OG0wGVJUlH-y^io!EwFoq>zK_g`3gm<1DI zFhw!O`k@-8V%mBp0t>qOp!fltW%%wn+qa7MT8h)%)YBnq>Z- z56Goai`JMoE)V~xCZuHjI!Ih^q{LPGI^@w5z0k<8n2rs;TE_tX1VN#VS?$3M-+iC+ z=LK6vHSLNL^>VKSp3`T(H5xpLgkVj8KG`4}e0}Wr^(Ep1(e^NGg_4+tj?AyP5JM=O zJU8lZw_AGVYr{i=xW?=H52$;8F^`EPzQQ%<20QL9C*rEbX50ag5XF`ao=(#CMG|vO7z>waT7!SIo3>4wt>A|@wcVn``i6ual+w=>hbdh3wUDns~>Nu zgu}$BQz{a2;oP)L7>3t%B@A{aH?TPNCU7eh{z=VS$$v%sOt@dRpby6~93ZU9-gbRPU2@~&;i+T# zdn?}f4p(|+^;0!~DXgym27fkz;z}NWC+%xAH7X7-KBYj(EGVWAJ(~Vo&Vi{QWz*FA zE5D^Y)O*`V^k@d71u`Ve`?%%vtbC$u9$O2p5X*~D_`dIzL`Ae}fnK$*vExljtrIgc!Wy+g;<5PL?N zz2@fxkurNAe=Kg#!|3AUr;Ww^fQiJ4b{5^uMTxn$9Z*cMw}g1wf#ZV+YC$dcZ-aS4 zeI10Dq`Rd=ldy4BO%H`|h36`2KCAlCgL!mjCwdUx-6Y+ey!QYQ{-6 zx;t-;eRE(T43391m5&0`BU_Bs+cstPvxaat<254 zJ^&!7ap1iITbN~xkDkeHmZ4>QtgjQwGyGe)=y zffUUb@d)8L8=)=&OZCL|;dl7Z!G}&9Ep60nbwbM{d~jAQ-g}OCNtmR6zd?t^0yDzL z53ceJiK5eHAg&o8z+YZs!e(O31(5N{sJ{UqX7aLC_(ObuBbgt3@f(s;GIM>D2=zWD zw2~lROKf5JD^~MOJ6i_U>urM?$Vq@aTKj|}bZ~$`t}7M1)HABZ7k~|xoV6Zz-r3(b z2JB2|v{j-cTKML+Z5hCED|rXc@&wqv7OF_8C)PTokaw#FO>Y>&{xGr8EZ|D?4V7mo zp}nmGIK)<(vE{#iJr~1|+T-o{gyH8Ix5G!szPxw2+k>iF&tNObqP6#0!xu0 zZVYKEVezdEoh@CPj;^$%MCO=-Q=(dI_Xa4{f;#8at*R3s+_wQ?!9%1Kfg*nFF9T#H zEu3?D3tPl zkIm_t~*u;gcl6xZQ1I~-NLGVB#f4-U^U`!FH6}2va-yF;oq-LNdcc;ug5bi~ zT1<(|Ue+dCDuID10?Ft@FYid%%5EwG>fjt4Nc1cw3$5z&mwtYJa{yz#_syF(FSA;N z!+nGzSn}5S6GgOrrhGw|INa4Y;$0RZ9rb1fb<1)(CNDO=o1HF1uCI%}#~n%X>S%N= z&#JqtF9-=Yy~U9q=rGVVbdN5utYkfE&Oq8_0Vw9=z-Hi&%HgT11hKV@Ym!Kvcvw# z?1k^Hk{H+pJE=*?)O}3xQWZ0&QQv@!1Wr><&Cgf514+t$$*cK`tq|k;uXznS4Fgvk z2mu+^kqZNkl#OS3baU_Of+32U2ckgxEmPwUf|G90~^4eLgXB|`0S|Q%HRlom;4)EZL ztAKEZM<5E!Mt+c`)K%oR6m%QHNrB*;HVMAH7kvJDIC^Va0-E&Y#MMLDX7bvQ+!fOl9J9k8<9u zJ7~ycBc;mNE0eaqXd2s~?+tyFM zEsm4lq=J4QcmnKWVG%;L77LQl^7Dm!VjRD4Lai^~HaVG&D=h5wU5gs2P&hE(7CM+R z8DyDxM=4fovTGNu2>>^>WHO=U1Nwt&`L;|oG09L&Lx$kvX7Nc!XazO?d9GeY*?p&p zgV${iPF5<&ZR=USnZwt?x4NaA))DY1@n?$qD(m^S5zwt|>)MB%4DG3tZ>>kskOy0C zO0}Ul7yy@IQi6CG!CX?s^-n3@1G8H>%1 zWhdvqP^CLlX{qGZHzA-Tc(aFt!Jb6%k(%GK%cMKtV*API=_y@zo^m<;G&742uaSlffvw@BVVeSm=KV9wF-ZFxZ(dBXwRK{u2VCt-|&l1sviqG znuMhwzMwu=qCMHrarB`hC|u_TJ=ff8KoXq!Eh|6&eivXFg|kkLE0X$p_V_@$941vp z7B>KR(-WZT{W%dbz2{pH{c<*B^p+klECH*8P!7Z8A#B9((pDjlO9XWtVZSRZ<3U09 z{LO2Uqjvg9W(aDj0XOAQ29VU#rVe@;IL>ryKc(sg*G1iPFxWy_I{nsKyYnxdC>>5` z&9MbD-_04MEub6lwSa7{Xf-sJUC~rZDU1y^KU9L$zD(h1D3#wc{PU&``3GWY&e)jgyey%i^AKw65M3;sGj+gi!U^n^!{@7I%SGs2C>RRKz>5V#E zUs6)?=%=WN?6TZY$UIyRn4<#1yvJ;jiOy!@alI~{ubvSo%-@$?iCb7~M-!H`pu8(f zgUJ+fQh*bP_SOF~@+xZ2R|4Pt%9CuTX74Q@`~9E?vj1{)#yd<|35q;&3LH%F8+4Ra z685bW#FaBV(fZw`bafNHHOBYHhkNy6*-(3w`PJ8nQ4ga?v~YJ|6NyDc>*?u@0Mw66 z>L+r_?`CaooNVFmV`qFl@u8kQ-ky&TNL})LdYtGFMC)s(iJWF(c6O&+$hW`i%buwH ziV?JRIKyU_n&z_)E3n4kn!-a%{anMT+v=IIg=ttI>3&5=%Y42Q-HO3tjW3(*>yeWXrxrl= z7X^-sm|DD%>#+tE@>`eg$cA3gN54XN2WSmbM4;%*5~d%$VLbjYu&NM^E*ex2AP1HS zD$*Y9P~wcV`+&688y-H0a1_h0EegB)=@cV~x1}NK^^z|EavA8%rExS2&9Kl)Y;bIl z?XhvO+0{-v;|wLjC`Q^n@V12|;Pku0PNXrP3&wCodv zGshQi)kkb~m58Lv(Cz(SLxNGAWEreYbdo*?N5B=aI;LW`X;d*R!~i$S!7K8#-A3OIheKm?xK4cI&Vo#{aFrHFXs;1^$fc2rI9IyWOE)MX z!4bIGIAmY ziIrL!J+BSiNbT=uTs?u9s;P!*jp^aVg0*XvzR1N!SzFP3E-!FdCOMeii`deGrMuF0 z|7%IUf=f=n6X^Lo7BPrx-Q)~lUF+`xX>^8H-9f%cWO*7>od72-7|A_nsb+_^eE-MG zg}$2jwZ5lrzdv97876`JDC`fFh9J_4^UcQ{b4u<2Ize1=t8t3U5D++mMn3gXdP7m` zoaH0yi}w>@Td@@Q`jFbvp*pU;bptf8R(ABk&R4AQyAK1Y{`Bj9e$yYb7rf7P`uM+m zOmD1@O21<7t9fE59VCtZ`oxrg7JNSUk0qA^W+VIRQlWa~5$Wg2*iEe^@aj3f**`o%D*110q zXNjyl--VK5A0&Qp-QE)42;1%5WMykV3IfKLDc+Fue(m-D)4^3ZG}X0n=@COv=@yU% zB}Yhy2qG~`QjxAPTBJ*qn6!=*47zLNcnJj=q97xs+(1H+27&MJ{Q-C9-kp1&^E|(z zuYD-d=&Da*WD7UVRFE*8zhm2`op&C4AQkMq1nk06;YUAna?B7VEVW*laAVq8IOCgo z6#u{L3rb4xc<(uWvL7PKJ16g9h9(|Nz9#y@jZp10(VAEiUZQ9N21rw~fT1)zkpvAN z7-#>OTvpD-$N51FDurFr0vHepe#~vqPNU^y)vvL*!i**b8}NV^wmU1M@L}3Qs9#@FL|v+Om?Da84$HX=8j$y;7MK`wk>Y;5ub)5TLw7-l|lD0#}bjAIjJ+!s^&N0Ei&&oeNF0cPDMS}1%JNAQwta(%H zGE7kkE+=C|-xcLiF$Le7h&??IJ4(|U_RB3M6|`rR==@bxF*0LB7EJCR6R>~KFsf=Z z4=kGJ$b|uWMgt4QJ4JKoUnIoqwsQ5T*fvr=+wh82{8l_{+*p_x(-(sm%`PnL{sTb0 z$YIq~tJXF<`ZtuV(X#Vf>Sdw*NrlS4-?k)H?6JWgb*~iFVgvUU9)zPPpI>P~7dZHb zJ;;fW$vRA4tlYl`T`49W=S88PU`X=UA5mu|Y4(p~Id2|RHH z!c>1Z;^Cjsf%m#K|Awy)4?WoLI-*X|_3YVUjYnqoKe`nGe9KZmX6YfpL@|MhL9;i! z)!=x8>^0A+AbBBwGMIBCJbYtarvdD>VgXJV9t&ohBhY{IFfZ)OF=dw{&F5=L@@PLM z1tJ?qs;4?v%JRdQ)dJJXnvcZ`z6)RDGdDMPR!(Sc5A=rXI=kmo-ra3mHHT6=6MIZPz{px@A3)+c%y$on$4k z8E8OTil{g#6gAlos@O$l?0Bks>xmrP-Oiu3eRFPm+?vQ*T9cCKL`BN?C6G5t_~`-C{Yt#>SAxLvSd#r^yaLRBfWl?LomPcf2%fc5|1vQmQ=r4 zVWlV2TZ?PBUXfIwGB1_Xs6W0;LT#Froz0C_3H_@ETIuF2Qgp@qS5!2|9l7|f=TCDJ z%GK&vb0r}O_rxL0Egt~XI^aFsxK;-Q-ZqFkMVdNoZEfq|Fxh?1kZu9yNqJXCv(0i| zqk*S~mvGc8jitrwSjR+;xl@Mi2}_3*PS8}uD&ychlt0kouDywGnl zO@=Vhgwkxs1T<%lyVfRc5Yl8#7ka!uk}b-k`t<_!3=GP)zW+{J?dqy%{MFJomNoXY_FxbQX< zgMSN4ZYiiyw(&bSBH}DzdwH+9>AI7A%%JOoJNmSiOwv?9in&7gyN3#{~3=BB3Cv$&j#nZH&; zx$+DZgwF2TO11a7JQ%L&K09^>C`mpFlr0mLBx7O0`zElK1$I=rfCUHr!lK8A4R6>@gR*wjg&=+CBMbQEom|_EdYbOBjs$LfoBI1B& z5zg5xY*}7bCNhl)Tu%fs5&!;zmL@CHM&`=kXE!dnltMPEN)+Io^F=+ zp6-kIgQao;e&FCRppKBHce+-A!C(w#T6`TsC+&i(KtKhYf1EPy8 z--2?LQxgwt7vz`h0M|3fL6@M-`CZs54mp_0#dE(v<>(t&KGRRr*wXPo0a8*N(Z`4; zV8bQWo`}o8Iv;*8H`e)Nj~#eQQ;I!V%fW(fqXoAMK~?h}xj;T)#loF!q&E2fpd`dF z1-;SHu_VaYNZpiWI2e$20dG$Q1w)cA*m28++RNb@FSjnM{rmH2yv$62nT5sDEHx#8 zZO&dNC#-hI3nEW$tKMtjnwlCI+&r^G9Q}PeXan!Z#>N&7k>5#tT?rH>%4(;(-_kBd z&KIO?>tAgZ<;ginC5uq}nds%{R7%bRBEU`>;<~r^r(1j@8?cVg2EWONP*^5|IE2Fi zofpjE+XEcFE7H6f$0AJ6pIb&~wel^%7YX=ev6@t)p{X^SMmI*mRtyK|q7&Y}dl#f< z$)e%|(hl6tfy{l9#%J>ckW}M{S+*I|{_l0$(j^yn{UtgzDDVm4;P`}GZ_?#>cdZ57 z__m9wW?DRhf?cY0q#U z;1SfQvT4DMt?%JydDLGSzAFbxIqwsoWKh5X6{f3>PP_@J%MI!lg1FdoM-b#fz8XSJ z-OQCtQ6woNBLiBIg7vVuz{yjcC_4v|Ait2tQ_?0H5)b8O-ydhoK=|3oucp==1CwkJ zBu(}%NzZ_(*YYiBvIkT<4$e297G!5L@BP~ub(jOGA)Yfp;;t+&&wS#*1b24+Ih7%F ze`^|4_R;&d_r|xt4o%)%kk(hnv5hl$L0VB%TzpV#%Yuq;O40d7OU*vugRAmw-)#20 zV2$5fH@M6ND%lBehaO3zN19k9ZSj#HQzXB_vgXWr?2XQQR^z(jch|-HJ`V|3uXyvz~M{_ z3J5fgc{FKoO+OINp02O2&*<;(4+Y5CCl*cIEbz389{?pyd!L_;*B$qudh1-`gZx%G zIxR+ou!0>It#VnL^7Pu6TBu_H{=Thk-WDjK9)V!Po0y7nUcP?)x*#_i(jmrJTIKoK zeBB$BjYhUb2{DBYlm3*-Q`o4hAFUNp4Wa`g$1>ciq zGBEeoSNu9olE^n~^Ia{3P|GB`L+0C#&VGMk^WiGFeB%s=54>arEgUbmBe(LLOi}*K z><^gm3~mq@{MpkQ@!Z+yqJ}{R>RNXd@;r0W0By?Lm0klHxBsuAT}=G-es)lFZK0Hx zNMlhQas4y+xtoav?Ks1dFQI}|LDjs^Zh{arWA1zwb_L%s(F$}6<746Kv+he|mvj%W VAE)f48($gyP3S8F=P{0}72j{E=s literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable/floating_group_states.xml b/TMessagesProj/src/main/res/drawable/floating_group_states.xml deleted file mode 100644 index 785cc037b..000000000 --- a/TMessagesProj/src/main/res/drawable/floating_group_states.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/mute_fixed.xml b/TMessagesProj/src/main/res/drawable/mute_fixed.xml new file mode 100644 index 000000000..77b676a94 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/mute_fixed.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/layout/intro_layout.xml b/TMessagesProj/src/main/res/layout/intro_layout.xml index 74fd2ec4f..08faa318d 100644 --- a/TMessagesProj/src/main/res/layout/intro_layout.xml +++ b/TMessagesProj/src/main/res/layout/intro_layout.xml @@ -40,7 +40,7 @@ android:layout_marginTop="336dp" android:background="@drawable/regbtn_states" android:layout_gravity="center_horizontal" - android:textSize="18dp" + android:textSize="16dp" android:textColor="#ffffff" android:gravity="center" android:paddingLeft="20dp" diff --git a/TMessagesProj/src/main/res/layout/media_layout.xml b/TMessagesProj/src/main/res/layout/media_layout.xml deleted file mode 100644 index 04b9f3a89..000000000 --- a/TMessagesProj/src/main/res/layout/media_layout.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - diff --git a/TMessagesProj/src/main/res/layout/messages_list.xml b/TMessagesProj/src/main/res/layout/messages_list.xml index b051134b5..7e685fb8a 100644 --- a/TMessagesProj/src/main/res/layout/messages_list.xml +++ b/TMessagesProj/src/main/res/layout/messages_list.xml @@ -83,7 +83,8 @@ %1$s يستخدم إصدار قديم من تيليجرام، لذلك، الصور السرية ستظهر في وضع الموافقة.\n\nعندما يقوم %2$s بتحديث تيليجرام، الصور التي بها عداد دقيقة أو أقل ستعمل بطريقة \"الاستمرار بالضغط للإستعراض\"، وسيتم إخبارك عندما يلتقط المستقبل صورة من شاشته. الرسائل بحث + كتم الإشعارات + ضعه على الصامت لمدة %1$s + إزالة كتم الصوت + خلال %1$s رسالة جماعية جديدة أدخل اسم القائمة @@ -73,6 +77,7 @@ جذر النظام بطاقة الذاكرة مجلد + أرسل الصورة بدون ضغطها مخفي جاري الكتابة… @@ -83,7 +88,7 @@ صورة موقع مقطع مرئي - مستند + ملف ...لا توجد رسائل بعد الرسالة المعاد توجيهها من @@ -105,6 +110,7 @@ حذف هذه الدردشة قم بالسحب للإلغاء حفظ في الجهاز + مشاركة تطبيق ملف التعريب المرفق غير مدعوم عداد التدمير الذاتي @@ -121,7 +127,7 @@ %1$s قام بإرسال مقطع مرئي لك %1$s قام بإرسال جهة اتصال لك %1$s قام بإرسال موقع لك - %1$s قام بإرسال مستند لك + %1$s قام بإرسال ملف لك %1$s قام بإرسال مقطع صوتي لك %1$s قام بإرسال ملصق %1$s @ %2$s: %3$s @@ -130,7 +136,7 @@ %1$s قام بإرسال مقطع مرئي للمجموعة %2$s %1$s قام بإرسال جهة اتصال للمجموعة %2$s %1$s قام بإرسال موقع للمجموعة %2$s - %1$s قام بإرسال مستند للمجموعة %2$s + %1$s قام بإرسال ملف للمجموعة %2$s %1$s قام بإرسال مقطع صوتي للمجموعة %2$s %1$s قام بإرسال ملصق للمجموعة %2$s %1$s قام بدعوتك للمجموعة %2$s @@ -151,7 +157,7 @@ اختر جهة اتصال لا توجد جهات اتصال بعد https://telegram.org/dl مرحبا! هيا نستخدم تيليجرام: - اليوم الساعة + في أمس الساعة متصل آخر ظهور @@ -291,7 +297,9 @@ الرقم %1$s لديه حساب تيليجرام مسبقًا. يرجى حذف هذا الحساب قبل محاولة تغيير رقمك. آخر - لا توجد وسائط بعد + شارك المقاطع المرئية والصور في هذه المحادثة لتستطيع الوصول إليها من أية جهاز من أجهزتك + ملفات + شارك الملفات والمستندات في هذه المحادثة لتستطيع الوصول إليها من أية جهاز من أجهزتك الخريطة قمر صناعي @@ -315,6 +323,7 @@ البحث على الإنترنت البحث عن صور متحركة قص الصورة + تعديل الصورة Password Change password @@ -418,7 +427,7 @@ مقطع مرئي موقع جهة اتصال - مستند + ملف ملصق مقطع صوتي أنت @@ -502,6 +511,12 @@ %1$d رسائل %1$d رسالة %1$d رسالة + لا يوجد ملفات + %1$d ملف + %1$d ملفان + %1$d ملفات + %1$d ملف + %1$d ملف ليس من جهة اتصال من %1$d جهة اتصال من %1$d جهتان اتصال diff --git a/TMessagesProj/src/main/res/values-de/strings.xml b/TMessagesProj/src/main/res/values-de/strings.xml index c5d54e32b..8fe9a5dcf 100644 --- a/TMessagesProj/src/main/res/values-de/strings.xml +++ b/TMessagesProj/src/main/res/values-de/strings.xml @@ -53,6 +53,10 @@ %1$s benutzt eine ältere Version von Telegram, sodass Fotos in Geheimen Chats im Kompatibilitätsmodus angezeigt werden.\n\nSobald %2$s Telegram aktualisiert, werden Fotos mit Timern von 1 Minute und kürzer per \"Tippen und Halten\" angezeigt. Du wirst benachrichtigt, sobald dein Chatpartner ein Bildschirmfoto macht. NACHRICHTEN Suche + Stummschalten + Stumm für %1$s + Stumm aus + In %1$s Neue Broadcast Liste Listenname @@ -73,6 +77,7 @@ Systemverzeichnis SD-Karte Ordner + Bilder ohne Komprimierung senden unsichtbar schreibt… @@ -105,6 +110,7 @@ Diesen Chat löschen WISCHEN UM ABZUBRECHEN In Downloads speichern + Teilen Sprachdatei benutzen Nicht unterstützte Datei Selbstzerstörungs-Timer setzen @@ -151,7 +157,7 @@ Kontakt auswählen Noch keine Kontakte Hey, komm auch zu Telegram: https://telegram.org/dl - heute um + um gestern um online zul. online @@ -270,9 +276,9 @@ Systemvorgabe Telegramvorgabe Automatischer Mediendownload - über Mobilfunk - über W-LAN - bei Roaming + Über Mobilfunk + Über W-LAN + Bei Roaming kein automatischer Download In der Galerie speichern Name bearbeiten @@ -291,7 +297,9 @@ Die Telefonnummer %1$s ist bereits ein Telegram Konto. Bitte lösche es, bevor du mit der Übertragung auf das neue Konto startest. Sonstige - Noch keine geteilten Medien vorhanden + Die hier geteilten Bilder und Videos kannst du von jedem deiner Geräte aufrufen. + Dateien + Die hier geteilten Bilder und Videos kannst du von jedem deiner Geräte aufrufen. Karte Satellit @@ -315,6 +323,7 @@ Suche Bilder Suche GIFs Bild zuschneiden + Bild bearbeiten Password Change password @@ -502,6 +511,12 @@ %1$d Nachrichten %1$d Nachrichten %1$d Nachrichten + keine Dateien + %1$d Datei + %1$d Dateien + %1$d Dateien + %1$d Dateien + %1$d Dateien von keinem Kontakt von %1$d Kontakt von %1$d Kontakten diff --git a/TMessagesProj/src/main/res/values-es/strings.xml b/TMessagesProj/src/main/res/values-es/strings.xml index 8d9449a18..c59b5b3ed 100644 --- a/TMessagesProj/src/main/res/values-es/strings.xml +++ b/TMessagesProj/src/main/res/values-es/strings.xml @@ -34,7 +34,7 @@ ayer Sin resultados Aún sin chats... - Envía mensajes pulsando el botón para\nredactar, en la parte superior derecha,\no pulsa el botón menú para más opciones. + Envía mensajes pulsando el botón para\nredactar, en la parte inferior derecha,\no pulsa el botón menú para más opciones. Esperando red... Conectando... Actualizando... @@ -53,6 +53,10 @@ %1$s usa una versión antigua de Telegram, así que las fotos secretas serán mostradas en un modo de compatibilidad.\n\nCuando %2$s actualice Telegram, las fotos con autodestrucción de 1 minuto o menos funcionarán con el modo \'Mantén pulsado para ver\', y te notificaremos siempre que la otra parte haga una captura de pantalla. MENSAJES Buscar + Silenciar notificaciones + Silenciar %1$s + No silenciar + En %1$s Nueva difusión Nombre de la lista @@ -73,6 +77,7 @@ Raíz del Sistema Tarjeta SD Carpeta + Para enviar imágenes sin compresión invisible escribiendo... @@ -105,6 +110,7 @@ Eliminar este chat DESLIZA PARA CANCELAR Guardar en descargas + Compartir Aplicar traducción Adjunto no soportado Establecer autodestrucción @@ -151,7 +157,7 @@ Elegir contacto Aún sin contactos ¡Oye! Cambiémonos a Telegram: https://telegram.org/dl - hoy a las + a las ayer a las en línea últ. vez @@ -169,7 +175,7 @@ Nombre del grupo %1$d/%2$d miembros - Fotos y vídeos + Multimedia compartida Ajustes Añadir miembro Eliminar y dejar el grupo @@ -291,7 +297,9 @@ El número %1$s ya está vinculado a una cuenta de Telegram. Por favor, elimina esa cuenta antes de migrar al nuevo número. Otras - Aún no hay fotos ni vídeos + Comparte fotos y vídeos en este chat y accede a ellos desde cualquier dispositivo. + Archivos + Comparte archivos en este chat y accede a ellos desde cualquier dispositivo. Mapa Satélite @@ -306,7 +314,7 @@ %1$d de %2$d Galería Todas las fotos - Sin fotos aún + Aún sin fotos Por favor, primero descarga la multimedia No hay fotos recientes No hay GIF recientes @@ -315,6 +323,7 @@ Buscar foto Buscar GIF Cortar imagen + Editar imagen Password Change password @@ -502,6 +511,12 @@ %1$d mensajes %1$d mensajes %1$d mensajes + sin archivos + %1$d archivo + %1$d archivos + %1$d archivos + %1$d archivos + %1$d archivos unused de %1$d contacto de %1$d contactos diff --git a/TMessagesProj/src/main/res/values-it/strings.xml b/TMessagesProj/src/main/res/values-it/strings.xml index 0a96183de..2a2f3da83 100644 --- a/TMessagesProj/src/main/res/values-it/strings.xml +++ b/TMessagesProj/src/main/res/values-it/strings.xml @@ -53,6 +53,10 @@ %1$s sta usando una versione vecchia di Telegram, quindi le foto segrete verranno visualizzate in modalità di compatibilità.\n\nUna volta che %2$s avrà aggiornato Telegram, le foto con il timer minore di 1 minuto funzioneranno in modalità \'Tieni premuto per vedere\' , e verrai notificato ogni volta che l\'altro esegue uno screenshot. MESSAGGI Cerca + Silenzia notifiche + Silenzia per %1$s + Suona + Tra %1$s Nuova lista broadcast Immetti il nome della lista @@ -73,6 +77,7 @@ Root di sistema Scheda SD Cartella + Per inviare immagini senza compressione invisibile sta scrivendo… @@ -105,6 +110,7 @@ Elimina questa chat ANNULLA Salva in download + Condividi Applica file di localizzazione Allegato non supportato Timer di autodistruzione @@ -151,7 +157,7 @@ Seleziona contatto Ancora nessun contatto Ehi, è il momento di passare a Telegram: https://telegram.org/dl - oggi alle + alle ieri alle in linea ultimo accesso @@ -174,7 +180,7 @@ Aggiungi membro Elimina e lascia il gruppo Notifiche - Rimuovi dal gruppo + Espelli dal gruppo Condividi Aggiungi @@ -291,7 +297,9 @@ Il numero %1$s è già connesso a un account Telegram. Per favore elimina quell\'account prima di migrare ad un nuovo numero. Altro - Nessun media condiviso + Condividi foto e video in questa chat e accedi ad essi da ogni tuo dispositivo. + File + Condividi file e documenti in questa chat e accedi ad essi da ogni tuo dispositivo. Mappa Satellite @@ -315,6 +323,7 @@ Cerca su web Cerca GIF Ritaglia immagine + Modifica immagine Password Change password @@ -440,7 +449,7 @@ Aggiungere %1$s al gruppo?\n\nNumero di messaggi recenti da inoltrare: Vuoi inoltrare i messaggi a %1$s? Inviare i messaggi a %1$s? - Sei sicuro di volerti disconnettere?\n\nRicorda che puoi usare Telegram su tutti i tuoi device contemporaneamente.\n\nRicorda, disconnettersi elimina tutte le Chat Segrete. + Sei sicuro di volerti disconnettere?\n\nRicorda che puoi usare Telegram su tutti i tuoi device insieme.\n\nRicorda, disconnettersi elimina tutte le Chat Segrete. Chiudere tutte le altre sessioni? Eliminare il gruppo e uscire da esso? Eliminare questa chat? @@ -502,6 +511,12 @@ %1$d messaggi %1$d messaggi %1$d messaggi + nessun file + %1$d file + %1$d file + %1$d file + %1$d file + %1$d file da nessun contatto da %1$d contatto da %1$d contatti diff --git a/TMessagesProj/src/main/res/values-ko/strings.xml b/TMessagesProj/src/main/res/values-ko/strings.xml index 8d20fb860..08923ac6d 100644 --- a/TMessagesProj/src/main/res/values-ko/strings.xml +++ b/TMessagesProj/src/main/res/values-ko/strings.xml @@ -53,6 +53,10 @@ %1$s님의 텔레그램 버전이 낮아 비밀 사진을 호환성 모드로 표시합니다.\n\n%2$s님이 텔레그램을 업데이트하고 나면, 자동삭제 시간이 1분 이하인 사진은 \"탭하고 누르고 있어야 보임\" 상태가 되며, 상대방이 화면을 캡처할 때 마다 알림을 받습니다. 메시지 검색 + 알림 음소거 + %1$s 동안 음소거 + 음소거 해제 + %1$s 후 새 단체 메시지 리스트 리스트 이름을 입력하세요 @@ -73,6 +77,7 @@ 시스템 루트 SD 카드 폴더 + 압축 없이 사진 보내기 숨김 입력 중... @@ -83,7 +88,7 @@ 앨범 위치 동영상 - 문서 + 파일 메시지가 없습니다... 전달된 메시지 보낸 사람 @@ -105,6 +110,7 @@ 이 채팅방 삭제 밀어서 취소 다운로드 폴더에 저장 + 공유 언어 파일 적용 지원하지 않는 형식입니다 자동삭제 타이머 설정 @@ -121,7 +127,7 @@ %1$s님이 동영상을 보냈습니다 %1$s님이 연락처를 공유했습니다 %1$s님이 위치를 보냈습니다 - %1$s님이 문서를 보냈습니다 + %1$s님이 파일을 보냈습니다 %1$s님이 음성메시지를 보냈습니다 %1$s님이 스티커를 보냈습니다 %1$s @ %2$s: %3$s @@ -130,7 +136,7 @@ %1$s님이 %2$s 그룹에 동영상을 보냈습니다 %1$s님이 %2$s 그룹에 연락처를 공유했습니다 %1$s님이 %2$s 그룹에 위치를 보냈습니다 - %1$s님이 %2$s 그룹에 문서를 보냈습니다 + %1$s님이 %2$s 그룹에 파일을 보냈습니다 %1$s님이 %2$s 그룹에 음성메시지를 보냈습니다 %1$s님이 %2$s 그룹에 스티커를 보냈습니다 %1$s님이 %2$s 그룹에 초대했습니다 @@ -291,7 +297,9 @@ 그 번호는 이미 텔레그램 계정에 연결되어 있습니다. 새 번호로 이동하기 전에 %1$s 계정에서 탈퇴해 주세요. 기타 - 공유한 미디어가 없습니다 + 이 채팅방에서 사진이나 동영상을 공유하면 다른 기기에서도 보실 수 있습니다. + 파일 + 이 채팅방에서 파일이나 문서를 공유하면 다른 기기에서도 보실 수 있습니다. 지도 위성 @@ -315,6 +323,7 @@ 웹 검색 GIF 검색 사진 자르기 + 이미지 편집 Password Change password @@ -344,12 +353,12 @@ 개인정보 마지막 접속 전체 공개 - 내 주소록 + 내 대화상대 비공개 전체 공개 (-%1$d) - 내 주소록 (+%1$d) - 내 주소록 (-%1$d) - 내 주소록 (-%1$d, +%2$d) + 내 대화상대 (+%1$d) + 내 대화상대 (-%1$d) + 내 대화상대 (-%1$d, +%2$d) 비공개 (+%1$d) 보안 회원 탈퇴 @@ -418,7 +427,7 @@ 동영상 위치 연락처 - 문서 + 파일 스티커 음성메시지 @@ -502,6 +511,12 @@ 메시지 %1$d건 메시지 %1$d건 메시지 %1$d건 + 파일 없음 + 파일 %1$d개 + 파일 %1$d개 + 파일 %1$d개 + 파일 %1$d개 + 파일 %1$d개 보낸곳 없음 - 채팅방 %1$d개에서 채팅방 %1$d개에서 diff --git a/TMessagesProj/src/main/res/values-nl/strings.xml b/TMessagesProj/src/main/res/values-nl/strings.xml index 56fe3cab2..945b90a44 100644 --- a/TMessagesProj/src/main/res/values-nl/strings.xml +++ b/TMessagesProj/src/main/res/values-nl/strings.xml @@ -34,7 +34,7 @@ gisteren Geen resultaten Nog geen chats - Begin een gesprek door op de\nopstellen-knop rechtsboven te drukken\nof druk op de menu knop voor meer opties. + Begin een gesprek door op de\nopstelknop rechtsonder te drukken\nof druk op de menuknop voor meer opties. Wachten op netwerk Verbinden Bijwerken @@ -53,6 +53,10 @@ %1$s gebruikt een oudere versie van Telegram, dus worden geheime foto\'s weergegeven in de compatibiliteitsmodus.\n\nZodra %2$s Telegram updatet werken foto\'s met timers voor 1 minuut of minder in de \'Druk en houd ingedrukt\'-modus en krijg je een bericht wanneer de andere partij een schermafdruk maakt. BERICHTEN Zoeken + Meldingen stil + %1$s stil + Stil uitschakelen + Over %1$s Nieuwe verzendlijst Naam van lijst @@ -73,6 +77,7 @@ Systeemmap SD-kaart Map + Om bestanden ongecomprimeerd te versturen onzichtbaar aan het typen @@ -105,6 +110,7 @@ Chat verwijderen SLEEP OM TE ANNULEREN Opslaan in Downloads + Delen Vertaling toepassen Bestandstype niet ondersteund Zelfvernietigingstimer instellen @@ -151,7 +157,7 @@ Contact kiezen Nog geen contacten Hey, zullen we overstappen op Telegram: https://telegram.org/dl - vandaag om + om gisteren om online gezien @@ -291,7 +297,9 @@ Aan telefoonnummer %1$s is al een Telegram-account gekoppeld. Verwijder het account om te kunnen migreren naar het nieuwe nummer. Overig - Nog geen media gedeeld + Deel foto\'s en video\'s in deze chat om ze op al je apparaten te kunnen benaderen. + Bestanden + Deel bestanden en documenten in deze chat om ze op al je apparaten te kunnen benaderen. Kaart Satelliet @@ -315,6 +323,7 @@ Online zoeken GIF\'s zoeken Foto bijsnijden + Foto bewerken Password Change password @@ -502,6 +511,12 @@ %1$d berichten %1$d berichten %1$d berichten + geen bestanden + %1$d bestand + %1$d bestanden + %1$d bestanden + %1$d bestanden + %1$d bestanden van geen enkel contact van %1$d contacten van %1$d contacten diff --git a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml index 7819c1bb6..bced87c67 100644 --- a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml @@ -34,7 +34,7 @@ ontem Nenhum resultado Ainda não há chats... - Comece a conversar pressionando o\nbotão \'Nova Mensagem\' no canto superior direito\nou vá para a seção \'Contatos\'. + Comece a conversar pressionando o\nbotão \'Nova Mensagem\' no canto inferior direito\nou vá para a seção \'Contatos\'. Aguardando rede... Conectando... Atualizando... @@ -53,12 +53,16 @@ %1$s está usando uma versão mais antiga do Telegram, por isso fotos secretas serão mostradas em modo de compatibilidade.\n\nAssim que %2$s atualizar o Telegram, fotos com timers de 1 minuto ou menos passarão a funcionar no modo ‘Toque e segure para ver’, e você será notificado caso a outra pessoa salve a tela. MENSAGENS Busca + Silenciar notificações + Silenciar por %1$s + Restaurar Som + Em %1$s - Nova Lista de Broadcast + Nova Lista de Transmissão Digite o nome da lista - Você criou uma lista de broadcast + Você criou uma lista de transmissão Adicionar destinatário - Remover da lista de broadcast + Remover da lista de transmissão Selecione um Arquivo Disponível %1$s de %2$s @@ -73,6 +77,7 @@ Administrador do Sistema Cartão SD Pasta + Para enviar imagens sem compressão invisível escrevendo... @@ -83,7 +88,7 @@ Galeria Localização Vídeo - Documento + Arquivo Ainda não há mensagens aqui... Mensagem encaminhada De @@ -105,6 +110,7 @@ Apagar este chat DESLIZE PARA CANCELAR Salvar em downloads + Compartilhar Aplicar arquivo de localização Anexo não suportado Definir timer de autodestruição @@ -121,16 +127,16 @@ %1$s te enviou um vídeo %1$s compartilhou um contato com você %1$s enviou uma localização - %1$s te enviou um documento + %1$s lhe enviou um arquivo %1$s te enviou um áudio - %1$s te enviou um sticker + %1$s lhe enviou um sticker %1$s @ %2$s: %3$s %1$s enviou uma mensagem para o grupo %2$s %1$s enviou uma foto para o grupo %2$s %1$s enviou um vídeo para o grupo %2$s %1$s compartilhou um contato para o grupo %2$s %1$s enviou uma localização para o grupo %2$s - %1$s enviou um documento para o grupo %2$s + %1$s enviou um arquivo para o grupo %2$s %1$s enviou um áudio para o grupo %2$s %1$s enviou um sticker ao grupo %2$s %1$s convidou você para o grupo %2$s @@ -151,7 +157,7 @@ Selecionar Contato Ainda não há contatos Ei, vamos mudar para o Telegram: https://telegram.org/dl - hoje às + às ontem às online visto @@ -213,7 +219,7 @@ Restaurar todas as configurações de notificação Tamanho do texto nas mensagens Fazer uma pergunta - Permitir animações + Permitir Animações Desbloquear Toque e segure no usuário para desbloquear Nenhum usuário bloqueado @@ -236,7 +242,7 @@ Sem som Padrão Suporte - Papel de parede + Papel de Parede Mensagens Enviar usando \'Enter\' Terminar todas as outras sessões @@ -283,15 +289,17 @@ Máxima Nunca Repetir Notificações - Você pode trocar seu número do Telegram aqui. Sua conta e todos os seus dados — mensagens, mídia, contatos, etc. serão movidos para o novo número.\n\nImportante:]]> todos os contatos do Telegram terão seu novo número]]> adicionado às suas lista de contatos, desde que eles tenham seu antigo número e você não os tenha bloqueado no Telegram. - Todos os contatos do Telegram terão seu novo número adicionado às suas listas de contatos, desde que eles tenham seu antigo número e você não os tenha bloqueado no Telegram. - TROCAR NÚMERO + Você pode alterar seu número do Telegram aqui. Sua conta e todos os seus dados — mensagens, mídia, contatos, etc. serão movidos para o novo número.\n\nImportante:]]> todos os contatos do Telegram terão seu novo número]]> adicionado às suas lista de contatos, desde que eles tenham seu número antigo e você não os tenha bloqueado no Telegram. + Todos os seus contatos do Telegram terão seu novo número adicionado às suas listas de contatos, desde que eles tenham seu antigo número e você não os tenha bloqueado no Telegram. + ALTERAR NÚMERO Novo número Vamos enviar uma SMS com um código de confirmação para o seu novo número. O número %1$s já possui uma conta do Telegram. Por favor, delete esta conta antes de migrar para o novo número. Outro - Ainda não há mídia compartilhada + Compartilhar fotos e vídeos no chat e acessá-los em qualquer um de seus dispositivos. + Arquivos + Compartilhar arquivos e documentos no chat e acessá-los de qualquer um de seus dispositivos. Mapa Satélite @@ -314,7 +322,8 @@ PROCURAR GIFS Procurar na web Procurar GIFs - Cortar imagem + Recortar imagem + Editar imagem Password Change password @@ -359,14 +368,14 @@ Alterar quem pode ver o seu Último Acesso. Quem pode ver o seu Último Acesso? Adicionar exceções - Importante: você não será capaz de ver quando foi o Último Acesso das pessoas com quem você não compartilha quando foi seu Último Acesso. Você visualizará o Último acesso aproximado (recentemente, dentro de uma semana, dentro de um mês). + Importante: você não poderá ver quando foi o Último Acesso das pessoas com quem você não compartilha o seu Último Acesso. Você visualizará o Último acesso aproximado (recentemente, dentro de uma semana, dentro de um mês). Sempre Mostrar Para Nunca Mostrar Para Estas configurações irão substituir os valores anteriores. Sempre Mostrar - Sempre mostrar para usuários... + Sempre compartilhar para os usuários... Nunca Mostrar - Nunca mostrar para usuários... + Nunca mostrar para os usuários... Adicionar Usuários Desculpe, muitas solicitações. Impossível alterar os ajustes de privacidade agora, por favor aguarde. Sair de todos os dispositivos, exceto este. @@ -401,15 +410,15 @@ un1 saiu do grupo un1 adicionou un2 un1 removeu foto do grupo - un1 mudou a foto do grupo - un1 mudou o nome do grupo para un2 + un1 alterou a foto do grupo + un1 alterou o nome do grupo para un2 un1 criou o grupo Você removeu un2 Você saiu do grupo Você adicionou un2 Você removeu a foto do grupo - Você mudou a foto do grupo - Você mudou o nome do grupo para un2 + Você alterou a foto do grupo + Você alterou o nome do grupo para un2 Você criou o grupo un1 removeu você un1 adicionou você @@ -418,7 +427,7 @@ Vídeo Localização Contato - Documento + Arquivo Sticker Áudio Você @@ -502,6 +511,12 @@ %1$d mensagens %1$d mensagens %1$d mensagens + nenhum arquivo + %1$d arquivo + %1$d arquivos + %1$d arquivos + %1$d arquivos + %1$d arquivos de nenhum contato de %1$d contato de %1$d contatos diff --git a/TMessagesProj/src/main/res/values-pt-rPT/strings.xml b/TMessagesProj/src/main/res/values-pt-rPT/strings.xml index 9d37c5373..31f5ae720 100644 --- a/TMessagesProj/src/main/res/values-pt-rPT/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rPT/strings.xml @@ -34,7 +34,7 @@ ontem Nenhum resultado Ainda não há chats... - Comece a conversar pressionando o\nbotão \'Nova Mensagem\' no canto superior direito\nou vá para a seção \'Contatos\'. + Comece a conversar pressionando o\nbotão \'Nova Mensagem\' no canto inferior direito\nou vá para a seção \'Contatos\'. Aguardando rede... Conectando... Atualizando... @@ -53,12 +53,16 @@ %1$s está usando uma versão mais antiga do Telegram, por isso fotos secretas serão mostradas em modo de compatibilidade.\n\nAssim que %2$s atualizar o Telegram, fotos com timers de 1 minuto ou menos passarão a funcionar no modo ‘Toque e segure para ver’, e você será notificado caso a outra pessoa salve a tela. MENSAGENS Busca + Silenciar notificações + Silenciar por %1$s + Restaurar Som + Em %1$s - Nova Lista de Broadcast + Nova Lista de Transmissão Digite o nome da lista - Você criou uma lista de broadcast + Você criou uma lista de transmissão Adicionar destinatário - Remover da lista de broadcast + Remover da lista de transmissão Selecione um Arquivo Disponível %1$s de %2$s @@ -73,6 +77,7 @@ Administrador do Sistema Cartão SD Pasta + Para enviar imagens sem compressão invisível escrevendo... @@ -83,7 +88,7 @@ Galeria Localização Vídeo - Documento + Arquivo Ainda não há mensagens aqui... Mensagem encaminhada De @@ -105,6 +110,7 @@ Apagar este chat DESLIZE PARA CANCELAR Salvar em downloads + Compartilhar Aplicar arquivo de localização Anexo não suportado Definir timer de autodestruição @@ -121,16 +127,16 @@ %1$s te enviou um vídeo %1$s compartilhou um contato com você %1$s enviou uma localização - %1$s te enviou um documento + %1$s lhe enviou um arquivo %1$s te enviou um áudio - %1$s te enviou um sticker + %1$s lhe enviou um sticker %1$s @ %2$s: %3$s %1$s enviou uma mensagem para o grupo %2$s %1$s enviou uma foto para o grupo %2$s %1$s enviou um vídeo para o grupo %2$s %1$s compartilhou um contato para o grupo %2$s %1$s enviou uma localização para o grupo %2$s - %1$s enviou um documento para o grupo %2$s + %1$s enviou um arquivo para o grupo %2$s %1$s enviou um áudio para o grupo %2$s %1$s enviou um sticker ao grupo %2$s %1$s convidou você para o grupo %2$s @@ -151,7 +157,7 @@ Selecionar Contato Ainda não há contatos Ei, vamos mudar para o Telegram: https://telegram.org/dl - hoje às + às ontem às online visto @@ -213,7 +219,7 @@ Restaurar todas as configurações de notificação Tamanho do texto nas mensagens Fazer uma pergunta - Permitir animações + Permitir Animações Desbloquear Toque e segure no usuário para desbloquear Nenhum usuário bloqueado @@ -236,7 +242,7 @@ Sem som Padrão Suporte - Papel de parede + Papel de Parede Mensagens Enviar usando \'Enter\' Terminar todas as outras sessões @@ -283,15 +289,17 @@ Máxima Nunca Repetir Notificações - Você pode trocar seu número do Telegram aqui. Sua conta e todos os seus dados — mensagens, mídia, contatos, etc. serão movidos para o novo número.\n\nImportante:]]> todos os contatos do Telegram terão seu novo número]]> adicionado às suas lista de contatos, desde que eles tenham seu antigo número e você não os tenha bloqueado no Telegram. - Todos os contatos do Telegram terão seu novo número adicionado às suas listas de contatos, desde que eles tenham seu antigo número e você não os tenha bloqueado no Telegram. - TROCAR NÚMERO + Você pode alterar seu número do Telegram aqui. Sua conta e todos os seus dados — mensagens, mídia, contatos, etc. serão movidos para o novo número.\n\nImportante:]]> todos os contatos do Telegram terão seu novo número]]> adicionado às suas lista de contatos, desde que eles tenham seu número antigo e você não os tenha bloqueado no Telegram. + Todos os seus contatos do Telegram terão seu novo número adicionado às suas listas de contatos, desde que eles tenham seu antigo número e você não os tenha bloqueado no Telegram. + ALTERAR NÚMERO Novo número Vamos enviar uma SMS com um código de confirmação para o seu novo número. O número %1$s já possui uma conta do Telegram. Por favor, delete esta conta antes de migrar para o novo número. Outro - Ainda não há mídia compartilhada + Compartilhar fotos e vídeos no chat e acessá-los em qualquer um de seus dispositivos. + Arquivos + Compartilhar arquivos e documentos no chat e acessá-los de qualquer um de seus dispositivos. Mapa Satélite @@ -314,7 +322,8 @@ PROCURAR GIFS Procurar na web Procurar GIFs - Cortar imagem + Recortar imagem + Editar imagem Password Change password @@ -359,14 +368,14 @@ Alterar quem pode ver o seu Último Acesso. Quem pode ver o seu Último Acesso? Adicionar exceções - Importante: você não será capaz de ver quando foi o Último Acesso das pessoas com quem você não compartilha quando foi seu Último Acesso. Você visualizará o Último acesso aproximado (recentemente, dentro de uma semana, dentro de um mês). + Importante: você não poderá ver quando foi o Último Acesso das pessoas com quem você não compartilha o seu Último Acesso. Você visualizará o Último acesso aproximado (recentemente, dentro de uma semana, dentro de um mês). Sempre Mostrar Para Nunca Mostrar Para Estas configurações irão substituir os valores anteriores. Sempre Mostrar - Sempre mostrar para usuários... + Sempre compartilhar para os usuários... Nunca Mostrar - Nunca mostrar para usuários... + Nunca mostrar para os usuários... Adicionar Usuários Desculpe, muitas solicitações. Impossível alterar os ajustes de privacidade agora, por favor aguarde. Sair de todos os dispositivos, exceto este. @@ -401,15 +410,15 @@ un1 saiu do grupo un1 adicionou un2 un1 removeu foto do grupo - un1 mudou a foto do grupo - un1 mudou o nome do grupo para un2 + un1 alterou a foto do grupo + un1 alterou o nome do grupo para un2 un1 criou o grupo Você removeu un2 Você saiu do grupo Você adicionou un2 Você removeu a foto do grupo - Você mudou a foto do grupo - Você mudou o nome do grupo para un2 + Você alterou a foto do grupo + Você alterou o nome do grupo para un2 Você criou o grupo un1 removeu você un1 adicionou você @@ -418,7 +427,7 @@ Vídeo Localização Contato - Documento + Arquivo Sticker Áudio Você @@ -502,6 +511,12 @@ %1$d mensagens %1$d mensagens %1$d mensagens + nenhum arquivo + %1$d arquivo + %1$d arquivos + %1$d arquivos + %1$d arquivos + %1$d arquivos de nenhum contato de %1$d contato de %1$d contatos diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index e6da462bf..0f856f43a 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -53,6 +53,10 @@ %1$s is using an older version of Telegram, so secret photos will be shown in compatibility mode.\n\nOnce %2$s updates Telegram, photos with timers for 1 minute or less will start working in \'Tap and hold to view\' mode, and you will be notified whenever the other party takes a screenshot. MESSAGES Search + Mute notifications + Mute for %1$s + Unmute + In %1$s New Broadcast List Enter list name @@ -73,6 +77,7 @@ System Root SD Card Folder + To send images without compression invisible typing... @@ -83,7 +88,7 @@ Gallery Location Video - Document + File No messages here yet... Forwarded message From @@ -105,6 +110,7 @@ Delete this chat SLIDE TO CANCEL Save to downloads + Share Apply localization file Unsupported attachment Set self-destruct timer @@ -121,7 +127,7 @@ %1$s sent you a video %1$s shared a contact with you %1$s sent you a location - %1$s sent you a document + %1$s sent you a file %1$s sent you an audio %1$s sent you a sticker %1$s @ %2$s: %3$s @@ -130,7 +136,7 @@ %1$s sent a video to the group %2$s %1$s shared a contact in the group %2$s %1$s sent a location to the group %2$s - %1$s sent a document to the group %2$s + %1$s sent a file to the group %2$s %1$s sent an audio to the group %2$s %1$s sent a sticker to the group %2$s %1$s invited you to the group %2$s @@ -151,7 +157,7 @@ Select Contact No contacts yet Hey, let\'s switch to Telegram: https://telegram.org/dl - today at + at yesterday at online last seen @@ -291,7 +297,9 @@ The number %1$s is already connected to a Telegram account. Please delete that account before migrating to the new number. Other - No shared media yet + Share photos and videos in this chat and access them on any of your devices. + Files + Share files and documents in this chat and access them on any of your devices. Map Satellite @@ -315,6 +323,7 @@ Search web Search GIFs Crop image + Edit image Password Change password @@ -418,7 +427,7 @@ Video Location Contact - Document + File Sticker Audio You @@ -502,6 +511,12 @@ %1$d messages %1$d messages %1$d messages + no files + %1$d file + %1$d files + %1$d files + %1$d files + %1$d files from no contacts from %1$d contact from %1$d contacts

    tOJKqwYBmTQ|)zG*M?*dH+THM!vkCmrFM) uoQ;<|YCeN``hsTvFGv1&wP^ejPhgmGH~rn0B|CdSrJbj%pUXO@geCwgqxAd$ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/photo_rotate.png b/TMessagesProj/src/main/res/drawable-mdpi/photo_rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..cdfc8530116fb6e990d2c1e397bc4b125f6eae17 GIT binary patch literal 1175 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRx!3HE}ruUu)Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?_naLn2Bde0{8v^KDjP)EVYz|dIVz*yhVSl7_V%D~df&{P2mlz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiLs8jP#9+bb%^#i!1X=5-W7`ij`p|xTF>*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-xUqS~&|m@vn0`fKfxe-h0mw@*g}%P{mFDKcRTq~8r6Sym)!^cg z%7Rq=pw#00(xPNw#HA^NtSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu09svx0_iVsd64 zh_4CO;OlGUnO9trn3tUD>0+w{G(s;kGsVi#&A{Bn#KOqZ!o|SQ&=nZqj%IF7<}NNq zhDN5Qu8uIhF8Rr&xv6<2Fuf@Vy~a58g3>~60nlcb)S}F?)D*X({9FaFpRF=+yTt&f zc~HG6xZPriQ?EYIG5VmGMT%*d5HR_GnDBH9#PaC~{Q%>0{q1{Y$6pX;FU=J0)mJz`pyePbEDxR6laPk?$!kU3P8THNEY1 zZ_nMeOn-l8rs0&JW8$yk?*Hw$x}GiS&*a8fosF!?6TT-0gw21`I>A{gZF48k}-f}4MOllS?PDpVbc3R{zASvJDHicFV?vl;~+mJ=ciJ!*wJEvV&jYg%X7+W9{VkxaXr<@ mGBfw|T8IAfhq?cP8yFd4r^@)gZH_Vl6&0SYelF{r5}E*%4~-`P literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/photo_sizes.png b/TMessagesProj/src/main/res/drawable-mdpi/photo_sizes.png new file mode 100644 index 0000000000000000000000000000000000000000..34d1d2ba17b3e637ab3270cfae3d56b1f6aff824 GIT binary patch literal 1017 zcmaJ=J8aWH7`9ZXP@#eaq;@(vDgr67W2a7PtEMDzN+aPYO(PK`hB)@Maa;Rb`%2s{ zJi4?~5n|}TP`bdx%4=u`7Njl}WhoM{@ETAD%0L<5oF*v)!P5EeKYic#KW{0YyVTv) z+eJ}ScXmW6ko`1Sr;c@!|IeNNKC<=TObL&naa_|}NF@zafgo#X6R-d^V{YaZ9Hgj@ zkXbC@l6qOvk;P~MhVdY)gMNp%vlZI7uWZs2i z^SPovKc$NXJ#+yK`VtYaAl86yP1~O2%XD2=BIn?mr9mBnr)2sdsFIooY2-p6FhWF+ za{VA7GMvEm4{%|?N4Xdqjj>!T!tqj6lsEx2KAL!Qjd7`<3^#lcOQx$BI}*#*YBi=7 zV~{(+a-t}*QJ&@b2th==IU8$!#P&i>1qFJ#YdY9OHV7283Yx_-O(H!=!E#!%w$~^V zDH!W(4$CpoAf+ZyRsRpQtQOkC1$Y?mKZU*GoCDbc^w6xUlg5pQ0#}ZdcAl6HM1nC*LrNtwJf9HK;(!w4xC|+H zGCrJ2C<@Q5K-atujbRsApq{g2wvQ#*Re@-LLCMA5NiDwkF?fvG LOip>6D&PJC?TbtJ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/photo_tune.png b/TMessagesProj/src/main/res/drawable-mdpi/photo_tune.png new file mode 100644 index 0000000000000000000000000000000000000000..9db5621e4fdcab78e76400979f1630e55de8b1d9 GIT binary patch literal 994 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 + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable-v21/floating_user_states.xml b/TMessagesProj/src/main/res/drawable-v21/floating_user_states.xml new file mode 100644 index 000000000..41f9bd332 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable-v21/floating_user_states.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable-v21/regbtn_states.xml b/TMessagesProj/src/main/res/drawable-v21/regbtn_states.xml new file mode 100644 index 000000000..4c8d58841 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable-v21/regbtn_states.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating.png index a7e9c09f6d5e4e5d473158aa28c9b0bc05479784..5523f817d959e55d2ee051b13662c832aa69b853 100755 GIT binary patch delta 4057 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 Houd8+{uq>6 delta 4544 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 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating3_profile.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating3_profile.png index 1ee194c0ee403bcd44195760ab2601a2b7b3b3b3..c838c5412ed28ef6a7fd734a8480db86144d8e06 100755 GIT binary patch delta 4002 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 delta 4142 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 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating3_profile_m.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating3_profile_m.png new file mode 100755 index 0000000000000000000000000000000000000000..5a1e0bae6cf091b1f6724fd9883941e82c2de250 GIT binary patch literal 2614 zcmaJ@dsq_r8m81tlC;d-!b(K5G6hk=pu7SGuDFG0=t+}clu2&F6li63Gh5xLY<1PL z+@~DH?1?Y)t*02XP%k)ewX)szwh^b-!sn~SR1+q zg+wC}2n34Bps`^qGd?qC!0$T!&^NGI0MWTnm^2Pj^5g&_Kp@=&V3=ZFJirEcf~3TH zU^N0^f(1ETh|3D0@TFoL&xpaP#6~FuVzr-2#^Wad5M~n)4@!Kn{l8tuVnBfpc0G~h z&XQ39A;?IU17XRb9DZ^FpDe)o`C?Y9D6oJSfOr^{SR_$UR6f`bx)gY9T*hNDA0SYI z5BBe%xU97ps#FeOh&WF-zB_?{A(3zdFCvLVaK(7I6Fl(l@J(_fcu|NXiibDmsI6+)1Vg2yYBN}SRYCzZ$J31l+asNvz^1|!@QNfL;sa+4?=KPk`v z1z!%zAW$m77!`S&q+1{#EF9_IM-aA` z0>OhC=t=v;rAhf)#DE0)#1;I*C4G@=Yz46l_Dloh;8s8oB$tXYAC61`zZ{F_7xg}J z1z(QE>x*1G91PxA*#9c@rzN<1jKj}u3r{{bJ|Ka+T@JUk<@-7f0x_e6NekepI$j@- z6orS+OB)6ESe*jxYE0P0sUY=VjC32WSDr8rT^^*xy{*1hQWs#(xJX*jzzpX8260{HPA9x?V zt^e0Q$=g;Ppw-M2%qY(0d>h4x^3PjSb&M0>(#;PZAIs42bY{9F9a-0}@zqH+S(?SZ zLGunCLcBaAS@MVxb+@{4=9o_!`L?5ms=+hkiQ3nZ!BzXARqy*~lkePLtn5|jaJo@+ zY+MQB6?61(iQAwdUT3aRGN#b6cj7U`BcvmF40`tEsGl`B_NwCi6%`m0*QdeT3NGHf z{oEAvT>nB?Xxby|8kwth8r&7bw(EUXw8F!HIPV~Sa#-Li|8dB)mwU94JMU=Lr6UJl zB&yP`+l5juy;0uHKyF}mgqC>it3`k&y{Y$+u1`uj*QY*N@b2#02Ycp%wp?llD@rtP zzyu`rF14_I5Hb;Q!|v9m5l#CD;)KJFK$qq}oY&PoUY)?V`EKW4Z>AayE$DIY`=hxC zHSMdc$4e@NxNAL5J~Z?JPyfA_vsMXf{pRvsD5Es#9Vixd_-eDh?`XjG;FLY&M5t6ET^}Tw5ogYhR zq0aNVI*@vKTc-L-nBTN(5-8afX=s1tpWn2qQoQwk*X;>vCee2m*8eE6FQ<&N(Gf^3 zO7XP$(`l55!l7|~zQoQfz z`&PR^6zE;DzV+XN)6PS|&wS-&XJ&8RoquwGF`f(Aj-5=4C*F>mf^5@Yt!*)6wdk2o z@`_ysHlw~ZZ8_GWK@9hKkjrviw9dnHOP0-B?UlOdu^{||JBY&Q0CY%%z7bup>`;qa zF{=kTOk0RTpAQ9U$ZAt$ zI^t!i)uvoEqV&FbImba8Y1qS!bI`UMjiVMh9N=m@bM1L;!>Re61dHJST-1&vYrR=T zfa}+D^hFbx>^Y`mIk0gsRmJSEZm@?vzoVs2!R(1SdJtxxnG<^g-uE?CvEhA--;0?z zzBdt-VEdhEE^6t^!0T+kn~BSR6{Kz~wSQW9G}rebHj8O>*%JMY_jvf}=PTn$eaW#o z6WFvp^&8nH4^Lf7=ee$ke(t~cx+c!+P4;(IE%vV#t!{A@~oA5V7P%2lRH1A3TaxqVPD35?-f1WhQX`PJ!Xr- zy2=V0HSOJssvV9^Uq3xki!y91+s=Qugg!UL#Pq?~v!Z*Y^AdN-vKJ_=CYIMjH3t__ zw-%|(%lTCUS2>tvFCAWQ81`h(80X+#Hl81tZl|lL4i>UrI_B04qA}XXyEqu==BS&I5*Goj-n)TJ(67;bzzw3Za#^ zj@>IVF|FKO-rQ4Q(|#fUVyh;%Xm+Vp2(Z`B|4iKB@b2z;G1k+ZsWh9W!d%tqJwA5z z!~1quy|w&n^qGbg)ONi7d9(9~i}i_P*4e=cFJ2Ue45Dv!ZJ#{_9>N>;UTlp|`^`A3@XwB`z{4wzVZ5uAHr1Q6R(!wex0uM->Ld}-9Ww>IA8BnX)x5x#+M*N%o+`Ln(id@W1g;g(sS-lDe2wmiONSc79#0l zv$lq=Vuw2ePm8o1ca+kvmt6gGxa)9v?of*L(r(@Kg>Nl2LAtQX=8-j>O=_iLebb`R zWu4`sM#XFFpgVZHyr0Pvy`P%XE9T!rst?v?wDL>EuUj)wJ9F}Sq_{K!7d3qrQlC52 zFY>CNbK#YCp-!yHS2@|$73}BA%l4Z)>}PB|bhks2=?HbEH!v!;rzHK5sEp0O6~JGb z$M%hLwpZ6qzVqxuPH_vz7J}N!gj4VC>^W@w`oEv$j!1i2p*;1d-NpDP$E1hS&IQKq F{tuPnWYGWs literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating3_profile_pressed.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating3_profile_pressed.png index 3268ca335cf2ad7fa4bad1ece650c7b3ed9316a1..5ae6d6fc216d206455cad18142fb075f4b5c3152 100755 GIT binary patch delta 4272 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 delta 4462 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 bx=UIpU>nI2D-p+s0+5HUrhx_?hK&3lKXz6% diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating4_profile.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating4_profile.png deleted file mode 100755 index 87a90ab78b098cd5723d85b5bc2f8b8e7c2bcd3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5472 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 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating4_profile_pressed.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating4_profile_pressed.png deleted file mode 100755 index e4af9d2f42fd5de1eb26ecdd1ced41d794872fa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5723 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 X%&F9;^#kWwP{Hfz>gTe~DWM4fHHt4H literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating_m.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating_m.png new file mode 100755 index 0000000000000000000000000000000000000000..0e5daf6ac6c2527b6314854cc567123ef0be290c GIT binary patch literal 2640 zcmaJ@d00~E8b4^RWj#~YNLmqEnI@nC35gqMVd08D&vonfF#5m&#M56Nwlnc(;1&f1UqLVY8Odyh7R-wK=XxN(w zrDL~&SW5{abeaB*>h5l-SXzJ!(P#24F6G0-3} zTf`MgxB@;(&&b*=NS090aHM~yz!QF><%_?T2`(5ml_kVFV{rPErhp8_|A+E;-_T-7 zF!WEn|C3nEOcO%bU`Q-T7O~;RacuRjgk-7+Vo3xdra+K1RmH$~fkYsV7YI?*5F*Mx zoXZCVQt|RHcm{(^=ZhsQJ{zLbC}@}g!{vfxFK=%g)z^EK7lBA}cJ{%0;b%!M9ZiUZFxMt$JCzK6ZR@U^N^>b@oZk+J5_$9hg3FP%c)J29}x(ma=EnD$fPf2FSNVpK7;rq_tb* z`JtT`K#%8g0sG;Nn3=-b*}rF)j-1e3F&&&?IKt8)bO$ws=D4)t8ZEoJ^?9aA-Q{Ty zZY*R=)QP1uk7am^^AaHd}|$t%^4;uRKtORPAx8Flr&V-eg9L^2N4y z9E#HN6#$lYX0Ywo09nPj{Uiot&22F_;&+;HsaIE@!^~e{o`i^Kb-#u|hpzQ$FYl6M z2AuPVRfciy;H}ke5ZZJ6Xu7U@MtzWs?vGtud2BgQJ0Pf804bu2C5K&D~)|EtP2`zEAn}X`g62O;cEe&cV_u1J*lXHya zo}-NTlqYZK1O@_(E^x?HmG=8B{CF4>Jx}#9iqvK185?FDeq6udrs0@TXV+V|<|VRb*O1J2TibjUs#UylE9Jm6HuDKt z)nn8ga3Z+}v#Dp8S+kBneHdy!&kRwNHIbs|w&GQo9$mH%aQ7Vjc>m;UhiQeEfX;DU zq@v4}H(ly9!(?pc2jkzmRKYblX2M(!RCS@%Ak}C~@iVY0Y)23+^HtqY-1%LKtaxBi zUtV7S&V4`(mD7Z*EIGZkro=d~6jQrq?jzu(B9{`C?A~&#LzeFaW&5=x84Np>8(tvN zBZkPxVROX|al1ng2EH0~4 zip*MS=kKf|F9X)V8Uh;l>#j{zFA|X&C9Vl;cJyrcm<`zIRmT9E+px$4H2pA7Goa~% zPtwJi*GqOM&*n6GO>BSaSG;k4b?Wh^+tq|wukhU~rqxj2*Z40eL}d7Mm&hGfhWFBrK*GxL!Nkdp|G8>Cg>}!1LML0&CxIG`YHCwvqkwL8tOE z%M8DB59jB5RUM4}`P`;Hn{9>QcDsAVZ?7EvfM>n%etIgafTFM*Mv4wl?}VJXSkcXB z&u9gFCe;muaHU=3b{l0@&XwUv>OJa{-RT8{dW*3|I?7vSVyJ3=lGdm1tfA#LWlTl? z^`ecRK>AN}a<(p)Nk=@;aSIj|H|$^kY3alXa2crpinJz(`|s{q-{F|~?`7?gmtqJj z3AXFr%|A9n>(R*%HKte2MgBa22(+V&6i3Y|JeyW*$tt?)n7Me*E44+Z9iM=z-6#9A zAbKSs|FK&Pb%GgPbtIvn*pXCE>Fx8!>;4K3yJIISvbF6m+FP&E$*bcQg>&ZYebVh`ume153e-XS}_iDU1+yL&f67jOwVdXpG7>VYr@-nTm9 Ub*kt&`hPsSk3a3KckGV;02>@`egFUf literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating_message.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating_message.png new file mode 100755 index 0000000000000000000000000000000000000000..914283172c79959a35edd7b03b8f5030ee78a4b7 GIT binary patch literal 1090 zcmaJ=Pe>F|93C>PB$EzB3Cd%ZLc`tJS$D@~a?{Y;6T^ZxOD-|z3co@hB$ zT2fv@QB-NHSxl0(%K3K}lX>vZghrObIGV<-s2%4d6H*}sWgv)YQU^>zN$I{k1M4ZO zh*nc+oQ|InWTbf{2jj6dgRm*8zQHymxeH>DfgP$Iq`yy2(Lhy#bXy?qjT;fzsW$hR zu(hWpCHHj6yh1me1ogH+1T=^xU~89jOR$6Vnyx_h&NV}WH3;qs((6v8;|UN!CIkUb zty}i8EZ{f~>kn`oTLXMv*2j3s;M}ZV2ylY04s3ihv1TgmLQ-tnutiQmx)WnVV3=Gk z=gHN2klDeoJkL8CKA)Q)+*Y@aCEKlAuDpT>E!k8JtRfvaic$t;agZjSu7{u*o3gsK zktUKb#+D3*^?03-^1yif|4>caL|ZrsxBUI5u$AgIAd`d^%9=7MT)WFLWe5=yN*I|b zgf8W?nCL_pS)IrLkyZ{=wW+#-a#r;kJ{}ihx`icOhA}Zn69tc|DgxIO=EKL?a45iq zST^bp*NL^!aKvBd1KiIczpQ)JeCSq^+-gJ{u!XVmu~>Que~v zcfpdEjfeV|n1PW`0kePp#a!R`!ja{Qqq~OY`96Ek{>=BC9QagLHPHHY`ooC*e)b^S z^y>8daQTz3QLYPfg% zbQ`%&EKl#PzwdS#V#TAy)v=Z3AC=$Ci@htqZz^wAf8MAzp7#1DIvS5Hx`y`U${xI) fZ9KO)c9$xmUS%qtKmK*_q4TO^(H3zue4+0z6vb{Y literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating_pencil.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating_pencil.png new file mode 100755 index 0000000000000000000000000000000000000000..adf178ac18640cfb00e0110b633d48a3f1407ac2 GIT binary patch literal 1416 zcmaJ>eM}p57{1aCD9ALEk+A@thaYUxkLwrQL4|7z7W$$ig@4PvK~fkJ`8*q6OqcUM2TK5$n|2Z)PC6={eLzlQKsLBlDAtzy^Tq96#f5RS`VsBq}_V4q6#H2Z0{9 z4l2=@6eh+%RC)?(S)#bsY<1OExezy$^DLO{M+E_r;2of!tfn~BuY=ZfQDGk1mP6ng zgs;*;_mi@jia-O+5}-z=lDZTy3~IG9Sgp}&;dD@`fR%EE@M@*78r5h~Wd^wZKteRu zU5;9e`RlQSl@6-pc?OlseLkPer;^cZg&al@B&4BKN(F?JtD$&@UrKSQVFe?>xmXXw zduR#_DLS0Am)Ai;ruR!AnGIQrTR$e@z~p`hBZp;*P)T8+$@KqFlH5RZyoGp>?|%w& z)*6P8TL_N!vM!-<<*A`i3~FEr2T!wBnywC?Vo@c{(_AIZfQDi%m{#JU+_aC|y@ofL zP@Lj;2jwDgqYe@jWFC(jg%OnsQRf>ljTV97JT;=%XJC3bLxEumOrMz_<{D|2mn0}Y z%ymED8aL&JtUxkCWFx_PUM1Z5EKP!IC8M6rbHO&%Tj#nr&qco}S1u$Y4>k5*jSg=K z?g>pdY%44_j89O4+gZWZ`N3B@06=sXH)2-*mC55n=21obq4weC??fjL6n!2&@XlcM zK}qD!BacigS5peovvbGHb#L{vtP1f|rM1Am14hl|O z&+7d92TzfBH1LT!dE$6y<6m>zCu4s5!Y-LT8vFjX*XwmRA0NNtWwFZ;F22g`1L$C; zjGr9AnTX!5m8p?q2imFGZT)=%U$#UcHHNWMnMvmOir>yQbUvo>68ea=!;jPP&{VyD?2~vwQCmXEOpZ27w5T-C^^g`r~*g^*K6TRR5 z{FwHNJ@IVwA7f>KEK7VzRNoxlabqVNOiMMtXqR)XnHdi+6EvenFH05z&AF$h4*r5$ zmy!;j@zHT_w%Zn;NLF7Dv^2idGbKsDPc(gB*xA)ar>4~B&d(-}Ka;(Z5TC2+?W!lU z_6~P{m^nY|?3lMjH4S5yz=EVytZJUx(bLIc5l^>WOM2eE2cPNMoxwxoJ1tpJlvsF}|!`+)&D1=nqaHW!*nU4$VFK*>J4?#1WnMr}Nku@^(kg eu`XlP-Dm|+8od4TK%H%C=x)UG%*LSJ-tZ3)!~<^t literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/floating_pressed.png b/TMessagesProj/src/main/res/drawable-xhdpi/floating_pressed.png index 81cccd447a9316c859bf9ecd50e69ac44df7c6ea..7a28b212490e082111554029681f91ce056d8de8 100755 GIT binary patch delta 4045 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 PfWKpiGSe&9L5KYZEvBKd delta 4696 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 SD6u&HsnL=R@X3he-2Va#6Bk?n literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+;1OBOz`!jG!i)^F=12eq zr+B(JhD02Gd)<()*+78hKsE1==G)I5J=o;j0v7P>oD$A*TI`#s%j(>1w2l(7O z@Qn9`J(D~W%PK}yhX#g5n+?_Rzlwtu{xLCTZ~n=8_vUBYghSUJ6f8RXncKC2f#nmc Yj_;-yn*(R71Kr2q>FVdQ&MBb@0C7fNMgRZ+ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/ic_external_storage.png b/TMessagesProj/src/main/res/drawable-xhdpi/ic_external_storage.png index 2c34f5dcad2af4c377ea6f7ca1a2dbe5e471b881..41ea21d87b5439fb7603e800dc3b2a1903165130 100755 GIT binary patch literal 1895 zcmbVNX;2eq7+w&$L<9uYlQi+wZ`8&oQF#AUbgn`Nn1W+O45LVE` zDdB29lBft>t3kwTmqtq0CP{;2gpgp6ZD8R9N(7UD24%8J%QA2XW4tVUZx)jY;Ft=Q z#38(KDkeMv}=OQVIlt3-8jk014G3kfETUATtM*O2jpY+B6j=F%VT+uL%Yi(MmN6 zHKssSpqWt;kLoZE0r&Jx2ugK$_*-I?c05sd%E$(ZnhcRBWTny^*O;~z6CwY&@lI`R zWSSZwix4fU(@61p$h{`Oc<$bB$gGHa!&;_M;6;%n!>ClJL{wN9%pu@kNHT?t1uqC> z@|glEpUI;MXb{As1PEY03=63g8blZJCpg}P6$CJ;w17Z}M`utWNI(k=pz(M?bYT#k z$>2eOf(dMxN{dNUQe?ue0=GMkrMwr*;%g8IhH4^FG14^#1(|WyhuZ5|Nhn;ofOv`txHZNJluW4L_goR6>B`NXDPqQ zuyBnT0=qG>u93gt304~`@jaSH&<+O%dxdB z^MIQz&Zk=s8l6_Gywq?UsI+$5#@>j`vn;lY7VK?Ia{vQcl#i=)yX9w0yNo}S^f>S@ zZ9{a&j~=dj7@4U0F8)bX`y?kZQ|epqvoil7##+NDJS2K0Y~DUF5>n9mpu@m^AzM{A zH?x21wIgc`yIW*8)|?g^OBeD+pR)(f#ck@ZYzVK4Xjspn)uxkO?snT)^gSPWU6yt4 zQQg`8)Qh)l+Y;Kklag6c z7rd!<@8yd;Q}x$_B)^#Lza{nv)_1tokHkn8i}NN~MIE`V>t?#;&XD`T7RO?s+Ma6F z*{&i7O2@E8f~Sx7$({^GqTJ{RZXCW$F-!xpt~^?7sy;ke>acIty%STk=e!=1ZWO$} z2~`ID>Nh!QHYxclPS0N7rZermo&wR2GcBS4aF3%CW#<+fn3tJu^JrcruBcT8F3$0@q{mxFaSTD^L} z2Pls&*nfsLRFi&S_@b^mHmj+o>$vv}W~YbmQ(<95MaScV{Fc)lejc7F-%B>Ph9>c*Ckuaq{7LiLGC})EoL>yG+UQI_a`S0NZAhXxd$9w(-kDMaHuF`X+z& zC~0@pE;|aX%K%8jOwPqw8*;DNpZA`V?e8>qP6Lr^aILBxG37bi)_ifZsNQy@mUXbG b{w28ATH}~`a0a= literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g&? zz`*F>>EalYaqsOdYdC@ZCE(IKx+`%H^ zwzDbjp!?=BmTuOx8Ii|+%+CEb^Y5E~Y3cutx|JTvvgS~k;PCmHs#%QP%ple0>{k{h z*ZB6?%FUcm&YyL8Yuyy3x5^Ol^9*@*_WjuQ^VGc?%TJl? tWR5C%$|=fM;cusUNj{8;^U2P?460t92fAa8Hv diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/ic_storage.png b/TMessagesProj/src/main/res/drawable-xhdpi/ic_storage.png index d9d8b481fb225aac214075113c059aba73df550f..7d8f350ab48bc5e49f5beeb0974d97d1064d7ebc 100755 GIT binary patch literal 1789 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|9#g}Jl2 ztC6$0qlv4Dp`oLJv8#)-i;J6)fr+81n={M|YKL?fq0y6ST@{2R_ z3lyA#%@j1kGxJjN%ZoKZ(F5_VOKMSOS!#+~QGTuhIDD-#vDi=8-w?ei?JgIrW98(0$8gan~-GMny*VDx@q~g|_xi|A38HluPo+xy& zyV84J=k__$warYAk2>=3YvPUHV;lzx>QAX^%d;WZiu5 z;=Q~2)||8K5x?qM8(i1&7j~?@vgratQN+@W=lj%!1+p)`6HCxqF!hk`^#FZ`YsHbN zR?0j2MV*dVuikT(@zQr@xp&74UAr%DJTd?G#T;G*_OMQg?d%_K{LpP!$M-?u!P1la zj<6g_^KF>gQC=OU>!8OqVSf3ih~sN@vMqKU5p6@L`lIGcnlE(zVfMLa%^*)6MQat^N?km|~X7*O5EtFrDD6 zZ@9W5&h4hL>l^1sGu|!z!`0_}$ZuDSUj25T2Q_y8KPI$pJ;lU*#O`fG#0s4aF^_ul z?>d==28ruWu8}UC9~nF26vOlxh5}JWnr#e<#o9GZvw0H~4D&@4d{v#lZ9RQV^XDf{ zn>8g%J9{V0{lxR`^|NCPFE}n#f7fl=_o170QA3%=iteTND>6zIbuL_Fn&@B?p}@?R zz0rwb&e>k(cie}WY9kbUuO2O!Ha9A-(bghjHM;{pgLT1%u<##j5|Qyc7VGesZ!3sj z#VmhQ<>2>2$0TRGI`CY6g0zFk6*kr{0t(HdQqlJhKX@X?F~9Iht)=sV+Qg@C)`;DV zu>Nhgx732`u(9DZvpwSXjUFu9D+cW#LYmxuP#h(B2 zm+YOs@9p&dUt+T_P3 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+;1OBOz`!jG!i)^F=12eq z9XwqeLn02py>gJ3L4kwCaecuL&FGF%CAEoWu+3Nt)VO$g1mV_U+(5>xZU%t33* o3H9uWVvJij7Ptm6{*b-VwA@PZ*24>Lfo3syy85}Sb4q9e0M(r~{Qv*} diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/ic_storage_gallery.png b/TMessagesProj/src/main/res/drawable-xhdpi/ic_storage_gallery.png new file mode 100755 index 0000000000000000000000000000000000000000..89685206c20bf17db7f39232033001fc640d00e5 GIT binary patch literal 2193 zcmbVOdpJ~iA3rW-SVGw3k&aOj=5oduV=@>sBX*6%gx5Z6jhTaanTwfIhEiC$tCC8DCzP4-oZTzbz`+V_v1eV^z3J?EU??fdzB@6U6x1N^rd z=vn9i0AS$j!wN*_0QHMmiGK5pr%$2NT7(^n1WBTh1fC2A7y?No4El zz-|Db6(!_`BB2~V8eby9^VBkUg-D8`0l>{eA?5L7VFZkXqlIERcItdP78DBT*brw9 zkt1coF+!gt861@4&*dk@@?8a34|mW_K|={dFv0^BqByafrl4cr^U~0@`j~(P--{rz zbnFMCLOB5-QzC;wXS@@RPlO%t^5DJ*Aa6v>7lHrdPDiNf?^ zGgu6UGemZATE_Z{?oNg3KTa zXcrDz`q%~K|++LZ-SXK2>jTW1WB zr}^FewY39FDVq+387&rshM5-oDdF0Iud-A@#s@;pg=^BiJTVOwn1S^4!G@77NhPg$ zoP~c6MR&dV%Jz$#^2x5LiH9$+dU0$P#|sBjf9g)WC>`K%m>g%zoyCSmGq3x#zodI% zG6r2NU&m`@@!)RgaqLs=O252@6?Us*)#(9lA)tX()(Y-P4_@wZc?4ZA2)?xQfl`(GO zILzA zadLX;Us$D6Y3H9gSJiqtfxBbGokmLvs^LEE*l{4vjaTGWG#9C8YHB)yxq~aV|K4-S zok~?;Fvb(V!jmDwRrB5#VE%b7j8L zZgkw@@v9xr-p-AVj*gFvjD(*Ger9E5<<6LBt&`-qdd3wtI_|SNx#wEc%fG3@=oPlb zB_(f$CwFD5wnwB`#2&2U+MnU>ICXpRyR*ZKE%o*FLig|RCGDh{%;$gwXL@$FrCp`k z&uQc>d1%jcEi5ePoZm~KP{NP*O*UyO8(ZpcZ!pfvN%|$6Ma1hDY%6HrJ^BQR8`0sH^^*ImD@uO(-tNB!%BpDaGUAtT~~SQSPn zDK6gYI$4tHF%V;ASKwkbd%(taQ}#)&ee!g_$4sX6qs-(oomESiP|G7#A-cEMuhP&b zuSa4F!#8f&=M!?pu&uYsR`W>ivA&6aqT_dHEz{htJf7_Ri0_ccrrhlGu8p{E-q)8C zur68GGI>52Xm|zOI5epQF4XwFI*}XbZR{PIof}&Ze`%XX3~vQQ?W;IWcb8S zA?3HE))5a!pEvvI*3hzpMx)Q|o!#U#sRzw>ZtkeP^fS50dryE#;kn?!I-lA#DFgAF z67|a6>|OlllC}7bwf7>JR@G%EF&)2lL>4qs?cd!gjq5J6zY^1tV`5`O^cvoC)qJeW`pU(=`-#u{r!L)K3{p?4PMBq!fdX{96YM(M zbDPHlhj)R~-?Zt9E(87UbCm8BaL)S<(0MjZ=YrKcNb}yaEsL)DNmaww*<%yLB@7XG XleVy)hsngNe-eDz{;bnp5o!Mc7ms*f literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_blue.png b/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..f1b17b1bc5ee2bc9a396e49f81b434f23282b633 GIT binary patch literal 1465 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}FOsiCov zo4JXZqmiqLp`nGjo3W#jp`(+bqopg5fSG|!ud$`Ek-3SXiKCH;v!S7@iKT&)fup6l zrLmiZxwECEDNL_tUU5lcUUDkT-b|pqP`yCA@aVO2E=o--$uA1Y&(DFSfPjqrlKkR~ z`~n5%U^4}c@XWlF{PJQ=Q1n22>ylcOS(cjOR+OKs01jWPOf2>j_BTXt3OQk>4|I$^ zC~+Vq7MKt)1%jCHqz~l4Gf!$BFvk=DvqtpKX~!5C7+-q2IEGZ*dUMCxi#brF;bF0H zxzL$xACsou-tLQT;R%{ISf@V_GBH!y#m23D@M(mqLZyKs|Je$4jfhioxSihBKX90o zlwkMoWOK`m&CCC->$tPiwkUc!@7!j;O|x|E^nNe?^6mTM_TRZz3)kLu-@bg)L*d&i zQWmdxo+s6Q<8$eqNwm$qie!H8nR2*F@TC8at82V-{>D}u+{^X6S-f}ZY8tVrYol;Gj#X$ zDwSKBGhE?oU|`}bj%(|{pkZsh~*?Qi#j3R6#4KbLh*2~7Y4OaB}I literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_green.png b/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_green.png new file mode 100755 index 0000000000000000000000000000000000000000..049dc5980563f1a639b74289263d8c2632daf4a9 GIT binary patch literal 1457 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}FOsiCov zo4JXZqmiqLp`nGjo3W#jp`(+bqopg5fSG|!ud%7Aqno*ltD}*Lv!S7@iKCH)siTXj zk)e^Rv9p1pDNL_tUU5lcUUDkT-b|pqP`xgA^;$U>r6!i-7lq{K=fF}xKt_H^esM;A zfr4|enSw@mW?o8ud9fxadLX`aNiE7OOHFYr%Fk5*hp$y87W)bN8=^OboG{Y|Iz}Iq zIFJ$xObD0)K}>kk2Xf$&<@78$OH%m*>Bap1bz!+S`7+jXQ$2saS|6g(h(% zuByKm$vq`RaJA6#%`X`ok~=5&d&(cE*D|bh$nIp2@@BaZq113ph|y#k$AXP6485vM z89IVMWeBNSCv`dLk6HU>luu%ub2i<6x%|_Lb5B2+)$R6R`|$Lu>#@fh*En@l-msbZ z+~NJ6lJZ@bGE5fP>8gBH3YuFGx#j5Z3jRG$;##$j`0efqOPZ9QoHT95r_h}ms>|v^ z&&4Q(KkZTd6nKu1D?koRxGN-T*uszydn9T1gk^Sf7}r>yv((%QbTzX=0|OI>0+>3% zzyahLf%pwP*n}TcG5IB|u)6kR31!`6Y6*-bEXDv``)#YxezpDP%1(+A z<;TS<2aWM!Br$mKWW zv`iLdrCYoLbw+kEjH8>FO%OxFjwvhi0FgOR(2N-M^TS7q)YKR?9h7{M83#petYU$w z%6LYp%qvlq8oovjIXo870g_2aUodRmiBVNu9?#uvmLjVVG#{gmlgdgHWE@(63^IeX z;^R0n6k@nQFcjjhl71iOXMOk$(OiHJhIoINtUVNtW~q5TEhcNR@G3?X5i)s}Etkto zd60otf#ssnsH@@k(-=Y9iw2S%+OYfT3L>x-OEZxM4boMVbFhSB6wdVc2)fyjHSAiM zaKTtdHd&7Gxksu4CF%cAU2mXmlm;jH{!`e_ESi8#0~?ks1vf6==Y}%*xCLYctqg<< z^(syjA%b=hnq+(`L|&fO3>B8`fht~-_>^HI*-$`Aj8RyD(KMCk5(yz7grkB#AaYzH z5RD{4kw`EeNrn?ifeX~RB2-E`Fi@SVo^XYxT-OS^i6e`^((VH_X+fQ=9+}sg=MrwJ zSL3S9bBQ$NvN##mZR}r-u5V%YxYLGh@uFdTU|_df*w$wcdUx@ac$yN0jPoORcyu)E z;eE4*y`p?$gxKHC3g?9WmMae@A0@rr&s(?+y7J^^TVdwa+V?jvnUT*2cUIRopLy?| z+Pm$)koN4X?Y-~p@NPctTB6rSmUqs}V?7yq_mj~-m+i@TC*Li9*{Uoox3B)rzfP+0 o4RauWsl8JgTiH7EV)OywAy%}DzxHR^O71;PCC0_KqjO7t0G`52A^-pY literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_pause.png b/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_pause.png new file mode 100755 index 0000000000000000000000000000000000000000..78b4017c92626385434837b6d5eaf007b118e489 GIT binary patch literal 950 zcmaJ=O^ee|6pa*$40Pi{aB%U+z@URon$I?&vDBn>0;Y7@!c<&nn!L85O*l`XOOcRJE3dwljek4B*HMH2VA7cQo)^jXsvFk`?N3>>Vy5*j==G&SK&yE?v6` zs;No@e28t3`qLm*Q;lBgs$`yRvou&j@I<4}lImM+prZ%^i4lrUiQ|AQGn^>NGIs;; zC5~rHpiMK4(3}S2t4m1soCJKz_xhhxD8@eJ$bzU?$t|2Owic-;aK`fW+LPO-&Tmv~X z9|m~Mbc9 zC!20;OBNgB!+^LwBDNmBcw><(abOztUixJq-uv~fmOFX>RKNOav7bM9badJ*>`LR$ hFON>2Jg-w1^3?CUxgS3VU#HnkG8--9^{oew{{RW*B>MmW literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_red.png b/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_red.png new file mode 100755 index 0000000000000000000000000000000000000000..69a0fd4dd8e93f3615f3af0303f3bba8562fc4c2 GIT binary patch literal 1471 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}FOsiCov zo4JXZqmiqLp`nGjo3W#jp`(+bqopg5fSG|!ud$1hqk)B+o1>A5v!S7@iG`z?v9qhO zv6GRZtFwWD1x&AJUU5lcUUDkT-b|pqP`$2r^;$U>r6!i-7lq{K=fF}xKt_H^esM;A zfr4|enSw@mW?o8ud9fxadLX`aNiE7OOHFYr%Fk5*hp$y87W)bN8=^OboG{Y|Iz}Iq zIFJ$xObD0)K}>kk2Xf$s+xsL-dP^?kyHwp2MHcJ4r7$zO*Ry%ua!d z{mkrFjyBla&6H$)`{PN)Wr_3D&q zH94A{F+$~^+na8DExqIM?Es5G^DW7ZG;Sq9Z&99;rU-h@8e4A+j+nF1}_CqmIS7ovuK) zvpX;_vIsb^fv5?L0zfK-0mx^N#3p>;DT~bEfQn_750v>@pDX@{`z_V literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_yellow.png b/TMessagesProj/src/main/res/drawable-xhdpi/media_doc_yellow.png new file mode 100755 index 0000000000000000000000000000000000000000..fc6126d9d6522846eae5cba139f5caf952e909e5 GIT binary patch literal 1460 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}FOsiCov zo4JXZqmiqLp`nGjo3W#jp`(+bqopg5fSG|!uaSkbv#G0*v!juTv!S7@iKCmDi?frH zqoJFbp`oL>8BDKdUU5lcUUDkT-b|pqP`yrg^;$U>r6!i-7lq{K=fF}xKt_H^esM;A zfr4|enSw@mW?o8ud9fxadLX`aNiE7OOHFYr%Fk5*hp$y87W)bN8=^OboG{Y|Iz}Iq zIFJ$xObD0)K}>kk2Xf$KjZpD$5;I)-XHvLUWCeO@sS}txEy|1rKj(*t~J0$!|5o#C_BE zFm-u;o6aA>Ww4&VU0SK=W!d#y=V>LgZhqUN;imrh;^m|7pKm_b_v+4#x4pNSBR_2n zJiE;7?QWMI=Qq{X*Wb=#G3Y+(b40@P(zlygwVzL@CulMD8eUtXeRp+L^6KZ0_e3zw z5&F3NNYWd*xNPnz0fMK6KA$Y+cS!A=y#AnI!~c+^4-L137(=FUEZF42FjbXlg^nOl zl0nOxB_L9%;S`e8v4=4gPsBG~vz-4de{BLo_sQzYm-o(XHk(*uVZqDxA^C^K=IIMh z)V%u~A$_KLL1%L3Zdt?3SD$MYH}DIV9}L{Bs^pS z#G%l@1E!c2fYb>FAfLeqtMF;gADqrlPkJAymeD#N`}4TmdKI;Vst04(SKVgLXD literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/mute_blue.png b/TMessagesProj/src/main/res/drawable-xhdpi/mute_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..e5e62eaec78206a5e699a737931e7cdf816b5f53 GIT binary patch literal 1477 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|?Mp{t9r zv5C2}qnWFTp`oLJv8#)-i;J6)fr+81n={M|ta{yCj1A2kT^!BKT@4LgO)Lz|E!}`j z10ciA*vJ*8*E6rUBrz{J6=rWH$Xu_h>bAii};Ey^rQO>ryA&s6}2uT>^C`w99RqBn({Fw+M*Mjw=E%)QraneWodVHYM+tGvLjE<<*7Z| z|7!p1?Cs|*tLJ~dx_?`XyL@b6}BCO24x9~?_Fx|90S?sJ)(@qKwn`Ud7dJRu8|x+d`_2NCO&}6xr5d37$lqKE=xqm!o4Shem!ddd;n_$-s z+&P^weN$#cHvfO1T(38K9Y@{4X+OJ?)o%#yjMB)vlf-wYm8|s|3SDfs)G`jpO!%3RX{7 KKbLh*2~7Z@%oYRy literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/mute_grey.png b/TMessagesProj/src/main/res/drawable-xhdpi/mute_grey.png new file mode 100755 index 0000000000000000000000000000000000000000..73b1e397610f8710d8e8b3ea88c4ca8e479f881a GIT binary patch literal 1480 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|?Mp{t9r zv5C2}qnWFTp`oLJv8#)-i;J6)fr+81n={M|ta_acEZi(DEFI0vT@4LgO&pCK%`9CE z%*~7pjVw)E%wc*x^NLFn^O93x_GW_Yh3K`wtJli8C^fMpzbGU>KL?fq0y6ST@{2R_ z3lyA#%@j1kGxJjN%ZoKZ(F5_VOKMSOS!#+~QGTuhIDD-#vDr`1-w?ei?JgIrW98(0$8tetZ%NZCLe|Wk$hE&{IGS%DrPJl$);?m{Y ztiE3AvO4GU@))<4YnPL2;bVnG6_OK@9QQnO$_b3l&(Q9$b`5ZG37pcCm$vxP(ysai z7nbgKD0%F6r(+-cy#wwi&Zrp6+o(LRQLij2n)F`f#jbUR_Zn;sSpQ|3DGPA8oKgQY zgNv_Geoo^ijqh`x?1;Z8r_gykEZ}IdxCLwJgZ)QMixZljmtSN##$$GH&5QF7gs06o z_Fv3=yJ+X58n!=zZ+!~*x^Cn>{FSkhE5xU{a`F=PhW`)ZdbS804XVG`Ax5>mwGtu&qaACtL7N9ck_rmFJ~8bpZgj43!d^N5bYtILKf7@QNX z>Tt3(->YD0d%{w~)STe^!k^eR$f|d*QR)4&bIrF@)t_owZ+Tyo z{}R>oWZu!G5ID7r^~$1J-R~*tLiYdP=_jf*ht1v>?78*sL4773hGnx$nD6JWeGe*I NJzf1=);T3K0RWzs5vl+H literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photo_crop.png b/TMessagesProj/src/main/res/drawable-xhdpi/photo_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c3c12a9a71beab00805cd9b7b05541451b300 GIT binary patch literal 1093 zcmaJ=TSyd97#_2vL@6l9glZV+2JT!|*WH<1Wu0-`B}ZjlXbTg^nX~J(&c&HyJ8qGp zMg>t6Sp>ah4;2VO4@E^AK_MYT21O51QEx$lS@cwA)YTr^2F{%GAHMJVujfpA>%Q{R z%2Eu&%A*k>hW2WAtt~gc->KSV%E?03Ow(6o>&y8SI||^%z!M zrN$F5A+~U`p^=h{Asx*`Yz(V!bWBN31Bmy4l&S}bZx0?5xT*w+13r-!O&;{Bk*oze zvaNABo0eIHXl%gi9S#X-07|%{_31X}1c?P*4xQa=ioh2jFdZZogGz|)IB!@0_mMu2 zOf$8(pCuU|QyXBaaWBo(P;?E&)OZ*#N3$H`!DlSQVdDEDdmBp_&oPK3rNtg z;)caM+Kfgp-pRJWm|%OENQ2_!+Ps=|d>KOYEqSvJ7) z4AYDX9;ypB`31qtczwR+P@XFo@_+_(nCB`h+)zQTI}4hLJPW{5j{+rZ85+KjGp81g z#a~cwiK`TjB~Xw{px_;oR=c-;pxEjbL*Xq z6zoi`si3=ab&0c|ug&~cW>!yMD*kb?->%qvYSWSTw+7RfyTYGt{QCY{y7ElEn>#SH z|5~>3d1ZHQxTv_Ktb+b9GT)c`uw`9tJmtJ88$ZF_hK_#oDLXXXUo|Hl8zqwgz2{SS q=ftDX+}6p%Uw2@|CC5{|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFe_(0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWscy1?p^1XIrJkXw zp^1f|j)IYap|QS!vA&_PuAz~Yfu)t9sR9%z0c|TvNwW%aaf8|g1^l#~=$>Fbx5 zm+O@q>*W`v>l<2HTIw4Z=^Gj80#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WA zUs__T1av9H3%LbwWAlok!2}F2{ffi_eM3D1ke6TzeSPsO&CP|YE-nd5MYtEM!Nnn! z1*!T$sm1xFMajU3OH&3}Rbb^@l$uzQUlfv`p92fUfQz*Q}aq-dQ%X34RPuPrG?xApv^9+MVV!(DQ-pixe8!ETV-N#i-Ccu zn}v~^8&30}dQ-5t1+3TD0JlH%fsWA!#Vk@x!-Rmz2gHP@TObFX@>BDG$-M}eu6Jt3 z_%SdrDto#(hE&`-bKRP+$w7cEp(e(;ca95pa$~elicWU(jX9rN{cfLOO89teT-U!D<WSkjSCTvhJeL( VI8zzrt4l#;h^MQc%Q~loCID%}li2_O literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photo_filters.png b/TMessagesProj/src/main/res/drawable-xhdpi/photo_filters.png new file mode 100644 index 0000000000000000000000000000000000000000..61102102268f18deb5f6daec50e75b7ca3556ab2 GIT binary patch literal 1701 zcmaJ?Yfuwc7>xyqf*@#&s94t|WmL>#6CxxKLY@#M5JHL|SP97j5jGo>1p?KoQ63f@ z7@wnP8$>9zDvCuc=!hZ}#-f1AFun#E6$T18I6PF8ZV<3PN_S@W-tW$L&i6WZcAp|N z$k}nJBMygimIaHI*t!OLJ?A)J--=mt0c=@Z;5AcB%~!I?%VA~RH_$xPO8v?P82;BV$)1TciE0W+MUH*w88(gZIT+uM%mBw)e? zP3Dn4Clw`E03yT)0c;wZs$qcMfDeZTvO#ZOa4o=OfGj$LMF&|_kjZ6mxF8#td`MU{ zqc(x76iX*#VHS^+grWv6ot~baPD^Le5Mv@86(l$b;GWUyG$%lnIB&}z9A_>K*)ZOtcZBx zSa~{fu^>+zp8M#%u!Iu)>k*fH4$FxM-qy&s$GlQPt#HeMave+ z7wtQrPrN-^wr}YD3eIlEUrpCd1N-p--TwW@`EUJM=PO`8LNn2FAZ~F~y{_VZ2Pb%s zTj&R$1xt6OG3-m>#KPCyKEdO`4{E|0ICaC@s&Pp-x1jQ4%+VdIDq~7~gEWBM*01jM zBG%d0-n`%aV{>!|7`38R6L!;+QT#o4s&Xi%s=uh*F1p#ZHTh87?9racmced@I#8Rt zqklvR{@tQ3bO^sOigU;F|LBumJkd2Cq9}TSbIKJzvmc43th`q#-JJI;al0y(G7z}n zA>RMp;dNv0I`S+HcddeBfk(dO&%b8BVRO%-T0y~CMpoM!MNpty$fW_3*KIi~*O4I={;rw)6_0yBy=J?yav1 z2=nS0BI|`UR|nG-)Oq7&w{L9p-=)gKcjAITfL5+oH?*1DI37McvfkDC_~j|eml7&P`Hf9$Ihf^h}T!KnH z5TOoe1+~~BiuK@XN1@`0ie%zJQEVBjNKw=>+Kmm=xHUN~N>eY$}aGWiZGXf{bM9QKgBjM?A(Agb<=K zY7M9s)&n+0Wip(Oa*0@^|D>QZOvvhy4`sp%Ml~r7R62!bOKBV^mHt0er<*_{s0{iT z?|%v-@=OCnl|cxcZd757OYyL|GH?V&NQuHmISi+bS20opqcEa@4S+xZkfchLR&TSt z-xH)#jzo{3O1%n_2)RT|f}+)`Ief7{P3*_?X9ozxbh-#Dc!-~v?=KWG=nN1Pg^Y8B zuqs^#>Cthn`Xe`BQm$G3OUd~C;wxy6i$$%pjVxEry#?qc$svCpMkA`Fq6ERE%1p)M;IUVL1_k8heU zi?y_e^F2BfTwgY}*Y0xRhZN;9b{^dNV}86fw8l?#P%%|Rwva?C@@Y#i9jI5{_A?8WJGu;nkTX=Ht7Jz0u7vaY@Bu zo*U^;1MGU=&B3AxGEFybVC_k)_XsA{ct4ms-R-T*z!_OCEo*j{|46|g$1@@JR8Le- z&I~WNtXobg)sLM93pJTIFUNZ1M0lILlMth&fnD=>)K_g+uh^aNs5E=$55g_ts11!$ zM!JhNwe07;kzQdj!tOS?$oyF={hD1f$3^Iwo$d;*N^xJA%KLg*pzlv5eV%3|GfS$bF33at6D{f@sq?CwaaTR(@KT6XaH{vVbIRrm1~ zzf|W+-dLN!y`CV@@TmGa>zb#t)#sD4O~~&4tGu+a7jtXOh5HnKch@vt7{I$NJX))= z_TBg21eTNR&axic^*;IIo0aj4)@6c2U+v43<3ncX`V&bArkyUly zPqR2#+Rk}0o;8BmwTe1JP7qM@ki5I2YB;m+P_z zgKwyH@4j)N#3!1E{6$#&(~%o#4OQWVTK7X~P0mZ_HmON*_YQY@X0p@vl*)uYGb=7f z+g~4R76fE)c07MIJF}L@x@f%}?tIr{=dP0BcIlHBZf)xX8;TeN^NWV;73tQMBxI4X z?liTae14T)yI^Qr*r$TAWBHYm-bcg9Pgx^d+gbODU(LF=E@^q#@1qa)M9J{c!`sDF oaK~tM(DR`?v&^NH;bSfe9R6nauS2o?M%$lDB8m{!^A)*&0}JQKfdBvi literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photo_rotate.png b/TMessagesProj/src/main/res/drawable-xhdpi/photo_rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..968e91dcdebecad5563de3cfcb7672abb0f0540b GIT binary patch literal 1505 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yJ!3HFkD$jfgq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1Ffc1;hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo~drKfuV_lxuu?= zsiBF5p^k!)fuXU!fw8`!v96(!m4T&|p{W8CC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)VF`a7isrF3Kz@$;{7F0GXJW zlwVq6s|0i@#0$9vaAWg|p}_TC!3=B*mo-U3d z6}OJe*zNt)LFCxuubtu7&w0gsxuv0WD}V8Vhz#`~3?I)6=%j>-Y`vkI6Vs|2_Tex4 zjTKkT9x=Z;YOWP_=od@p{fWYJZ2j`m)_K}|&{iupxwIp)MY>Nlc zIlt=+D!ckx!qi1)ss&1kt+a^{o8#C#Cw+rTpXsDVw!(tToqA?Rc0BwVc3dL$L5O7h z@mvLd8?DF7TRxu@+};>uxKEMUde3XyS;{5>+Q-^c62fJ2x-K-tR8Qww)7=~^_}Ap- zo^SvAZLYtJj$G*UD<$~l)i1rC`9)DaK_`9MH2mJrHeP7Bb|0_yfo3Di<7eF^9))C2 zYyF{|ZMEy%cmETQf@ig*_*@r!+Q`^zVY)`ZM>=|GB?S)`~AUwoF%^_XppEpD&Z7r`)ca75Lglb5>|H z^Y=gYPVe0J@dn>%`@h+s;PCGKHW{_E>l8SnR`xP|eK32*f9`KPwybZgp6nXWBEg^{ WWEkD~#ZL-U=z6;PxvXP) literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photo_sizes.png b/TMessagesProj/src/main/res/drawable-xhdpi/photo_sizes.png new file mode 100644 index 0000000000000000000000000000000000000000..01f3176f5417d36670e827711f9aa572fa0c4d2c GIT binary patch literal 1118 zcmaJ=OK1~87+#H3DYh0o_`u@05qu^4O4l??(;&lg`Gb^o%x6V`~KHAr_-JL z>S{OF5(H6~+An7Cz8f#FrUw7D+-wwYn~;=4-BvFuDh?##nw5tjWhi|x0~Kxf=o8pN z5I(=2&7qv!A*hx?DV`5iGHi?{h?cgJt*8SKfjsQf%_uoP`G5qv79|hyG9%jwSkU*6 zIIw%9Gpmjas1c29YXvPO0TUPyDWGHwnyyfal4V{2pS^3E1Z5XA5GDU4m6OvTVL1@+ z6dzO>wh4qI6w9+s&1?X03>%`E5Y2{yEGIA#f#t#CN8)IX)+=PhG)?lTJ>4JqUw_w>IkpMeoMb%Bu-c<(3vXC-eq?js9iBS?$P`a)O?O}=I!h4xW zvlwDo2{$~xH`yK*MULfoUW!++qNNTQ&_oriwv1(~Vm&PwHjXSpM?VI&q+=PNT(h88 z&4rh$@-1Sus=4sVs#qE)Lwl3`Ytoe~EFbT6%iHx0^DEw+nVOn54g^jwXNftTsDN?Udj7S~}JyR^1}l_p!tEPoHhfOOo{K_CzDMO_)vh`yTy@#rE8} zL>)Qv^l|?Igqq$LHa8Byh1O0`iPf}(3SVFjA@#*KGyj-m!8ooWr& zjAhwEE@LJbCU$+orl`63*f*_Jh(R4T9Z#WuzIsgq$5!a8qQM!y23yY3W&l?gIJRyTaeR$z$M1B*1SF`2mXWi5avMnM&!wQd#5Ere0n zLO#$mFlCsQ<0bZVn_w7n(F?KZS+J-pG?8E&$Cf2Q&*!qUIVrE{JYOIMS7#R&a=I?? zf+!Z$E>}m^x(hwr<=Thbd|z%d3$9N*>o9O`LVGblE@49IzvV#-U{l>#*Q;)vxCQq+eDCy4^uHXIx&22Y} literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photo_tune_active.png b/TMessagesProj/src/main/res/drawable-xhdpi/photo_tune_active.png new file mode 100644 index 0000000000000000000000000000000000000000..e65b803624602b382df13baa101468d59ce5b6e6 GIT binary patch literal 1032 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